From 6d05186697f91c586b56fb9ec35c2c916103ce3f Mon Sep 17 00:00:00 2001 From: Young Tack Jin Date: Wed, 27 Jun 2018 14:23:34 -0700 Subject: [PATCH] ocssd: add chunk info list as mptr of vector reset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is verified on QEMU NVMe which merged the related patch. Change-Id: I7c62d7a91350e0a877d1c3651796c38b55122f98 Signed-off-by: Young Tack Jin Reviewed-on: https://review.gerrithub.io/417077 Tested-by: SPDK Automated Test System Reviewed-by: Xiaodong Liu Reviewed-by: Jim Harris Reviewed-by: Matias Bjørling Reviewed-by: Daniel Verkamp Reviewed-by: Ben Walker --- include/spdk/nvme_ocssd.h | 2 ++ lib/nvme/nvme_ns_ocssd_cmd.c | 5 +++++ .../unit/lib/nvme/nvme_ns_ocssd_cmd.c/nvme_ns_ocssd_cmd_ut.c | 4 ++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/include/spdk/nvme_ocssd.h b/include/spdk/nvme_ocssd.h index e0cc48a92..a4f853048 100644 --- a/include/spdk/nvme_ocssd.h +++ b/include/spdk/nvme_ocssd.h @@ -82,6 +82,7 @@ int spdk_nvme_ocssd_ctrlr_cmd_geometry(struct spdk_nvme_ctrlr *ctrlr, uint32_t n * LBAs must correspond to the start of chunks to reset. * Must be allocated through spdk_dma_malloc() or its variants * \param num_lbas number of LBAs stored in lba_list + * \param chunk_info an array of chunk info on DMA-able memory * \param cb_fn callback function to invoke when the I/O is completed * \param cb_arg argument to pass to the callback function * @@ -91,6 +92,7 @@ int spdk_nvme_ocssd_ctrlr_cmd_geometry(struct spdk_nvme_ctrlr *ctrlr, uint32_t n int spdk_nvme_ocssd_ns_cmd_vector_reset(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, uint64_t *lba_list, uint32_t num_lbas, + struct spdk_ocssd_chunk_information *chunk_info, spdk_nvme_cmd_cb cb_fn, void *cb_arg); /** diff --git a/lib/nvme/nvme_ns_ocssd_cmd.c b/lib/nvme/nvme_ns_ocssd_cmd.c index fa8498278..35bf63c7c 100644 --- a/lib/nvme/nvme_ns_ocssd_cmd.c +++ b/lib/nvme/nvme_ns_ocssd_cmd.c @@ -38,6 +38,7 @@ int spdk_nvme_ocssd_ns_cmd_vector_reset(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair, uint64_t *lba_list, uint32_t num_lbas, + struct spdk_ocssd_chunk_information *chunk_info, spdk_nvme_cmd_cb cb_fn, void *cb_arg) { struct nvme_request *req; @@ -57,6 +58,10 @@ spdk_nvme_ocssd_ns_cmd_vector_reset(struct spdk_nvme_ns *ns, cmd->opc = SPDK_OCSSD_OPC_VECTOR_RESET; cmd->nsid = ns->id; + if (chunk_info != NULL) { + cmd->mptr = spdk_vtophys(chunk_info); + } + /* * Dword 10 and 11 store a pointer to the list of logical block addresses. * If there is a single entry in the LBA list, the logical block diff --git a/test/unit/lib/nvme/nvme_ns_ocssd_cmd.c/nvme_ns_ocssd_cmd_ut.c b/test/unit/lib/nvme/nvme_ns_ocssd_cmd.c/nvme_ns_ocssd_cmd_ut.c index 637cffd1f..5d1f42b8d 100644 --- a/test/unit/lib/nvme/nvme_ns_ocssd_cmd.c/nvme_ns_ocssd_cmd_ut.c +++ b/test/unit/lib/nvme/nvme_ns_ocssd_cmd.c/nvme_ns_ocssd_cmd_ut.c @@ -187,7 +187,7 @@ test_nvme_ocssd_ns_cmd_vector_reset_single_entry(void) prepare_for_test(&ns, &ctrlr, &qpair, sector_size, 0, max_xfer_size, 0, false); uint64_t lba_list = 0x12345678; spdk_nvme_ocssd_ns_cmd_vector_reset(&ns, &qpair, &lba_list, 1, - NULL, NULL); + NULL, NULL, NULL); SPDK_CU_ASSERT_FATAL(rc == 0); SPDK_CU_ASSERT_FATAL(g_request != NULL); @@ -218,7 +218,7 @@ test_nvme_ocssd_ns_cmd_vector_reset(void) prepare_for_test(&ns, &ctrlr, &qpair, sector_size, 0, max_xfer_size, 0, false); uint64_t lba_list[vector_size]; spdk_nvme_ocssd_ns_cmd_vector_reset(&ns, &qpair, lba_list, vector_size, - NULL, NULL); + NULL, NULL, NULL); SPDK_CU_ASSERT_FATAL(rc == 0); SPDK_CU_ASSERT_FATAL(g_request != NULL);