mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
Since commit "ublk: keep a canceled FETCH round canceling until the server is gone", a device whose FETCH round saw a cancel keeps its queues canceling until the server goes away, but START_DEV and END_USER_RECOVERY still bring it up. Without UBLK_F_USER_RECOVERY, or with UBLK_F_USER_RECOVERY_FAIL_IO, every request of the new disk fails. With UBLK_F_USER_RECOVERY, requests are requeued and never kicked: after START_DEV the partition scan hangs under disk->open_mutex, and after END_USER_RECOVERY every read parks while the command returned 0. The server cannot fetch the canceled commands again, so the device can't serve I/O until it restarts anyway. Return -EBUSY from START_DEV and END_USER_RECOVERY while ub->canceling is set. In ublk_ctrl_start_dev() check it and publish ub->ub_disk in one cancel_mutex section, and have ublk_start_cancel() read the disk in its cancel_mutex section. Today ublk_start_cancel() samples the disk before taking the mutex, so a server dying during its own START_DEV can mark the queues without quiescing a disk START_DEV published in between, with its first I/O past the canceling check. Now either START_DEV sees the cancel, or the cancel sees the disk and quiesces it before marking. The END_USER_RECOVERY check is best effort: the disk exists there, and a cancel after it is the ordinary death of the new server, which ublk_start_cancel() handles by quiescing and marking. Assisted-by: LLM Reviewed-by: Ming Lei <tom.leiming@gmail.com> Signed-off-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Ming Lei <tom.leiming@gmail.com> Link: https://patch.msgid.link/20261011063555.1142277-9-tom.leiming@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk> |
||
|---|---|---|
| .. | ||
| bfq-iosched.rst | ||
| biovecs.rst | ||
| blk-mq.rst | ||
| cmdline-partition.rst | ||
| data-integrity.rst | ||
| deadline-iosched.rst | ||
| error-injection.rst | ||
| index.rst | ||
| inline-encryption.rst | ||
| ioprio.rst | ||
| kyber-iosched.rst | ||
| null_blk.rst | ||
| pr.rst | ||
| stat.rst | ||
| switching-sched.rst | ||
| ublk.rst | ||
| writeback_cache_control.rst | ||