From 960460f0d19180b6fe86eddc0f98a9d0dbf7e377 Mon Sep 17 00:00:00 2001 From: Ziye Yang Date: Wed, 15 May 2019 21:53:39 +0800 Subject: [PATCH] nvmf: add spdk_nvmf_transport_get_optimal_poll_group Add the optimal poll group get function. Signed-off-by: Ziye Yang Change-Id: Ia9e57c6924a6563d79269cf535814883e83698cd Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/454549 Tested-by: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Ben Walker Reviewed-by: Changpeng Liu --- lib/nvmf/tcp.c | 19 ++++++++++++++++++- lib/nvmf/transport.c | 11 +++++++++++ lib/nvmf/transport.h | 8 +++++++- test/unit/lib/nvmf/tcp.c/tcp_ut.c | 10 ++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/lib/nvmf/tcp.c b/lib/nvmf/tcp.c index 3895d449f..88b396311 100644 --- a/lib/nvmf/tcp.c +++ b/lib/nvmf/tcp.c @@ -1169,7 +1169,7 @@ spdk_nvmf_tcp_poll_group_create(struct spdk_nvmf_transport *transport) return NULL; } - tgroup->sock_group = spdk_sock_group_create(NULL); + tgroup->sock_group = spdk_sock_group_create(&tgroup->group); if (!tgroup->sock_group) { goto cleanup; } @@ -1184,6 +1184,22 @@ cleanup: return NULL; } +static struct spdk_nvmf_transport_poll_group * +spdk_nvmf_tcp_get_optimal_poll_group(struct spdk_nvmf_qpair *qpair) +{ + struct spdk_nvmf_tcp_qpair *tqpair; + struct spdk_sock_group *group = NULL; + int rc; + + tqpair = SPDK_CONTAINEROF(qpair, struct spdk_nvmf_tcp_qpair, qpair); + rc = spdk_sock_get_optimal_sock_group(tqpair->sock, &group); + if (!rc && group != NULL) { + return spdk_sock_group_get_ctx(group); + } + + return NULL; +} + static void spdk_nvmf_tcp_poll_group_destroy(struct spdk_nvmf_transport_poll_group *group) { @@ -2857,6 +2873,7 @@ const struct spdk_nvmf_transport_ops spdk_nvmf_transport_tcp = { .listener_discover = spdk_nvmf_tcp_discover, .poll_group_create = spdk_nvmf_tcp_poll_group_create, + .get_optimal_poll_group = spdk_nvmf_tcp_get_optimal_poll_group, .poll_group_destroy = spdk_nvmf_tcp_poll_group_destroy, .poll_group_add = spdk_nvmf_tcp_poll_group_add, .poll_group_remove = spdk_nvmf_tcp_poll_group_remove, diff --git a/lib/nvmf/transport.c b/lib/nvmf/transport.c index e915f8ba1..2b5ff4a1a 100644 --- a/lib/nvmf/transport.c +++ b/lib/nvmf/transport.c @@ -211,6 +211,17 @@ spdk_nvmf_transport_poll_group_create(struct spdk_nvmf_transport *transport) return group; } +struct spdk_nvmf_transport_poll_group * +spdk_nvmf_transport_get_optimal_poll_group(struct spdk_nvmf_transport *transport, + struct spdk_nvmf_qpair *qpair) +{ + if (transport->ops->get_optimal_poll_group) { + return transport->ops->get_optimal_poll_group(qpair); + } else { + return NULL; + } +} + void spdk_nvmf_transport_poll_group_destroy(struct spdk_nvmf_transport_poll_group *group) { diff --git a/lib/nvmf/transport.h b/lib/nvmf/transport.h index aaecff104..fe0b76bc6 100644 --- a/lib/nvmf/transport.h +++ b/lib/nvmf/transport.h @@ -101,6 +101,11 @@ struct spdk_nvmf_transport_ops { */ struct spdk_nvmf_transport_poll_group *(*poll_group_create)(struct spdk_nvmf_transport *transport); + /** + * Get the polling group of the queue pair optimal for the specific transport + */ + struct spdk_nvmf_transport_poll_group *(*get_optimal_poll_group)(struct spdk_nvmf_qpair *qpair); + /** * Destroy a poll group */ @@ -164,7 +169,6 @@ struct spdk_nvmf_transport_ops { int (*qpair_set_sqsize)(struct spdk_nvmf_qpair *qpair); }; - int spdk_nvmf_transport_stop_listen(struct spdk_nvmf_transport *transport, const struct spdk_nvme_transport_id *trid); @@ -176,6 +180,8 @@ void spdk_nvmf_transport_listener_discover(struct spdk_nvmf_transport *transport struct spdk_nvmf_transport_poll_group *spdk_nvmf_transport_poll_group_create( struct spdk_nvmf_transport *transport); +struct spdk_nvmf_transport_poll_group *spdk_nvmf_transport_get_optimal_poll_group( + struct spdk_nvmf_transport *transport, struct spdk_nvmf_qpair *qpair); void spdk_nvmf_transport_poll_group_destroy(struct spdk_nvmf_transport_poll_group *group); diff --git a/test/unit/lib/nvmf/tcp.c/tcp_ut.c b/test/unit/lib/nvmf/tcp.c/tcp_ut.c index 28bae7b78..92fff6db6 100644 --- a/test/unit/lib/nvmf/tcp.c/tcp_ut.c +++ b/test/unit/lib/nvmf/tcp.c/tcp_ut.c @@ -161,6 +161,16 @@ DEFINE_STUB(spdk_nvmf_transport_req_complete, (struct spdk_nvmf_request *req), 0); +DEFINE_STUB(spdk_sock_get_optimal_sock_group, + int, + (struct spdk_sock *sock, struct spdk_sock_group **group), + 0); + +DEFINE_STUB(spdk_sock_group_get_ctx, + void *, + (struct spdk_sock_group *group), + NULL); + DEFINE_STUB_V(spdk_nvmf_ns_reservation_request, (void *ctx)); struct spdk_trace_histories *g_trace_histories;