lib/iscsi: Send message to add connection to poll group even at startup

The next patch will create a SPDK thread for each poll group at
startup. Hence iSCSI configuration management will be done by
different thread from these poll group threads.

Hence send message explicitly to add connection to poll group even
at startup. We can do this for the current master branch.

Remove some code related with SPDK thread framework from unit tests
for iSCSI portal group because thread management is moved to
connection.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I40cacdb2066f65866f7ef83cf3b3e4e8b8cd322e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/489
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Shuhei Matsumoto 2020-01-21 01:27:50 -05:00 committed by Tomasz Zawadzki
parent f8cbdf2c81
commit 5adeda4807
4 changed files with 19 additions and 53 deletions

View File

@ -197,6 +197,14 @@ iscsi_poll_group_remove_conn(struct spdk_iscsi_poll_group *pg, struct spdk_iscsi
STAILQ_REMOVE(&pg->connections, conn, spdk_iscsi_conn, link); STAILQ_REMOVE(&pg->connections, conn, spdk_iscsi_conn, link);
} }
static void
iscsi_conn_start(void *ctx)
{
struct spdk_iscsi_conn *conn = ctx;
iscsi_poll_group_add_conn(conn->pg, conn);
}
int int
spdk_iscsi_conn_construct(struct spdk_iscsi_portal *portal, spdk_iscsi_conn_construct(struct spdk_iscsi_portal *portal,
struct spdk_sock *sock) struct spdk_sock *sock)
@ -284,13 +292,17 @@ spdk_iscsi_conn_construct(struct spdk_iscsi_portal *portal,
SPDK_DEBUGLOG(SPDK_LOG_ISCSI, "Launching connection on acceptor thread\n"); SPDK_DEBUGLOG(SPDK_LOG_ISCSI, "Launching connection on acceptor thread\n");
conn->pending_task_cnt = 0; conn->pending_task_cnt = 0;
/* Get the acceptor poll group */ /* Get the first poll group. */
pg = portal->acceptor_pg; pg = TAILQ_FIRST(&g_spdk_iscsi.poll_group_head);
if (pg == NULL) {
assert(spdk_io_channel_get_thread(spdk_io_channel_from_ctx(pg)) == spdk_get_thread()); SPDK_ERRLOG("There is no poll group.\n");
assert(false);
goto error_return;
}
conn->pg = pg; conn->pg = pg;
iscsi_poll_group_add_conn(pg, conn); spdk_thread_send_msg(spdk_io_channel_get_thread(spdk_io_channel_from_ctx(pg)),
iscsi_conn_start, conn);
return 0; return 0;
error_return: error_return:

View File

@ -82,30 +82,6 @@ iscsi_portal_accept(void *arg)
return count; return count;
} }
static void
iscsi_acceptor_start(struct spdk_iscsi_portal *p)
{
struct spdk_io_channel *ch;
p->acceptor_poller = spdk_poller_register(iscsi_portal_accept, p, ACCEPT_TIMEOUT_US);
ch = spdk_get_io_channel(&g_spdk_iscsi);
assert(ch != NULL);
p->acceptor_pg = spdk_io_channel_get_ctx(ch);
}
static void
iscsi_acceptor_stop(struct spdk_iscsi_portal *p)
{
struct spdk_io_channel *ch;
spdk_poller_unregister(&p->acceptor_poller);
assert(p->acceptor_pg != NULL);
ch = spdk_io_channel_from_ctx(p->acceptor_pg);
spdk_put_io_channel(ch);
}
static struct spdk_iscsi_portal * static struct spdk_iscsi_portal *
iscsi_portal_find_by_addr(const char *host, const char *port) iscsi_portal_find_by_addr(const char *host, const char *port)
{ {
@ -222,7 +198,7 @@ iscsi_portal_open(struct spdk_iscsi_portal *p)
* the requests will be queued by the nonzero backlog of the socket * the requests will be queued by the nonzero backlog of the socket
* or resend by TCP. * or resend by TCP.
*/ */
iscsi_acceptor_start(p); p->acceptor_poller = spdk_poller_register(iscsi_portal_accept, p, ACCEPT_TIMEOUT_US);
return 0; return 0;
} }
@ -233,7 +209,7 @@ iscsi_portal_close(struct spdk_iscsi_portal *p)
if (p->sock) { if (p->sock) {
SPDK_DEBUGLOG(SPDK_LOG_ISCSI, "close portal (%s, %s)\n", SPDK_DEBUGLOG(SPDK_LOG_ISCSI, "close portal (%s, %s)\n",
p->host, p->port); p->host, p->port);
iscsi_acceptor_stop(p); spdk_poller_unregister(&p->acceptor_poller);
spdk_sock_close(&p->sock); spdk_sock_close(&p->sock);
} }
} }

