nvmf/rdma: Move spdk_nvmf_process_cm_event by event handlers
Keep the code together. This is only code movement. Change-Id: Ie52f1ab09e197192025f2b664df410ba6e1f06aa Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/423934 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Seth Howell <seth.howell5141@gmail.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
e6b2caee51
commit
81d51948ad
156
lib/nvmf/rdma.c
156
lib/nvmf/rdma.c
@ -981,6 +981,84 @@ static const char *CM_EVENT_STR[] = {
|
|||||||
};
|
};
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
|
|
||||||
|
static void
|
||||||
|
spdk_nvmf_process_cm_event(struct spdk_nvmf_transport *transport, new_qpair_fn cb_fn)
|
||||||
|
{
|
||||||
|
struct spdk_nvmf_rdma_transport *rtransport;
|
||||||
|
struct rdma_cm_event *event;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rtransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_rdma_transport, transport);
|
||||||
|
|
||||||
|
if (rtransport->event_channel == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
rc = rdma_get_cm_event(rtransport->event_channel, &event);
|
||||||
|
if (rc == 0) {
|
||||||
|
SPDK_DEBUGLOG(SPDK_LOG_RDMA, "Acceptor Event: %s\n", CM_EVENT_STR[event->event]);
|
||||||
|
|
||||||
|
switch (event->event) {
|
||||||
|
case RDMA_CM_EVENT_ADDR_RESOLVED:
|
||||||
|
case RDMA_CM_EVENT_ADDR_ERROR:
|
||||||
|
case RDMA_CM_EVENT_ROUTE_RESOLVED:
|
||||||
|
case RDMA_CM_EVENT_ROUTE_ERROR:
|
||||||
|
/* No action required. The target never attempts to resolve routes. */
|
||||||
|
break;
|
||||||
|
case RDMA_CM_EVENT_CONNECT_REQUEST:
|
||||||
|
rc = nvmf_rdma_connect(transport, event, cb_fn);
|
||||||
|
if (rc < 0) {
|
||||||
|
SPDK_ERRLOG("Unable to process connect event. rc: %d\n", rc);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RDMA_CM_EVENT_CONNECT_RESPONSE:
|
||||||
|
/* The target never initiates a new connection. So this will not occur. */
|
||||||
|
break;
|
||||||
|
case RDMA_CM_EVENT_CONNECT_ERROR:
|
||||||
|
/* Can this happen? The docs say it can, but not sure what causes it. */
|
||||||
|
break;
|
||||||
|
case RDMA_CM_EVENT_UNREACHABLE:
|
||||||
|
case RDMA_CM_EVENT_REJECTED:
|
||||||
|
/* These only occur on the client side. */
|
||||||
|
break;
|
||||||
|
case RDMA_CM_EVENT_ESTABLISHED:
|
||||||
|
/* TODO: Should we be waiting for this event anywhere? */
|
||||||
|
break;
|
||||||
|
case RDMA_CM_EVENT_DISCONNECTED:
|
||||||
|
case RDMA_CM_EVENT_DEVICE_REMOVAL:
|
||||||
|
rc = nvmf_rdma_disconnect(event);
|
||||||
|
if (rc < 0) {
|
||||||
|
SPDK_ERRLOG("Unable to process disconnect event. rc: %d\n", rc);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case RDMA_CM_EVENT_MULTICAST_JOIN:
|
||||||
|
case RDMA_CM_EVENT_MULTICAST_ERROR:
|
||||||
|
/* Multicast is not used */
|
||||||
|
break;
|
||||||
|
case RDMA_CM_EVENT_ADDR_CHANGE:
|
||||||
|
/* Not utilizing this event */
|
||||||
|
break;
|
||||||
|
case RDMA_CM_EVENT_TIMEWAIT_EXIT:
|
||||||
|
/* For now, do nothing. The target never re-uses queue pairs. */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
SPDK_ERRLOG("Unexpected Acceptor Event [%d]\n", event->event);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
rdma_ack_cm_event(event);
|
||||||
|
} else {
|
||||||
|
if (errno != EAGAIN && errno != EWOULDBLOCK) {
|
||||||
|
SPDK_ERRLOG("Acceptor Event Error: %s\n", spdk_strerror(errno));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
spdk_nvmf_rdma_mem_notify(void *cb_ctx, struct spdk_mem_map *map,
|
spdk_nvmf_rdma_mem_notify(void *cb_ctx, struct spdk_mem_map *map,
|
||||||
enum spdk_mem_map_notify_action action,
|
enum spdk_mem_map_notify_action action,
|
||||||
@ -1823,84 +1901,6 @@ spdk_nvmf_rdma_stop_listen(struct spdk_nvmf_transport *transport,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
spdk_nvmf_process_cm_event(struct spdk_nvmf_transport *transport, new_qpair_fn cb_fn)
|
|
||||||
{
|
|
||||||
struct spdk_nvmf_rdma_transport *rtransport;
|
|
||||||
struct rdma_cm_event *event;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
rtransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_rdma_transport, transport);
|
|
||||||
|
|
||||||
if (rtransport->event_channel == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
rc = rdma_get_cm_event(rtransport->event_channel, &event);
|
|
||||||
if (rc == 0) {
|
|
||||||
SPDK_DEBUGLOG(SPDK_LOG_RDMA, "Acceptor Event: %s\n", CM_EVENT_STR[event->event]);
|
|
||||||
|
|
||||||
switch (event->event) {
|
|
||||||
case RDMA_CM_EVENT_ADDR_RESOLVED:
|
|
||||||
case RDMA_CM_EVENT_ADDR_ERROR:
|
|
||||||
case RDMA_CM_EVENT_ROUTE_RESOLVED:
|
|
||||||
case RDMA_CM_EVENT_ROUTE_ERROR:
|
|
||||||
/* No action required. The target never attempts to resolve routes. */
|
|
||||||
break;
|
|
||||||
case RDMA_CM_EVENT_CONNECT_REQUEST:
|
|
||||||
rc = nvmf_rdma_connect(transport, event, cb_fn);
|
|
||||||
if (rc < 0) {
|
|
||||||
SPDK_ERRLOG("Unable to process connect event. rc: %d\n", rc);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RDMA_CM_EVENT_CONNECT_RESPONSE:
|
|
||||||
/* The target never initiates a new connection. So this will not occur. */
|
|
||||||
break;
|
|
||||||
case RDMA_CM_EVENT_CONNECT_ERROR:
|
|
||||||
/* Can this happen? The docs say it can, but not sure what causes it. */
|
|
||||||
break;
|
|
||||||
case RDMA_CM_EVENT_UNREACHABLE:
|
|
||||||
case RDMA_CM_EVENT_REJECTED:
|
|
||||||
/* These only occur on the client side. */
|
|
||||||
break;
|
|
||||||
case RDMA_CM_EVENT_ESTABLISHED:
|
|
||||||
/* TODO: Should we be waiting for this event anywhere? */
|
|
||||||
break;
|
|
||||||
case RDMA_CM_EVENT_DISCONNECTED:
|
|
||||||
case RDMA_CM_EVENT_DEVICE_REMOVAL:
|
|
||||||
rc = nvmf_rdma_disconnect(event);
|
|
||||||
if (rc < 0) {
|
|
||||||
SPDK_ERRLOG("Unable to process disconnect event. rc: %d\n", rc);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
case RDMA_CM_EVENT_MULTICAST_JOIN:
|
|
||||||
case RDMA_CM_EVENT_MULTICAST_ERROR:
|
|
||||||
/* Multicast is not used */
|
|
||||||
break;
|
|
||||||
case RDMA_CM_EVENT_ADDR_CHANGE:
|
|
||||||
/* Not utilizing this event */
|
|
||||||
break;
|
|
||||||
case RDMA_CM_EVENT_TIMEWAIT_EXIT:
|
|
||||||
/* For now, do nothing. The target never re-uses queue pairs. */
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
SPDK_ERRLOG("Unexpected Acceptor Event [%d]\n", event->event);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
rdma_ack_cm_event(event);
|
|
||||||
} else {
|
|
||||||
if (errno != EAGAIN && errno != EWOULDBLOCK) {
|
|
||||||
SPDK_ERRLOG("Acceptor Event Error: %s\n", spdk_strerror(errno));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
spdk_nvmf_rdma_qpair_is_idle(struct spdk_nvmf_qpair *qpair)
|
spdk_nvmf_rdma_qpair_is_idle(struct spdk_nvmf_qpair *qpair)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user