]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
ublk: fix canceling flag handling in batch I/O recovery
authorMing Lei <ming.lei@redhat.com>
Fri, 23 Jan 2026 09:15:43 +0000 (17:15 +0800)
committerJens Axboe <axboe@kernel.dk>
Fri, 23 Jan 2026 12:11:03 +0000 (05:11 -0700)
commite4c4bfec2bb8db9963d87e8ccdf89cd9e485d7b6
treefa0ef8ef3279c1e1b43c1f7c20b1f820ac9f5dc8
parentdbc635c4be7eba1d0e0fe0275a289ee3ccc63d72
ublk: fix canceling flag handling in batch I/O recovery

Two issues with ubq->canceling flag handling:

1) In ublk_queue_reset_io_flags(), ubq->canceling is set outside
   cancel_lock, violating the locking requirement. Move it inside
   the spinlock-protected section.

2) In ublk_batch_unprep_io(), when rolling back after a batch prep
   failure, if the queue became ready during prep (which cleared
   canceling), the flag is not restored when the queue becomes
   not-ready again. This allows new requests to be queued to
   uninitialized IO slots.

Fix by restoring ubq->canceling = true under cancel_lock when the
queue transitions from ready to not-ready during rollback.

Reported-by: Jens Axboe <axboe@kernel.dk>
Fixes: 3f3850785594 ("ublk: fix batch I/O recovery -ENODEV error")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/ublk_drv.c