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:
parent
f8cbdf2c81
commit
5adeda4807
@ -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);
|
||||
}
|
||||
|
||||
static void
|
||||
iscsi_conn_start(void *ctx)
|
||||
{
|
||||
struct spdk_iscsi_conn *conn = ctx;
|
||||
|
||||
iscsi_poll_group_add_conn(conn->pg, conn);
|
||||
}
|
||||
|
||||
int
|
||||
spdk_iscsi_conn_construct(struct spdk_iscsi_portal *portal,
|
||||
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");
|
||||
conn->pending_task_cnt = 0;
|
||||
|
||||
/* Get the acceptor poll group */
|
||||
pg = portal->acceptor_pg;
|
||||
|
||||
assert(spdk_io_channel_get_thread(spdk_io_channel_from_ctx(pg)) == spdk_get_thread());
|
||||
/* Get the first poll group. */
|
||||
pg = TAILQ_FIRST(&g_spdk_iscsi.poll_group_head);
|
||||
if (pg == NULL) {
|
||||
SPDK_ERRLOG("There is no poll group.\n");
|
||||
assert(false);
|
||||
goto error_return;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
error_return:
|
||||
|
@ -82,30 +82,6 @@ iscsi_portal_accept(void *arg)
|
||||
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 *
|
||||
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
|
||||
* or resend by TCP.
|
||||
*/
|
||||
iscsi_acceptor_start(p);
|
||||
p->acceptor_poller = spdk_poller_register(iscsi_portal_accept, p, ACCEPT_TIMEOUT_US);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -233,7 +209,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);
|
||||
iscsi_acceptor_stop(p);
|
||||
spdk_poller_unregister(&p->acceptor_poller);
|
||||
spdk_sock_close(&p->sock);
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +47,6 @@ struct spdk_iscsi_portal {
|
||||
char port[MAX_PORTAL_PORT + 1];
|
||||
struct spdk_sock *sock;
|
||||
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) g_tailq;
|
||||
};
|
||||
|
@ -280,17 +280,6 @@ portal_grp_register_twice_case(void)
|
||||
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
|
||||
portal_grp_add_delete_case(void)
|
||||
{
|
||||
@ -305,9 +294,6 @@ portal_grp_add_delete_case(void)
|
||||
allocate_threads(1);
|
||||
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 */
|
||||
pg1 = spdk_iscsi_portal_grp_create(1);
|
||||
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.pg_head));
|
||||
|
||||
spdk_io_device_unregister(&g_spdk_iscsi, NULL);
|
||||
|
||||
free_threads();
|
||||
}
|
||||
|
||||
@ -356,9 +340,6 @@ portal_grp_add_delete_twice_case(void)
|
||||
allocate_threads(1);
|
||||
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 */
|
||||
pg1 = spdk_iscsi_portal_grp_create(1);
|
||||
CU_ASSERT(pg1 != NULL);
|
||||
@ -403,8 +384,6 @@ portal_grp_add_delete_twice_case(void)
|
||||
|
||||
MOCK_CLEAR_P(spdk_sock_listen);
|
||||
|
||||
spdk_io_device_unregister(&g_spdk_iscsi, NULL);
|
||||
|
||||
free_threads();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user