nvmf: align tcp and rdma listen calls
Make common code as part of successful return. In rdma check if already listening first. Signed-off-by: Jacek Kalwas <jacek.kalwas@intel.com> Change-Id: Ib0c87ac11db7daff00dc4042c9e0ab20eb7ffd0f Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/478721 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com> Community-CI: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
29e5c544c0
commit
7cd56fb3ed
@ -2627,16 +2627,26 @@ spdk_nvmf_rdma_listen(struct spdk_nvmf_transport *transport,
|
|||||||
{
|
{
|
||||||
struct spdk_nvmf_rdma_transport *rtransport;
|
struct spdk_nvmf_rdma_transport *rtransport;
|
||||||
struct spdk_nvmf_rdma_device *device;
|
struct spdk_nvmf_rdma_device *device;
|
||||||
struct spdk_nvmf_rdma_port *port_tmp, *port;
|
struct spdk_nvmf_rdma_port *port;
|
||||||
struct addrinfo *res;
|
struct addrinfo *res;
|
||||||
struct addrinfo hints;
|
struct addrinfo hints;
|
||||||
int family;
|
int family;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rtransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_rdma_transport, transport);
|
rtransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_rdma_transport, transport);
|
||||||
|
assert(rtransport->event_channel != NULL);
|
||||||
|
|
||||||
|
pthread_mutex_lock(&rtransport->lock);
|
||||||
|
TAILQ_FOREACH(port, &rtransport->ports, link) {
|
||||||
|
if (spdk_nvme_transport_id_compare(&port->trid, trid) == 0) {
|
||||||
|
goto success;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
port = calloc(1, sizeof(*port));
|
port = calloc(1, sizeof(*port));
|
||||||
if (!port) {
|
if (!port) {
|
||||||
|
SPDK_ERRLOG("Port allocation failed\n");
|
||||||
|
pthread_mutex_unlock(&rtransport->lock);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2658,6 +2668,7 @@ spdk_nvmf_rdma_listen(struct spdk_nvmf_transport *transport,
|
|||||||
default:
|
default:
|
||||||
SPDK_ERRLOG("Unhandled ADRFAM %d\n", port->trid.adrfam);
|
SPDK_ERRLOG("Unhandled ADRFAM %d\n", port->trid.adrfam);
|
||||||
free(port);
|
free(port);
|
||||||
|
pthread_mutex_unlock(&rtransport->lock);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2671,22 +2682,10 @@ spdk_nvmf_rdma_listen(struct spdk_nvmf_transport *transport,
|
|||||||
if (rc) {
|
if (rc) {
|
||||||
SPDK_ERRLOG("getaddrinfo failed: %s (%d)\n", gai_strerror(rc), rc);
|
SPDK_ERRLOG("getaddrinfo failed: %s (%d)\n", gai_strerror(rc), rc);
|
||||||
free(port);
|
free(port);
|
||||||
|
pthread_mutex_unlock(&rtransport->lock);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_lock(&rtransport->lock);
|
|
||||||
assert(rtransport->event_channel != NULL);
|
|
||||||
TAILQ_FOREACH(port_tmp, &rtransport->ports, link) {
|
|
||||||
if (spdk_nvme_transport_id_compare(&port_tmp->trid, &port->trid) == 0) {
|
|
||||||
port_tmp->ref++;
|
|
||||||
freeaddrinfo(res);
|
|
||||||
free(port);
|
|
||||||
/* Already listening at this address */
|
|
||||||
pthread_mutex_unlock(&rtransport->lock);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = rdma_create_id(rtransport->event_channel, &port->id, port, RDMA_PS_TCP);
|
rc = rdma_create_id(rtransport->event_channel, &port->id, port, RDMA_PS_TCP);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
SPDK_ERRLOG("rdma_create_id() failed\n");
|
SPDK_ERRLOG("rdma_create_id() failed\n");
|
||||||
@ -2739,14 +2738,14 @@ spdk_nvmf_rdma_listen(struct spdk_nvmf_transport *transport,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SPDK_INFOLOG(SPDK_LOG_RDMA, "*** NVMf Target Listening on %s port %d ***\n",
|
SPDK_NOTICELOG("*** NVMe/RDMA Target Listening on %s port %s ***\n",
|
||||||
port->trid.traddr, ntohs(rdma_get_src_port(port->id)));
|
trid->traddr, trid->trsvcid);
|
||||||
|
|
||||||
port->ref = 1;
|
|
||||||
|
|
||||||
TAILQ_INSERT_TAIL(&rtransport->ports, port, link);
|
TAILQ_INSERT_TAIL(&rtransport->ports, port, link);
|
||||||
pthread_mutex_unlock(&rtransport->lock);
|
|
||||||
|
|
||||||
|
success:
|
||||||
|
port->ref++;
|
||||||
|
pthread_mutex_unlock(&rtransport->lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -663,26 +663,18 @@ spdk_nvmf_tcp_listen(struct spdk_nvmf_transport *transport,
|
|||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_lock(&ttransport->lock);
|
pthread_mutex_lock(&ttransport->lock);
|
||||||
|
|
||||||
port = _spdk_nvmf_tcp_find_port(ttransport, trid);
|
port = _spdk_nvmf_tcp_find_port(ttransport, trid);
|
||||||
if (port) {
|
if (port) {
|
||||||
SPDK_DEBUGLOG(SPDK_LOG_NVMF_TCP, "Already listening on %s port %s\n",
|
goto success;
|
||||||
trid->traddr, trid->trsvcid);
|
|
||||||
port->ref++;
|
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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");
|
||||||
free(port);
|
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
pthread_mutex_unlock(&ttransport->lock);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
port->ref = 1;
|
|
||||||
|
|
||||||
if (_spdk_nvmf_tcp_canon_listen_trid(&port->trid, trid) != 0) {
|
if (_spdk_nvmf_tcp_canon_listen_trid(&port->trid, trid) != 0) {
|
||||||
SPDK_ERRLOG("Invalid traddr %s / trsvcid %s\n",
|
SPDK_ERRLOG("Invalid traddr %s / trsvcid %s\n",
|
||||||
trid->traddr, trid->trsvcid);
|
trid->traddr, trid->trsvcid);
|
||||||
@ -718,12 +710,14 @@ spdk_nvmf_tcp_listen(struct spdk_nvmf_transport *transport,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SPDK_NOTICELOG("*** NVMe/TCP Target Listening on %s port %d ***\n",
|
SPDK_NOTICELOG("*** NVMe/TCP Target Listening on %s port %s ***\n",
|
||||||
trid->traddr, trsvcid_int);
|
trid->traddr, trid->trsvcid);
|
||||||
|
|
||||||
TAILQ_INSERT_TAIL(&ttransport->ports, port, link);
|
TAILQ_INSERT_TAIL(&ttransport->ports, port, link);
|
||||||
pthread_mutex_unlock(&ttransport->lock);
|
|
||||||
|
|
||||||
|
success:
|
||||||
|
port->ref++;
|
||||||
|
pthread_mutex_unlock(&ttransport->lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user