]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
ublk: build batch from IOs in same io_ring_ctx and io task
authorMing Lei <ming.lei@redhat.com>
Wed, 25 Jun 2025 02:25:54 +0000 (10:25 +0800)
committerJens Axboe <axboe@kernel.dk>
Wed, 25 Jun 2025 02:44:52 +0000 (20:44 -0600)
commit524346e9d79f63a6e5aaa645140da3d1ec7a8a0f
tree7100642594e9cb268a5660312aff30874b31695a
parent8c8472855884355caf3d8e0c50adf825f83454b2
ublk: build batch from IOs in same io_ring_ctx and io task

ublk_queue_cmd_list() dispatches the whole batch list by scheduling task
work via the tail request's io_uring_cmd, this way is fine even though
more than one io_ring_ctx are involved for this batch since it is just
one running context.

However, the task work handler ublk_cmd_list_tw_cb() takes `issue_flags`
of tail uring_cmd's io_ring_ctx for completing all commands. This way is
wrong if any uring_cmd is issued from different io_ring_ctx.

Fixes it by always building batch IOs from same io_ring_ctx and io task
because ublk_dispatch_req() does validate task context, and IO needs to
be aborted in case of running from fallback task work context.

For typical per-queue or per-io daemon implementation, this way shouldn't
make difference from performance viewpoint, because single io_ring_ctx is
taken in each daemon for normal use case.

Fixes: d796cea7b9f3 ("ublk: implement ->queue_rqs()")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20250625022554.883571-1-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/ublk_drv.c