diff --git a/include/spdk/nvme.h b/include/spdk/nvme.h index 4b1dbf66a..0695964f4 100644 --- a/include/spdk/nvme.h +++ b/include/spdk/nvme.h @@ -324,7 +324,8 @@ int nvme_ns_cmd_read(struct nvme_namespace *ns, void *payload, * \param ns NVMe namespace to submit the deallocation request * \param payload virtual address pointer to the list of LBA ranges to * deallocate - * \param num_ranges number of ranges in the list pointed to by payload + * \param num_ranges number of ranges in the list pointed to by payload; must be + * between 1 and \ref NVME_DATASET_MANAGEMENT_MAX_RANGES, inclusive. * \param cb_fn callback function to invoke when the I/O is completed * \param cb_arg argument to pass to the callback function * @@ -335,7 +336,7 @@ int nvme_ns_cmd_read(struct nvme_namespace *ns, void *payload, * nvme_register_io_thread(). */ int nvme_ns_cmd_deallocate(struct nvme_namespace *ns, void *payload, - uint8_t num_ranges, nvme_cb_fn_t cb_fn, + uint16_t num_ranges, nvme_cb_fn_t cb_fn, void *cb_arg); /** diff --git a/include/spdk/nvme_spec.h b/include/spdk/nvme_spec.h index 99f49e317..9bd5ff385 100644 --- a/include/spdk/nvme_spec.h +++ b/include/spdk/nvme_spec.h @@ -59,6 +59,12 @@ #define NVME_MAX_IO_QUEUES (1 << 16) +/** + * Indicates the maximum number of range sets that may be specified + * in the dataset mangement command. + */ +#define NVME_DATASET_MANAGEMENT_MAX_RANGES 256 + union nvme_cap_lo_register { uint32_t raw; struct { diff --git a/lib/nvme/nvme_ns_cmd.c b/lib/nvme/nvme_ns_cmd.c index 7e94878dd..069e2880c 100644 --- a/lib/nvme/nvme_ns_cmd.c +++ b/lib/nvme/nvme_ns_cmd.c @@ -196,12 +196,12 @@ nvme_ns_cmd_write(struct nvme_namespace *ns, void *payload, uint64_t lba, int nvme_ns_cmd_deallocate(struct nvme_namespace *ns, void *payload, - uint8_t num_ranges, nvme_cb_fn_t cb_fn, void *cb_arg) + uint16_t num_ranges, nvme_cb_fn_t cb_fn, void *cb_arg) { struct nvme_request *req; struct nvme_command *cmd; - if (num_ranges == 0) { + if (num_ranges == 0 || num_ranges > NVME_DATASET_MANAGEMENT_MAX_RANGES) { return EINVAL; }