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 spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_bdev *bdev,
|
||||||
uint32_t nsid);
|
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.
|
* 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;
|
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
|
int
|
||||||
spdk_nvmf_poll_group_remove_subsystem(struct spdk_nvmf_poll_group *group,
|
spdk_nvmf_poll_group_remove_subsystem(struct spdk_nvmf_poll_group *group,
|
||||||
struct spdk_nvmf_subsystem *subsystem)
|
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,
|
int spdk_nvmf_poll_group_add_ns(struct spdk_nvmf_poll_group *group,
|
||||||
struct spdk_nvmf_subsystem *subsystem,
|
struct spdk_nvmf_subsystem *subsystem,
|
||||||
struct spdk_nvmf_ns *ns);
|
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);
|
void spdk_nvmf_request_exec(struct spdk_nvmf_request *req);
|
||||||
int spdk_nvmf_request_complete(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);
|
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;
|
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
|
static void
|
||||||
spdk_nvmf_subsystem_add_ns_done(struct spdk_io_channel_iter *i, int status)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
spdk_nvmf_poll_group_remove_ns(struct spdk_nvmf_poll_group *group,
|
||||||
|
struct spdk_nvmf_ns *ns)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
spdk_nvmf_poll_group_add_ns(struct spdk_nvmf_poll_group *group,
|
spdk_nvmf_poll_group_add_ns(struct spdk_nvmf_poll_group *group,
|
||||||
struct spdk_nvmf_subsystem *subsystem,
|
struct spdk_nvmf_subsystem *subsystem,
|
||||||
|
@ -98,6 +98,13 @@ spdk_nvmf_poll_group_remove_subsystem(struct spdk_nvmf_poll_group *group,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
spdk_nvmf_poll_group_remove_ns(struct spdk_nvmf_poll_group *group,
|
||||||
|
struct spdk_nvmf_ns *ns)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
spdk_nvmf_poll_group_add_ns(struct spdk_nvmf_poll_group *group,
|
spdk_nvmf_poll_group_add_ns(struct spdk_nvmf_poll_group *group,
|
||||||
struct spdk_nvmf_subsystem *subsystem,
|
struct spdk_nvmf_subsystem *subsystem,
|
||||||
|
Loading…
Reference in New Issue
Block a user