Commit 7314183d authored by Sagi Grimberg's avatar Sagi Grimberg

nvme-fc: don't override opts->nr_io_queues

Its what the user passed, so its probably a better
idea to keep it intact. Also, limit the number of
I/O queues to max online cpus and the lport maximum
hw queues.
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: default avatarMax Gurtovoy <maxg@mellanox.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
parent 01ad0990
...@@ -2175,17 +2175,20 @@ static int ...@@ -2175,17 +2175,20 @@ static int
nvme_fc_create_io_queues(struct nvme_fc_ctrl *ctrl) nvme_fc_create_io_queues(struct nvme_fc_ctrl *ctrl)
{ {
struct nvmf_ctrl_options *opts = ctrl->ctrl.opts; struct nvmf_ctrl_options *opts = ctrl->ctrl.opts;
unsigned int nr_io_queues;
int ret; int ret;
ret = nvme_set_queue_count(&ctrl->ctrl, &opts->nr_io_queues); nr_io_queues = min(min(opts->nr_io_queues, num_online_cpus()),
ctrl->lport->ops->max_hw_queues);
ret = nvme_set_queue_count(&ctrl->ctrl, &nr_io_queues);
if (ret) { if (ret) {
dev_info(ctrl->ctrl.device, dev_info(ctrl->ctrl.device,
"set_queue_count failed: %d\n", ret); "set_queue_count failed: %d\n", ret);
return ret; return ret;
} }
ctrl->ctrl.queue_count = opts->nr_io_queues + 1; ctrl->ctrl.queue_count = nr_io_queues + 1;
if (!opts->nr_io_queues) if (!nr_io_queues)
return 0; return 0;
nvme_fc_init_io_queues(ctrl); nvme_fc_init_io_queues(ctrl);
...@@ -2245,15 +2248,19 @@ static int ...@@ -2245,15 +2248,19 @@ static int
nvme_fc_reinit_io_queues(struct nvme_fc_ctrl *ctrl) nvme_fc_reinit_io_queues(struct nvme_fc_ctrl *ctrl)
{ {
struct nvmf_ctrl_options *opts = ctrl->ctrl.opts; struct nvmf_ctrl_options *opts = ctrl->ctrl.opts;
unsigned int nr_io_queues;
int ret; int ret;
ret = nvme_set_queue_count(&ctrl->ctrl, &opts->nr_io_queues); nr_io_queues = min(min(opts->nr_io_queues, num_online_cpus()),
ctrl->lport->ops->max_hw_queues);
ret = nvme_set_queue_count(&ctrl->ctrl, &nr_io_queues);
if (ret) { if (ret) {
dev_info(ctrl->ctrl.device, dev_info(ctrl->ctrl.device,
"set_queue_count failed: %d\n", ret); "set_queue_count failed: %d\n", ret);
return ret; return ret;
} }
ctrl->ctrl.queue_count = nr_io_queues + 1;
/* check for io queues existing */ /* check for io queues existing */
if (ctrl->ctrl.queue_count == 1) if (ctrl->ctrl.queue_count == 1)
return 0; return 0;
...@@ -2702,7 +2709,6 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts, ...@@ -2702,7 +2709,6 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
ctrl->ctrl.queue_count = min_t(unsigned int, ctrl->ctrl.queue_count = min_t(unsigned int,
opts->nr_io_queues, opts->nr_io_queues,
lport->ops->max_hw_queues); lport->ops->max_hw_queues);
opts->nr_io_queues = ctrl->ctrl.queue_count; /* so opts has valid value */
ctrl->ctrl.queue_count++; /* +1 for admin queue */ ctrl->ctrl.queue_count++; /* +1 for admin queue */
ctrl->ctrl.sqsize = opts->queue_size - 1; ctrl->ctrl.sqsize = opts->queue_size - 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment