From 5206698e772751586d5dd279fde2fd063f167732 Mon Sep 17 00:00:00 2001 From: Ziye Yang Date: Mon, 13 Jul 2020 23:48:29 +0800 Subject: [PATCH] nvme/tcp: Add the implementation to get the optimal polling group Add the real support in nvme tcp transport. Change-Id: I2aa9b0284d6fe009925e67f602a055e787f77987 Signed-off-by: Ziye Yang Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5734 Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto Reviewed-by: Aleksey Marchuk Reviewed-by: Changpeng Liu --- lib/nvme/nvme_tcp.c | 16 ++++++++++++++++ test/unit/lib/nvme/nvme_tcp.c/nvme_tcp_ut.c | 9 +++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/nvme/nvme_tcp.c b/lib/nvme/nvme_tcp.c index edd5ad53d..60beec0ed 100644 --- a/lib/nvme/nvme_tcp.c +++ b/lib/nvme/nvme_tcp.c @@ -1956,6 +1956,21 @@ nvme_tcp_poll_group_create(void) return &group->group; } +static struct spdk_nvme_transport_poll_group * +nvme_tcp_qpair_get_optimal_poll_group(struct spdk_nvme_qpair *qpair) +{ + struct nvme_tcp_qpair *tqpair = nvme_tcp_qpair(qpair); + struct spdk_sock_group *group = NULL; + int rc; + + rc = spdk_sock_get_optimal_sock_group(tqpair->sock, &group); + if (!rc && group != NULL) { + return spdk_sock_group_get_ctx(group); + } + + return NULL; +} + static int nvme_tcp_poll_group_connect_qpair(struct spdk_nvme_qpair *qpair) { @@ -2079,6 +2094,7 @@ const struct spdk_nvme_transport_ops tcp_ops = { .admin_qpair_abort_aers = nvme_tcp_admin_qpair_abort_aers, .poll_group_create = nvme_tcp_poll_group_create, + .qpair_get_optimal_poll_group = nvme_tcp_qpair_get_optimal_poll_group, .poll_group_connect_qpair = nvme_tcp_poll_group_connect_qpair, .poll_group_disconnect_qpair = nvme_tcp_poll_group_disconnect_qpair, .poll_group_add = nvme_tcp_poll_group_add, diff --git a/test/unit/lib/nvme/nvme_tcp.c/nvme_tcp_ut.c b/test/unit/lib/nvme/nvme_tcp.c/nvme_tcp_ut.c index ae3a09cd0..7abea7796 100644 --- a/test/unit/lib/nvme/nvme_tcp.c/nvme_tcp_ut.c +++ b/test/unit/lib/nvme/nvme_tcp.c/nvme_tcp_ut.c @@ -50,6 +50,15 @@ DEFINE_STUB(spdk_sock_set_priority, DEFINE_STUB(spdk_nvme_poll_group_remove, int, (struct spdk_nvme_poll_group *group, struct spdk_nvme_qpair *qpair), 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(spdk_nvme_poll_group_process_completions, int64_t, (struct spdk_nvme_poll_group *group, uint32_t completions_per_qpair, spdk_nvme_disconnected_qpair_cb disconnected_qpair_cb), 0);