summaryrefslogtreecommitdiff
path: root/engines/skeleton_external.c
diff options
context:
space:
mode:
authorDamien Le Moal <damien.lemoal@wdc.com>2020-04-07 10:58:58 +0900
committerJens Axboe <axboe@kernel.dk>2020-04-07 14:47:03 -0600
commit6c5b11d3d31fc6a9ae6ba8602ffc03e729476f57 (patch)
treeea4f95976b3dc43ac10f1de6bbbe0b90a5752c22 /engines/skeleton_external.c
parentb76949618d557bd63181245aa522ead9b92d274b (diff)
downloadfio-6c5b11d3d31fc6a9ae6ba8602ffc03e729476f57.tar.gz
fio-6c5b11d3d31fc6a9ae6ba8602ffc03e729476f57.tar.bz2
ioengines: Add zoned block device operations
Define three new IO engines operations: zoned model discovery, zone information report and zone write pointer reset. These allow an ioengine to provide special implementation of these operations if the system does not support them natively through system calls or on Linux to replace the default Linux blkzoned.h ioctl based generic implementation in oslib/linux-blkzoned.c. FIO internal and external ioengines using direct device access (e.g. Linux SG) or OS specific IO engines can provide an implementation of these method to enabled zoned block device zonemode=zbd workloads. On Linux, the IO engine zone operations have precedence over the default zone operation implementation in oslib/linux-blkzoned.c. This patch also increments FIO_IOOPS_VERSION to 26 and adds a skeleton implementation of the new ioengine operations in engines/skeleton_external.c. Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'engines/skeleton_external.c')
-rw-r--r--engines/skeleton_external.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/engines/skeleton_external.c b/engines/skeleton_external.c
index 1b6625b2..7f3e4cb3 100644
--- a/engines/skeleton_external.c
+++ b/engines/skeleton_external.c
@@ -154,6 +154,46 @@ static int fio_skeleton_close(struct thread_data *td, struct fio_file *f)
}
/*
+ * Hook for getting the zoned model of a zoned block device for zonemode=zbd.
+ * The zoned model can be one of (see zbd_types.h):
+ * - ZBD_IGNORE: skip regular files
+ * - ZBD_NONE: regular block device (zone emulation will be used)
+ * - ZBD_HOST_AWARE: host aware zoned block device
+ * - ZBD_HOST_MANAGED: host managed zoned block device
+ */
+static int fio_skeleton_get_zoned_model(struct thread_data *td,
+ struct fio_file *f, enum zbd_zoned_model *model)
+{
+ *model = ZBD_NONE;
+ return 0;
+}
+
+/*
+ * Hook called for getting zone information of a ZBD_HOST_AWARE or
+ * ZBD_HOST_MANAGED zoned block device. Up to @nr_zones zone information
+ * structures can be reported using the array zones for zones starting from
+ * @offset. The number of zones reported must be returned or a negative error
+ * code in case of error.
+ */
+static int fio_skeleton_report_zones(struct thread_data *td, struct fio_file *f,
+ uint64_t offset, struct zbd_zone *zones,
+ unsigned int nr_zones)
+{
+ return 0;
+}
+
+/*
+ * Hook called for resetting the write pointer position of zones of a
+ * ZBD_HOST_AWARE or ZBD_HOST_MANAGED zoned block device. The write pointer
+ * position of all zones in the range @offset..@offset + @length must be reset.
+ */
+static int fio_skeleton_reset_wp(struct thread_data *td, struct fio_file *f,
+ uint64_t offset, uint64_t length)
+{
+ return 0;
+}
+
+/*
* Note that the structure is exported, so that fio can get it via
* dlsym(..., "ioengine"); for (and only for) external engines.
*/
@@ -169,6 +209,9 @@ struct ioengine_ops ioengine = {
.cleanup = fio_skeleton_cleanup,
.open_file = fio_skeleton_open,
.close_file = fio_skeleton_close,
+ .get_zoned_model = fio_skeleton_get_zoned_model,
+ .report_zones = fio_skeleton_report_zones,
+ .reset_wp = fio_skeleton_reset_wp,
.options = options,
.option_struct_size = sizeof(struct fio_skeleton_options),
};