linux/drivers/nvme/host
Jens Axboe 4220cc0b98 nvme: always punt polled uring_cmd end_io work to task_work
commit 9ce6c9875f upstream.

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: 585079b6e4 ("nvme: wire up async polling for io passthrough commands")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-06-27 11:11:38 +01:00
..
apple.c block: add a rq_list type 2025-04-25 10:48:06 +02:00
auth.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
constants.c nvme: fix command limits status code 2025-06-19 15:32:18 +02:00
core.c nvme: fix command limits status code 2025-06-19 15:32:18 +02:00
fabrics.c nvme-tcp: check for invalidated or revoked key 2024-08-22 13:25:07 -07:00
fabrics.h nvme-pci: do not directly handle subsys reset fallout 2024-06-26 07:02:22 -07:00
fault_inject.c fault-inject: improve build for CONFIG_FAULT_INJECTION=n 2024-09-01 20:43:33 -07:00
fc.c nvme-fc: rely on state transitions to handle connectivity loss 2025-03-22 12:54:28 -07:00
fc.h nvme-fc: Update header and host for common definitions for LS handling 2020-05-09 16:18:33 -06:00
hwmon.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
ioctl.c nvme: always punt polled uring_cmd end_io work to task_work 2025-06-27 11:11:38 +01:00
Kconfig nvme-tcp: select CONFIG_TLS from CONFIG_NVME_TCP_TLS 2025-05-09 09:50:46 +02:00
Makefile nvme: rework NVME_AUTH Kconfig selection 2023-10-12 08:04:49 -07:00
multipath.c nvme: multipath: fix return value of nvme_available_path 2025-05-02 07:59:23 +02:00
nvme.h nvme-pci: add support for sgl metadata 2025-03-13 13:02:01 +01:00
pci.c nvme-pci: add NVME_QUIRK_NO_DEEPEST_PS quirk for SOLIDIGM P44 Pro 2025-06-04 14:43:53 +02:00
pr.c nvme: fix command limits status code 2025-06-19 15:32:18 +02:00
rdma.c nvme-rdma: unquiesce admin_q before destroy it 2024-12-14 20:03:17 +01:00
sysfs.c nvme: make nvme_tls_attrs_group static 2025-02-17 10:04:59 +01:00
tcp.c nvme-tcp: fix premature queue removal and I/O failover 2025-05-09 09:50:46 +02:00
trace.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
trace.h nvme: fix async event trace event 2023-04-13 08:59:04 +02:00
zns.c block: Remove REQ_OP_ZONE_RESET_ALL emulation 2024-07-05 00:42:04 -06:00