nvme: add function to get the max zone append data transfer size
The zone append command, which is part of the Zoned Namespace Command Set, has a maximum data transfer size that can be less than or equal to mdts. Since zone append commands will not be allowed to be split, the user has to be able to get the maximum zone append data transfer size. Add a function that returns this limit. Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com> Change-Id: I9da2672ea8a307ff62251c069a42f7540765e08b Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5140 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
38d59d8b5a
commit
23a1916935
@ -98,6 +98,15 @@ uint64_t spdk_nvme_zns_ns_get_num_zones(struct spdk_nvme_ns *ns);
|
|||||||
*/
|
*/
|
||||||
const struct spdk_nvme_zns_ctrlr_data *spdk_nvme_zns_ctrlr_get_data(struct spdk_nvme_ctrlr *ctrlr);
|
const struct spdk_nvme_zns_ctrlr_data *spdk_nvme_zns_ctrlr_get_data(struct spdk_nvme_ctrlr *ctrlr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the maximum zone append data transfer size of a given NVMe controller.
|
||||||
|
*
|
||||||
|
* \param ctrlr Opaque handle to NVMe controller.
|
||||||
|
*
|
||||||
|
* \return Maximum zone append data transfer size of the NVMe controller in bytes.
|
||||||
|
*/
|
||||||
|
uint32_t spdk_nvme_zns_ctrlr_get_max_zone_append_size(const struct spdk_nvme_ctrlr *ctrlr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Submit a Close Zone operation to the specified NVMe namespace.
|
* Submit a Close Zone operation to the specified NVMe namespace.
|
||||||
*
|
*
|
||||||
|
@ -35,7 +35,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..)
|
|||||||
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
|
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
|
||||||
|
|
||||||
SO_VER := 4
|
SO_VER := 4
|
||||||
SO_MINOR := 1
|
SO_MINOR := 2
|
||||||
|
|
||||||
C_SRCS = nvme_ctrlr_cmd.c nvme_ctrlr.c nvme_fabric.c nvme_ns_cmd.c nvme_ns.c nvme_pcie.c nvme_qpair.c nvme.c nvme_quirks.c nvme_transport.c nvme_uevent.c nvme_ctrlr_ocssd_cmd.c \
|
C_SRCS = nvme_ctrlr_cmd.c nvme_ctrlr.c nvme_fabric.c nvme_ns_cmd.c nvme_ns.c nvme_pcie.c nvme_qpair.c nvme.c nvme_quirks.c nvme_transport.c nvme_uevent.c nvme_ctrlr_ocssd_cmd.c \
|
||||||
nvme_ns_ocssd_cmd.c nvme_tcp.c nvme_opal.c nvme_io_msg.c nvme_poll_group.c nvme_zns.c
|
nvme_ns_ocssd_cmd.c nvme_tcp.c nvme_opal.c nvme_io_msg.c nvme_poll_group.c nvme_zns.c
|
||||||
|
@ -1667,6 +1667,14 @@ nvme_ctrlr_identify_zns_specific_done(void *arg, const struct spdk_nvme_cpl *cpl
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* A zero zasl value means use mdts */
|
||||||
|
if (ctrlr->cdata_zns->zasl) {
|
||||||
|
uint32_t max_append = ctrlr->min_page_size * (1 << ctrlr->cdata_zns->zasl);
|
||||||
|
ctrlr->max_zone_append_size = spdk_min(ctrlr->max_xfer_size, max_append);
|
||||||
|
} else {
|
||||||
|
ctrlr->max_zone_append_size = ctrlr->max_xfer_size;
|
||||||
|
}
|
||||||
|
|
||||||
nvme_ctrlr_set_state(ctrlr, NVME_CTRLR_STATE_GET_ZNS_CMD_EFFECTS_LOG,
|
nvme_ctrlr_set_state(ctrlr, NVME_CTRLR_STATE_GET_ZNS_CMD_EFFECTS_LOG,
|
||||||
ctrlr->opts.admin_timeout_ms);
|
ctrlr->opts.admin_timeout_ms);
|
||||||
}
|
}
|
||||||
|
@ -848,6 +848,9 @@ struct spdk_nvme_ctrlr {
|
|||||||
|
|
||||||
/* scratchpad pointer that can be used to send data between two NVME_CTRLR_STATEs */
|
/* scratchpad pointer that can be used to send data between two NVME_CTRLR_STATEs */
|
||||||
void *tmp_ptr;
|
void *tmp_ptr;
|
||||||
|
|
||||||
|
/* maximum zone append size in bytes */
|
||||||
|
uint32_t max_zone_append_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct spdk_nvme_probe_ctx {
|
struct spdk_nvme_probe_ctx {
|
||||||
|
@ -60,6 +60,12 @@ spdk_nvme_zns_ctrlr_get_data(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
return ctrlr->cdata_zns;
|
return ctrlr->cdata_zns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
spdk_nvme_zns_ctrlr_get_max_zone_append_size(const struct spdk_nvme_ctrlr *ctrlr)
|
||||||
|
{
|
||||||
|
return ctrlr->max_zone_append_size;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
nvme_zns_zone_mgmt_recv(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair,
|
nvme_zns_zone_mgmt_recv(struct spdk_nvme_ns *ns, struct spdk_nvme_qpair *qpair,
|
||||||
void *payload, uint32_t payload_size, uint64_t slba,
|
void *payload, uint32_t payload_size, uint64_t slba,
|
||||||
|
@ -163,6 +163,7 @@
|
|||||||
spdk_nvme_zns_ns_get_zone_size;
|
spdk_nvme_zns_ns_get_zone_size;
|
||||||
spdk_nvme_zns_ns_get_num_zones;
|
spdk_nvme_zns_ns_get_num_zones;
|
||||||
spdk_nvme_zns_ctrlr_get_data;
|
spdk_nvme_zns_ctrlr_get_data;
|
||||||
|
spdk_nvme_zns_ctrlr_get_max_zone_append_size;
|
||||||
spdk_nvme_zns_close_zone;
|
spdk_nvme_zns_close_zone;
|
||||||
spdk_nvme_zns_finish_zone;
|
spdk_nvme_zns_finish_zone;
|
||||||
spdk_nvme_zns_open_zone;
|
spdk_nvme_zns_open_zone;
|
||||||
|
Loading…
Reference in New Issue
Block a user