Loading
nvme/fio_plugin: fix report_zones
Commit f69367c7 ("fio_nvme: defer qpair allocation to file_open callback") moved the qpair allocation from spdk_fio_setup() to spdk_fio_open(). This broke spdk_fio_report_zones(), which needs a qpair in order to get the initial state of the zones. setup_files() in FIO calls td->io_ops->setup() (spdk_fio_setup()), followed by zbd_init_files(), which calls zbd_init_zone_info(), which calls zbd_create_zone_info(), which calls parse_zone_info(), which calls zbd_report_zones(), which calls td->io_ops->report_zones() (spdk_fio_report_zones()). i.e. spdk_fio_report_zones() will always be called directly after spdk_fio_setup(). .report_zones() is even called before the per thread ioengine .init() callback. Therefore, spdk_fio_report_zones() is called before the ioengine .open_file() callback. This is done in order to ensure that all threads will share the same zbd_info struct, which contains the per zone locks. Since SPDK nvme ioengine no longer initializes the qpairs in .setup(), create a temporary qpair in .report_zones(). Signed-off-by:Niklas Cassel <niklas.cassel@wdc.com> Change-Id: Ic376ac7844e40fceff092900ae7e4714bccf38e6 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7590 Community-CI: Mellanox Build Bot Reviewed-by:
Jim Harris <james.r.harris@intel.com> Reviewed-by:
Ben Walker <benjamin.walker@intel.com> Tested-by:
SPDK CI Jenkins <sys_sgci@intel.com>