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 <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/454493 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
31736dc25c
commit
3f81bcaf12
@ -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
|
||||
|
@ -1,91 +0,0 @@
|
||||
/*-
|
||||
* BSD LICENSE
|
||||
*
|
||||
* Copyright (C) 2008-2012 Daisuke Aoyama <aoyama@peach.ne.jp>.
|
||||
* 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);
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
/*-
|
||||
* BSD LICENSE
|
||||
*
|
||||
* Copyright (C) 2008-2012 Daisuke Aoyama <aoyama@peach.ne.jp>.
|
||||
* 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_ */
|
@ -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"
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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 */
|
||||
|
@ -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 *
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user