Commit 62e98dca authored by Jacek Kalwas's avatar Jacek Kalwas Committed by Tomasz Zawadzki
Browse files

nvme/tcp: add tcp_connect_timeout_ms opt

For rationale see previous patches:
https://review.spdk.io/c/spdk/spdk/+/25795
https://review.spdk.io/c/spdk/spdk/+/25794



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


Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz@tzawadzki.com>
parent af36a865
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4098,6 +4098,7 @@ rdma_cm_event_timeout_ms | Optional | number | Time to wait for RDMA CM e
dhchap_digests             | Optional | list        | List of allowed DH-HMAC-CHAP digests.
dhchap_dhgroups            | Optional | list        | List of allowed DH-HMAC-CHAP DH groups.
rdma_umr_per_io            | Optional | boolean     | Enable/disable scatter-gather UMR per IO in RDMA transport if supported by system
tcp_connect_timeout_ms     | Optional | number      | Time to wait until TCP connection is done. Default: 0 (no timeout).

#### Example

+4 −1
Original line number Diff line number Diff line
@@ -97,11 +97,14 @@ struct spdk_bdev_nvme_opts {
	uint32_t rdma_srq_size;
	uint32_t rdma_max_cq_size;
	uint16_t rdma_cm_event_timeout_ms;
	/* Hole at byte 110-111. */
	/* Hole at bytes 110-111. */
	uint8_t reserved110[2];
	uint32_t dhchap_digests;
	uint32_t dhchap_dhgroups;
	bool rdma_umr_per_io;
	/* Hole at bytes 121-123. */
	uint8_t reserved121[3];
	uint32_t tcp_connect_timeout_ms;
};
SPDK_STATIC_ASSERT(sizeof(struct spdk_bdev_nvme_opts) == 128, "Incorrect size");

+9 −1
Original line number Diff line number Diff line
@@ -4762,8 +4762,16 @@ struct spdk_nvme_transport_opts {
	 * Configure UMR per IO request if supported by the system
	 */
	bool rdma_umr_per_io;

	/* Hole at byte 23. */
	uint8_t reserved23;

	/**
	 * Time in msec to wait until connection is done (0 = no timeout).
	 */
	uint32_t tcp_connect_timeout_ms;
};
SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_transport_opts) == 24, "Incorrect size");
SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_transport_opts) == 32, "Incorrect size");

/**
 * Get the current NVMe transport options.
+3 −0
Original line number Diff line number Diff line
@@ -2279,6 +2279,9 @@ nvme_tcp_qpair_connect_sock(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpai
	if (ctrlr->opts.transport_ack_timeout) {
		opts.ack_timeout = 1ULL << ctrlr->opts.transport_ack_timeout;
	}

	opts.connect_timeout = g_spdk_nvme_transport_opts.tcp_connect_timeout_ms;

	if (sock_impl_name) {
		opts.impl_opts = &impl_opts;
		opts.impl_opts_size = sizeof(impl_opts);
+9 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ struct spdk_nvme_transport_opts g_spdk_nvme_transport_opts = {
	.rdma_max_cq_size = 0,
	.rdma_cm_event_timeout_ms = 1000,
	.rdma_umr_per_io = false,
	.tcp_connect_timeout_ms = 0,
};

const struct spdk_nvme_transport *
@@ -901,10 +902,11 @@ spdk_nvme_transport_get_opts(struct spdk_nvme_transport_opts *opts, size_t opts_
	SET_FIELD(rdma_max_cq_size);
	SET_FIELD(rdma_cm_event_timeout_ms);
	SET_FIELD(rdma_umr_per_io);
	SET_FIELD(tcp_connect_timeout_ms);

	/* Do not remove this statement, you should always update this statement when you adding a new field,
	 * and do not forget to add the SET_FIELD statement for your added field. */
	SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_transport_opts) == 24, "Incorrect size");
	SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_transport_opts) == 32, "Incorrect size");

#undef SET_FIELD
}
@@ -931,6 +933,12 @@ spdk_nvme_transport_set_opts(const struct spdk_nvme_transport_opts *opts, size_t
	SET_FIELD(rdma_max_cq_size);
	SET_FIELD(rdma_cm_event_timeout_ms);
	SET_FIELD(rdma_umr_per_io);
	SET_FIELD(tcp_connect_timeout_ms);

	if (g_spdk_nvme_transport_opts.tcp_connect_timeout_ms > INT_MAX) {
		SPDK_ERRLOG("tcp_connect_timeout_ms opt cannot exceed INT_MAX\n");
		return -EINVAL;
	}

	g_spdk_nvme_transport_opts.opts_size = opts->opts_size;

Loading