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) {