]> git.ipfire.org Git - thirdparty/linux.git/commit
nvme: always punt polled uring_cmd end_io work to task_work
authorJens Axboe <axboe@kernel.dk>
Fri, 13 Jun 2025 19:37:41 +0000 (13:37 -0600)
committerJens Axboe <axboe@kernel.dk>
Fri, 13 Jun 2025 21:18:34 +0000 (15:18 -0600)
commit9ce6c9875f3e995be5fd720b65835291f8a609b1
tree6e6bba15cdeeb8737d03b322017c5d159a2795ac
parentdb3dfae1a2f662e69d535827703bcdbb04b8d72b
nvme: always punt polled uring_cmd end_io work to task_work

Currently NVMe uring_cmd completions will complete locally, if they are
polled. This is done because those completions are always invoked from
task context. And while that is true, there's no guarantee that it's
invoked under the right ring context, or even task. If someone does
NVMe passthrough via multiple threads and with a limited number of
poll queues, then ringA may find completions from ringB. For that case,
completing the request may not be sound.

Always just punt the passthrough completions via task_work, which will
redirect the completion, if needed.

Cc: stable@vger.kernel.org
Fixes: 585079b6e425 ("nvme: wire up async polling for io passthrough commands")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/nvme/host/ioctl.c