View File

@ -47,7 +47,6 @@ struct spdk_iscsi_portal {
char port[MAX_PORTAL_PORT + 1]; char port[MAX_PORTAL_PORT + 1];
struct spdk_sock *sock; struct spdk_sock *sock;
struct spdk_poller *acceptor_poller; struct spdk_poller *acceptor_poller;
struct spdk_iscsi_poll_group *acceptor_pg;
TAILQ_ENTRY(spdk_iscsi_portal) per_pg_tailq; TAILQ_ENTRY(spdk_iscsi_portal) per_pg_tailq;
TAILQ_ENTRY(spdk_iscsi_portal) g_tailq; TAILQ_ENTRY(spdk_iscsi_portal) g_tailq;
}; };

View File

@ -280,17 +280,6 @@ portal_grp_register_twice_case(void)
CU_ASSERT(TAILQ_EMPTY(&g_spdk_iscsi.portal_head)); CU_ASSERT(TAILQ_EMPTY(&g_spdk_iscsi.portal_head));
} }
static int
ut_poll_group_create(void *io_device, void *ctx_buf)
{
return 0;
}
static void
ut_poll_group_destroy(void *io_device, void *ctx_buf)
{
}
static void static void
portal_grp_add_delete_case(void) portal_grp_add_delete_case(void)
{ {
@ -305,9 +294,6 @@ portal_grp_add_delete_case(void)
allocate_threads(1); allocate_threads(1);
set_thread(0); set_thread(0);
spdk_io_device_register(&g_spdk_iscsi, ut_poll_group_create, ut_poll_group_destroy,
sizeof(struct spdk_iscsi_poll_group), "ut_portal_grp");
/* internal of iscsi_create_portal_group */ /* internal of iscsi_create_portal_group */
pg1 = spdk_iscsi_portal_grp_create(1); pg1 = spdk_iscsi_portal_grp_create(1);
CU_ASSERT(pg1 != NULL); CU_ASSERT(pg1 != NULL);
@ -337,8 +323,6 @@ portal_grp_add_delete_case(void)
CU_ASSERT(TAILQ_EMPTY(&g_spdk_iscsi.portal_head)); CU_ASSERT(TAILQ_EMPTY(&g_spdk_iscsi.portal_head));
CU_ASSERT(TAILQ_EMPTY(&g_spdk_iscsi.pg_head)); CU_ASSERT(TAILQ_EMPTY(&g_spdk_iscsi.pg_head));
spdk_io_device_unregister(&g_spdk_iscsi, NULL);
free_threads(); free_threads();
} }
@ -356,9 +340,6 @@ portal_grp_add_delete_twice_case(void)
allocate_threads(1); allocate_threads(1);
set_thread(0); set_thread(0);
spdk_io_device_register(&g_spdk_iscsi, ut_poll_group_create, ut_poll_group_destroy,
sizeof(struct spdk_iscsi_poll_group), "ut_portal_grp");
/* internal of iscsi_create_portal_group related */ /* internal of iscsi_create_portal_group related */
pg1 = spdk_iscsi_portal_grp_create(1); pg1 = spdk_iscsi_portal_grp_create(1);
CU_ASSERT(pg1 != NULL); CU_ASSERT(pg1 != NULL);
@ -403,8 +384,6 @@ portal_grp_add_delete_twice_case(void)
MOCK_CLEAR_P(spdk_sock_listen); MOCK_CLEAR_P(spdk_sock_listen);
spdk_io_device_unregister(&g_spdk_iscsi, NULL);
free_threads(); free_threads();
} }