From d8e88d9918e9f1aa11b45e79853557873545b3f0 Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Thu, 27 Jul 2017 12:47:53 -0700 Subject: [PATCH] nvme_ns: add function to get read value of unmapped blocks Change-Id: I52dc3038d239661421760ceccfbbf841cc63a18a Signed-off-by: Seth Howell Reviewed-on: https://review.gerrithub.io/372000 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp Reviewed-by: Ben Walker --- include/spdk/nvme.h | 9 +++++++++ lib/nvme/nvme_ns.c | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/include/spdk/nvme.h b/include/spdk/nvme.h index 69acc57f96..683b74f78c 100644 --- a/include/spdk/nvme.h +++ b/include/spdk/nvme.h @@ -910,6 +910,15 @@ uint32_t spdk_nvme_ns_get_md_size(struct spdk_nvme_ns *ns); */ bool spdk_nvme_ns_supports_extended_lba(struct spdk_nvme_ns *ns); +/** + * \brief Determine the value returned when reading deallocated blocks. + * + * If deallocated blocks return 0, the deallocate command can be used as a more efficient alternative + * to the write_zeroes command, especially for large requests. + */ +enum spdk_nvme_dealloc_logical_block_read_value spdk_nvme_ns_get_dealloc_logical_block_read_value( + struct spdk_nvme_ns *ns); + /** * \brief Namespace command support flags. */ diff --git a/lib/nvme/nvme_ns.c b/lib/nvme/nvme_ns.c index fb3e5acccd..fe00ccedc4 100644 --- a/lib/nvme/nvme_ns.c +++ b/lib/nvme/nvme_ns.c @@ -185,6 +185,13 @@ spdk_nvme_ns_get_data(struct spdk_nvme_ns *ns) return _nvme_ns_get_data(ns); } +enum spdk_nvme_dealloc_logical_block_read_value spdk_nvme_ns_get_dealloc_logical_block_read_value( + struct spdk_nvme_ns *ns) +{ + const struct spdk_nvme_ns_data *data = spdk_nvme_ns_get_data(ns); + return data->dlfeat.bits.read_value; +} + int nvme_ns_construct(struct spdk_nvme_ns *ns, uint16_t id, struct spdk_nvme_ctrlr *ctrlr) {