nvmf: Add public interface of remove ns from subsystem.
Change-Id: I9c2746dd54a13f3dae0ac2bab1d5fced931e8591 Signed-off-by: Cunyin Chang <cunyin.chang@intel.com> Reviewed-on: https://review.gerrithub.io/391699 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
304d851a5d
commit
7f5864be20
@ -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.
|
||||
*
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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,
|
||||
|
@ -98,6 +98,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…
Reference in New Issue
Block a user