Commit cff525d3 authored by Alexey Marchuk's avatar Alexey Marchuk Committed by Tomasz Zawadzki
Browse files

vbdev_gpt: Report memory domains



vbdev_gpt reports memory domains of its base
bdev if the base bdev is not configured to check
DIF refence tag since in that case bdev_part will
remap reftags thereby it will touch metadata.

Signed-off-by: default avatarAlexey Marchuk <alexeymar@mellanox.com>
Change-Id: Ie1fee7f267c318b3cede47fbbbe9f7639571bdeb
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11050


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
parent 3185d3c9
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -110,11 +110,14 @@ gpt_base_bdev_hotremove_cb(void *_part_base)
static int vbdev_gpt_destruct(void *ctx);
static void vbdev_gpt_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bdev_io);
static int vbdev_gpt_dump_info_json(void *ctx, struct spdk_json_write_ctx *w);
static int vbdev_gpt_get_memory_domains(void *ctx, struct spdk_memory_domain **domains,
					int array_size);

static struct spdk_bdev_fn_table vbdev_gpt_fn_table = {
	.destruct		= vbdev_gpt_destruct,
	.submit_request		= vbdev_gpt_submit_request,
	.dump_info_json		= vbdev_gpt_dump_info_json,
	.get_memory_domains	= vbdev_gpt_get_memory_domains,
};

static struct gpt_base *
@@ -300,6 +303,22 @@ vbdev_gpt_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
	return 0;
}

static int
vbdev_gpt_get_memory_domains(void *ctx, struct spdk_memory_domain **domains, int array_size)
{
	struct gpt_disk *gpt_disk = SPDK_CONTAINEROF(ctx, struct gpt_disk, part);
	struct spdk_bdev_part_base *part_base = spdk_bdev_part_get_base(&gpt_disk->part);
	struct spdk_bdev *part_base_bdev = spdk_bdev_part_base_get_bdev(part_base);

	if (part_base_bdev->dif_check_flags & SPDK_DIF_FLAGS_REFTAG_CHECK) {
		/* bdev_part remaps reftag and touches metadata buffer, that means it can't support memory domains
		 * if dif is enabled */
		return 0;
	}

	return spdk_bdev_get_memory_domains(part_base_bdev, domains, array_size);
}

static int
vbdev_gpt_create_bdevs(struct gpt_base *gpt_base)
{