Commit 6d8618af authored by Abhineet Pandey's avatar Abhineet Pandey Committed by Tomasz Zawadzki
Browse files

lib/nvmf: Add get ANA state API



This change adds a get ANA state API, which fills an ana_state
parameter passed to it.

Change-Id: I9322c7dc210eb35741cbcce503ba22e56aee9147
Signed-off-by: default avatarAbhineet Pandey <abhineet.pandey@nutanix.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22108


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 avatarShuhei Matsumoto <smatsumoto@nvidia.com>
parent 60d80d59
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -40,6 +40,9 @@ Added support for namespace masking using new C APIs `spdk_nvmf_ns_add_host` and
Users must pass new `--no-auto-visible` parameter to `nvmf_subsystem_add_ns` RPC to allow
namespace masking to be controlled by these new RPCs.

Added `spdk_nvmf_subsystem_get_ana_state` API to get current ANA state of
a particular ANA group ID.

### spdk_trace

`spdk_trace` has learned how to use the most recent trace file in /dev/shm when
+17 −0
Original line number Diff line number Diff line
@@ -913,6 +913,23 @@ void spdk_nvmf_subsystem_set_ana_state(struct spdk_nvmf_subsystem *subsystem,
				       enum spdk_nvme_ana_state ana_state, uint32_t anagrpid,
				       spdk_nvmf_tgt_subsystem_listen_done_fn cb_fn, void *cb_arg);

/**
 * Get Asymmetric Namespace Access (ANA) state for the specified ANA group id.
 *
 * \param subsystem Subsystem to operate on
 * \param trid Address for which the ANA is to be looked up
 * \param anagrpid The ANA group ID to check for
 * \param ana_state Output parameter that will contain the ANA state
 *
 * \return 0 on success, or negated errno value on failure.
 *
 */

int spdk_nvmf_subsystem_get_ana_state(struct spdk_nvmf_subsystem *subsystem,
				      const struct spdk_nvme_transport_id *trid,
				      uint32_t anagrpid,
				      enum spdk_nvme_ana_state *ana_state);

/** NVMe-oF target namespace creation options */
struct spdk_nvmf_ns_opts {
	/**
+1 −0
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@
	spdk_nvmf_subsystem_set_ana_reporting;
	spdk_nvmf_subsystem_get_ana_reporting;
	spdk_nvmf_subsystem_set_ana_state;
	spdk_nvmf_subsystem_get_ana_state;
	spdk_nvmf_subsystem_is_discovery;
	spdk_nvmf_set_custom_ns_reservation_ops;

+30 −0
Original line number Diff line number Diff line
@@ -3578,6 +3578,36 @@ spdk_nvmf_subsystem_set_ana_state(struct spdk_nvmf_subsystem *subsystem,
			      subsystem_listener_update_done);
}

int
spdk_nvmf_subsystem_get_ana_state(struct spdk_nvmf_subsystem *subsystem,
				  const struct spdk_nvme_transport_id *trid,
				  uint32_t anagrpid,
				  enum spdk_nvme_ana_state *ana_state)
{
	assert(ana_state != NULL);

	struct spdk_nvmf_subsystem_listener *listener;

	if (!subsystem->flags.ana_reporting) {
		SPDK_ERRLOG("ANA reporting is disabled\n");
		return -EINVAL;
	}

	if (anagrpid <= 0 || anagrpid > subsystem->max_nsid) {
		SPDK_ERRLOG("ANA group ID %" PRIu32 " is invalid\n", anagrpid);
		return -EINVAL;
	}

	listener = nvmf_subsystem_find_listener(subsystem, trid);
	if (!listener) {
		SPDK_ERRLOG("Unable to find listener.\n");
		return -EINVAL;
	}

	*ana_state = listener->ana_state[anagrpid - 1];
	return 0;
}

bool
spdk_nvmf_subsystem_is_discovery(struct spdk_nvmf_subsystem *subsystem)
{