Loading
examples/nvme_fio_plugin: fix zone reporting
All zone management receive helper functions (including spdk_nvme_zns_report_zones()) are implemented to match the parameters of the zone management receive function in the ZNS specification. The documentation for spdk_nvme_zns_report_zones() states: "param partial_report If true, nr_zones field in the zone report indicates the number of zone descriptors that were successfully written to the zone report. If false, nr_zones field in the zone report indicates the number of zone descriptors that match the report_opts criteria." This matches the description of the "Partial Report" bit in the ZNS spec. Since the FIO function parse_zone_info() calls the io_ops->report_zones() function multiple times, until all zones have been reported, it expects the return from this function to represent the number of zones that were successfully reported. By setting the partial_report bit to false, the controller will return the total number of zones, and since spdk_fio_report_zones() loops until idx < report->nr_zones, and writes to zbdz[idx], the current code will overwrite heap memory, since idx will take on index values that are out of bounds for the memory allocated by the FIO function parse_zone_info(). Therefore, spdk_fio_report_zones() has to set the partial_report bit to true when calling the NVMe level function spdk_nvme_zns_report_zones(). Signed-off-by:Niklas Cassel <niklas.cassel@wdc.com> Change-Id: I8846711bfed4faadac0315b450158293cefa36f4 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4871 Community-CI: Mellanox Build Bot Tested-by:
SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by:
Simon A. F. Lund <simon.lund@samsung.com> Reviewed-by:
Jim Harris <james.r.harris@intel.com> Reviewed-by:
Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>