From a827a91e6dde9cfeee0c8476d5217b9866b68931 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Fri, 8 Feb 2019 09:40:35 +0900 Subject: [PATCH] bdev/nvme: Add per-controller PRCHK values Add prchk_flags in struct nvme_ctrlr and set it at creating of the corresponding controller, and copy it to each bdev of the controller. Change-Id: Ie971a0c1539b5419de9e5168ed47ac0e579be2c5 Signed-off-by: Shuhei Matsumoto Reviewed-on: https://review.gerrithub.io/c/443186 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Changpeng Liu Reviewed-by: Jim Harris --- lib/bdev/nvme/bdev_nvme.c | 11 +++++++---- lib/bdev/nvme/bdev_nvme.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/bdev/nvme/bdev_nvme.c b/lib/bdev/nvme/bdev_nvme.c index c250b6e3b..9fcdd10c6 100644 --- a/lib/bdev/nvme/bdev_nvme.c +++ b/lib/bdev/nvme/bdev_nvme.c @@ -804,6 +804,7 @@ nvme_ctrlr_create_bdev(struct nvme_ctrlr *nvme_ctrlr, uint32_t nsid) bdev->disk.dif_type = (enum spdk_dif_type)spdk_nvme_ns_get_pi_type(ns); if (bdev->disk.dif_type != SPDK_DIF_DISABLE) { bdev->disk.dif_is_head_of_md = nsdata->dps.md_start; + bdev->disk.dif_check_flags = nvme_ctrlr->prchk_flags; } } @@ -1016,7 +1017,8 @@ aer_cb(void *arg, const struct spdk_nvme_cpl *cpl) static int create_ctrlr(struct spdk_nvme_ctrlr *ctrlr, const char *name, - const struct spdk_nvme_transport_id *trid) + const struct spdk_nvme_transport_id *trid, + uint32_t prchk_flags) { struct nvme_ctrlr *nvme_ctrlr; @@ -1043,6 +1045,7 @@ create_ctrlr(struct spdk_nvme_ctrlr *ctrlr, free(nvme_ctrlr); return -ENOMEM; } + nvme_ctrlr->prchk_flags = prchk_flags; spdk_io_device_register(ctrlr, bdev_nvme_create_cb, bdev_nvme_destroy_cb, sizeof(struct nvme_io_channel), @@ -1090,7 +1093,7 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid, SPDK_DEBUGLOG(SPDK_LOG_BDEV_NVME, "Attached to %s (%s)\n", trid->traddr, name); - create_ctrlr(ctrlr, name, trid); + create_ctrlr(ctrlr, name, trid, 0); free(name); } @@ -1252,7 +1255,7 @@ spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid, return -1; } - if (create_ctrlr(ctrlr, base_name, trid)) { + if (create_ctrlr(ctrlr, base_name, trid, 0)) { SPDK_ERRLOG("Failed to create new device\n"); return -1; } @@ -1465,7 +1468,7 @@ bdev_nvme_library_init(void) goto end; } - rc = create_ctrlr(ctrlr, probe_ctx->names[i], &probe_ctx->trids[i]); + rc = create_ctrlr(ctrlr, probe_ctx->names[i], &probe_ctx->trids[i], 0); if (rc) { goto end; } diff --git a/lib/bdev/nvme/bdev_nvme.h b/lib/bdev/nvme/bdev_nvme.h index 744ac1744..f004540c2 100644 --- a/lib/bdev/nvme/bdev_nvme.h +++ b/lib/bdev/nvme/bdev_nvme.h @@ -66,6 +66,7 @@ struct nvme_ctrlr { char *name; int ref; bool destruct; + uint32_t prchk_flags; uint32_t num_ns; /** Array of bdevs indexed by nsid - 1 */ struct nvme_bdev *bdevs;