@@ -44,6 +44,7 @@ block_ss.add(files(
'vmdk.c',
'vpc.c',
'write-threshold.c',
+ 'zoned.c',
), zstd, zlib, gnutls)
softmmu_ss.add(when: 'CONFIG_TCG', if_true: files('blkreplay.c'))
@@ -61,6 +61,13 @@
#define BLOCK_OPT_DATA_FILE_RAW "data_file_raw"
#define BLOCK_OPT_COMPRESSION_TYPE "compression_type"
#define BLOCK_OPT_EXTL2 "extended_l2"
+#define BLOCK_OPT_Z_TYPE "zoned"
+#define BLOCK_OPT_Z_ZSIZE "zone_size"
+#define BLOCK_OPT_Z_NR_COV "zone_nr_conv"
+#define BLOCK_OPT_Z_NR_SEQ "zone_nr_seq"
+#define BLOCK_OPT_Z_MAS "max_append_sectors"
+#define BLOCK_OPT_Z_MAZ "max_active_zones"
+#define BLOCK_OPT_Z_MOZ "max_open_zones"
#define BLOCK_PROBE_BUF_SIZE 512
@@ -363,7 +363,7 @@
# 0.14 this can be: 'blkdebug', 'bochs', 'cloop', 'cow', 'dmg',
# 'file', 'file', 'ftp', 'ftps', 'host_cdrom', 'host_device',
# 'http', 'https', 'luks', 'nbd', 'parallels', 'qcow',
-# 'qcow2', 'raw', 'vdi', 'vmdk', 'vpc', 'vvfat'
+# 'qcow2', 'raw', 'vdi', 'vmdk', 'vpc', 'vvfat', 'zoned'
# 2.2: 'archipelago' added, 'cow' dropped
# 2.3: 'host_floppy' deprecated
# 2.5: 'host_floppy' dropped
@@ -2958,7 +2958,7 @@
'luks', 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme',
{ 'name': 'nvme-io_uring', 'if': 'CONFIG_BLKIO' },
'parallels', 'preallocate', 'qcow', 'qcow2', 'qed', 'quorum',
- 'raw', 'rbd',
+ 'raw', 'rbd', 'zoned',
{ 'name': 'replication', 'if': 'CONFIG_REPLICATION' },
'ssh', 'throttle', 'vdi', 'vhdx',
{ 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' },
@@ -4227,6 +4227,20 @@
'base': 'BlockdevOptionsGenericFormat',
'data': { '*offset': 'int', '*size': 'int' } }
+##
+# @BlockdevOptionsZoned:
+#
+# Driver specific block device options for the zoned driver.
+#
+# @offset: position where the block device starts
+# @size: the assumed size of the device
+#
+# Since: 2.9
+##
+{ 'struct': 'BlockdevOptionsZoned',
+ 'base': 'BlockdevOptionsGenericFormat',
+ 'data': { '*offset': 'int', '*size': 'int'} }
+
##
# @BlockdevOptionsThrottle:
#
@@ -4419,6 +4433,7 @@
'vmdk': 'BlockdevOptionsGenericCOWFormat',
'vpc': 'BlockdevOptionsGenericFormat',
'vvfat': 'BlockdevOptionsVVFAT',
+ 'zoned': 'BlockdevOptionsZoned',
'zoned_host_device': { 'type': 'BlockdevOptionsFile',
'if': 'CONFIG_BLKZONED' }
} }
@@ -4980,6 +4995,28 @@
'*subformat': 'BlockdevVpcSubformat',
'*force-size': 'bool' } }
+##
+# @BlockdevCreateOptionsZoned:
+#
+# Driver specific image creation options for zoned device.
+#
+# @file: Node to create the image format on
+# @size: Size of the virtual disk in bytes
+#
+# Since: 7.2
+##
+{ 'struct': 'BlockdevCreateOptionsZoned',
+ 'data': { 'file': 'BlockdevRef',
+ 'size': 'size',
+ 'zone-size': 'size',
+ 'zoned': 'int',
+ 'zone-nr-conv': 'int',
+ 'zone-nr-seq': 'int',
+ 'max-open-zones': 'int',
+ 'max-active-zones': 'int',
+ 'max-append-sectors': 'int'}}
+
+
##
# @BlockdevCreateOptions:
#
@@ -5007,7 +5044,8 @@
'vdi': 'BlockdevCreateOptionsVdi',
'vhdx': 'BlockdevCreateOptionsVhdx',
'vmdk': 'BlockdevCreateOptionsVmdk',
- 'vpc': 'BlockdevCreateOptionsVpc'
+ 'vpc': 'BlockdevCreateOptionsVpc',
+ 'zoned': 'BlockdevCreateOptionsZoned'
} }
##
To configure a zoned format driver, it has following arguments: device size, zoned model, zone size, number of conventional zones, number of sequential zones, max append sectors, max open zones, and max_active_zones. Signed-off-by: Sam Li <faithilikerun@gmail.com> --- block/meson.build | 1 + include/block/block_int-common.h | 7 +++++ qapi/block-core.json | 44 +++++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 3 deletions(-)