+63
−0
+6
−0
+65
−2
+25
−0
+2
−0
Loading
We already have support for spdk_nvme_zns_zone_append(), add support for spdk_nvme_zns_zone_appendv() (zone append with NVME_PAYLOAD_TYPE_SGL). _nvme_ns_cmd_rw() currently performs verification of the SGL, if the parameter check_sgl is set. This parameter is set for all calls with payload of type NVME_PAYLOAD_TYPE_SGL. In order to be able to perform the same check_sgl verfication on zone append vectors, we need to refactor _nvme_ns_cmd_rw() a bit. Setting check_sgl ensures that _nvme_ns_cmd_split_request_sgl() or _nvme_ns_cmd_split_request_prp() gets called. These functions will split an oversized I/O into several different requests. However, they also iterate the SGE entries, verifies that the total payload size, total SGE entries is not too many, and that buffers are properly aligned. A proper request will not get split. For zone append, splitting a request into several is not allowed, however, we still want the verification part to be done, such that (e.g.) a non first/last SGE which is not page aligned, will cause the whole request to be rejected. (In the case of spdk_nvme_ns_cmd_write(), a non first/last SGE which is not page aligned will instead cause the request to be split.) An alternative would be to try to rip out the verification part from _nvme_ns_cmd_split_request_sgl() and _nvme_ns_cmd_split_request_prp(). However, that is non-trivial, and would most likely end up with a lot of duplicated code, which would easily get out of sync. Signed-off-by:Niklas Cassel <niklas.cassel@wdc.com> Change-Id: I2728acdcadeb70b1f0ed628704df19e75d14dcca Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6248 Tested-by:
SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Reviewed-by:
Ben Walker <benjamin.walker@intel.com> Reviewed-by:
Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by:
Jim Harris <james.r.harris@intel.com>