Commit 60057756 authored by Evgeniy Kochetov's avatar Evgeniy Kochetov Committed by Tomasz Zawadzki
Browse files

nvme: Move nsdata_zns to namespace structure



Signed-off-by: default avatarEvgeniy Kochetov <evgeniik@nvidia.com>
Change-Id: I3f7508d14075c23d9b850da20da6d86c36e08450
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6501


Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
parent 3a8852d3
Loading
Loading
Loading
Loading
+5 −19
Original line number Diff line number Diff line
@@ -2087,7 +2087,6 @@ static int
nvme_ctrlr_identify_ns_iocs_specific_async(struct spdk_nvme_ns *ns)
{
	struct spdk_nvme_ctrlr *ctrlr = ns->ctrlr;
	struct spdk_nvme_zns_ns_data **nsdata_zns;
	int rc;

	switch (ns->csi) {
@@ -2102,19 +2101,17 @@ nvme_ctrlr_identify_ns_iocs_specific_async(struct spdk_nvme_ns *ns)
		assert(0);
	}

	assert(ctrlr->nsdata_zns);
	nsdata_zns = &ctrlr->nsdata_zns[ns->id - 1];
	assert(!*nsdata_zns);
	*nsdata_zns = spdk_zmalloc(sizeof(**nsdata_zns), 64, NULL, SPDK_ENV_SOCKET_ID_ANY,
				   SPDK_MALLOC_SHARE | SPDK_MALLOC_DMA);
	if (!*nsdata_zns) {
	assert(!ns->nsdata_zns);
	ns->nsdata_zns = spdk_zmalloc(sizeof(*ns->nsdata_zns), 64, NULL, SPDK_ENV_SOCKET_ID_ANY,
				      SPDK_MALLOC_SHARE);
	if (!ns->nsdata_zns) {
		return -ENOMEM;
	}

	nvme_ctrlr_set_state(ctrlr, NVME_CTRLR_STATE_WAIT_FOR_IDENTIFY_NS_IOCS_SPECIFIC,
			     ctrlr->opts.admin_timeout_ms);
	rc = nvme_ctrlr_cmd_identify(ns->ctrlr, SPDK_NVME_IDENTIFY_NS_IOCS, 0, ns->id, ns->csi,
				     *nsdata_zns, sizeof(**nsdata_zns),
				     ns->nsdata_zns, sizeof(*ns->nsdata_zns),
				     nvme_ctrlr_identify_ns_zns_specific_async_done, ns);
	if (rc) {
		nvme_ns_free_zns_specific_data(ns);
@@ -2477,10 +2474,6 @@ nvme_ctrlr_destruct_namespaces(struct spdk_nvme_ctrlr *ctrlr)
		ctrlr->num_ns = 0;
	}


	spdk_free(ctrlr->nsdata_zns);
	ctrlr->nsdata_zns = NULL;

	spdk_free(ctrlr->active_ns_list);
	ctrlr->active_ns_list = NULL;
}
@@ -2545,13 +2538,6 @@ nvme_ctrlr_construct_namespaces(struct spdk_nvme_ctrlr *ctrlr)
			goto fail;
		}

		ctrlr->nsdata_zns = spdk_zmalloc(nn * sizeof(struct spdk_nvme_zns_ns_data *), 64,
						 NULL, SPDK_ENV_SOCKET_ID_ANY, SPDK_MALLOC_SHARE);
		if (ctrlr->nsdata_zns == NULL) {
			rc = -ENOMEM;
			goto fail;
		}

		ctrlr->num_ns = nn;
	} else {
		/*
+3 −5
Original line number Diff line number Diff line
@@ -497,6 +497,9 @@ struct spdk_nvme_ns {

	/* Identify Namespace data. */
	struct spdk_nvme_ns_data	nsdata;

	/* Zoned Namespace Command Set Specific Identify Namespace data. */
	struct spdk_nvme_zns_ns_data	*nsdata_zns;
};

/**
@@ -814,11 +817,6 @@ struct spdk_nvme_ctrlr {
	 */
	uint32_t			*active_ns_list;

	/**
	 * Array of pointers to Zoned Namespace Command Set Specific Identify Namespace data.
	 */
	struct spdk_nvme_zns_ns_data	**nsdata_zns;

	struct spdk_bit_array		*free_io_qids;
	TAILQ_HEAD(, spdk_nvme_qpair)	active_io_qpairs;

+8 −11
Original line number Diff line number Diff line
@@ -155,7 +155,6 @@ nvme_ctrlr_identify_ns_iocs_specific(struct spdk_nvme_ns *ns)
{
	struct nvme_completion_poll_status *status;
	struct spdk_nvme_ctrlr *ctrlr = ns->ctrlr;
	struct spdk_nvme_zns_ns_data **nsdata_zns;
	int rc;

	switch (ns->csi) {
@@ -170,12 +169,10 @@ nvme_ctrlr_identify_ns_iocs_specific(struct spdk_nvme_ns *ns)
		assert(0);
	}

	assert(ctrlr->nsdata_zns);
	nsdata_zns = &ctrlr->nsdata_zns[ns->id - 1];
	assert(!*nsdata_zns);
	*nsdata_zns = spdk_zmalloc(sizeof(**nsdata_zns), 64, NULL, SPDK_ENV_SOCKET_ID_ANY,
				   SPDK_MALLOC_SHARE | SPDK_MALLOC_DMA);
	if (!*nsdata_zns) {
	assert(!ns->nsdata_zns);
	ns->nsdata_zns = spdk_zmalloc(sizeof(*ns->nsdata_zns), 64, NULL, SPDK_ENV_SOCKET_ID_ANY,
				      SPDK_MALLOC_SHARE);
	if (!ns->nsdata_zns) {
		return -ENOMEM;
	}

@@ -187,7 +184,7 @@ nvme_ctrlr_identify_ns_iocs_specific(struct spdk_nvme_ns *ns)
	}

	rc = nvme_ctrlr_cmd_identify(ctrlr, SPDK_NVME_IDENTIFY_NS_IOCS, 0, ns->id, ns->csi,
				     *nsdata_zns, sizeof(**nsdata_zns),
				     ns->nsdata_zns, sizeof(*ns->nsdata_zns),
				     nvme_completion_poll_cb, status);
	if (rc != 0) {
		nvme_ns_free_zns_specific_data(ns);
@@ -463,9 +460,9 @@ nvme_ns_free_zns_specific_data(struct spdk_nvme_ns *ns)
		return;
	}

	if (ns->ctrlr->nsdata_zns) {
		spdk_free(ns->ctrlr->nsdata_zns[ns->id - 1]);
		ns->ctrlr->nsdata_zns[ns->id - 1] = NULL;
	if (ns->nsdata_zns) {
		spdk_free(ns->nsdata_zns);
		ns->nsdata_zns = NULL;
	}
}

+2 −1
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
 *   BSD LICENSE
 *
 *   Copyright (c) 2020, Western Digital Corporation. All rights reserved.
 *   Copyright (c) 2021 Mellanox Technologies LTD. All rights reserved.
 *
 *   Redistribution and use in source and binary forms, with or without
 *   modification, are permitted provided that the following conditions
@@ -36,7 +37,7 @@
const struct spdk_nvme_zns_ns_data *
spdk_nvme_zns_ns_get_data(struct spdk_nvme_ns *ns)
{
	return ns->ctrlr->nsdata_zns[ns->id - 1];
	return ns->nsdata_zns;
}

uint64_t