Commit 7f5864be authored by Cunyin Chang's avatar Cunyin Chang Committed by Jim Harris
Browse files

nvmf: Add public interface of remove ns from subsystem.



Change-Id: I9c2746dd54a13f3dae0ac2bab1d5fced931e8591
Signed-off-by: default avatarCunyin Chang <cunyin.chang@intel.com>
Reviewed-on: https://review.gerrithub.io/391699


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent 304d851a
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -286,6 +286,16 @@ const struct spdk_nvme_transport_id *spdk_nvmf_listener_get_trid(
uint32_t spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_bdev *bdev,
				    uint32_t nsid);

/**
 * Remove a namespace from a subsytem.
 *
 * \param subsystem Subsystem the namespace belong to.
 * \param nsid Namespace ID to be removed.
 *
 * \return 0 on success or -1 on failure.
 */
int spdk_nvmf_subsystem_remove_ns(struct spdk_nvmf_subsystem *subsystem, uint32_t nsid);

/**
 * Return the first allocated namespace in a subsystem.
 *
+17 −0
Original line number Diff line number Diff line
@@ -457,6 +457,23 @@ spdk_nvmf_poll_group_add_subsystem(struct spdk_nvmf_poll_group *group,
	return 0;
}

int
spdk_nvmf_poll_group_remove_ns(struct spdk_nvmf_poll_group *group,
			       struct spdk_nvmf_ns *ns)
{
	struct spdk_nvmf_subsystem_poll_group *sgroup;
	uint32_t nsid = ns->id - 1;

	sgroup = &group->sgroups[ns->subsystem->id];

	if (sgroup->channels[nsid]) {
		spdk_put_io_channel(sgroup->channels[nsid]);
		sgroup->channels[nsid] = NULL;
	}

	return 0;
}

int
spdk_nvmf_poll_group_remove_subsystem(struct spdk_nvmf_poll_group *group,
				      struct spdk_nvmf_subsystem *subsystem)
+2 −1
Original line number Diff line number Diff line
@@ -220,7 +220,8 @@ int spdk_nvmf_poll_group_remove_subsystem(struct spdk_nvmf_poll_group *group,
int spdk_nvmf_poll_group_add_ns(struct spdk_nvmf_poll_group *group,
				struct spdk_nvmf_subsystem *subsystem,
				struct spdk_nvmf_ns *ns);

int spdk_nvmf_poll_group_remove_ns(struct spdk_nvmf_poll_group *group,
				   struct spdk_nvmf_ns *ns);
void spdk_nvmf_request_exec(struct spdk_nvmf_request *req);
int spdk_nvmf_request_complete(struct spdk_nvmf_request *req);
int spdk_nvmf_request_abort(struct spdk_nvmf_request *req);
+44 −0
Original line number Diff line number Diff line
@@ -426,6 +426,50 @@ spdk_nvmf_listener_get_trid(struct spdk_nvmf_listener *listener)
	return &listener->trid;
}

static void
spdk_nvmf_remove_ns_done(struct spdk_io_channel_iter *i, int status)
{
	struct spdk_nvmf_ns *ns = spdk_io_channel_iter_get_ctx(i);
	struct spdk_nvmf_subsystem *subsystem = ns->subsystem;

	spdk_bdev_close(ns->desc);
	ns->allocated = false;
	subsystem->num_allocated_nsid--;
}

static void
spdk_nvmf_subsystem_remove_ns_from_poll_group(struct spdk_io_channel_iter *i)
{
	struct spdk_nvmf_ns *ns = spdk_io_channel_iter_get_ctx(i);
	struct spdk_io_channel *ch = spdk_io_channel_iter_get_channel(i);
	struct spdk_nvmf_poll_group *group = spdk_io_channel_get_ctx(ch);
	int rc;

	rc = spdk_nvmf_poll_group_remove_ns(group, ns);
	spdk_for_each_channel_continue(i, rc);
}

int
spdk_nvmf_subsystem_remove_ns(struct spdk_nvmf_subsystem *subsystem, uint32_t nsid)
{
	struct spdk_nvmf_ns *ns;

	if (nsid == 0 || nsid > subsystem->max_nsid) {
		return -1;
	}

	ns = &subsystem->ns[nsid - 1];
	if (ns->allocated == false) {
		return -1;
	}

	spdk_for_each_channel(ns->subsystem->tgt,
			      spdk_nvmf_subsystem_remove_ns_from_poll_group,
			      ns,
			      spdk_nvmf_remove_ns_done);
	return 0;
}

static void
spdk_nvmf_subsystem_add_ns_done(struct spdk_io_channel_iter *i, int status)
{
+7 −0
Original line number Diff line number Diff line
@@ -141,6 +141,13 @@ spdk_nvmf_poll_group_remove_subsystem(struct spdk_nvmf_poll_group *group,
	return 0;
}

int
spdk_nvmf_poll_group_remove_ns(struct spdk_nvmf_poll_group *group,
			       struct spdk_nvmf_ns *ns)
{
	return 0;
}

int
spdk_nvmf_poll_group_add_ns(struct spdk_nvmf_poll_group *group,
			    struct spdk_nvmf_subsystem *subsystem,
Loading