On Tue, Jun 24, 2025 at 7:26 PM Ming Lei <ming.lei@xxxxxxxxxx> wrote: > > 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@xxxxxxxxxx> Reviewed-by: Caleb Sander Mateos <csander@xxxxxxxxxxxxxxx>