nvmf: Getting or setting the allow_any_host parameter no longer requires
a pause This now also takes a lock instead of requiring a pause of the whole subsystem. Signed-off-by: Ben Walker <benjamin.walker@intel.com> Change-Id: I7de174f3f56d2b3767e723387c4f2257107d8b19 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4581 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
parent
d67119d8bd
commit
eda91a7b07
@ -487,8 +487,6 @@ int spdk_nvmf_subsystem_remove_host(struct spdk_nvmf_subsystem *subsystem, const
|
|||||||
/**
|
/**
|
||||||
* Set whether a subsystem should allow any host or only hosts in the allowed list.
|
* Set whether a subsystem should allow any host or only hosts in the allowed list.
|
||||||
*
|
*
|
||||||
* May only be performed on subsystems in the PAUSED or INACTIVE states.
|
|
||||||
*
|
|
||||||
* \param subsystem Subsystem to modify.
|
* \param subsystem Subsystem to modify.
|
||||||
* \param allow_any_host true to allow any host to connect to this subsystem,
|
* \param allow_any_host true to allow any host to connect to this subsystem,
|
||||||
* or false to enforce the whitelist configured with spdk_nvmf_subsystem_add_host().
|
* or false to enforce the whitelist configured with spdk_nvmf_subsystem_add_host().
|
||||||
|
@ -275,7 +275,7 @@ struct spdk_nvmf_subsystem {
|
|||||||
|
|
||||||
TAILQ_HEAD(, spdk_nvmf_ctrlr) ctrlrs;
|
TAILQ_HEAD(, spdk_nvmf_ctrlr) ctrlrs;
|
||||||
|
|
||||||
/* A mutex used to protect the hosts list. Unlike the namespace
|
/* A mutex used to protect the hosts list and allow_any_host flag. Unlike the namespace
|
||||||
* array, this list is not used on the I/O path (it's needed for handling things like
|
* array, this list is not used on the I/O path (it's needed for handling things like
|
||||||
* the CONNECT command), so use a mutex to protect it instead of requiring the subsystem
|
* the CONNECT command), so use a mutex to protect it instead of requiring the subsystem
|
||||||
* state to be paused. This removes the requirement to pause the subsystem when hosts
|
* state to be paused. This removes the requirement to pause the subsystem when hosts
|
||||||
|
@ -763,12 +763,9 @@ spdk_nvmf_subsystem_remove_host(struct spdk_nvmf_subsystem *subsystem, const cha
|
|||||||
int
|
int
|
||||||
spdk_nvmf_subsystem_set_allow_any_host(struct spdk_nvmf_subsystem *subsystem, bool allow_any_host)
|
spdk_nvmf_subsystem_set_allow_any_host(struct spdk_nvmf_subsystem *subsystem, bool allow_any_host)
|
||||||
{
|
{
|
||||||
if (!(subsystem->state == SPDK_NVMF_SUBSYSTEM_INACTIVE ||
|
pthread_mutex_lock(&subsystem->mutex);
|
||||||
subsystem->state == SPDK_NVMF_SUBSYSTEM_PAUSED)) {
|
|
||||||
return -EAGAIN;
|
|
||||||
}
|
|
||||||
|
|
||||||
subsystem->flags.allow_any_host = allow_any_host;
|
subsystem->flags.allow_any_host = allow_any_host;
|
||||||
|
pthread_mutex_unlock(&subsystem->mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -776,7 +773,19 @@ spdk_nvmf_subsystem_set_allow_any_host(struct spdk_nvmf_subsystem *subsystem, bo
|
|||||||
bool
|
bool
|
||||||
spdk_nvmf_subsystem_get_allow_any_host(const struct spdk_nvmf_subsystem *subsystem)
|
spdk_nvmf_subsystem_get_allow_any_host(const struct spdk_nvmf_subsystem *subsystem)
|
||||||
{
|
{
|
||||||
return subsystem->flags.allow_any_host;
|
bool allow_any_host;
|
||||||
|
struct spdk_nvmf_subsystem *sub;
|
||||||
|
|
||||||
|
/* Technically, taking the mutex modifies data in the subsystem. But the const
|
||||||
|
* is still important to convey that this doesn't mutate any other data. Cast
|
||||||
|
* it away to work around this. */
|
||||||
|
sub = (struct spdk_nvmf_subsystem *)subsystem;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&sub->mutex);
|
||||||
|
allow_any_host = sub->flags.allow_any_host;
|
||||||
|
pthread_mutex_unlock(&sub->mutex);
|
||||||
|
|
||||||
|
return allow_any_host;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -788,11 +797,13 @@ spdk_nvmf_subsystem_host_allowed(struct spdk_nvmf_subsystem *subsystem, const ch
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pthread_mutex_lock(&subsystem->mutex);
|
||||||
|
|
||||||
if (subsystem->flags.allow_any_host) {
|
if (subsystem->flags.allow_any_host) {
|
||||||
|
pthread_mutex_unlock(&subsystem->mutex);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_lock(&subsystem->mutex);
|
|
||||||
allowed = nvmf_subsystem_find_host(subsystem, hostnqn) != NULL;
|
allowed = nvmf_subsystem_find_host(subsystem, hostnqn) != NULL;
|
||||||
pthread_mutex_unlock(&subsystem->mutex);
|
pthread_mutex_unlock(&subsystem->mutex);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user