summaryrefslogtreecommitdiff
path: root/net/core/dev_api.c
diff options
context:
space:
mode:
authorMing Lei <ming.lei@redhat.com>2025-05-16 00:26:01 +0800
committerJens Axboe <axboe@kernel.dk>2025-05-15 10:53:41 -0600
commitdd24f87f65c957f30e605e44961d2fd53a44c780 (patch)
treecb840ff530cdf734ca66eb2161b07a326afa009b /net/core/dev_api.c
parentc9bb139db4327ebdcf33d053ce80f5f8041b29a1 (diff)
ublk: fix dead loop when canceling io command
Commit: f40139fde527 ("ublk: fix race between io_uring_cmd_complete_in_task and ublk_cancel_cmd") adds a request state check in ublk_cancel_cmd(), and if the request is started, skips canceling this uring_cmd. However, the current uring_cmd may be in ACTIVE state, without block request coming to the uring command. Meantime, if the cached request in tag_set.tags[tag] has been delivered to ublk server and reycycled, then this uring_cmd can't be canceled. ublk requests are aborted in ublk char device release handler, which depends on canceling all ACTIVE uring_cmd. So it causes a dead loop. Fix this issue by not taking a stale request into account when canceling uring_cmd in ublk_cancel_cmd(). Reported-by: Shinichiro Kawasaki <shinichiro.kawasaki@wdc.com> Closes: https://lore.kernel.org/linux-block/mruqwpf4tqenkbtgezv5oxwq7ngyq24jzeyqy4ixzvivatbbxv@4oh2wzz4e6qn/ Fixes: f40139fde527 ("ublk: fix race between io_uring_cmd_complete_in_task and ublk_cancel_cmd") Signed-off-by: Ming Lei <ming.lei@redhat.com> Link: https://lore.kernel.org/r/20250515162601.77346-1-ming.lei@redhat.com [axboe: rewording of commit message] Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'net/core/dev_api.c')
0 files changed, 0 insertions, 0 deletions