Commit 0a04c076 authored by Jan Kryl's avatar Jan Kryl Committed by Tomasz Zawadzki
Browse files

nvmf: Add context parameter to new_qpair() callback



It can be useful for passing additional information about nvmf
target to a handler for new nvmf connections. Context can be
stored in globals as it is currently done in nvmf code. However
in case of multiple targets or languages where accessing global
state is challenging (i.e. Rust), this becomes inconvenient.

Change-Id: Ia6a2fdba4601531822b3e5fda7ac5ab89d46f6c5
Signed-off-by: default avatarJan Kryl <jan.kryl@mayadata.io>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/469263


Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarSeth Howell <seth.howell@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarSasha Kotchubievsky <sashakot@mellanox.com>
parent 6d2989fd
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -55,6 +55,10 @@ Three new header functions have also been added to help deal with multiple targe
`spdk_nvmf_get_first_target` takes no arguments and returns the first target in the global list.
`spdk_nvmf_get_next_tgt` takes a target pointer as an argument and returns the next one in the global list.

The `spdk_nvmf_tgt_accept` takes additional argument allowing to pass arbitrary context
information to the `new_qpair` callback. This will simplify the code when having multiple
nvmf targets or when retrieving the context information from globals is not suitable.

### bdev

A new spdk_bdev_open_ext function has been added and spdk_bdev_open function has been deprecated.
+4 −2
Original line number Diff line number Diff line
@@ -218,8 +218,9 @@ void spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
 * Function to be called for each newly discovered qpair.
 *
 * \param qpair The newly discovered qpair.
 * \param cb_arg A context argument passed to this function.
 */
typedef void (*new_qpair_fn)(struct spdk_nvmf_qpair *qpair);
typedef void (*new_qpair_fn)(struct spdk_nvmf_qpair *qpair, void *cb_arg);

/**
 * Poll the target for incoming connections.
@@ -230,8 +231,9 @@ typedef void (*new_qpair_fn)(struct spdk_nvmf_qpair *qpair);
 *
 * \param tgt The target associated with the listen address.
 * \param cb_fn Called for each newly discovered qpair.
 * \param cb_arg A context argument passed to cb_fn.
 */
void spdk_nvmf_tgt_accept(struct spdk_nvmf_tgt *tgt, new_qpair_fn cb_fn);
void spdk_nvmf_tgt_accept(struct spdk_nvmf_tgt *tgt, new_qpair_fn cb_fn, void *cb_arg);

/**
 * Create a poll group.
+1 −1
Original line number Diff line number Diff line
@@ -1937,7 +1937,7 @@ nvmf_fc_stop_listen(struct spdk_nvmf_transport *transport,
}

static void
nvmf_fc_accept(struct spdk_nvmf_transport *transport, new_qpair_fn cb_fn)
nvmf_fc_accept(struct spdk_nvmf_transport *transport, new_qpair_fn cb_fn, void *cb_arg)
{
	struct spdk_nvmf_fc_port *fc_port = NULL;
	static bool start_lld = false;
+1 −1
Original line number Diff line number Diff line
@@ -595,7 +595,7 @@ nvmf_fc_ls_add_conn_to_poller(

	/* Let the nvmf_tgt decide which pollgroup to use. */
	fc_conn->create_opd = opd;
	fc_port->new_qp_cb(&fc_conn->qpair);
	fc_port->new_qp_cb(&fc_conn->qpair, fc_port->new_qp_arg);
}

/* Delete association functions */
+2 −2
Original line number Diff line number Diff line
@@ -677,12 +677,12 @@ spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, enum spdk_nvme_transport_
}

void
spdk_nvmf_tgt_accept(struct spdk_nvmf_tgt *tgt, new_qpair_fn cb_fn)
spdk_nvmf_tgt_accept(struct spdk_nvmf_tgt *tgt, new_qpair_fn cb_fn, void *cb_arg)
{
	struct spdk_nvmf_transport *transport, *tmp;

	TAILQ_FOREACH_SAFE(transport, &tgt->transports, link, tmp) {
		spdk_nvmf_transport_accept(transport, cb_fn);
		spdk_nvmf_transport_accept(transport, cb_fn, cb_arg);
	}
}

Loading