nvmf/tcp: remove lock on few transport ops
it simplifies the code and improves readability sync is done on generic layer Signed-off-by: Jacek Kalwas <jacek.kalwas@intel.com> Change-Id: I75753511842dff237bb27561e406c43ea68269fe Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13666 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
b17919d8bc
commit
c7ac84d1f2
@ -331,7 +331,6 @@ struct spdk_nvmf_tcp_transport {
|
|||||||
struct spdk_nvmf_tcp_poll_group *next_pg;
|
struct spdk_nvmf_tcp_poll_group *next_pg;
|
||||||
|
|
||||||
struct spdk_poller *accept_poller;
|
struct spdk_poller *accept_poller;
|
||||||
pthread_mutex_t lock;
|
|
||||||
|
|
||||||
TAILQ_HEAD(, spdk_nvmf_tcp_port) ports;
|
TAILQ_HEAD(, spdk_nvmf_tcp_port) ports;
|
||||||
TAILQ_HEAD(, spdk_nvmf_tcp_poll_group) poll_groups;
|
TAILQ_HEAD(, spdk_nvmf_tcp_poll_group) poll_groups;
|
||||||
@ -572,7 +571,6 @@ nvmf_tcp_destroy(struct spdk_nvmf_transport *transport,
|
|||||||
ttransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_tcp_transport, transport);
|
ttransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_tcp_transport, transport);
|
||||||
|
|
||||||
spdk_poller_unregister(&ttransport->accept_poller);
|
spdk_poller_unregister(&ttransport->accept_poller);
|
||||||
pthread_mutex_destroy(&ttransport->lock);
|
|
||||||
free(ttransport);
|
free(ttransport);
|
||||||
|
|
||||||
if (cb_fn) {
|
if (cb_fn) {
|
||||||
@ -671,12 +669,9 @@ nvmf_tcp_create(struct spdk_nvmf_transport_opts *opts)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_init(&ttransport->lock, NULL);
|
|
||||||
|
|
||||||
ttransport->accept_poller = SPDK_POLLER_REGISTER(nvmf_tcp_accept, &ttransport->transport,
|
ttransport->accept_poller = SPDK_POLLER_REGISTER(nvmf_tcp_accept, &ttransport->transport,
|
||||||
opts->acceptor_poll_rate);
|
opts->acceptor_poll_rate);
|
||||||
if (!ttransport->accept_poller) {
|
if (!ttransport->accept_poller) {
|
||||||
pthread_mutex_destroy(&ttransport->lock);
|
|
||||||
free(ttransport);
|
free(ttransport);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -728,8 +723,6 @@ nvmf_tcp_canon_listen_trid(struct spdk_nvme_transport_id *canon_trid,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Find an existing listening port.
|
* Find an existing listening port.
|
||||||
*
|
|
||||||
* Caller must hold ttransport->lock.
|
|
||||||
*/
|
*/
|
||||||
static struct spdk_nvmf_tcp_port *
|
static struct spdk_nvmf_tcp_port *
|
||||||
nvmf_tcp_find_port(struct spdk_nvmf_tcp_transport *ttransport,
|
nvmf_tcp_find_port(struct spdk_nvmf_tcp_transport *ttransport,
|
||||||
@ -774,11 +767,9 @@ nvmf_tcp_listen(struct spdk_nvmf_transport *transport, const struct spdk_nvme_tr
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_lock(&ttransport->lock);
|
|
||||||
port = calloc(1, sizeof(*port));
|
port = calloc(1, sizeof(*port));
|
||||||
if (!port) {
|
if (!port) {
|
||||||
SPDK_ERRLOG("Port allocation failed\n");
|
SPDK_ERRLOG("Port allocation failed\n");
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -793,7 +784,6 @@ nvmf_tcp_listen(struct spdk_nvmf_transport *transport, const struct spdk_nvme_tr
|
|||||||
trid->traddr, trsvcid_int,
|
trid->traddr, trsvcid_int,
|
||||||
spdk_strerror(errno), errno);
|
spdk_strerror(errno), errno);
|
||||||
free(port);
|
free(port);
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -810,7 +800,6 @@ nvmf_tcp_listen(struct spdk_nvmf_transport *transport, const struct spdk_nvme_tr
|
|||||||
SPDK_ERRLOG("Socket address family mismatch\n");
|
SPDK_ERRLOG("Socket address family mismatch\n");
|
||||||
spdk_sock_close(&port->listen_sock);
|
spdk_sock_close(&port->listen_sock);
|
||||||
free(port);
|
free(port);
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -818,7 +807,6 @@ nvmf_tcp_listen(struct spdk_nvmf_transport *transport, const struct spdk_nvme_tr
|
|||||||
trid->traddr, trid->trsvcid);
|
trid->traddr, trid->trsvcid);
|
||||||
|
|
||||||
TAILQ_INSERT_TAIL(&ttransport->ports, port, link);
|
TAILQ_INSERT_TAIL(&ttransport->ports, port, link);
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -834,15 +822,12 @@ nvmf_tcp_stop_listen(struct spdk_nvmf_transport *transport,
|
|||||||
SPDK_DEBUGLOG(nvmf_tcp, "Removing listen address %s port %s\n",
|
SPDK_DEBUGLOG(nvmf_tcp, "Removing listen address %s port %s\n",
|
||||||
trid->traddr, trid->trsvcid);
|
trid->traddr, trid->trsvcid);
|
||||||
|
|
||||||
pthread_mutex_lock(&ttransport->lock);
|
|
||||||
port = nvmf_tcp_find_port(ttransport, trid);
|
port = nvmf_tcp_find_port(ttransport, trid);
|
||||||
if (port) {
|
if (port) {
|
||||||
TAILQ_REMOVE(&ttransport->ports, port, link);
|
TAILQ_REMOVE(&ttransport->ports, port, link);
|
||||||
spdk_sock_close(&port->listen_sock);
|
spdk_sock_close(&port->listen_sock);
|
||||||
free(port);
|
free(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nvmf_tcp_qpair_set_recv_state(struct spdk_nvmf_tcp_qpair *tqpair,
|
static void nvmf_tcp_qpair_set_recv_state(struct spdk_nvmf_tcp_qpair *tqpair,
|
||||||
@ -1334,12 +1319,10 @@ nvmf_tcp_poll_group_create(struct spdk_nvmf_transport *transport,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_lock(&ttransport->lock);
|
|
||||||
TAILQ_INSERT_TAIL(&ttransport->poll_groups, tgroup, link);
|
TAILQ_INSERT_TAIL(&ttransport->poll_groups, tgroup, link);
|
||||||
if (ttransport->next_pg == NULL) {
|
if (ttransport->next_pg == NULL) {
|
||||||
ttransport->next_pg = tgroup;
|
ttransport->next_pg = tgroup;
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
|
|
||||||
return &tgroup->group;
|
return &tgroup->group;
|
||||||
|
|
||||||
@ -1359,10 +1342,7 @@ nvmf_tcp_get_optimal_poll_group(struct spdk_nvmf_qpair *qpair)
|
|||||||
|
|
||||||
ttransport = SPDK_CONTAINEROF(qpair->transport, struct spdk_nvmf_tcp_transport, transport);
|
ttransport = SPDK_CONTAINEROF(qpair->transport, struct spdk_nvmf_tcp_transport, transport);
|
||||||
|
|
||||||
pthread_mutex_lock(&ttransport->lock);
|
|
||||||
|
|
||||||
if (TAILQ_EMPTY(&ttransport->poll_groups)) {
|
if (TAILQ_EMPTY(&ttransport->poll_groups)) {
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1373,11 +1353,9 @@ nvmf_tcp_get_optimal_poll_group(struct spdk_nvmf_qpair *qpair)
|
|||||||
tqpair = SPDK_CONTAINEROF(qpair, struct spdk_nvmf_tcp_qpair, qpair);
|
tqpair = SPDK_CONTAINEROF(qpair, struct spdk_nvmf_tcp_qpair, qpair);
|
||||||
rc = spdk_sock_get_optimal_sock_group(tqpair->sock, &group, hint);
|
rc = spdk_sock_get_optimal_sock_group(tqpair->sock, &group, hint);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
} else if (group != NULL) {
|
} else if (group != NULL) {
|
||||||
/* Optimal poll group was found */
|
/* Optimal poll group was found */
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
return spdk_sock_group_get_ctx(group);
|
return spdk_sock_group_get_ctx(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1387,7 +1365,6 @@ nvmf_tcp_get_optimal_poll_group(struct spdk_nvmf_qpair *qpair)
|
|||||||
*pg = TAILQ_FIRST(&ttransport->poll_groups);
|
*pg = TAILQ_FIRST(&ttransport->poll_groups);
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
return spdk_sock_group_get_ctx(hint);
|
return spdk_sock_group_get_ctx(hint);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1409,7 +1386,6 @@ nvmf_tcp_poll_group_destroy(struct spdk_nvmf_transport_poll_group *group)
|
|||||||
|
|
||||||
ttransport = SPDK_CONTAINEROF(tgroup->group.transport, struct spdk_nvmf_tcp_transport, transport);
|
ttransport = SPDK_CONTAINEROF(tgroup->group.transport, struct spdk_nvmf_tcp_transport, transport);
|
||||||
|
|
||||||
pthread_mutex_lock(&ttransport->lock);
|
|
||||||
next_tgroup = TAILQ_NEXT(tgroup, link);
|
next_tgroup = TAILQ_NEXT(tgroup, link);
|
||||||
TAILQ_REMOVE(&ttransport->poll_groups, tgroup, link);
|
TAILQ_REMOVE(&ttransport->poll_groups, tgroup, link);
|
||||||
if (next_tgroup == NULL) {
|
if (next_tgroup == NULL) {
|
||||||
@ -1418,7 +1394,6 @@ nvmf_tcp_poll_group_destroy(struct spdk_nvmf_transport_poll_group *group)
|
|||||||
if (ttransport->next_pg == tgroup) {
|
if (ttransport->next_pg == tgroup) {
|
||||||
ttransport->next_pg = next_tgroup;
|
ttransport->next_pg = next_tgroup;
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
|
|
||||||
free(tgroup);
|
free(tgroup);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user