Index: pve-qemu-kvm-5.2.0/qapi/block-core.json
===================================================================
--- pve-qemu-kvm-5.2.0.orig/qapi/block-core.json
+++ pve-qemu-kvm-5.2.0/qapi/block-core.json
@@ -3076,7 +3076,7 @@
             'luks', 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme', 'parallels',
             'qcow', 'qcow2', 'qed', 'quorum', 'raw', 'rbd',
             { 'name': 'replication', 'if': 'defined(CONFIG_REPLICATION)' },
-            'sheepdog', 'pbs',
+            'sheepdog', 'pbs', 'vitastor',
             'ssh', 'throttle', 'vdi', 'vhdx', 'vmdk', 'vpc', 'vvfat' ] }
 
 ##
@@ -3924,6 +3924,28 @@
             '*tag': 'str' } }
 
 ##
+# @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:
 #
 # An enumeration of replication modes.
@@ -4272,6 +4294,7 @@
       'replication': { 'type': 'BlockdevOptionsReplication',
                        'if': 'defined(CONFIG_REPLICATION)' },
       'sheepdog':   'BlockdevOptionsSheepdog',
+      'vitastor':   'BlockdevOptionsVitastor',
       'ssh':        'BlockdevOptionsSsh',
       'throttle':   'BlockdevOptionsThrottle',
       'vdi':        'BlockdevOptionsGenericFormat',
@@ -4662,6 +4685,17 @@
             '*cluster-size' :   'size' } }
 
 ##
+# @BlockdevCreateOptionsVitastor:
+#
+# Driver specific image creation options for Vitastor.
+#
+# @size: Size of the virtual disk in bytes
+##
+{ 'struct': 'BlockdevCreateOptionsVitastor',
+  'data': { 'location':         'BlockdevOptionsVitastor',
+            'size':             'size' } }
+
+##
 # @BlockdevVmdkSubformat:
 #
 # Subformat options for VMDK images
@@ -4923,6 +4957,7 @@
       'qed':            'BlockdevCreateOptionsQed',
       'rbd':            'BlockdevCreateOptionsRbd',
       'sheepdog':       'BlockdevCreateOptionsSheepdog',
+      'vitastor':       'BlockdevCreateOptionsVitastor',
       'ssh':            'BlockdevCreateOptionsSsh',
       'vdi':            'BlockdevCreateOptionsVdi',
       'vhdx':           'BlockdevCreateOptionsVhdx',
Index: pve-qemu-kvm-5.2.0/block/meson.build
===================================================================
--- pve-qemu-kvm-5.2.0.orig/block/meson.build
+++ pve-qemu-kvm-5.2.0/block/meson.build
@@ -89,6 +89,7 @@ foreach m : [
   ['CONFIG_LIBNFS', 'nfs', libnfs, 'nfs.c'],
   ['CONFIG_LIBSSH', 'ssh', libssh, 'ssh.c'],
   ['CONFIG_RBD', 'rbd', rbd, 'rbd.c'],
+  ['CONFIG_VITASTOR', 'vitastor', vitastor, 'vitastor.c'],
 ]
   if config_host.has_key(m[0])
     if enable_modules
Index: pve-qemu-kvm-5.2.0/configure
===================================================================
--- pve-qemu-kvm-5.2.0.orig/configure
+++ pve-qemu-kvm-5.2.0/configure
@@ -372,6 +372,7 @@ trace_backends="log"
 trace_file="trace"
 spice=""
 rbd=""
+vitastor=""
 smartcard=""
 u2f="auto"
 libusb=""
@@ -1264,6 +1265,10 @@ for opt do
   ;;
   --enable-rbd) rbd="yes"
   ;;
+  --disable-vitastor) vitastor="no"
+  ;;
+  --enable-vitastor) vitastor="yes"
+  ;;
   --disable-xfsctl) xfs="no"
   ;;
   --enable-xfsctl) xfs="yes"
@@ -1807,6 +1812,7 @@ disabled with --disable-FEATURE, default
   vhost-vdpa      vhost-vdpa kernel backend support
   spice           spice
   rbd             rados block device (rbd)
+  vitastor        vitastor block device
   libiscsi        iscsi support
   libnfs          nfs support
   smartcard       smartcard support (libcacard)
@@ -3700,6 +3706,27 @@ EOF
 fi
 
 ##########################################
+# vitastor probe
+if test "$vitastor" != "no" ; then
+  cat > $TMPC <<EOF
+#include <vitastor_c.h>
+int main(void) {
+  vitastor_c_create_qemu(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  return 0;
+}
+EOF
+  vitastor_libs="-lvitastor_client"
+  if compile_prog "" "$vitastor_libs" ; then
+    vitastor=yes
+  else
+    if test "$vitastor" = "yes" ; then
+      feature_not_found "vitastor block device" "Install vitastor-client-dev"
+    fi
+    vitastor=no
+  fi
+fi
+
+##########################################
 # libssh probe
 if test "$libssh" != "no" ; then
   if $pkg_config --exists libssh; then
@@ -6437,6 +6464,10 @@ if test "$rbd" = "yes" ; then
   echo "CONFIG_RBD=y" >> $config_host_mak
   echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
 fi
+if test "$vitastor" = "yes" ; then
+  echo "CONFIG_VITASTOR=y" >> $config_host_mak
+  echo "VITASTOR_LIBS=$vitastor_libs" >> $config_host_mak
+fi
 
 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
 if test "$coroutine_pool" = "yes" ; then
Index: pve-qemu-kvm-5.2.0/meson.build
===================================================================
--- pve-qemu-kvm-5.2.0.orig/meson.build
+++ pve-qemu-kvm-5.2.0/meson.build
@@ -596,6 +596,10 @@ rbd = not_found
 if 'CONFIG_RBD' in config_host
   rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split())
 endif
+vitastor = not_found
+if 'CONFIG_VITASTOR' in config_host
+  vitastor = declare_dependency(link_args: config_host['VITASTOR_LIBS'].split())
+endif
 glusterfs = not_found
 if 'CONFIG_GLUSTERFS' in config_host
   glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(),
@@ -2151,6 +2155,7 @@ endif
 # TODO: add back protocol and server version
 summary_info += {'spice support':     config_host.has_key('CONFIG_SPICE')}
 summary_info += {'rbd support':       config_host.has_key('CONFIG_RBD')}
+summary_info += {'vitastor support':  config_host.has_key('CONFIG_VITASTOR')}
 summary_info += {'xfsctl support':    config_host.has_key('CONFIG_XFS')}
 summary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
 summary_info += {'U2F support':       u2f.found()}
