Skip to content

Commit de77782

Browse files
author
Christoph Hellwig
committed
nvme-tcp: 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_tcp_ctrl. Signed-off-by: Christoph Hellwig <[email protected]> Reviewed-by: Sagi Grimberg <[email protected]> Reviewed-by: Chaitanya Kulkarni <[email protected]>
1 parent 06427ca commit de77782

File tree

1 file changed

+16
-85
lines changed

1 file changed

+16
-85
lines changed

drivers/nvme/host/tcp.c

Lines changed: 16 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1687,51 +1687,6 @@ static int nvme_tcp_start_queue(struct nvme_ctrl *nctrl, int idx)
16871687
return ret;
16881688
}
16891689

1690-
static int nvme_tcp_alloc_admin_tag_set(struct nvme_ctrl *nctrl)
1691-
{
1692-
struct nvme_tcp_ctrl *ctrl = to_tcp_ctrl(nctrl);
1693-
struct blk_mq_tag_set *set = &ctrl->admin_tag_set;
1694-
int ret;
1695-
1696-
memset(set, 0, sizeof(*set));
1697-
set->ops = &nvme_tcp_admin_mq_ops;
1698-
set->queue_depth = NVME_AQ_MQ_TAG_DEPTH;
1699-
set->reserved_tags = NVMF_RESERVED_TAGS;
1700-
set->numa_node = nctrl->numa_node;
1701-
set->flags = BLK_MQ_F_BLOCKING;
1702-
set->cmd_size = sizeof(struct nvme_tcp_request);
1703-
set->driver_data = &ctrl->ctrl;
1704-
set->nr_hw_queues = 1;
1705-
set->timeout = NVME_ADMIN_TIMEOUT;
1706-
ret = blk_mq_alloc_tag_set(set);
1707-
if (!ret)
1708-
nctrl->admin_tagset = set;
1709-
return ret;
1710-
}
1711-
1712-
static int nvme_tcp_alloc_tag_set(struct nvme_ctrl *nctrl)
1713-
{
1714-
struct nvme_tcp_ctrl *ctrl = to_tcp_ctrl(nctrl);
1715-
struct blk_mq_tag_set *set = &ctrl->tag_set;
1716-
int ret;
1717-
1718-
memset(set, 0, sizeof(*set));
1719-
set->ops = &nvme_tcp_mq_ops;
1720-
set->queue_depth = nctrl->sqsize + 1;
1721-
set->reserved_tags = NVMF_RESERVED_TAGS;
1722-
set->numa_node = nctrl->numa_node;
1723-
set->flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING;
1724-
set->cmd_size = sizeof(struct nvme_tcp_request);
1725-
set->driver_data = &ctrl->ctrl;
1726-
set->nr_hw_queues = nctrl->queue_count - 1;
1727-
set->timeout = NVME_IO_TIMEOUT;
1728-
set->nr_maps = nctrl->opts->nr_poll_queues ? HCTX_MAX_TYPES : 2;
1729-
ret = blk_mq_alloc_tag_set(set);
1730-
if (!ret)
1731-
nctrl->tagset = set;
1732-
return ret;
1733-
}
1734-
17351690
static void nvme_tcp_free_admin_queue(struct nvme_ctrl *ctrl)
17361691
{
17371692
if (to_tcp_ctrl(ctrl)->async_req.pdu) {
@@ -1890,10 +1845,8 @@ static int nvme_tcp_alloc_io_queues(struct nvme_ctrl *ctrl)
18901845
static void nvme_tcp_destroy_io_queues(struct nvme_ctrl *ctrl, bool remove)
18911846
{
18921847
nvme_tcp_stop_io_queues(ctrl);
1893-
if (remove) {
1894-
blk_mq_destroy_queue(ctrl->connect_q);
1895-
blk_mq_free_tag_set(ctrl->tagset);
1896-
}
1848+
if (remove)
1849+
nvme_remove_io_tag_set(ctrl);
18971850
nvme_tcp_free_io_queues(ctrl);
18981851
}
18991852

@@ -1906,13 +1859,12 @@ static int nvme_tcp_configure_io_queues(struct nvme_ctrl *ctrl, bool new)
19061859
return ret;
19071860

19081861
if (new) {
1909-
ret = nvme_tcp_alloc_tag_set(ctrl);
1862+
ret = nvme_alloc_io_tag_set(ctrl, &to_tcp_ctrl(ctrl)->tag_set,
1863+
&nvme_tcp_mq_ops,
1864+
BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING,
1865+
sizeof(struct nvme_tcp_request));
19101866
if (ret)
19111867
goto out_free_io_queues;
1912-
1913-
ret = nvme_ctrl_init_connect_q(ctrl);
1914-
if (ret)
1915-
goto out_free_tag_set;
19161868
}
19171869

19181870
/*
@@ -1959,10 +1911,7 @@ static int nvme_tcp_configure_io_queues(struct nvme_ctrl *ctrl, bool new)
19591911
out_cleanup_connect_q:
19601912
nvme_cancel_tagset(ctrl);
19611913
if (new)
1962-
blk_mq_destroy_queue(ctrl->connect_q);
1963-
out_free_tag_set:
1964-
if (new)
1965-
blk_mq_free_tag_set(ctrl->tagset);
1914+
nvme_remove_io_tag_set(ctrl);
19661915
out_free_io_queues:
19671916
nvme_tcp_free_io_queues(ctrl);
19681917
return ret;
@@ -1971,11 +1920,8 @@ static int nvme_tcp_configure_io_queues(struct nvme_ctrl *ctrl, bool new)
19711920
static void nvme_tcp_destroy_admin_queue(struct nvme_ctrl *ctrl, bool remove)
19721921
{
19731922
nvme_tcp_stop_queue(ctrl, 0);
1974-
if (remove) {
1975-
blk_mq_destroy_queue(ctrl->admin_q);
1976-
blk_mq_destroy_queue(ctrl->fabrics_q);
1977-
blk_mq_free_tag_set(ctrl->admin_tagset);
1978-
}
1923+
if (remove)
1924+
nvme_remove_admin_tag_set(ctrl);
19791925
nvme_tcp_free_admin_queue(ctrl);
19801926
}
19811927

@@ -1988,26 +1934,17 @@ static int nvme_tcp_configure_admin_queue(struct nvme_ctrl *ctrl, bool new)
19881934
return error;
19891935

19901936
if (new) {
1991-
error = nvme_tcp_alloc_admin_tag_set(ctrl);
1937+
error = nvme_alloc_admin_tag_set(ctrl,
1938+
&to_tcp_ctrl(ctrl)->admin_tag_set,
1939+
&nvme_tcp_admin_mq_ops, BLK_MQ_F_BLOCKING,
1940+
sizeof(struct nvme_tcp_request));
19921941
if (error)
19931942
goto out_free_queue;
1994-
1995-
ctrl->fabrics_q = blk_mq_init_queue(ctrl->admin_tagset);
1996-
if (IS_ERR(ctrl->fabrics_q)) {
1997-
error = PTR_ERR(ctrl->fabrics_q);
1998-
goto out_free_tagset;
1999-
}
2000-
2001-
ctrl->admin_q = blk_mq_init_queue(ctrl->admin_tagset);
2002-
if (IS_ERR(ctrl->admin_q)) {
2003-
error = PTR_ERR(ctrl->admin_q);
2004-
goto out_cleanup_fabrics_q;
2005-
}
20061943
}
20071944

20081945
error = nvme_tcp_start_queue(ctrl, 0);
20091946
if (error)
2010-
goto out_cleanup_queue;
1947+
goto out_cleanup_tagset;
20111948

20121949
error = nvme_enable_ctrl(ctrl);
20131950
if (error)
@@ -2027,15 +1964,9 @@ static int nvme_tcp_configure_admin_queue(struct nvme_ctrl *ctrl, bool new)
20271964
out_stop_queue:
20281965
nvme_tcp_stop_queue(ctrl, 0);
20291966
nvme_cancel_admin_tagset(ctrl);
2030-
out_cleanup_queue:
2031-
if (new)
2032-
blk_mq_destroy_queue(ctrl->admin_q);
2033-
out_cleanup_fabrics_q:
2034-
if (new)
2035-
blk_mq_destroy_queue(ctrl->fabrics_q);
2036-
out_free_tagset:
1967+
out_cleanup_tagset:
20371968
if (new)
2038-
blk_mq_free_tag_set(ctrl->admin_tagset);
1969+
nvme_remove_admin_tag_set(ctrl);
20391970
out_free_queue:
20401971
nvme_tcp_free_admin_queue(ctrl);
20411972
return error;

0 commit comments

Comments
 (0)