Commit 6abb4764 authored by Changpeng Liu's avatar Changpeng Liu Committed by Konrad Sztyber
Browse files

nvmf: check interleaved metadata size when adding NS



When doing DIF insert and strip, we will reserve extra
buffer in block device layer to save DIF information,
so when attaching one device to Namespace, we will
check the value first so that the reserved buffer
size isn't smaller than metadata size.

Change-Id: Id9272886ce8a7c01271279686730af4e5b24f35a
Signed-off-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12188


Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarDong Yi <dongx.yi@intel.com>
parent c650b7ea
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -1638,13 +1638,23 @@ spdk_nvmf_subsystem_add_ns_ext(struct spdk_nvmf_subsystem *subsystem, const char

	ns->bdev = spdk_bdev_desc_get_bdev(ns->desc);

	if (spdk_bdev_get_md_size(ns->bdev) != 0 && !spdk_bdev_is_md_interleaved(ns->bdev)) {
	if (spdk_bdev_get_md_size(ns->bdev) != 0) {
		if (!spdk_bdev_is_md_interleaved(ns->bdev)) {
			SPDK_ERRLOG("Can't attach bdev with separate metadata.\n");
			spdk_bdev_close(ns->desc);
			free(ns);
			return 0;
		}

		if (spdk_bdev_get_md_size(ns->bdev) > SPDK_BDEV_MAX_INTERLEAVED_MD_SIZE) {
			SPDK_ERRLOG("Maximum supported interleaved md size %u, current md size %u\n",
				    SPDK_BDEV_MAX_INTERLEAVED_MD_SIZE, spdk_bdev_get_md_size(ns->bdev));
			spdk_bdev_close(ns->desc);
			free(ns);
			return 0;
		}
	}

	rc = spdk_bdev_module_claim_bdev(ns->bdev, ns->desc, &ns_bdev_module);
	if (rc != 0) {
		spdk_bdev_close(ns->desc);