Commit d00affe5 authored by Jim Harris's avatar Jim Harris Committed by Tomasz Zawadzki
Browse files

lib/nvmf: use bdev values for various write and unmap identify fields



Signed-off-by: default avatarJim Harris <jim.harris@nvidia.com>
Change-Id: I0a2fbed4f44a83920b429150dceb6ecf0fab3ed1
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26510


Reviewed-by: default avatarAnkit Kumar <ankit.kumar@samsung.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarChangpeng Liu <changpeliu@tencent.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
parent beaab6a1
Loading
Loading
Loading
Loading
+36 −8
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *n
	uint32_t phys_blocklen;
	uint32_t max_num_blocks;
	uint32_t max_copy;
	uint32_t npwa, npwg, npda, npdg;

	num_blocks = spdk_bdev_get_num_blocks(bdev);

@@ -175,15 +176,42 @@ nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *n
	/* Linux driver uses min(nawupf, npwg) to set physical_block_size */
	nsdata->nsfeat.optperf = 1;
	nsdata->nsfeat.ns_atomic_write_unit = 1;
	/* Note that all of these preferred and optimal sizes are 0-based. */
	npwg = spdk_bdev_get_preferred_write_granularity(bdev);
	if (npwg == 0) {
		nsdata->npwg = (phys_blocklen >> nsdata->lbaf[0].lbads) - 1;
	} else {
		nsdata->npwg = npwg - 1;
	}
	nsdata->nawupf = nsdata->npwg;
	npwa = spdk_bdev_get_preferred_write_alignment(bdev);
	if (npwa == 0) {
		nsdata->npwa = nsdata->npwg;
	} else {
		nsdata->npwa = npwa - 1;
	}
	npdg = spdk_bdev_get_preferred_unmap_granularity(bdev);
	if (npdg == 0) {
		nsdata->npdg = nsdata->npwg;
	} else {
		nsdata->npdg = npdg - 1;
	}
	npda = spdk_bdev_get_preferred_unmap_alignment(bdev);
	if (npda == 0) {
		nsdata->npda = nsdata->npwg;
	/* Set NOWS equal to controller MDTS if the namespace did not set one
	 * explicitly.
	} else {
		nsdata->npda = npda - 1;
	}
	nsdata->nows = spdk_bdev_get_optimal_write_size(bdev);
	if (nsdata->nows > 0) {
		nsdata->nows -= 1;
	} else {
		/* Set NOWS equal to controller MDTS if the namespace did
		 * not set one explicitly.
		 */
		nsdata->nows = max_num_blocks - 1;
	}

	if (spdk_bdev_get_write_unit_size(bdev) == 1) {
		/* Due to bug in the Linux kernel NVMe driver, we have to set noiob no larger
		 * than mdts.
+10 −0
Original line number Diff line number Diff line
@@ -23,6 +23,16 @@ DEFINE_STUB(spdk_bdev_get_name, const char *, (const struct spdk_bdev *bdev), "t

DEFINE_STUB(spdk_bdev_get_physical_block_size, uint32_t,
	    (const struct spdk_bdev *bdev), 4096);
DEFINE_STUB(spdk_bdev_get_preferred_write_granularity, uint32_t,
	    (const struct spdk_bdev *bdev), 0);
DEFINE_STUB(spdk_bdev_get_preferred_write_alignment, uint32_t,
	    (const struct spdk_bdev *bdev), 0);
DEFINE_STUB(spdk_bdev_get_optimal_write_size, uint32_t,
	    (const struct spdk_bdev *bdev), 0);
DEFINE_STUB(spdk_bdev_get_preferred_unmap_granularity, uint32_t,
	    (const struct spdk_bdev *bdev), 0);
DEFINE_STUB(spdk_bdev_get_preferred_unmap_alignment, uint32_t,
	    (const struct spdk_bdev *bdev), 0);

DEFINE_STUB(nvmf_ctrlr_process_admin_cmd, int, (struct spdk_nvmf_request *req), 0);