Commit c06b0c79 authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Jim Harris
Browse files

nvmf: make allow_any_host its own byte



This field can be modified from multiple threads, so it's protected by a
mutex.  However, it was defined as a single bit in a uin8t_t bitfield with
fields that could be accessed without taking that mutex, which could
lead to issues when multiple threads modified bits in that uint8_t.

Suggested-by: default avatarJim Harris <jim.harris@samsung.com>
Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: Ib66e0b1f298455ff518c24895364269d3d0bb5f3
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22898


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
parent 29773365
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -281,12 +281,13 @@ struct spdk_nvmf_subsystem {

	uint16_t					next_cntlid;
	struct {
		uint8_t					allow_any_host : 1;
		uint8_t					allow_any_listener : 1;
		uint8_t					ana_reporting : 1;
		uint8_t					reserved : 5;
		uint8_t					reserved : 6;
	} flags;

	bool						allow_any_host;

	bool						destroying;
	bool						async_destroy;

+3 −3
Original line number Diff line number Diff line
@@ -1169,7 +1169,7 @@ int
spdk_nvmf_subsystem_set_allow_any_host(struct spdk_nvmf_subsystem *subsystem, bool allow_any_host)
{
	pthread_mutex_lock(&subsystem->mutex);
	subsystem->flags.allow_any_host = allow_any_host;
	subsystem->allow_any_host = allow_any_host;
	if (!TAILQ_EMPTY(&subsystem->listeners)) {
		nvmf_update_discovery_log(subsystem->tgt, NULL);
	}
@@ -1190,7 +1190,7 @@ spdk_nvmf_subsystem_get_allow_any_host(const struct spdk_nvmf_subsystem *subsyst
	sub = (struct spdk_nvmf_subsystem *)subsystem;

	pthread_mutex_lock(&sub->mutex);
	allow_any_host = sub->flags.allow_any_host;
	allow_any_host = sub->allow_any_host;
	pthread_mutex_unlock(&sub->mutex);

	return allow_any_host;
@@ -1207,7 +1207,7 @@ spdk_nvmf_subsystem_host_allowed(struct spdk_nvmf_subsystem *subsystem, const ch

	pthread_mutex_lock(&subsystem->mutex);

	if (subsystem->flags.allow_any_host) {
	if (subsystem->allow_any_host) {
		pthread_mutex_unlock(&subsystem->mutex);
		return true;
	}
+1 −1
Original line number Diff line number Diff line
@@ -430,7 +430,7 @@ test_discovery_log_with_filters(void)

	subsystem = spdk_nvmf_subsystem_create(&tgt, "nqn.2016-06.io.spdk:subsystem1",
					       SPDK_NVMF_SUBTYPE_NVME, 0);
	subsystem->flags.allow_any_host = true;
	subsystem->allow_any_host = true;
	SPDK_CU_ASSERT_FATAL(subsystem != NULL);

	TAILQ_INIT(&tgt.referrals);