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: Alexey Marchuk <alexeymar@mellanox.com>
Change-Id: Ie1fee7f267c318b3cede47fbbbe9f7639571bdeb
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11050
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
This commit is contained in:
Alexey Marchuk 2022-01-12 13:15:26 +03:00 committed by Tomasz Zawadzki
parent 3185d3c92f
commit cff525d336

View File

@ -110,11 +110,14 @@ gpt_base_bdev_hotremove_cb(void *_part_base)
static int vbdev_gpt_destruct(void *ctx); 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 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_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 = { static struct spdk_bdev_fn_table vbdev_gpt_fn_table = {
.destruct = vbdev_gpt_destruct, .destruct = vbdev_gpt_destruct,
.submit_request = vbdev_gpt_submit_request, .submit_request = vbdev_gpt_submit_request,
.dump_info_json = vbdev_gpt_dump_info_json, .dump_info_json = vbdev_gpt_dump_info_json,
.get_memory_domains = vbdev_gpt_get_memory_domains,
}; };
static struct gpt_base * static struct gpt_base *
@ -300,6 +303,22 @@ vbdev_gpt_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
return 0; 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 static int
vbdev_gpt_create_bdevs(struct gpt_base *gpt_base) vbdev_gpt_create_bdevs(struct gpt_base *gpt_base)
{ {