Commit 415a0d2b authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Tomasz Zawadzki
Browse files

nvmf: remove subsystem->zone_append_supported



Instead, use a function to check all namespaces for ZONE_APPEND support.
It ensures that support for ZONE_APPEND isn't listed in command effects
log after the last zoned namespace is removed from a subsystem.

Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: I028b8b29471cbe4e4eb2632d76e4cf5716fa9c2a
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/23438


Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 239855ac
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2539,7 +2539,7 @@ nvmf_get_cmds_and_effects_log_page(struct spdk_nvmf_ctrlr *ctrlr, struct iovec *
	spdk_iov_xfer_init(&ix, iovs, iovcnt);

	if (offset < page_size) {
		if (ctrlr->subsys->zone_append_supported) {
		if (nvmf_subsystem_zone_append_supported(ctrlr->subsys)) {
			cmds_and_effect_log_page.io_cmds_supported[SPDK_NVME_OPC_ZONE_APPEND] =
				csupp_and_lbcc_effect_entry;
		}
+1 −1
Original line number Diff line number Diff line
@@ -301,7 +301,6 @@ struct spdk_nvmf_subsystem {
	bool						fdp_supported;

	/* Zoned storage related fields */
	bool						zone_append_supported;
	uint64_t					max_zone_append_size_kib;

	struct spdk_nvmf_tgt				*tgt;
@@ -427,6 +426,7 @@ struct spdk_key *nvmf_subsystem_get_dhchap_key(struct spdk_nvmf_subsystem *subsy
struct spdk_nvmf_subsystem_listener *nvmf_subsystem_find_listener(
	struct spdk_nvmf_subsystem *subsystem,
	const struct spdk_nvme_transport_id *trid);
bool nvmf_subsystem_zone_append_supported(struct spdk_nvmf_subsystem *subsystem);
struct spdk_nvmf_listener *nvmf_transport_find_listener(
	struct spdk_nvmf_transport *transport,
	const struct spdk_nvme_transport_id *trid);
+18 −2
Original line number Diff line number Diff line
@@ -1982,6 +1982,23 @@ static int nvmf_ns_reservation_load(const struct spdk_nvmf_ns *ns,
static int nvmf_ns_reservation_restore(struct spdk_nvmf_ns *ns,
				       struct spdk_nvmf_reservation_info *info);

bool
nvmf_subsystem_zone_append_supported(struct spdk_nvmf_subsystem *subsystem)
{
	struct spdk_nvmf_ns *ns;

	for (ns = spdk_nvmf_subsystem_get_first_ns(subsystem);
	     ns != NULL;
	     ns = spdk_nvmf_subsystem_get_next_ns(subsystem, ns)) {
		if (spdk_bdev_is_zoned(ns->bdev) &&
		    spdk_bdev_io_type_supported(ns->bdev, SPDK_BDEV_IO_TYPE_ZONE_APPEND)) {
			return true;
		}
	}

	return false;
}

uint32_t
spdk_nvmf_subsystem_add_ns_ext(struct spdk_nvmf_subsystem *subsystem, const char *bdev_name,
			       const struct spdk_nvmf_ns_opts *user_opts, size_t opts_size,
@@ -2118,13 +2135,12 @@ spdk_nvmf_subsystem_add_ns_ext(struct spdk_nvmf_subsystem *subsystem, const char
						   ns->bdev) * spdk_bdev_get_block_size(ns->bdev);

		if (_nvmf_subsystem_get_first_zoned_ns(subsystem) != NULL &&
		    (subsystem->zone_append_supported != zone_append_supported ||
		    (nvmf_subsystem_zone_append_supported(subsystem) != zone_append_supported ||
		     subsystem->max_zone_append_size_kib != max_zone_append_size_kib)) {
			SPDK_ERRLOG("Namespaces with different zone append support or different zone append size are not allowed.\n");
			goto err;
		}

		subsystem->zone_append_supported = zone_append_supported;
		subsystem->max_zone_append_size_kib = max_zone_append_size_kib;
	}

+2 −1
Original line number Diff line number Diff line
@@ -73,7 +73,8 @@ DEFINE_STUB(nvmf_subsystem_get_ctrlr,
	    struct spdk_nvmf_ctrlr *,
	    (struct spdk_nvmf_subsystem *subsystem, uint16_t cntlid),
	    NULL);

DEFINE_STUB(nvmf_subsystem_zone_append_supported, bool,
	    (struct spdk_nvmf_subsystem *subsystem), false);
DEFINE_STUB(nvmf_ctrlr_dsm_supported,
	    bool,
	    (struct spdk_nvmf_ctrlr *ctrlr),
+2 −1
Original line number Diff line number Diff line
@@ -86,7 +86,8 @@ DEFINE_STUB(spdk_nvmf_subsystem_get_next_ns,
	    struct spdk_nvmf_ns *,
	    (struct spdk_nvmf_subsystem *subsystem, struct spdk_nvmf_ns *prev_ns),
	    NULL);

DEFINE_STUB(nvmf_subsystem_zone_append_supported, bool,
	    (struct spdk_nvmf_subsystem *subsystem), false);
DEFINE_STUB(spdk_nvmf_subsystem_host_allowed,
	    bool,
	    (struct spdk_nvmf_subsystem *subsystem, const char *hostnqn),