mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
nvme-fabrics: clear the poll map if no poll queues are mapped
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:1a9460cef5("nvme-tcp: support simple polling") Fixes:5651cd3c43("nvme-rdma: fix queue mapping when queue count is limited") Reviewed-by: Hannes Reinecke <hare@kernel.org> Tested-by: Maurizio Lombardi <mlombard@redhat.com> Signed-off-by: Daniel Wagner <wagi@kernel.org> Signed-off-by: Keith Busch <kbusch@kernel.org>
This commit is contained in:
parent
99fd0cbae8
commit
36ede1aa85
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user