diff --git a/block/meson.build b/block/meson.build index 34b1b2a306..24ca0f1e52 100644 --- a/block/meson.build +++ b/block/meson.build @@ -114,6 +114,7 @@ foreach m : [ [libnfs, 'nfs', files('nfs.c')], [libssh, 'ssh', files('ssh.c')], [rbd, 'rbd', files('rbd.c')], + [vitastor, 'vitastor', files('vitastor.c')], ] if m[0].found() module_ss = ss.source_set() diff --git a/meson.build b/meson.build index d9293294d8..776a5becc6 100644 --- a/meson.build +++ b/meson.build @@ -1665,6 +1665,26 @@ if not get_option('rbd').auto() or have_block endif endif +vitastor = not_found +if not get_option('vitastor').auto() or have_block + libvitastor_client = cc.find_library('vitastor_client', has_headers: ['vitastor_c.h'], + required: get_option('vitastor')) + if libvitastor_client.found() + if cc.links(''' + #include + int main(void) { + vitastor_c_create_qemu(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + return 0; + }''', dependencies: libvitastor_client) + vitastor = declare_dependency(dependencies: libvitastor_client) + elif get_option('vitastor').enabled() + error('could not link libvitastor_client') + else + warning('could not link libvitastor_client, disabling') + endif + endif +endif + glusterfs = not_found glusterfs_ftruncate_has_stat = false glusterfs_iocb_has_stat = false @@ -2509,6 +2529,7 @@ endif config_host_data.set('CONFIG_OPENGL', opengl.found()) config_host_data.set('CONFIG_PLUGIN', get_option('plugins')) config_host_data.set('CONFIG_RBD', rbd.found()) +config_host_data.set('CONFIG_VITASTOR', vitastor.found()) config_host_data.set('CONFIG_RDMA', rdma.found()) config_host_data.set('CONFIG_RELOCATABLE', get_option('relocatable')) config_host_data.set('CONFIG_SAFESTACK', get_option('safe_stack')) @@ -4948,6 +4969,7 @@ summary_info += {'fdt support': fdt_opt == 'internal' ? 'internal' : fdt} summary_info += {'libcap-ng support': libcap_ng} summary_info += {'bpf support': libbpf} summary_info += {'rbd support': rbd} +summary_info += {'vitastor support': vitastor} summary_info += {'smartcard support': cacard} summary_info += {'U2F support': u2f} summary_info += {'libusb': libusb} diff --git a/meson_options.txt b/meson_options.txt index 2836156257..148086cc6f 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -206,6 +206,8 @@ option('pvg', type: 'feature', value: 'auto', description: 'macOS paravirtualized graphics support') option('rbd', type : 'feature', value : 'auto', description: 'Ceph block device driver') +option('vitastor', type : 'feature', value : 'auto', + description: 'Vitastor block device driver') option('opengl', type : 'feature', value : 'auto', description: 'OpenGL support') option('rdma', type : 'feature', value : 'auto', diff --git a/qapi/block-core.json b/qapi/block-core.json index b82af74256..f25a6f5ce8 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -3351,7 +3351,7 @@ 'parallels', 'preallocate', 'qcow', 'qcow2', 'qed', 'quorum', 'raw', 'rbd', { 'name': 'replication', 'if': 'CONFIG_REPLICATION' }, - 'ssh', 'throttle', 'vdi', 'vhdx', + 'ssh', 'throttle', 'vdi', 'vhdx', 'vitastor', { 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' }, { 'name': 'virtio-blk-vhost-user', 'if': 'CONFIG_BLKIO' }, { 'name': 'virtio-blk-vhost-vdpa', 'if': 'CONFIG_BLKIO' }, @@ -4434,6 +4434,28 @@ '*key-secret': 'str', '*server': ['InetSocketAddressBase'] } } +## +# @BlockdevOptionsVitastor: +# +# Driver specific block device options for vitastor +# +# @image: Image name +# @inode: Inode number +# @pool: Pool ID +# @size: Desired image size in bytes +# @config-path: Path to Vitastor configuration +# @etcd-host: etcd connection address(es) +# @etcd-prefix: etcd key/value prefix +## +{ 'struct': 'BlockdevOptionsVitastor', + 'data': { '*inode': 'uint64', + '*pool': 'uint64', + '*size': 'uint64', + '*image': 'str', + '*config-path': 'str', + '*etcd-host': 'str', + '*etcd-prefix': 'str' } } + ## # @ReplicationMode: # @@ -4902,6 +4924,7 @@ 'throttle': 'BlockdevOptionsThrottle', 'vdi': 'BlockdevOptionsGenericFormat', 'vhdx': 'BlockdevOptionsGenericFormat', + 'vitastor': 'BlockdevOptionsVitastor', 'virtio-blk-vfio-pci': { 'type': 'BlockdevOptionsVirtioBlkVfioPci', 'if': 'CONFIG_BLKIO' }, @@ -5376,6 +5399,20 @@ '*cluster-size' : 'size', '*encrypt' : 'RbdEncryptionCreateOptions' } } +## +# @BlockdevCreateOptionsVitastor: +# +# Driver specific image creation options for Vitastor. +# +# @location: Where to store the new image file. This location cannot +# point to a snapshot. +# +# @size: Size of the virtual disk in bytes +## +{ 'struct': 'BlockdevCreateOptionsVitastor', + 'data': { 'location': 'BlockdevOptionsVitastor', + 'size': 'size' } } + ## # @BlockdevVmdkSubformat: # @@ -5598,6 +5635,7 @@ 'ssh': 'BlockdevCreateOptionsSsh', 'vdi': 'BlockdevCreateOptionsVdi', 'vhdx': 'BlockdevCreateOptionsVhdx', + 'vitastor': 'BlockdevCreateOptionsVitastor', 'vmdk': 'BlockdevCreateOptionsVmdk', 'vpc': 'BlockdevCreateOptionsVpc' } } diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh index 3d0d132344..65ee8c855e 100644 --- a/scripts/meson-buildoptions.sh +++ b/scripts/meson-buildoptions.sh @@ -177,6 +177,7 @@ meson_options_help() { printf "%s\n" ' qga-vss build QGA VSS support (broken with MinGW)' printf "%s\n" ' qpl Query Processing Library support' printf "%s\n" ' rbd Ceph block device driver' + printf "%s\n" ' vitastor Vitastor block device driver' printf "%s\n" ' rdma Enable RDMA-based migration' printf "%s\n" ' replication replication support' printf "%s\n" ' rust Rust support' @@ -464,6 +465,8 @@ _meson_option_parse() { --disable-qpl) printf "%s" -Dqpl=disabled ;; --enable-rbd) printf "%s" -Drbd=enabled ;; --disable-rbd) printf "%s" -Drbd=disabled ;; + --enable-vitastor) printf "%s" -Dvitastor=enabled ;; + --disable-vitastor) printf "%s" -Dvitastor=disabled ;; --enable-rdma) printf "%s" -Drdma=enabled ;; --disable-rdma) printf "%s" -Drdma=disabled ;; --enable-relocatable) printf "%s" -Drelocatable=true ;;