Skip to content

Commit 6dfba1c

Browse files
author
Christoph Hellwig
committed
nvme-fc: use the tagset alloc/free helpers
Use the common helpers to allocate and free the tagsets. To make this work the generic nvme_ctrl now needs to be stored in the hctx private data instead of the nvme_fc_ctrl. Signed-off-by: Christoph Hellwig <[email protected]> Reviewed-by: Sagi Grimberg <[email protected]> Reviewed-by: James Smart <[email protected]>
1 parent 1864ea4 commit 6dfba1c

File tree

1 file changed

+17
-66
lines changed
  • drivers/nvme/host

1 file changed

+17
-66
lines changed

drivers/nvme/host/fc.c

Lines changed: 17 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -2383,20 +2383,16 @@ nvme_fc_ctrl_free(struct kref *ref)
23832383
container_of(ref, struct nvme_fc_ctrl, ref);
23842384
unsigned long flags;
23852385

2386-
if (ctrl->ctrl.tagset) {
2387-
blk_mq_destroy_queue(ctrl->ctrl.connect_q);
2388-
blk_mq_free_tag_set(&ctrl->tag_set);
2389-
}
2386+
if (ctrl->ctrl.tagset)
2387+
nvme_remove_io_tag_set(&ctrl->ctrl);
23902388

23912389
/* remove from rport list */
23922390
spin_lock_irqsave(&ctrl->rport->lock, flags);
23932391
list_del(&ctrl->ctrl_list);
23942392
spin_unlock_irqrestore(&ctrl->rport->lock, flags);
23952393

23962394
nvme_start_admin_queue(&ctrl->ctrl);
2397-
blk_mq_destroy_queue(ctrl->ctrl.admin_q);
2398-
blk_mq_destroy_queue(ctrl->ctrl.fabrics_q);
2399-
blk_mq_free_tag_set(&ctrl->admin_tag_set);
2395+
nvme_remove_admin_tag_set(&ctrl->ctrl);
24002396

24012397
kfree(ctrl->queues);
24022398

@@ -2906,32 +2902,16 @@ nvme_fc_create_io_queues(struct nvme_fc_ctrl *ctrl)
29062902

29072903
nvme_fc_init_io_queues(ctrl);
29082904

2909-
memset(&ctrl->tag_set, 0, sizeof(ctrl->tag_set));
2910-
ctrl->tag_set.ops = &nvme_fc_mq_ops;
2911-
ctrl->tag_set.queue_depth = ctrl->ctrl.opts->queue_size;
2912-
ctrl->tag_set.reserved_tags = NVMF_RESERVED_TAGS;
2913-
ctrl->tag_set.numa_node = ctrl->ctrl.numa_node;
2914-
ctrl->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
2915-
ctrl->tag_set.cmd_size =
2916-
struct_size((struct nvme_fcp_op_w_sgl *)NULL, priv,
2917-
ctrl->lport->ops->fcprqst_priv_sz);
2918-
ctrl->tag_set.driver_data = &ctrl->ctrl;
2919-
ctrl->tag_set.nr_hw_queues = ctrl->ctrl.queue_count - 1;
2920-
ctrl->tag_set.timeout = NVME_IO_TIMEOUT;
2921-
2922-
ret = blk_mq_alloc_tag_set(&ctrl->tag_set);
2905+
ret = nvme_alloc_io_tag_set(&ctrl->ctrl, &ctrl->tag_set,
2906+
&nvme_fc_mq_ops, BLK_MQ_F_SHOULD_MERGE,
2907+
struct_size((struct nvme_fcp_op_w_sgl *)NULL, priv,
2908+
ctrl->lport->ops->fcprqst_priv_sz));
29232909
if (ret)
29242910
return ret;
29252911

2926-
ctrl->ctrl.tagset = &ctrl->tag_set;
2927-
2928-
ret = nvme_ctrl_init_connect_q(&(ctrl->ctrl));
2929-
if (ret)
2930-
goto out_free_tag_set;
2931-
29322912
ret = nvme_fc_create_hw_io_queues(ctrl, ctrl->ctrl.sqsize + 1);
29332913
if (ret)
2934-
goto out_cleanup_blk_queue;
2914+
goto out_cleanup_tagset;
29352915

29362916
ret = nvme_fc_connect_io_queues(ctrl, ctrl->ctrl.sqsize + 1);
29372917
if (ret)
@@ -2943,10 +2923,8 @@ nvme_fc_create_io_queues(struct nvme_fc_ctrl *ctrl)
29432923

