[PATCH 5/5] nvme-fabrics: clear the poll map if no poll queues are mapped
Daniel Wagner
dwagner at suse.de
Wed Oct 14 00:46:43 PDT 2026
From: Daniel Wagner <wagi at kernel.org>
blk_mq_alloc_tag_set sets the nr_queues of every map to nr_hw_queues.
When nr_poll_queues is set but no queues are left for polling,
nvmf_map_queues skips the poll map and leaves it this way, with all CPUs
mapped to hctx 0. The queue then claims poll support, polled I/O ends
up on hctx 0, which isn't a poll queue, and hctx 0 is marked as a poll
hctx, so even the Connect command of the first I/O queue is marked as
polled.
Clear the poll map when no poll queues are mapped, so polled I/O is
rejected with -EOPNOTSUPP.
Fixes: 1a9460cef571 ("nvme-tcp: support simple polling")
Fixes: 5651cd3c4336 ("nvme-rdma: fix queue mapping when queue count is limited")
Signed-off-by: Daniel Wagner <wagi at kernel.org>
---
drivers/nvme/host/fabrics.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c
index 27a8ce51d2b3..3d7ad86c1955 100644
--- a/drivers/nvme/host/fabrics.c
+++ b/drivers/nvme/host/fabrics.c
@@ -1199,6 +1199,13 @@ void nvmf_map_queues(struct blk_mq_tag_set *set, struct nvme_ctrl *ctrl,
io_queues[HCTX_TYPE_DEFAULT] +
io_queues[HCTX_TYPE_READ];
blk_mq_map_queues(&set->map[HCTX_TYPE_POLL]);
+ } else {
+ /*
+ * blk_mq_alloc_tag_set sets nr_queues of all maps to
+ * nr_hw_queues. Clear the poll map, otherwise the queue claims
+ * poll support and polled I/O ends up on hctx 0.
+ */
+ set->map[HCTX_TYPE_POLL].nr_queues = 0;
}
dev_info(ctrl->device,
--
2.56.0
More information about the Linux-nvme
mailing list