Commit 708ed4fb authored by Jacek Kalwas's avatar Jacek Kalwas Committed by Tomasz Zawadzki
Browse files

nvmf: pass listen done cb to transport specific code



This would allow to respond for add listener rpc request even
when there are async calls in transport specific function.

Signed-off-by: default avatarJacek Kalwas <jacek.kalwas@intel.com>
Change-Id: I94a9f45b7ba9e8d46a60ae3785953cea12554732
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/479511


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com>
Community-CI: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarAnil Veerabhadrappa <anil.veerabhadrappa@broadcom.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
parent 7cd56fb3
Loading
Loading
Loading
Loading
+16 −10
Original line number Diff line number Diff line
@@ -122,6 +122,14 @@ struct spdk_nvmf_transport_poll_group_stat {
 */
typedef void (*new_qpair_fn)(struct spdk_nvmf_qpair *qpair, void *cb_arg);

/**
 * Function to be called once the target is listening.
 *
 * \param ctx Context argument passed to this function.
 * \param status 0 if it completed successfully, or negative errno if it failed.
 */
typedef void (*spdk_nvmf_tgt_listen_done_fn)(void *ctx, int status);

struct spdk_nvmf_transport_ops {
	/**
	 * Transport name
@@ -153,7 +161,9 @@ struct spdk_nvmf_transport_ops {
	  * provided. This may be called multiple times.
	  */
	int (*listen)(struct spdk_nvmf_transport *transport,
		      const struct spdk_nvme_transport_id *trid);
		      const struct spdk_nvme_transport_id *trid,
		      spdk_nvmf_tgt_listen_done_fn cb_fn,
		      void *cb_arg);

	/**
	  * Stop accepting new connections at the given address.
@@ -329,14 +339,6 @@ struct spdk_nvmf_tgt *spdk_nvmf_get_next_tgt(struct spdk_nvmf_tgt *prev);
 */
void spdk_nvmf_tgt_write_config_json(struct spdk_json_write_ctx *w, struct spdk_nvmf_tgt *tgt);

/**
 * Function to be called once the target is listening.
 *
 * \param ctx Context argument passed to this function.
 * \param status 0 if it completed successfully, or negative errno if it failed.
 */
typedef void (*spdk_nvmf_tgt_listen_done_fn)(void *ctx, int status);

/**
 * Begin accepting new connections at the address provided.
 *
@@ -1083,12 +1085,16 @@ void spdk_nvmf_tgt_add_transport(struct spdk_nvmf_tgt *tgt,
 *
 * \param transport The transport to add listener to
 * \param trid Address to listen at
 * \param cb_fn A callback that will be called once the listener is created
 * \param cb_arg A context argument passed to cb_fn.
 *
 * \return int. 0 if it completed successfully, or negative errno if it failed.
 */

int spdk_nvmf_transport_listen(struct spdk_nvmf_transport *transport,
			       const struct spdk_nvme_transport_id *trid);
			       const struct spdk_nvme_transport_id *trid,
			       spdk_nvmf_tgt_listen_done_fn cb_fn,
			       void *cb_arg);

/**
 * Write NVMe-oF target's transport configurations into provided JSON context.
+5 −1
Original line number Diff line number Diff line
@@ -1924,8 +1924,12 @@ nvmf_fc_destroy(struct spdk_nvmf_transport *transport)

static int
nvmf_fc_listen(struct spdk_nvmf_transport *transport,
	       const struct spdk_nvme_transport_id *trid)
	       const struct spdk_nvme_transport_id *trid,
	       spdk_nvmf_tgt_listen_done_fn cb_fn,
	       void *cb_arg)
{
	cb_fn(cb_arg, 0);

	return 0;
}

+1 −5
Original line number Diff line number Diff line
@@ -563,16 +563,12 @@ spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
		return;
	}

	rc = spdk_nvmf_transport_listen(transport, trid);
	rc = spdk_nvmf_transport_listen(transport, trid, cb_fn, cb_arg);
	if (rc < 0) {
		SPDK_ERRLOG("Unable to listen on address '%s'\n", trid->traddr);
		cb_fn(cb_arg, rc);
		return;
	}

	tgt->discovery_genctr++;

	cb_fn(cb_arg, 0);
}

struct spdk_nvmf_tgt_add_transport_ctx {
+4 −1
Original line number Diff line number Diff line
@@ -2623,7 +2623,9 @@ spdk_nvmf_rdma_trid_from_cm_id(struct rdma_cm_id *id,

static int
spdk_nvmf_rdma_listen(struct spdk_nvmf_transport *transport,
		      const struct spdk_nvme_transport_id *trid)
		      const struct spdk_nvme_transport_id *trid,
		      spdk_nvmf_tgt_listen_done_fn cb_fn,
		      void *cb_arg)
{
	struct spdk_nvmf_rdma_transport	*rtransport;
	struct spdk_nvmf_rdma_device	*device;
@@ -2746,6 +2748,7 @@ spdk_nvmf_rdma_listen(struct spdk_nvmf_transport *transport,
success:
	port->ref++;
	pthread_mutex_unlock(&rtransport->lock);
	cb_fn(cb_arg, 0);
	return 0;
}

+1 −0
Original line number Diff line number Diff line
@@ -779,6 +779,7 @@ spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
	listener->transport = transport;

	TAILQ_INSERT_HEAD(&subsystem->listeners, listener, link);
	subsystem->tgt->discovery_genctr++;

	return 0;
}
Loading