Commit 5adeda48 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

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: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I40cacdb2066f65866f7ef83cf3b3e4e8b8cd322e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/489


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent f8cbdf2c
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -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:
+2 −26
Original line number Diff line number Diff line
@@ -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);
	}
}
+0 −1
Original line number Diff line number Diff line
@@ -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;
};
+0 −21
Original line number Diff line number Diff line
@@ -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();
}