From 3f81bcaf127c427f79efd012eb96148216f872ca Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Mon, 13 May 2019 15:12:32 -0700 Subject: [PATCH] iscsi: Move acceptor into portal_grp It's 3 functions that are only called from this compilation unit. Change-Id: I033ced4c19ee2a33b9537c347532ea5706d02d6a Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/454493 Tested-by: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Jim Harris --- lib/iscsi/Makefile | 2 +- lib/iscsi/acceptor.c | 91 ------------------- lib/iscsi/acceptor.h | 43 --------- lib/iscsi/iscsi.c | 1 - lib/iscsi/portal_grp.c | 51 ++++++++++- lib/iscsi/portal_grp.h | 1 + test/unit/lib/iscsi/common.c | 21 ----- test/unit/lib/iscsi/iscsi.c/iscsi_ut.c | 1 - .../lib/iscsi/portal_grp.c/portal_grp_ut.c | 27 ++++++ 9 files changed, 77 insertions(+), 161 deletions(-) delete mode 100644 lib/iscsi/acceptor.c delete mode 100644 lib/iscsi/acceptor.h diff --git a/lib/iscsi/Makefile b/lib/iscsi/Makefile index 57323a581..23193d0cf 100644 --- a/lib/iscsi/Makefile +++ b/lib/iscsi/Makefile @@ -35,7 +35,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk CFLAGS += -I$(SPDK_ROOT_DIR)/lib -C_SRCS = acceptor.c conn.c \ +C_SRCS = conn.c \ init_grp.c iscsi.c md5.c param.c portal_grp.c \ tgt_node.c iscsi_subsystem.c \ iscsi_rpc.c task.c diff --git a/lib/iscsi/acceptor.c b/lib/iscsi/acceptor.c deleted file mode 100644 index fad062c26..000000000 --- a/lib/iscsi/acceptor.c +++ /dev/null @@ -1,91 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright (C) 2008-2012 Daisuke Aoyama . - * Copyright (c) Intel Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "spdk/stdinc.h" - -#include "spdk/env.h" -#include "spdk/thread.h" -#include "spdk/log.h" -#include "spdk/sock.h" -#include "spdk/string.h" -#include "iscsi/acceptor.h" -#include "iscsi/conn.h" -#include "iscsi/portal_grp.h" - -#define ACCEPT_TIMEOUT_US 1000 /* 1ms */ - -static int -iscsi_portal_accept(void *arg) -{ - struct spdk_iscsi_portal *portal = arg; - struct spdk_sock *sock; - int rc; - int count = 0; - - if (portal->sock == NULL) { - return -1; - } - - while (1) { - sock = spdk_sock_accept(portal->sock); - if (sock != NULL) { - rc = spdk_iscsi_conn_construct(portal, sock); - if (rc < 0) { - spdk_sock_close(&sock); - SPDK_ERRLOG("spdk_iscsi_connection_construct() failed\n"); - break; - } - count++; - } else { - if (errno != EAGAIN && errno != EWOULDBLOCK) { - SPDK_ERRLOG("accept error(%d): %s\n", errno, spdk_strerror(errno)); - } - break; - } - } - - return count; -} - -void -spdk_iscsi_acceptor_start(struct spdk_iscsi_portal *p) -{ - p->acceptor_poller = spdk_poller_register(iscsi_portal_accept, p, ACCEPT_TIMEOUT_US); -} - -void -spdk_iscsi_acceptor_stop(struct spdk_iscsi_portal *p) -{ - spdk_poller_unregister(&p->acceptor_poller); -} diff --git a/lib/iscsi/acceptor.h b/lib/iscsi/acceptor.h deleted file mode 100644 index 9060ee7db..000000000 --- a/lib/iscsi/acceptor.h +++ /dev/null @@ -1,43 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright (C) 2008-2012 Daisuke Aoyama . - * Copyright (c) Intel Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef SPDK_ACCEPTOR_H_ -#define SPDK_ACCEPTOR_H_ - -struct spdk_iscsi_portal; - -void spdk_iscsi_acceptor_start(struct spdk_iscsi_portal *p); -void spdk_iscsi_acceptor_stop(struct spdk_iscsi_portal *p); - -#endif /* SPDK_ACCEPTOR_H_ */ diff --git a/lib/iscsi/iscsi.c b/lib/iscsi/iscsi.c index f58ca8bba..fb9d213ee 100644 --- a/lib/iscsi/iscsi.c +++ b/lib/iscsi/iscsi.c @@ -53,7 +53,6 @@ #include "spdk/scsi.h" #include "spdk/bdev.h" #include "iscsi/portal_grp.h" -#include "iscsi/acceptor.h" #include "spdk_internal/log.h" diff --git a/lib/iscsi/portal_grp.c b/lib/iscsi/portal_grp.c index 5fdafc122..9afb4b73c 100644 --- a/lib/iscsi/portal_grp.c +++ b/lib/iscsi/portal_grp.c @@ -44,9 +44,54 @@ #include "iscsi/iscsi.h" #include "iscsi/conn.h" #include "iscsi/portal_grp.h" -#include "iscsi/acceptor.h" #define PORTNUMSTRLEN 32 +#define ACCEPT_TIMEOUT_US 1000 /* 1ms */ + +static int +iscsi_portal_accept(void *arg) +{ + struct spdk_iscsi_portal *portal = arg; + struct spdk_sock *sock; + int rc; + int count = 0; + + if (portal->sock == NULL) { + return -1; + } + + while (1) { + sock = spdk_sock_accept(portal->sock); + if (sock != NULL) { + rc = spdk_iscsi_conn_construct(portal, sock); + if (rc < 0) { + spdk_sock_close(&sock); + SPDK_ERRLOG("spdk_iscsi_connection_construct() failed\n"); + break; + } + count++; + } else { + if (errno != EAGAIN && errno != EWOULDBLOCK) { + SPDK_ERRLOG("accept error(%d): %s\n", errno, spdk_strerror(errno)); + } + break; + } + } + + return count; +} + +static void +iscsi_acceptor_start(struct spdk_iscsi_portal *p) +{ + p->acceptor_poller = spdk_poller_register(iscsi_portal_accept, p, ACCEPT_TIMEOUT_US); +} + +static void +iscsi_acceptor_stop(struct spdk_iscsi_portal *p) +{ + spdk_poller_unregister(&p->acceptor_poller); +} static struct spdk_iscsi_portal * iscsi_portal_find_by_addr(const char *host, const char *port) @@ -200,7 +245,7 @@ iscsi_portal_open(struct spdk_iscsi_portal *p) * the requests will be queued by the nonzero backlog of the socket * or resend by TCP. */ - spdk_iscsi_acceptor_start(p); + iscsi_acceptor_start(p); return 0; } @@ -211,7 +256,7 @@ iscsi_portal_close(struct spdk_iscsi_portal *p) if (p->sock) { SPDK_DEBUGLOG(SPDK_LOG_ISCSI, "close portal (%s, %s)\n", p->host, p->port); - spdk_iscsi_acceptor_stop(p); + iscsi_acceptor_stop(p); spdk_sock_close(&p->sock); } } diff --git a/lib/iscsi/portal_grp.h b/lib/iscsi/portal_grp.h index ab1142b77..eb401c8c8 100644 --- a/lib/iscsi/portal_grp.h +++ b/lib/iscsi/portal_grp.h @@ -80,4 +80,5 @@ void spdk_iscsi_portal_grp_close_all(void); void spdk_iscsi_portal_grps_config_text(FILE *fp); void spdk_iscsi_portal_grps_info_json(struct spdk_json_write_ctx *w); void spdk_iscsi_portal_grps_config_json(struct spdk_json_write_ctx *w); + #endif /* SPDK_PORTAL_GRP_H */ diff --git a/test/unit/lib/iscsi/common.c b/test/unit/lib/iscsi/common.c index d1a5f8ae1..1470594d5 100644 --- a/test/unit/lib/iscsi/common.c +++ b/test/unit/lib/iscsi/common.c @@ -1,7 +1,6 @@ #include "iscsi/task.h" #include "iscsi/iscsi.h" #include "iscsi/conn.h" -#include "iscsi/acceptor.h" #include "spdk/env.h" #include "spdk/event.h" @@ -98,26 +97,6 @@ spdk_scsi_dev_get_name(const struct spdk_scsi_dev *dev) return NULL; } -DEFINE_STUB_V(spdk_iscsi_acceptor_start, (struct spdk_iscsi_portal *p)); - -DEFINE_STUB_V(spdk_iscsi_acceptor_stop, (struct spdk_iscsi_portal *p)); - -struct spdk_sock * -spdk_sock_listen(const char *ip, int port) -{ - static int g_sock; - - return (struct spdk_sock *)&g_sock; -} - -int -spdk_sock_close(struct spdk_sock **sock) -{ - *sock = NULL; - - return 0; -} - static struct spdk_cpuset *g_app_core_mask; struct spdk_cpuset * diff --git a/test/unit/lib/iscsi/iscsi.c/iscsi_ut.c b/test/unit/lib/iscsi/iscsi.c/iscsi_ut.c index aea6a9b62..770f85a72 100644 --- a/test/unit/lib/iscsi/iscsi.c/iscsi_ut.c +++ b/test/unit/lib/iscsi/iscsi.c/iscsi_ut.c @@ -42,7 +42,6 @@ #include "iscsi/iscsi.c" #include "../common.c" -#include "iscsi/acceptor.h" #include "iscsi/portal_grp.h" #include "scsi/scsi_internal.h" #include "common/lib/test_env.c" diff --git a/test/unit/lib/iscsi/portal_grp.c/portal_grp_ut.c b/test/unit/lib/iscsi/portal_grp.c/portal_grp_ut.c index 88bf17075..1a862b965 100644 --- a/test/unit/lib/iscsi/portal_grp.c/portal_grp_ut.c +++ b/test/unit/lib/iscsi/portal_grp.c/portal_grp_ut.c @@ -36,10 +36,19 @@ #include "spdk_cunit.h" +#include "common/lib/test_env.c" +#include "common/lib/test_sock.c" + #include "../common.c" #include "iscsi/portal_grp.c" #include "unit/lib/json_mock.c" +#include "spdk_internal/thread.h" + +DEFINE_STUB(spdk_iscsi_conn_construct, int, + (struct spdk_iscsi_portal *portal, struct spdk_sock *sock), + 0); + struct spdk_iscsi_globals g_spdk_iscsi; static int @@ -381,10 +390,15 @@ portal_grp_register_twice_case(void) static void portal_grp_add_delete_case(void) { + struct spdk_sock sock = {}; + struct spdk_thread *thread; struct spdk_iscsi_portal_grp *pg1, *pg2; struct spdk_iscsi_portal *p; int rc; + thread = spdk_thread_create(NULL, NULL); + spdk_set_thread(thread); + const char *host = "192.168.2.0"; const char *port = "3260"; const char *cpumask = "1"; @@ -398,8 +412,10 @@ portal_grp_add_delete_case(void) spdk_iscsi_portal_grp_add_portal(pg1, p); + MOCK_SET(spdk_sock_listen, &sock); rc = spdk_iscsi_portal_grp_open(pg1); CU_ASSERT(rc == 0); + MOCK_CLEAR_P(spdk_sock_listen); rc = spdk_iscsi_portal_grp_register(pg1); CU_ASSERT(rc == 0); @@ -413,11 +429,15 @@ portal_grp_add_delete_case(void) CU_ASSERT(TAILQ_EMPTY(&g_spdk_iscsi.portal_head)); CU_ASSERT(TAILQ_EMPTY(&g_spdk_iscsi.pg_head)); + + spdk_thread_exit(thread); } static void portal_grp_add_delete_twice_case(void) { + struct spdk_sock sock = {}; + struct spdk_thread *thread; struct spdk_iscsi_portal_grp *pg1, *pg2; struct spdk_iscsi_portal *p; int rc; @@ -426,6 +446,9 @@ portal_grp_add_delete_twice_case(void) const char *port1 = "3260", *port2 = "3261"; const char *cpumask = "1"; + thread = spdk_thread_create(NULL, NULL); + spdk_set_thread(thread); + /* internal of add_portal_group related */ pg1 = spdk_iscsi_portal_grp_create(1); CU_ASSERT(pg1 != NULL); @@ -435,6 +458,7 @@ portal_grp_add_delete_twice_case(void) spdk_iscsi_portal_grp_add_portal(pg1, p); + MOCK_SET(spdk_sock_listen, &sock); rc = spdk_iscsi_portal_grp_open(pg1); CU_ASSERT(rc == 0); @@ -464,6 +488,9 @@ portal_grp_add_delete_twice_case(void) CU_ASSERT(TAILQ_EMPTY(&g_spdk_iscsi.portal_head)); CU_ASSERT(TAILQ_EMPTY(&g_spdk_iscsi.pg_head)); + + MOCK_CLEAR_P(spdk_sock_listen); + spdk_thread_exit(thread); } int