nvmf: Group bool members of spdk_nvmf_subsystem into a bit field

This saves 2 bytes and allows it to pack nicely with the
changing state bool (which must remember separate for atomic
operations).

Change-Id: Ibb92ae3c74306e60385ae23d0aaf877f33a69095
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4553
Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
Ben Walker 2020-10-06 12:10:10 -07:00 committed by Tomasz Zawadzki
parent e1ef1e2434
commit 5e4e4bc485
4 changed files with 28 additions and 22 deletions

View File

@ -349,7 +349,7 @@ nvmf_ctrlr_create(struct spdk_nvmf_subsystem *subsystem,
} }
ctrlr->feat.async_event_configuration.bits.ns_attr_notice = 1; ctrlr->feat.async_event_configuration.bits.ns_attr_notice = 1;
if (ctrlr->subsys->ana_reporting) { if (ctrlr->subsys->flags.ana_reporting) {
ctrlr->feat.async_event_configuration.bits.ana_change_notice = 1; ctrlr->feat.async_event_configuration.bits.ana_change_notice = 1;
} }
ctrlr->feat.volatile_write_cache.bits.wce = 1; ctrlr->feat.volatile_write_cache.bits.wce = 1;
@ -540,7 +540,7 @@ _nvmf_ctrlr_add_io_qpair(void *ctx)
} }
/* If ANA reporting is enabled, check if I/O connect is on the same listener. */ /* If ANA reporting is enabled, check if I/O connect is on the same listener. */
if (subsystem->ana_reporting) { if (subsystem->flags.ana_reporting) {
listener = nvmf_subsystem_find_listener(subsystem, qpair->trid); listener = nvmf_subsystem_find_listener(subsystem, qpair->trid);
if (listener != ctrlr->listener) { if (listener != ctrlr->listener) {
SPDK_ERRLOG("I/O connect is on a listener different from admin connect\n"); SPDK_ERRLOG("I/O connect is on a listener different from admin connect\n");
@ -1930,7 +1930,7 @@ nvmf_ctrlr_get_log_page(struct spdk_nvmf_request *req)
nvmf_get_firmware_slot_log_page(req->data, offset, len); nvmf_get_firmware_slot_log_page(req->data, offset, len);
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
case SPDK_NVME_LOG_ASYMMETRIC_NAMESPACE_ACCESS: case SPDK_NVME_LOG_ASYMMETRIC_NAMESPACE_ACCESS:
if (subsystem->ana_reporting) { if (subsystem->flags.ana_reporting) {
nvmf_get_ana_log_page(ctrlr, req->data, offset, len); nvmf_get_ana_log_page(ctrlr, req->data, offset, len);
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
} else { } else {
@ -1996,7 +1996,7 @@ spdk_nvmf_ctrlr_identify_ns(struct spdk_nvmf_ctrlr *ctrlr,
nsdata->noiob = max_num_blocks; nsdata->noiob = max_num_blocks;
} }
if (subsystem->ana_reporting) { if (subsystem->flags.ana_reporting) {
/* ANA group ID matches NSID. */ /* ANA group ID matches NSID. */
nsdata->anagrpid = ns->nsid; nsdata->anagrpid = ns->nsid;
@ -2055,7 +2055,7 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c
cdata->sgls = ctrlr->cdata.sgls; cdata->sgls = ctrlr->cdata.sgls;
cdata->fuses.compare_and_write = 1; cdata->fuses.compare_and_write = 1;
cdata->acwu = 1; cdata->acwu = 1;
if (subsystem->ana_reporting) { if (subsystem->flags.ana_reporting) {
cdata->mnan = subsystem->max_nsid; cdata->mnan = subsystem->max_nsid;
} }
spdk_strcpy_pad(cdata->subnqn, subsystem->subnqn, sizeof(cdata->subnqn), '\0'); spdk_strcpy_pad(cdata->subnqn, subsystem->subnqn, sizeof(cdata->subnqn), '\0');
@ -2074,12 +2074,12 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c
cdata->rab = 6; cdata->rab = 6;
cdata->cmic.multi_port = 1; cdata->cmic.multi_port = 1;
cdata->cmic.multi_host = 1; cdata->cmic.multi_host = 1;
if (subsystem->ana_reporting) { if (subsystem->flags.ana_reporting) {
/* Asymmetric Namespace Access Reporting is supported. */ /* Asymmetric Namespace Access Reporting is supported. */
cdata->cmic.ana_reporting = 1; cdata->cmic.ana_reporting = 1;
} }
cdata->oaes.ns_attribute_notices = 1; cdata->oaes.ns_attribute_notices = 1;
if (subsystem->ana_reporting) { if (subsystem->flags.ana_reporting) {
cdata->oaes.ana_change_notices = 1; cdata->oaes.ana_change_notices = 1;
} }
cdata->ctratt.host_id_exhid_supported = 1; cdata->ctratt.host_id_exhid_supported = 1;
@ -2104,7 +2104,7 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c
cdata->oncs.dsm = nvmf_ctrlr_dsm_supported(ctrlr); cdata->oncs.dsm = nvmf_ctrlr_dsm_supported(ctrlr);
cdata->oncs.write_zeroes = nvmf_ctrlr_write_zeroes_supported(ctrlr); cdata->oncs.write_zeroes = nvmf_ctrlr_write_zeroes_supported(ctrlr);
cdata->oncs.reservations = 1; cdata->oncs.reservations = 1;
if (subsystem->ana_reporting) { if (subsystem->flags.ana_reporting) {
cdata->anatt = ANA_TRANSITION_TIME_IN_SEC; cdata->anatt = ANA_TRANSITION_TIME_IN_SEC;
/* ANA Change state is not used, and ANA Persistent Loss state /* ANA Change state is not used, and ANA Persistent Loss state
* is not supported for now. * is not supported for now.

View File

@ -248,24 +248,30 @@ struct spdk_nvmf_ctrlr {
struct spdk_nvmf_subsystem { struct spdk_nvmf_subsystem {
struct spdk_thread *thread; struct spdk_thread *thread;
uint32_t id; uint32_t id;
enum spdk_nvmf_subsystem_state state; enum spdk_nvmf_subsystem_state state;
char subnqn[SPDK_NVMF_NQN_MAX_LEN + 1]; char subnqn[SPDK_NVMF_NQN_MAX_LEN + 1];
enum spdk_nvmf_subtype subtype; enum spdk_nvmf_subtype subtype;
uint16_t next_cntlid; uint16_t next_cntlid;
bool allow_any_host; struct {
bool allow_any_listener; uint8_t allow_any_host : 1;
bool ana_reporting; uint8_t allow_any_listener : 1;
uint8_t ana_reporting : 1;
uint8_t reserved : 5;
} flags;
/* boolean for state change synchronization */
bool changing_state;
struct spdk_nvmf_tgt *tgt; struct spdk_nvmf_tgt *tgt;
char sn[SPDK_NVME_CTRLR_SN_LEN + 1]; char sn[SPDK_NVME_CTRLR_SN_LEN + 1];
char mn[SPDK_NVME_CTRLR_MN_LEN + 1]; char mn[SPDK_NVME_CTRLR_MN_LEN + 1];
/* boolean for state change synchronization. */
bool changing_state;
/* Array of pointers to namespaces of size max_nsid indexed by nsid - 1 */ /* Array of pointers to namespaces of size max_nsid indexed by nsid - 1 */
struct spdk_nvmf_ns **ns; struct spdk_nvmf_ns **ns;
uint32_t max_nsid; uint32_t max_nsid;

View File

@ -757,7 +757,7 @@ spdk_nvmf_subsystem_set_allow_any_host(struct spdk_nvmf_subsystem *subsystem, bo
return -EAGAIN; return -EAGAIN;
} }
subsystem->allow_any_host = allow_any_host; subsystem->flags.allow_any_host = allow_any_host;
return 0; return 0;
} }
@ -765,7 +765,7 @@ 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->allow_any_host; return subsystem->flags.allow_any_host;
} }
bool bool
@ -775,7 +775,7 @@ spdk_nvmf_subsystem_host_allowed(struct spdk_nvmf_subsystem *subsystem, const ch
return false; return false;
} }
if (subsystem->allow_any_host) { if (subsystem->flags.allow_any_host) {
return true; return true;
} }
@ -972,13 +972,13 @@ void
spdk_nvmf_subsystem_allow_any_listener(struct spdk_nvmf_subsystem *subsystem, spdk_nvmf_subsystem_allow_any_listener(struct spdk_nvmf_subsystem *subsystem,
bool allow_any_listener) bool allow_any_listener)
{ {
subsystem->allow_any_listener = allow_any_listener; subsystem->flags.allow_any_listener = allow_any_listener;
} }
bool bool
spdk_nvmf_subsytem_any_listener_allowed(struct spdk_nvmf_subsystem *subsystem) spdk_nvmf_subsytem_any_listener_allowed(struct spdk_nvmf_subsystem *subsystem)
{ {
return subsystem->allow_any_listener; return subsystem->flags.allow_any_listener;
} }
@ -2660,7 +2660,7 @@ spdk_nvmf_subsystem_set_ana_reporting(struct spdk_nvmf_subsystem *subsystem,
return -EAGAIN; return -EAGAIN;
} }
subsystem->ana_reporting = ana_reporting; subsystem->flags.ana_reporting = ana_reporting;
return 0; return 0;
} }
@ -2716,7 +2716,7 @@ nvmf_subsystem_set_ana_state(struct spdk_nvmf_subsystem *subsystem,
assert(subsystem->state == SPDK_NVMF_SUBSYSTEM_INACTIVE || assert(subsystem->state == SPDK_NVMF_SUBSYSTEM_INACTIVE ||
subsystem->state == SPDK_NVMF_SUBSYSTEM_PAUSED); subsystem->state == SPDK_NVMF_SUBSYSTEM_PAUSED);
if (!subsystem->ana_reporting) { if (!subsystem->flags.ana_reporting) {
SPDK_ERRLOG("ANA reporting is disabled\n"); SPDK_ERRLOG("ANA reporting is disabled\n");
cb_fn(cb_arg, -EINVAL); cb_fn(cb_arg, -EINVAL);
return; return;

View File

@ -227,7 +227,7 @@ test_discovery_log(void)
/* Add one subsystem and verify that the discovery log contains it */ /* Add one subsystem and verify that the discovery log contains it */
subsystem = spdk_nvmf_subsystem_create(&tgt, "nqn.2016-06.io.spdk:subsystem1", subsystem = spdk_nvmf_subsystem_create(&tgt, "nqn.2016-06.io.spdk:subsystem1",
SPDK_NVMF_SUBTYPE_NVME, 0); SPDK_NVMF_SUBTYPE_NVME, 0);
subsystem->allow_any_host = true; subsystem->flags.allow_any_host = true;
SPDK_CU_ASSERT_FATAL(subsystem != NULL); SPDK_CU_ASSERT_FATAL(subsystem != NULL);
trid.trtype = SPDK_NVME_TRANSPORT_RDMA; trid.trtype = SPDK_NVME_TRANSPORT_RDMA;