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: Changpeng 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: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Dong Yi <dongx.yi@intel.com>
This commit is contained in:
Changpeng Liu 2022-06-22 09:38:48 +08:00 committed by Konrad Sztyber
parent c650b7eae3
commit 6abb4764ad

View File

@ -1638,11 +1638,21 @@ 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)) {
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) != 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);