Commit 555c9621 authored by Jacek Kalwas's avatar Jacek Kalwas Committed by Tomasz Zawadzki
Browse files

nvme/tcp: use async version of sock connect



Change-Id: I8a7a812ae56418f27a4f97ccc66f5d36e39ac01e
Signed-off-by: default avatarJacek Kalwas <jacek.kalwas@nutanix.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26045


Reviewed-by: default avatarTomasz Zawadzki <tomasz@tzawadzki.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Community-CI: Mellanox Build Bot
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
parent 29be96d7
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -2220,6 +2220,17 @@ nvme_tcp_qpair_icreq_send(struct nvme_tcp_qpair *tqpair)
	return 0;
}

static void
nvme_tcp_sock_connect_cb_fn(void *cb_arg, int status)
{
	struct nvme_tcp_qpair *tqpair = cb_arg;

	if (status < 0) {
		SPDK_ERRLOG("sock connection error of tqpair=%p with %d (%s)\n", tqpair, status,
			    spdk_strerror(abs(status)));
	}
}

static int
nvme_tcp_qpair_connect_sock(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair)
{
@@ -2301,7 +2312,9 @@ nvme_tcp_qpair_connect_sock(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpai
		opts.impl_opts = &impl_opts;
		opts.impl_opts_size = sizeof(impl_opts);
	}
	tqpair->sock = spdk_sock_connect_ext(ctrlr->trid.traddr, port, sock_impl_name, &opts);

	tqpair->sock = spdk_sock_connect_async(ctrlr->trid.traddr, port, sock_impl_name, &opts,
					       nvme_tcp_sock_connect_cb_fn, tqpair);
	if (!tqpair->sock) {
		SPDK_ERRLOG("sock connection error of tqpair=%p with addr=%s, port=%ld\n",
			    tqpair, ctrlr->trid.traddr, port);
+9 −9
Original line number Diff line number Diff line
@@ -1031,12 +1031,12 @@ test_nvme_tcp_pdu_ch_handle(void)
			  struct spdk_nvme_tcp_common_pdu_hdr));
}

DEFINE_RETURN_MOCK(spdk_sock_connect_ext, struct spdk_sock *);
DEFINE_RETURN_MOCK(spdk_sock_connect_async, struct spdk_sock *);
struct spdk_sock *
spdk_sock_connect_ext(const char *ip, int port,
		      const char *_impl_name, struct spdk_sock_opts *opts)
spdk_sock_connect_async(const char *ip, int port, const char *_impl_name,
			struct spdk_sock_opts *opts, spdk_sock_connect_cb_fn cb_fn, void *cb_arg)
{
	HANDLE_RETURN_MOCK(spdk_sock_connect_ext);
	HANDLE_RETURN_MOCK(spdk_sock_connect_async);
	CU_ASSERT(port == 23);
	CU_ASSERT(opts->opts_size == sizeof(*opts));
	CU_ASSERT(opts->priority == 1);
@@ -1762,7 +1762,7 @@ test_nvme_tcp_ctrlr_construct(void)

	/* Transmit ACK timeout value exceeds max, expected to pass and using max */
	opts.transport_ack_timeout = NVME_TCP_CTRLR_MAX_TRANSPORT_ACK_TIMEOUT + 1;
	MOCK_SET(spdk_sock_connect_ext, (struct spdk_sock *)0xDEADBEEF);
	MOCK_SET(spdk_sock_connect_async, (struct spdk_sock *)0xDEADBEEF);
	ctrlr = nvme_tcp_ctrlr_construct(&trid, &opts, NULL);
	tctrlr = nvme_tcp_ctrlr(ctrlr);
	tqpair = nvme_tcp_qpair(tctrlr->ctrlr.adminq);
@@ -1801,11 +1801,11 @@ test_nvme_tcp_ctrlr_construct(void)

	/* Error connecting socket, expected to create Admin qpair failed */
	trid.adrfam = SPDK_NVMF_ADRFAM_IPV4;
	MOCK_SET(spdk_sock_connect_ext, NULL);
	MOCK_SET(spdk_sock_connect_async, NULL);
	ctrlr = nvme_tcp_ctrlr_construct(&trid, &opts, NULL);
	CU_ASSERT(ctrlr == NULL);

	MOCK_CLEAR(spdk_sock_connect_ext);
	MOCK_CLEAR(spdk_sock_connect_async);
}

static void
@@ -1834,7 +1834,7 @@ test_nvme_tcp_qpair_submit_request(void)

	/* Construct TCP Controller */
	opts.transport_ack_timeout = NVME_TCP_CTRLR_MAX_TRANSPORT_ACK_TIMEOUT + 1;
	MOCK_SET(spdk_sock_connect_ext, (struct spdk_sock *)0xDCADBEEF);
	MOCK_SET(spdk_sock_connect_async, (struct spdk_sock *)0xDCADBEEF);

	ctrlr = nvme_tcp_ctrlr_construct(&trid, &opts, NULL);
	CU_ASSERT(ctrlr != NULL);
@@ -1914,7 +1914,7 @@ test_nvme_tcp_qpair_submit_request(void)
	CU_ASSERT(rc == -EAGAIN);
	CU_ASSERT(tqpair->stats->queued_requests == 1);

	MOCK_CLEAR(spdk_sock_connect_ext);
	MOCK_CLEAR(spdk_sock_connect_async);
	free(tqpair->tcp_reqs);
	spdk_free(tqpair->send_pdus);
	free(tqpair);