29442924
out_delete_hw_queues:
29452925
nvme_fc_delete_hw_io_queues(ctrl);
2946-
out_cleanup_blk_queue:
2947-
blk_mq_destroy_queue(ctrl->ctrl.connect_q);
2948-
out_free_tag_set:
2949-
blk_mq_free_tag_set(&ctrl->tag_set);
2926+
out_cleanup_tagset:
2927+
nvme_remove_io_tag_set(&ctrl->ctrl);
29502928
nvme_fc_free_io_queues(ctrl);
29512929

29522930
/* force put free routine to ignore io queues */
@@ -3530,35 +3508,12 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
35303508

35313509
nvme_fc_init_queue(ctrl, 0);
35323510

3533-
memset(&ctrl->admin_tag_set, 0, sizeof(ctrl->admin_tag_set));
3534-
ctrl->admin_tag_set.ops = &nvme_fc_admin_mq_ops;
3535-
ctrl->admin_tag_set.queue_depth = NVME_AQ_MQ_TAG_DEPTH;
3536-
ctrl->admin_tag_set.reserved_tags = NVMF_RESERVED_TAGS;
3537-
ctrl->admin_tag_set.numa_node = ctrl->ctrl.numa_node;
3538-
ctrl->admin_tag_set.cmd_size =
3539-
struct_size((struct nvme_fcp_op_w_sgl *)NULL, priv,
3540-
ctrl->lport->ops->fcprqst_priv_sz);
3541-
ctrl->admin_tag_set.driver_data = &ctrl->ctrl;
3542-
ctrl->admin_tag_set.nr_hw_queues = 1;
3543-
ctrl->admin_tag_set.timeout = NVME_ADMIN_TIMEOUT;
3544-
ctrl->admin_tag_set.flags = BLK_MQ_F_NO_SCHED;
3545-
3546-
ret = blk_mq_alloc_tag_set(&ctrl->admin_tag_set);
3511+
ret = nvme_alloc_admin_tag_set(&ctrl->ctrl, &ctrl->admin_tag_set,
3512+
&nvme_fc_admin_mq_ops, BLK_MQ_F_NO_SCHED,
3513+
struct_size((struct nvme_fcp_op_w_sgl *)NULL, priv,
3514+
ctrl->lport->ops->fcprqst_priv_sz));
35473515
if (ret)
35483516
goto out_free_queues;
3549-
ctrl->ctrl.admin_tagset = &ctrl->admin_tag_set;
3550-
3551-
ctrl->ctrl.fabrics_q = blk_mq_init_queue(&ctrl->admin_tag_set);
3552-
if (IS_ERR(ctrl->ctrl.fabrics_q)) {
3553-
ret = PTR_ERR(ctrl->ctrl.fabrics_q);
3554-
goto out_free_admin_tag_set;
3555-
}
3556-
3557-
ctrl->ctrl.admin_q = blk_mq_init_queue(&ctrl->admin_tag_set);
3558-
if (IS_ERR(ctrl->ctrl.admin_q)) {
3559-
ret = PTR_ERR(ctrl->ctrl.admin_q);
3560-
goto out_cleanup_fabrics_q;
3561-
}
35623517

35633518
/*
35643519
* Would have been nice to init io queues tag set as well.
@@ -3569,7 +3524,7 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
35693524

35703525
ret = nvme_init_ctrl(&ctrl->ctrl, dev, &nvme_fc_ctrl_ops, 0);
35713526
if (ret)
3572-
goto out_cleanup_admin_q;
3527+
goto out_cleanup_tagset;
35733528

35743529
/* at this point, teardown path changes to ref counting on nvme ctrl */
35753530

@@ -3624,12 +3579,8 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
36243579

36253580
return ERR_PTR(-EIO);
36263581

3627-
out_cleanup_admin_q:
3628-
blk_mq_destroy_queue(ctrl->ctrl.admin_q);
3629-
out_cleanup_fabrics_q:
3630-
blk_mq_destroy_queue(ctrl->ctrl.fabrics_q);
3631-
out_free_admin_tag_set:
3632-
blk_mq_free_tag_set(&ctrl->admin_tag_set);
3582+
out_cleanup_tagset:
3583+
nvme_remove_admin_tag_set(&ctrl->ctrl);
36333584
out_free_queues:
36343585
kfree(ctrl->queues);
36353586
out_free_ida:

0 commit comments

Comments
 (0)