Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 376f7ef8 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

block: only allow polling if a poll queue_map exists



This avoids having to have differnet mq_ops for different setups
with or without poll queues.

Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 529262d5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -402,7 +402,7 @@ static ssize_t queue_poll_store(struct request_queue *q, const char *page,
	unsigned long poll_on;
	ssize_t ret;

	if (!q->mq_ops || !q->mq_ops->poll)
	if (!q->tag_set || q->tag_set->nr_maps <= HCTX_TYPE_POLL)
		return -EINVAL;

	ret = queue_var_store(&poll_on, page, count);
+9 −20
Original line number Diff line number Diff line
@@ -1602,21 +1602,14 @@ static const struct blk_mq_ops nvme_mq_admin_ops = {
	.timeout	= nvme_timeout,
};

#define NVME_SHARED_MQ_OPS					\
	.queue_rq		= nvme_queue_rq,		\
	.commit_rqs		= nvme_commit_rqs,		\
	.complete		= nvme_pci_complete_rq,		\
	.init_hctx		= nvme_init_hctx,		\
	.init_request		= nvme_init_request,		\
	.map_queues		= nvme_pci_map_queues,		\
	.timeout		= nvme_timeout			\

static const struct blk_mq_ops nvme_mq_ops = {
	NVME_SHARED_MQ_OPS,
};

static const struct blk_mq_ops nvme_mq_poll_ops = {
	NVME_SHARED_MQ_OPS,
	.queue_rq	= nvme_queue_rq,
	.complete	= nvme_pci_complete_rq,
	.commit_rqs	= nvme_commit_rqs,
	.init_hctx	= nvme_init_hctx,
	.init_request	= nvme_init_request,
	.map_queues	= nvme_pci_map_queues,
	.timeout	= nvme_timeout,
	.poll		= nvme_poll,
};

@@ -2304,11 +2297,7 @@ static int nvme_dev_add(struct nvme_dev *dev)
	int ret;

	if (!dev->ctrl.tagset) {
		if (dev->io_queues[HCTX_TYPE_POLL])
			dev->tagset.ops = &nvme_mq_poll_ops;
		else
		dev->tagset.ops = &nvme_mq_ops;

		dev->tagset.nr_hw_queues = dev->online_queues - 1;
		dev->tagset.nr_maps = HCTX_MAX_TYPES;
		dev->tagset.timeout = NVME_IO_TIMEOUT;