[libvirt PATCH 2/2] remove sheepdog support from libvirt

Pavel Hrdina phrdina at redhat.com
Mon Apr 19 10:47:59 UTC 2021


Upstream sheepdog project doesn't have any active development for almost
3 years as the last commit is from 28/06/2018 [1].

Looking into repology [2] the latest version 1.0.1 is included only in
Fedora (since Fedora 26). There are only few other distributions having
older sheepdog versions: Debian oldstable (stretch), EPEL 6, Ubuntu
18.04 and older and few other less-common distributions.

Based on the data above drop support for sheepdog from libvirt.

[1] <https://github.com/sheepdog/sheepdog/commits/master>
[2] <https://repology.org/project/sheepdog/versions>

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 docs/formatdomain.rst                         |  13 +-
 docs/formatstorage.html.in                    |   5 +-
 docs/kbase/rpm-deployment.rst                 |   6 -
 docs/manpages/virsh.rst                       |   7 +-
 docs/schemas/domaincommon.rng                 |   1 -
 docs/schemas/storagepool.rng                  |  22 -
 docs/storage.html.in                          |  59 ---
 libvirt.spec.in                               |  36 --
 meson.build                                   |   6 -
 meson_options.txt                             |   1 -
 mingw-libvirt.spec.in                         |   1 -
 po/POTFILES.in                                |   1 -
 src/conf/domain_conf.c                        |   1 -
 src/conf/storage_conf.c                       |  12 +-
 src/conf/storage_conf.h                       |   2 -
 src/conf/storage_source_conf.c                |   4 -
 src/conf/storage_source_conf.h                |   1 -
 src/conf/virstorageobj.c                      |   9 -
 src/libvirt-storage.c                         |   1 -
 src/libxl/libxl_conf.c                        |   1 -
 src/libxl/xen_xl.c                            |   1 -
 src/qemu/qemu_block.c                         |  41 --
 src/qemu/qemu_command.c                       |  20 -
 src/qemu/qemu_domain.c                        |   1 -
 src/qemu/qemu_snapshot.c                      |   3 -
 src/storage/meson.build                       |  25 --
 src/storage/storage_backend.c                 |   6 -
 src/storage/storage_backend_sheepdog.c        | 378 ------------------
 src/storage/storage_backend_sheepdog.h        |  25 --
 src/storage/storage_backend_sheepdog_priv.h   |  30 --
 src/storage/storage_driver.c                  |   1 -
 .../storage_source_backingstore.c             |  44 --
 src/test/test_driver.c                        |   1 -
 tests/meson.build                             |   6 -
 tests/qemublocktest.c                         |   4 -
 .../imagecreate/network-sheepdog-qcow2.json   |  20 -
 .../imagecreate/network-sheepdog-qcow2.xml    |  12 -
 tests/qemusecuritytest.c                      |   1 -
 .../disk-network-sheepdog.args                |  30 --
 .../disk-network-sheepdog.x86_64-2.12.0.args  |  34 --
 .../disk-network-sheepdog.x86_64-latest.args  |  38 --
 .../disk-network-sheepdog.xml                 |  37 --
 tests/qemuxml2argvtest.c                      |   3 -
 .../disk-network-sheepdog.xml                 |  43 --
 tests/qemuxml2xmltest.c                       |   1 -
 tests/storagebackendsheepdogtest.c            | 206 ----------
 .../storagepoolcapsschemadata/poolcaps-fs.xml |   2 -
 .../poolcaps-full.xml                         |   2 -
 tests/storagepoolxml2argvtest.c               |   2 -
 tests/storagepoolxml2xmlin/pool-sheepdog.xml  |   8 -
 tests/storagepoolxml2xmlout/pool-sheepdog.xml |  11 -
 tests/storagepoolxml2xmltest.c                |   1 -
 tests/storagevolxml2xmlin/vol-sheepdog.xml    |  10 -
 tests/storagevolxml2xmlout/vol-sheepdog.xml   |   8 -
 tests/storagevolxml2xmltest.c                 |   1 -
 .../deflatten-qemu-sheepdog-in.json           |  11 -
 .../deflatten-qemu-sheepdog-out.json          |  13 -
 tests/virjsontest.c                           |   1 -
 tests/virstoragetest.c                        |  21 -
 tools/virsh-pool.c                            |   3 -
 tools/virsh.c                                 |   3 -
 61 files changed, 8 insertions(+), 1289 deletions(-)
 delete mode 100644 src/storage/storage_backend_sheepdog.c
 delete mode 100644 src/storage/storage_backend_sheepdog.h
 delete mode 100644 src/storage/storage_backend_sheepdog_priv.h
 delete mode 100644 tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.json
 delete mode 100644 tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.xml
 delete mode 100644 tests/qemuxml2argvdata/disk-network-sheepdog.args
 delete mode 100644 tests/qemuxml2argvdata/disk-network-sheepdog.x86_64-2.12.0.args
 delete mode 100644 tests/qemuxml2argvdata/disk-network-sheepdog.x86_64-latest.args
 delete mode 100644 tests/qemuxml2argvdata/disk-network-sheepdog.xml
 delete mode 100644 tests/qemuxml2xmloutdata/disk-network-sheepdog.xml
 delete mode 100644 tests/storagebackendsheepdogtest.c
 delete mode 100644 tests/storagepoolxml2xmlin/pool-sheepdog.xml
 delete mode 100644 tests/storagepoolxml2xmlout/pool-sheepdog.xml
 delete mode 100644 tests/storagevolxml2xmlin/vol-sheepdog.xml
 delete mode 100644 tests/storagevolxml2xmlout/vol-sheepdog.xml
 delete mode 100644 tests/virjsondata/deflatten-qemu-sheepdog-in.json
 delete mode 100644 tests/virjsondata/deflatten-qemu-sheepdog-out.json

diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index 4388ad545f..215c273b39 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -2305,16 +2305,6 @@ paravirtualized driver is specified via the ``disk`` element.
        </serial>
      </disk>
        ...
-     <disk type='network'>
-       <driver name="qemu" type="raw" io="threads" ioeventfd="on" event_idx="off"/>
-       <source protocol="sheepdog" name="image_name">
-         <host name="hostname" port="7000"/>
-       </source>
-       <target dev="hdb" bus="ide"/>
-       <boot order='1'/>
-       <transient/>
-       <address type='drive' controller='0' bus='1' unit='0'/>
-     </disk>
      <disk type='network'>
        <driver name="qemu" type="raw"/>
        <source protocol="rbd" name="image_name2">
@@ -2558,7 +2548,7 @@ paravirtualized driver is specified via the ``disk`` element.
       to use as the disk. :since:`Since 0.7.5`
    ``network``
       The ``protocol`` attribute specifies the protocol to access to the
-      requested image. Possible values are "nbd", "iscsi", "rbd", "sheepdog",
+      requested image. Possible values are "nbd", "iscsi", "rbd",
       "gluster", "vxhs", "nfs", "http", "https", "ftp", ftps", or "tftp".
 
       For any ``protocol`` other than ``nbd`` an additional attribute ``name``
@@ -2683,7 +2673,6 @@ paravirtualized driver is specified via the ``disk`` element.
       nbd      a server running nbd-server                             only one                                                     10809
       iscsi    an iSCSI server                                         only one                                                     3260
       rbd      monitor servers of RBD                                  one or more                                                  librados default
-      sheepdog one of the sheepdog servers (default is localhost:7000) zero or one                                                  7000
       gluster  a server running glusterd daemon                        one or more ( :since:`Since 2.1.0` ), just one prior to that 24007
       vxhs     a server running Veritas HyperScale daemon              only one                                                     9999
       nfs      a server running Network File System                    only one ( :since:`Since 7.0.0` )                            must be omitted
diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in
index cac44503da..aac2a4a8e3 100644
--- a/docs/formatstorage.html.in
+++ b/docs/formatstorage.html.in
@@ -22,7 +22,6 @@
       (all <span class="since">since 0.4.1</span>),
       <code>mpath</code> (<span class="since">since 0.7.1</span>),
       <code>rbd</code> (<span class="since">since 0.9.13</span>),
-      <code>sheepdog</code> (<span class="since">since 0.10.0</span>),
       <code>gluster</code> (<span class="since">since 1.2.0</span>),
       <code>zfs</code> (<span class="since">since 1.2.8</span>),
       <code>vstorage</code> (<span class="since">since 3.1.0</span>),
@@ -372,7 +371,7 @@
       <dd>Provides the source for pools backed by storage from a
         remote server (pool types <code>netfs</code>, <code>iscsi</code>,
         <code>iscsi-direct</code>,
-        <code>rbd</code>, <code>sheepdog</code>, <code>gluster</code>). Will be
+        <code>rbd</code>, <code>gluster</code>). Will be
         used in combination with a <code>directory</code>
         or <code>device</code> element. Contains an attribute <code>name</code>
         which is the hostname or IP address of the server. May optionally
@@ -419,7 +418,7 @@
       <dt><code>name</code></dt>
       <dd>Provides the source for pools backed by storage from a
         named element (pool types <code>logical</code>, <code>rbd</code>,
-        <code>sheepdog</code>, <code>gluster</code>).  Contains a
+        <code>gluster</code>).  Contains a
         string identifier.
         <span class="since">Since 0.4.5</span></dd>
       <dt><code>format</code></dt>
diff --git a/docs/kbase/rpm-deployment.rst b/docs/kbase/rpm-deployment.rst
index 568cf5b3eb..3b6b3f17f5 100644
--- a/docs/kbase/rpm-deployment.rst
+++ b/docs/kbase/rpm-deployment.rst
@@ -200,12 +200,6 @@ RPM packages
   disk storage pool type, for the storage pool management APIs.
 
 
-* libvirt-daemon-driver-storage-sheepdog
-
-  The dynamically loadable driver providing an implementation of the SheepDog
-  network storage pool type, for the storage pool management APIs.
-
-
 * libvirt-daemon-driver-storage-zfs
 
   The dynamically loadable driver providing an implementation of the ZFS
diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
index ad91cd6356..50cfee6ae8 100644
--- a/docs/manpages/virsh.rst
+++ b/docs/manpages/virsh.rst
@@ -5891,8 +5891,7 @@ to populate the disk pool. Therefore, it is suggested to use
 to properly initialize the disk pool.
 
 [*--source-host hostname*] provides the source hostname for pools backed
-by storage from a remote server (pool types netfs, iscsi, rbd, sheepdog,
-gluster).
+by storage from a remote server (pool types netfs, iscsi, rbd, gluster).
 
 [*--source-path path*] provides the source directory path for pools backed
 by directories (pool type dir).
@@ -5901,7 +5900,7 @@ by directories (pool type dir).
 devices (pool types fs, logical, disk, iscsi, zfs).
 
 [*--source-name name*] provides the source name for pools backed by storage
-from a named element (pool types logical, rbd, sheepdog, gluster).
+from a named element (pool types logical, rbd, gluster).
 
 [*--target path*] is the path for the mapping of the storage pool into
 the host file system.
@@ -6100,7 +6099,7 @@ without any header. Option *--details* is mutually exclusive with options
 You may also want to list pools with specified types using *type*, the
 pool types must be separated by comma, e.g. --type dir,disk. The valid pool
 types include 'dir', 'fs', 'netfs', 'logical', 'disk', 'iscsi', 'scsi',
-'mpath', 'rbd', 'sheepdog', 'gluster', 'zfs', 'vstorage' and 'iscsi-direct'.
+'mpath', 'rbd', 'gluster', 'zfs', 'vstorage' and 'iscsi-direct'.
 
 The *--details* option instructs virsh to additionally
 display pool persistence and capacity related information where available.
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 20a43148b1..6b200e0b61 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -2002,7 +2002,6 @@
       <interleave>
         <attribute name="protocol">
           <choice>
-            <value>sheepdog</value>
             <value>ftp</value>
             <value>tftp</value>
           </choice>
diff --git a/docs/schemas/storagepool.rng b/docs/schemas/storagepool.rng
index bd24b8b8d0..70ad4c22ad 100644
--- a/docs/schemas/storagepool.rng
+++ b/docs/schemas/storagepool.rng
@@ -22,7 +22,6 @@
         <ref name="poolscsi"/>
         <ref name="poolmpath"/>
         <ref name="poolrbd"/>
-        <ref name="poolsheepdog"/>
         <ref name="poolgluster"/>
         <ref name="poolzfs"/>
         <ref name="poolvstorage"/>
@@ -172,18 +171,6 @@
     </optional>
   </define>
 
-  <define name="poolsheepdog">
-    <attribute name="type">
-      <value>sheepdog</value>
-    </attribute>
-    <interleave>
-      <ref name="commonMetadataNameOptional"/>
-      <ref name="sizing"/>
-      <ref name="features"/>
-      <ref name="sourcesheepdog"/>
-    </interleave>
-  </define>
-
   <define name="poolgluster">
     <attribute name="type">
       <value>gluster</value>
@@ -699,15 +686,6 @@
     </element>
   </define>
 
-  <define name="sourcesheepdog">
-    <element name="source">
-      <interleave>
-        <ref name="sourceinfohost"/>
-        <ref name="sourceinfoname"/>
-      </interleave>
-    </element>
-  </define>
-
   <define name="sourcegluster">
     <element name="source">
       <interleave>
diff --git a/docs/storage.html.in b/docs/storage.html.in
index b2cf343933..04756cd06a 100644
--- a/docs/storage.html.in
+++ b/docs/storage.html.in
@@ -614,65 +614,6 @@
       Only raw volumes are supported.
     </p>
 
-    <h2><a id="StorageBackendSheepdog">Sheepdog pool</a></h2>
-    <p>
-      This provides a pool based on a Sheepdog Cluster.
-      Sheepdog is a distributed storage system for QEMU/KVM.
-      It provides highly available block level storage volumes that
-      can be attached to QEMU/KVM virtual machines.
-
-      The cluster must already be formatted.
-
-      <span class="since">Since 0.9.13</span>
-    </p>
-
-    <h3>Example pool input</h3>
-    <pre>
-<pool type="sheepdog">
-  <name>mysheeppool</name>
-  <source>
-    <name>mysheeppool</name>
-    <host name='localhost' port='7000'/>
-  </source>
-</pool></pre>
-
-    <h3>Example volume output</h3>
-    <pre>
-<volume>
-  <name>myvol</name>
-  <key>sheep/myvol</key>
-  <source>
-  </source>
-  <capacity unit='bytes'>53687091200</capacity>
-  <allocation unit='bytes'>53687091200</allocation>
-  <target>
-    <path>sheepdog:myvol</path>
-    <format type='unknown'/>
-    <permissions>
-      <mode>00</mode>
-      <owner>0</owner>
-      <group>0</group>
-    </permissions>
-  </target>
-</volume></pre>
-
-    <h3>Example disk attachment</h3>
-    <p>Sheepdog images can be attached to QEMU guests.
-    Information about attaching a Sheepdog image to a
-    guest can be found
-    at the <a href="formatdomain.html#elementsDisks">format domain</a>
-    page.</p>
-
-    <h3>Valid pool format types</h3>
-    <p>
-      The Sheepdog pool does not use the pool format type element.
-    </p>
-
-    <h3>Valid volume format types</h3>
-    <p>
-      The Sheepdog pool does not use the volume format type element.
-    </p>
-
     <h2><a id="StorageBackendGluster">Gluster pool</a></h2>
     <p>
       This provides a pool based on native Gluster access.  Gluster is
diff --git a/libvirt.spec.in b/libvirt.spec.in
index f9af330186..f361303708 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -65,11 +65,6 @@
 
 # Then the secondary host drivers, which run inside libvirtd
 %define with_storage_rbd      0%{!?_without_storage_rbd:1}
-%if 0%{?fedora}
-    %define with_storage_sheepdog 0%{!?_without_storage_sheepdog:1}
-%else
-    %define with_storage_sheepdog 0
-%endif
 
 %define with_storage_gluster 0%{!?_without_storage_gluster:1}
 %ifnarch %{arches_qemu_kvm}
@@ -341,9 +336,6 @@ BuildRequires: librbd1-devel
 BuildRequires: glusterfs-api-devel >= 3.4.1
 BuildRequires: glusterfs-devel >= 3.4.1
 %endif
-%if %{with_storage_sheepdog}
-BuildRequires: sheepdog
-%endif
 %if %{with_storage_zfs}
 # Support any conforming implementation of zfs. On stock Fedora
 # this is zfs-fuse, but could be zfsonlinux upstream RPMs
@@ -667,19 +659,6 @@ volumes using the ceph protocol.
 %endif
 
 
-%if %{with_storage_sheepdog}
-%package daemon-driver-storage-sheepdog
-Summary: Storage driver plugin for sheepdog
-Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
-Requires: libvirt-libs = %{version}-%{release}
-Requires: sheepdog
-
-%description daemon-driver-storage-sheepdog
-The storage driver backend adding implementation of the storage APIs for
-sheepdog volumes using.
-%endif
-
-
 %if %{with_storage_zfs}
 %package daemon-driver-storage-zfs
 Summary: Storage driver plugin for ZFS
@@ -712,9 +691,6 @@ Requires: libvirt-daemon-driver-storage-gluster = %{version}-%{release}
 %if %{with_storage_rbd}
 Requires: libvirt-daemon-driver-storage-rbd = %{version}-%{release}
 %endif
-%if %{with_storage_sheepdog}
-Requires: libvirt-daemon-driver-storage-sheepdog = %{version}-%{release}
-%endif
 %if %{with_storage_zfs}
 Requires: libvirt-daemon-driver-storage-zfs = %{version}-%{release}
 %endif
@@ -1056,12 +1032,6 @@ exit 1
     %define arg_storage_rbd -Dstorage_rbd=disabled
 %endif
 
-%if %{with_storage_sheepdog}
-    %define arg_storage_sheepdog -Dstorage_sheepdog=enabled
-%else
-    %define arg_storage_sheepdog -Dstorage_sheepdog=disabled
-%endif
-
 %if %{with_storage_gluster}
     %define arg_storage_gluster -Dstorage_gluster=enabled -Dglusterfs=enabled
 %else
@@ -1172,7 +1142,6 @@ export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/%{name}.spec)
            -Dstorage_disk=enabled \
            -Dstorage_mpath=enabled \
            %{?arg_storage_rbd} \
-           %{?arg_storage_sheepdog} \
            %{?arg_storage_gluster} \
            %{?arg_storage_zfs} \
            -Dstorage_vstorage=disabled \
@@ -1733,11 +1702,6 @@ exit 0
 %{_libdir}/%{name}/storage-backend/libvirt_storage_backend_rbd.so
 %endif
 
-%if %{with_storage_sheepdog}
-%files daemon-driver-storage-sheepdog
-%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_sheepdog.so
-%endif
-
 %if %{with_storage_zfs}
 %files daemon-driver-storage-zfs
 %{_libdir}/%{name}/storage-backend/libvirt_storage_backend_zfs.so
diff --git a/meson.build b/meson.build
index 7e377fab9c..c6980c941a 100644
--- a/meson.build
+++ b/meson.build
@@ -1791,11 +1791,6 @@ if conf.has('WITH_LIBVIRTD')
     conf.set('WITH_STORAGE_SCSI', 1)
   endif
 
-  if not get_option('storage_sheepdog').disabled()
-    use_storage = true
-    conf.set('WITH_STORAGE_SHEEPDOG', 1)
-  endif
-
   if not get_option('storage_vstorage').disabled()
     vstorage_enable = true
     if host_machine.system() != 'linux'
@@ -2136,7 +2131,6 @@ storagedriver_summary = {
   'mpath': conf.has('WITH_STORAGE_MPATH'),
   'Disk': conf.has('WITH_STORAGE_DISK'),
   'RBD': conf.has('WITH_STORAGE_RBD'),
-  'Sheepdog': conf.has('WITH_STORAGE_SHEEPDOG'),
   'Gluster': conf.has('WITH_STORAGE_GLUSTER'),
   'ZFS': conf.has('WITH_STORAGE_ZFS'),
   'Virtuozzo storage': conf.has('WITH_STORAGE_VSTORAGE'),
diff --git a/meson_options.txt b/meson_options.txt
index 2606648b64..001954ef76 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -84,7 +84,6 @@ option('storage_lvm', type: 'feature', value: 'auto', description: 'LVM backend
 option('storage_mpath', type: 'feature', value: 'auto', description: 'mpath backend for the storage driver')
 option('storage_rbd', type: 'feature', value: 'auto', description: 'RADOS Block Device backend for the storage driver')
 option('storage_scsi', type: 'feature', value: 'auto', description: 'SCSI backend for the storage driver')
-option('storage_sheepdog', type: 'feature', value: 'auto', description: 'Sheepdog backend for the storage driver')
 option('storage_vstorage', type: 'feature', value: 'auto', description: 'Virtuozzo storage backend for the storage driver')
 option('storage_zfs', type: 'feature', value: 'auto', description: 'ZFS backend for the storage driver')
 
diff --git a/mingw-libvirt.spec.in b/mingw-libvirt.spec.in
index 288f533d52..dc8edd4f64 100644
--- a/mingw-libvirt.spec.in
+++ b/mingw-libvirt.spec.in
@@ -164,7 +164,6 @@ exit 1
   -Dstorage_mpath=disabled \
   -Dstorage_rbd=disabled \
   -Dstorage_scsi=disabled \
-  -Dstorage_sheepdog=disabled \
   -Dstorage_vstorage=disabled \
   -Dstorage_zfs=disabled \
   -Dsysctl_config=disabled \
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 413783ee35..71346fe36c 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -222,7 +222,6 @@
 @SRCDIR at src/storage/storage_backend_mpath.c
 @SRCDIR at src/storage/storage_backend_rbd.c
 @SRCDIR at src/storage/storage_backend_scsi.c
- at SRCDIR@src/storage/storage_backend_sheepdog.c
 @SRCDIR at src/storage/storage_backend_vstorage.c
 @SRCDIR at src/storage/storage_backend_zfs.c
 @SRCDIR at src/storage/storage_driver.c
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 17bbeddec6..421b370d51 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -32349,7 +32349,6 @@ virDomainStorageSourceTranslateSourcePool(virStorageSource *src,
 
     case VIR_STORAGE_POOL_MPATH:
     case VIR_STORAGE_POOL_RBD:
-    case VIR_STORAGE_POOL_SHEEPDOG:
     case VIR_STORAGE_POOL_GLUSTER:
     case VIR_STORAGE_POOL_LAST:
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 66419616da..dfcc907e02 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -59,7 +59,7 @@ VIR_ENUM_IMPL(virStoragePool,
               "dir", "fs", "netfs",
               "logical", "disk", "iscsi",
               "iscsi-direct", "scsi", "mpath",
-              "rbd", "sheepdog", "gluster",
+              "rbd", "gluster",
               "zfs", "vstorage",
 );
 
@@ -246,13 +246,6 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
           .formatToString = virStorageFileFormatTypeToString,
       }
     },
-    {.poolType = VIR_STORAGE_POOL_SHEEPDOG,
-     .poolOptions = {
-         .flags = (VIR_STORAGE_POOL_SOURCE_HOST |
-                   VIR_STORAGE_POOL_SOURCE_NETWORK |
-                   VIR_STORAGE_POOL_SOURCE_NAME),
-     },
-    },
     {.poolType = VIR_STORAGE_POOL_GLUSTER,
      .poolOptions = {
          .flags = (VIR_STORAGE_POOL_SOURCE_HOST |
@@ -1212,10 +1205,9 @@ virStoragePoolDefFormatBuf(virBuffer *buf,
     if (virStoragePoolSourceFormat(buf, options, &def->source) < 0)
         return -1;
 
-    /* RBD, Sheepdog, Gluster and Iscsi-direct devices are not local block devs nor
+    /* RBD, Gluster and Iscsi-direct devices are not local block devs nor
      * files, so they don't have a target */
     if (def->type != VIR_STORAGE_POOL_RBD &&
-        def->type != VIR_STORAGE_POOL_SHEEPDOG &&
         def->type != VIR_STORAGE_POOL_GLUSTER &&
         def->type != VIR_STORAGE_POOL_ISCSI_DIRECT) {
         virBufferAddLit(buf, "<target>\n");
diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h
index 345026aa37..523f67229e 100644
--- a/src/conf/storage_conf.h
+++ b/src/conf/storage_conf.h
@@ -102,7 +102,6 @@ typedef enum {
     VIR_STORAGE_POOL_SCSI,     /* SCSI HBA */
     VIR_STORAGE_POOL_MPATH,    /* Multipath devices */
     VIR_STORAGE_POOL_RBD,      /* RADOS Block Device */
-    VIR_STORAGE_POOL_SHEEPDOG, /* Sheepdog device */
     VIR_STORAGE_POOL_GLUSTER,  /* Gluster device */
     VIR_STORAGE_POOL_ZFS,      /* ZFS */
     VIR_STORAGE_POOL_VSTORAGE, /* Virtuozzo Storage */
@@ -460,7 +459,6 @@ VIR_ENUM_DECL(virStoragePartedFs);
                  VIR_CONNECT_LIST_STORAGE_POOLS_SCSI     | \
                  VIR_CONNECT_LIST_STORAGE_POOLS_MPATH    | \
                  VIR_CONNECT_LIST_STORAGE_POOLS_RBD      | \
-                 VIR_CONNECT_LIST_STORAGE_POOLS_SHEEPDOG | \
                  VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER  | \
                  VIR_CONNECT_LIST_STORAGE_POOLS_ZFS      | \
                  VIR_CONNECT_LIST_STORAGE_POOLS_VSTORAGE | \
diff --git a/src/conf/storage_source_conf.c b/src/conf/storage_source_conf.c
index 05939181d6..9a4de4fa1a 100644
--- a/src/conf/storage_source_conf.c
+++ b/src/conf/storage_source_conf.c
@@ -74,7 +74,6 @@ VIR_ENUM_IMPL(virStorageNetProtocol,
               "none",
               "nbd",
               "rbd",
-              "sheepdog",
               "gluster",
               "iscsi",
               "http",
@@ -1247,9 +1246,6 @@ virStorageSourceNetworkDefaultPort(virStorageNetProtocol protocol)
         case VIR_STORAGE_NET_PROTOCOL_TFTP:
             return 69;
 
-        case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
-            return 7000;
-
         case VIR_STORAGE_NET_PROTOCOL_NBD:
             return 10809;
 
diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h
index 389c7b56d1..b1391d9417 100644
--- a/src/conf/storage_source_conf.h
+++ b/src/conf/storage_source_conf.h
@@ -116,7 +116,6 @@ typedef enum {
     VIR_STORAGE_NET_PROTOCOL_NONE,
     VIR_STORAGE_NET_PROTOCOL_NBD,
     VIR_STORAGE_NET_PROTOCOL_RBD,
-    VIR_STORAGE_NET_PROTOCOL_SHEEPDOG,
     VIR_STORAGE_NET_PROTOCOL_GLUSTER,
     VIR_STORAGE_NET_PROTOCOL_ISCSI,
     VIR_STORAGE_NET_PROTOCOL_HTTP,
diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c
index 24957d6012..3b7fc07410 100644
--- a/src/conf/virstorageobj.c
+++ b/src/conf/virstorageobj.c
@@ -1468,13 +1468,6 @@ virStoragePoolObjSourceFindDuplicateCb(const void *payload,
             return 1;
         break;
 
-    case VIR_STORAGE_POOL_SHEEPDOG:
-        if (data->def->type == obj->def->type &&
-            virStoragePoolSourceMatchSingleHost(&obj->def->source,
-                                                &data->def->source))
-            return 1;
-        break;
-
     case VIR_STORAGE_POOL_MPATH:
         /* Only one mpath pool is valid per host */
         if (data->def->type == obj->def->type)
@@ -1986,8 +1979,6 @@ virStoragePoolObjMatch(virStoragePoolObj *obj,
                (obj->def->type == VIR_STORAGE_POOL_MPATH))   ||
               (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_RBD) &&
                (obj->def->type == VIR_STORAGE_POOL_RBD))     ||
-              (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_SHEEPDOG) &&
-               (obj->def->type == VIR_STORAGE_POOL_SHEEPDOG)) ||
               (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER) &&
                (obj->def->type == VIR_STORAGE_POOL_GLUSTER)) ||
               (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_ZFS) &&
diff --git a/src/libvirt-storage.c b/src/libvirt-storage.c
index 2a7cdca234..05288c68e0 100644
--- a/src/libvirt-storage.c
+++ b/src/libvirt-storage.c
@@ -92,7 +92,6 @@ virStoragePoolGetConnect(virStoragePoolPtr pool)
  * VIR_CONNECT_LIST_STORAGE_POOLS_SCSI
  * VIR_CONNECT_LIST_STORAGE_POOLS_MPATH
  * VIR_CONNECT_LIST_STORAGE_POOLS_RBD
- * VIR_CONNECT_LIST_STORAGE_POOLS_SHEEPDOG
  * VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER
  * VIR_CONNECT_LIST_STORAGE_POOLS_ZFS
  * VIR_CONNECT_LIST_STORAGE_POOLS_VSTORAGE
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 3ccb00ec35..1d3ecbf52c 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -934,7 +934,6 @@ libxlMakeNetworkDiskSrcStr(virStorageSource *src,
     case VIR_STORAGE_NET_PROTOCOL_TFTP:
     case VIR_STORAGE_NET_PROTOCOL_ISCSI:
     case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
-    case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
     case VIR_STORAGE_NET_PROTOCOL_SSH:
     case VIR_STORAGE_NET_PROTOCOL_VXHS:
     case VIR_STORAGE_NET_PROTOCOL_NFS:
diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c
index 8fa91ce66a..c4526db60b 100644
--- a/src/libxl/xen_xl.c
+++ b/src/libxl/xen_xl.c
@@ -1554,7 +1554,6 @@ xenFormatXLDiskSrcNet(virStorageSource *src)
     case VIR_STORAGE_NET_PROTOCOL_TFTP:
     case VIR_STORAGE_NET_PROTOCOL_ISCSI:
     case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
-    case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
     case VIR_STORAGE_NET_PROTOCOL_SSH:
     case VIR_STORAGE_NET_PROTOCOL_VXHS:
     case VIR_STORAGE_NET_PROTOCOL_NFS:
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index 6845e25176..aa19104303 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -927,34 +927,6 @@ qemuBlockStorageSourceGetRBDProps(virStorageSource *src,
 }
 
 
-static virJSONValue *
-qemuBlockStorageSourceGetSheepdogProps(virStorageSource *src)
-{
-    g_autoptr(virJSONValue) serverprops = NULL;
-    virJSONValue *ret = NULL;
-
-    if (src->nhosts != 1) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("sheepdog protocol accepts only one host"));
-        return NULL;
-    }
-
-    serverprops = qemuBlockStorageSourceBuildJSONSocketAddress(&src->hosts[0],
-                                                               false);
-    if (!serverprops)
-        return NULL;
-
-    /* libvirt does not support the 'snap-id' and 'tag' properties */
-    if (virJSONValueObjectCreate(&ret,
-                                 "a:server", &serverprops,
-                                 "s:vdi", src->path,
-                                 NULL) < 0)
-        return NULL;
-
-    return ret;
-}
-
-
 static virJSONValue *
 qemuBlockStorageSourceGetSshProps(virStorageSource *src)
 {
@@ -1217,12 +1189,6 @@ qemuBlockStorageSourceGetBackendProps(virStorageSource *src,
                 return NULL;
             break;
 
-        case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
-            driver = "sheepdog";
-            if (!(fileprops = qemuBlockStorageSourceGetSheepdogProps(src)))
-                return NULL;
-            break;
-
         case VIR_STORAGE_NET_PROTOCOL_SSH:
             driver = "ssh";
             if (!(fileprops = qemuBlockStorageSourceGetSshProps(src)))
@@ -2216,7 +2182,6 @@ qemuBlockGetBackingStoreString(virStorageSource *src,
 
                 return virURIFormat(uri);
 
-            case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
             case VIR_STORAGE_NET_PROTOCOL_RBD:
             case VIR_STORAGE_NET_PROTOCOL_VXHS:
             case VIR_STORAGE_NET_PROTOCOL_NFS:
@@ -2595,12 +2560,6 @@ qemuBlockStorageSourceCreateGetStorageProps(virStorageSource *src,
                 return -1;
             break;
 
-        case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
-            driver = "sheepdog";
-            if (!(location = qemuBlockStorageSourceGetSheepdogProps(src)))
-                return -1;
-            break;
-
         case VIR_STORAGE_NET_PROTOCOL_SSH:
             driver = "ssh";
             if (!(location = qemuBlockStorageSourceGetSshProps(src)))
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 278590c2c1..e756636d7f 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1056,26 +1056,6 @@ qemuBuildNetworkDriveStr(virStorageSource *src,
             ret = qemuBuildNetworkDriveURI(src, secinfo);
             break;
 
-        case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
-            if (!src->path) {
-                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                               _("missing disk source for 'sheepdog' protocol"));
-                return NULL;
-            }
-
-            if (src->nhosts == 0) {
-                ret = g_strdup_printf("sheepdog:%s", src->path);
-            } else if (src->nhosts == 1) {
-                ret = g_strdup_printf("sheepdog:%s:%u:%s", src->hosts->name,
-                                      src->hosts->port, src->path);
-            } else {
-                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                               _("protocol 'sheepdog' accepts up to one host"));
-                return NULL;
-            }
-
-            break;
-
         case VIR_STORAGE_NET_PROTOCOL_RBD:
             if (strchr(src->path, ':')) {
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 6e3e3555c7..4daff5b2dc 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -10033,7 +10033,6 @@ qemuDomainPrepareStorageSourceTLS(virStorageSource *src,
         break;
 
     case VIR_STORAGE_NET_PROTOCOL_RBD:
-    case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
     case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
     case VIR_STORAGE_NET_PROTOCOL_ISCSI:
     case VIR_STORAGE_NET_PROTOCOL_HTTP:
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
index fd6669433b..4afebca8f6 100644
--- a/src/qemu/qemu_snapshot.c
+++ b/src/qemu/qemu_snapshot.c
@@ -402,7 +402,6 @@ qemuSnapshotPrepareDiskExternalInactive(virDomainSnapshotDiskDef *snapdisk,
         case VIR_STORAGE_NET_PROTOCOL_NONE:
         case VIR_STORAGE_NET_PROTOCOL_NBD:
         case VIR_STORAGE_NET_PROTOCOL_RBD:
-        case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
         case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
         case VIR_STORAGE_NET_PROTOCOL_ISCSI:
         case VIR_STORAGE_NET_PROTOCOL_HTTP:
@@ -494,7 +493,6 @@ qemuSnapshotPrepareDiskExternalActive(virDomainObj *vm,
         case VIR_STORAGE_NET_PROTOCOL_NONE:
         case VIR_STORAGE_NET_PROTOCOL_NBD:
         case VIR_STORAGE_NET_PROTOCOL_RBD:
-        case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
         case VIR_STORAGE_NET_PROTOCOL_ISCSI:
         case VIR_STORAGE_NET_PROTOCOL_HTTP:
         case VIR_STORAGE_NET_PROTOCOL_HTTPS:
@@ -625,7 +623,6 @@ qemuSnapshotPrepareDiskInternal(virDomainDiskDef *disk,
         case VIR_STORAGE_NET_PROTOCOL_NONE:
         case VIR_STORAGE_NET_PROTOCOL_NBD:
         case VIR_STORAGE_NET_PROTOCOL_RBD:
-        case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
         case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
         case VIR_STORAGE_NET_PROTOCOL_ISCSI:
         case VIR_STORAGE_NET_PROTOCOL_HTTP:
diff --git a/src/storage/meson.build b/src/storage/meson.build
index 915ae46f61..a10049ceb4 100644
--- a/src/storage/meson.build
+++ b/src/storage/meson.build
@@ -51,10 +51,6 @@ storage_backend_scsi_sources = [
   'storage_backend_scsi.c',
 ]
 
-storage_backend_sheepdog_sources = [
-  'storage_backend_sheepdog.c',
-]
-
 storage_backend_vstorage_sources = [
   'storage_backend_vstorage.c',
 ]
@@ -238,27 +234,6 @@ if conf.has('WITH_STORAGE_SCSI')
   }
 endif
 
-if conf.has('WITH_STORAGE_SHEEPDOG')
-  storage_backend_sheepdog_priv_lib = static_library(
-    'virt_storage_backend_sheepdog_priv',
-    storage_backend_sheepdog_sources,
-    dependencies: [
-      src_dep,
-    ],
-    include_directories: [
-      conf_inc_dir,
-    ],
-  )
-
-  virt_modules += {
-    'name': 'virt_storage_backend_sheepdog',
-    'link_whole': [
-      storage_backend_sheepdog_priv_lib,
-    ],
-    'install_dir': storage_backend_install_dir,
-  }
-endif
-
 if conf.has('WITH_STORAGE_VSTORAGE')
   virt_modules += {
     'name': 'virt_storage_backend_vstorage',
diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
index c5b36801ba..afe7bebb10 100644
--- a/src/storage/storage_backend.c
+++ b/src/storage/storage_backend.c
@@ -58,9 +58,6 @@
 #if WITH_STORAGE_RBD
 # include "storage_backend_rbd.h"
 #endif
-#if WITH_STORAGE_SHEEPDOG
-# include "storage_backend_sheepdog.h"
-#endif
 #if WITH_STORAGE_GLUSTER
 # include "storage_backend_gluster.h"
 #endif
@@ -132,9 +129,6 @@ virStorageBackendDriversRegister(bool allbackends G_GNUC_UNUSED)
 #if WITH_STORAGE_RBD
     VIR_STORAGE_BACKEND_REGISTER(virStorageBackendRBDRegister, "rbd");
 #endif
-#if WITH_STORAGE_SHEEPDOG
-    VIR_STORAGE_BACKEND_REGISTER(virStorageBackendSheepdogRegister, "sheepdog");
-#endif
 #if WITH_STORAGE_GLUSTER
     VIR_STORAGE_BACKEND_REGISTER(virStorageBackendGlusterRegister, "gluster");
 #endif
diff --git a/src/storage/storage_backend_sheepdog.c b/src/storage/storage_backend_sheepdog.c
deleted file mode 100644
index beb6445e1e..0000000000
--- a/src/storage/storage_backend_sheepdog.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * storage_backend_sheepdog.c: storage backend for Sheepdog handling
- *
- * Copyright (C) 2013-2014 Red Hat, Inc.
- * Copyright (C) 2012 Wido den Hollander
- * Copyright (C) 2012 Frank Spijkerman
- * Copyright (C) 2012 Sebastian Wiedenroth
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-#include <config.h>
-
-#include "virerror.h"
-#include "storage_backend_sheepdog.h"
-#define LIBVIRT_STORAGE_BACKEND_SHEEPDOG_PRIV_H_ALLOW
-#include "storage_backend_sheepdog_priv.h"
-#include "storage_conf.h"
-#include "vircommand.h"
-#include "viralloc.h"
-#include "virstring.h"
-#include "storage_util.h"
-
-#define VIR_FROM_THIS VIR_FROM_STORAGE
-
-#define SHEEPDOGCLI "dog"
-
-static int virStorageBackendSheepdogRefreshVol(virStoragePoolObj *pool,
-                                               virStorageVolDef *vol);
-
-void virStorageBackendSheepdogAddHostArg(virCommand *cmd,
-                                         virStoragePoolObj *pool);
-
-int
-virStorageBackendSheepdogParseNodeInfo(virStoragePoolDef *pool,
-                                       char *output)
-{
-    /* fields:
-     * node id/total, size, used, use%, [total vdi size]
-     *
-     * example output:
-     * 0 15245667872 117571104 0%
-     * Total 15245667872 117571104 0% 20972341
-     */
-
-    const char *p, *next;
-
-    pool->allocation = pool->capacity = pool->available = 0;
-
-    p = output;
-    do {
-        char *end;
-
-        if ((next = strchr(p, '\n')))
-            ++next;
-        else
-            break;
-
-        if (!STRPREFIX(p, "Total "))
-            continue;
-
-        p = p + 6;
-
-        if (virStrToLong_ull(p, &end, 10, &pool->capacity) < 0)
-            break;
-
-        if ((p = end + 1) > next)
-            break;
-
-        if (virStrToLong_ull(p, &end, 10, &pool->allocation) < 0)
-            break;
-
-        pool->available = pool->capacity - pool->allocation;
-        return 0;
-
-    } while ((p = next));
-
-    return -1;
-}
-
-void
-virStorageBackendSheepdogAddHostArg(virCommand *cmd,
-                                    virStoragePoolObj *pool)
-{
-    virStoragePoolDef *def = virStoragePoolObjGetDef(pool);
-    const char *address = "localhost";
-    int port = 7000;
-    if (def->source.nhost > 0) {
-        if (def->source.hosts[0].name != NULL)
-            address = def->source.hosts[0].name;
-        if (def->source.hosts[0].port)
-            port = def->source.hosts[0].port;
-    }
-    virCommandAddArg(cmd, "-a");
-    virCommandAddArgFormat(cmd, "%s", address);
-    virCommandAddArg(cmd, "-p");
-    virCommandAddArgFormat(cmd, "%d", port);
-}
-
-static int
-virStorageBackendSheepdogAddVolume(virStoragePoolObj *pool, const char *diskInfo)
-{
-    g_autoptr(virStorageVolDef) vol = NULL;
-
-    if (diskInfo == NULL) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("Missing disk info when adding volume"));
-        return -1;
-    }
-
-    vol = g_new0(virStorageVolDef, 1);
-
-    vol->name = g_strdup(diskInfo);
-
-    vol->type = VIR_STORAGE_VOL_NETWORK;
-
-    if (virStorageBackendSheepdogRefreshVol(pool, vol) < 0)
-        return -1;
-
-    if (virStoragePoolObjAddVol(pool, vol) < 0)
-        return -1;
-    vol = NULL;
-
-    return 0;
-}
-
-static int
-virStorageBackendSheepdogRefreshAllVol(virStoragePoolObj *pool)
-{
-    size_t i;
-    g_autofree char *output = NULL;
-    g_auto(GStrv) lines = NULL;
-    g_autoptr(virCommand) cmd = NULL;
-
-    cmd = virCommandNewArgList(SHEEPDOGCLI, "vdi", "list", "-r", NULL);
-    virStorageBackendSheepdogAddHostArg(cmd, pool);
-    virCommandSetOutputBuffer(cmd, &output);
-    if (virCommandRun(cmd, NULL) < 0)
-        return -1;
-
-    lines = g_strsplit(output, "\n", 0);
-    if (lines == NULL)
-        return -1;
-
-    for (i = 0; lines[i]; i++) {
-        g_auto(GStrv) cells = NULL;
-
-        cells = g_strsplit(lines[i], " ", 0);
-
-        if (cells != NULL && cells[0] && cells[1]) {
-            if (virStorageBackendSheepdogAddVolume(pool, cells[1]) < 0)
-                return -1;
-        }
-    }
-
-    return 0;
-}
-
-
-static int
-virStorageBackendSheepdogRefreshPool(virStoragePoolObj *pool)
-{
-    g_autofree char *output = NULL;
-    g_autoptr(virCommand) cmd = NULL;
-
-    cmd = virCommandNewArgList(SHEEPDOGCLI, "node", "info", "-r", NULL);
-    virStorageBackendSheepdogAddHostArg(cmd, pool);
-    virCommandSetOutputBuffer(cmd, &output);
-    if (virCommandRun(cmd, NULL) < 0)
-        return -1;
-
-    if (virStorageBackendSheepdogParseNodeInfo(virStoragePoolObjGetDef(pool),
-                                               output) < 0)
-        return -1;
-
-    return virStorageBackendSheepdogRefreshAllVol(pool);
-}
-
-
-static int
-virStorageBackendSheepdogDeleteVol(virStoragePoolObj *pool,
-                                   virStorageVolDef *vol,
-                                   unsigned int flags)
-{
-    g_autoptr(virCommand) cmd = NULL;
-
-    virCheckFlags(0, -1);
-
-    cmd = virCommandNewArgList(SHEEPDOGCLI, "vdi", "delete", vol->name, NULL);
-    virStorageBackendSheepdogAddHostArg(cmd, pool);
-    return virCommandRun(cmd, NULL);
-}
-
-
-static int
-virStorageBackendSheepdogCreateVol(virStoragePoolObj *pool,
-                                   virStorageVolDef *vol)
-{
-    virStoragePoolDef *def = virStoragePoolObjGetDef(pool);
-
-    if (vol->target.encryption != NULL) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       "%s", _("storage pool does not support encrypted "
-                               "volumes"));
-        return -1;
-    }
-
-    vol->type = VIR_STORAGE_VOL_NETWORK;
-
-    VIR_FREE(vol->key);
-    vol->key = g_strdup_printf("%s/%s", def->source.name, vol->name);
-
-    VIR_FREE(vol->target.path);
-    vol->target.path = g_strdup(vol->name);
-
-    return 0;
-}
-
-
-static int
-virStorageBackendSheepdogBuildVol(virStoragePoolObj *pool,
-                                  virStorageVolDef *vol,
-                                  unsigned int flags)
-{
-    g_autoptr(virCommand) cmd = NULL;
-
-    virCheckFlags(0, -1);
-
-    if (!vol->target.capacity) {
-        virReportError(VIR_ERR_NO_SUPPORT, "%s",
-                       _("volume capacity required for this pool"));
-        return -1;
-    }
-
-    cmd = virCommandNewArgList(SHEEPDOGCLI, "vdi", "create", vol->name, NULL);
-    virCommandAddArgFormat(cmd, "%llu", vol->target.capacity);
-    virStorageBackendSheepdogAddHostArg(cmd, pool);
-    return virCommandRun(cmd, NULL);
-}
-
-
-int
-virStorageBackendSheepdogParseVdiList(virStorageVolDef *vol,
-                                      char *output)
-{
-    /* fields:
-     * current/clone/snapshot, name, id, size, used, shared, creation time, vdi id, [tag]
-     *
-     * example output:
-     * s test 1 10 0 0 1336556634 7c2b25
-     * s test 2 10 0 0 1336557203 7c2b26
-     * = test 3 10 0 0 1336557216 7c2b27
-     */
-
-    int id;
-    const char *p, *next;
-
-    vol->target.allocation = vol->target.capacity = 0;
-
-    p = output;
-    do {
-        char *end;
-
-        if ((next = strchr(p, '\n')))
-            ++next;
-
-        /* ignore snapshots */
-        if (*p != '=')
-            continue;
-
-        /* skip space */
-        if (p + 2 < next)
-            p += 2;
-        else
-            return -1;
-
-        /* skip name */
-        while (*p != '\0' && *p != ' ') {
-            if (*p == '\\')
-                ++p;
-            ++p;
-        }
-
-        if (virStrToLong_i(p, &end, 10, &id) < 0)
-            return -1;
-
-        p = end + 1;
-
-        if (virStrToLong_ull(p, &end, 10, &vol->target.capacity) < 0)
-            return -1;
-
-        p = end + 1;
-
-        if (virStrToLong_ull(p, &end, 10, &vol->target.allocation) < 0)
-            return -1;
-
-        return 0;
-    } while ((p = next));
-
-    return -1;
-}
-
-static int
-virStorageBackendSheepdogRefreshVol(virStoragePoolObj *pool,
-                                    virStorageVolDef *vol)
-{
-    char *output = NULL;
-    virStoragePoolDef *def = virStoragePoolObjGetDef(pool);
-    g_autoptr(virCommand) cmd = NULL;
-
-    cmd = virCommandNewArgList(SHEEPDOGCLI, "vdi", "list", vol->name, "-r", NULL);
-    virStorageBackendSheepdogAddHostArg(cmd, pool);
-    virCommandSetOutputBuffer(cmd, &output);
-    if (virCommandRun(cmd, NULL) < 0)
-        return -1;
-
-    if (virStorageBackendSheepdogParseVdiList(vol, output) < 0)
-        return -1;
-
-    vol->type = VIR_STORAGE_VOL_NETWORK;
-
-    VIR_FREE(vol->key);
-    vol->key = g_strdup_printf("%s/%s", def->source.name, vol->name);
-
-    VIR_FREE(vol->target.path);
-    vol->target.path = g_strdup(vol->name);
-
-    return 0;
-}
-
-
-static int
-virStorageBackendSheepdogResizeVol(virStoragePoolObj *pool,
-                                   virStorageVolDef *vol,
-                                   unsigned long long capacity,
-                                   unsigned int flags)
-{
-    g_autoptr(virCommand) cmd = NULL;
-
-    virCheckFlags(0, -1);
-
-    cmd = virCommandNewArgList(SHEEPDOGCLI, "vdi", "resize", vol->name, NULL);
-    virCommandAddArgFormat(cmd, "%llu", capacity);
-    virStorageBackendSheepdogAddHostArg(cmd, pool);
-    return virCommandRun(cmd, NULL);
-}
-
-
-
-virStorageBackend virStorageBackendSheepdog = {
-    .type = VIR_STORAGE_POOL_SHEEPDOG,
-
-    .refreshPool = virStorageBackendSheepdogRefreshPool,
-    .createVol = virStorageBackendSheepdogCreateVol,
-    .buildVol = virStorageBackendSheepdogBuildVol,
-    .refreshVol = virStorageBackendSheepdogRefreshVol,
-    .deleteVol = virStorageBackendSheepdogDeleteVol,
-    .resizeVol = virStorageBackendSheepdogResizeVol,
-};
-
-
-int
-virStorageBackendSheepdogRegister(void)
-{
-    return virStorageBackendRegister(&virStorageBackendSheepdog);
-}
diff --git a/src/storage/storage_backend_sheepdog.h b/src/storage/storage_backend_sheepdog.h
deleted file mode 100644
index e1fde6373b..0000000000
--- a/src/storage/storage_backend_sheepdog.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * storage_backend_sheepdog.h: storage backend for Sheepdog handling
- *
- * Copyright (C) 2012 Wido den Hollander
- * Copyright (C) 2012 Frank Spijkerman
- * Copyright (C) 2012 Sebastian Wiedenroth
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-int virStorageBackendSheepdogRegister(void);
diff --git a/src/storage/storage_backend_sheepdog_priv.h b/src/storage/storage_backend_sheepdog_priv.h
deleted file mode 100644
index a8cadb5542..0000000000
--- a/src/storage/storage_backend_sheepdog_priv.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * storage_backend_sheepdog_priv.h: header for functions necessary in tests
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-#ifndef LIBVIRT_STORAGE_BACKEND_SHEEPDOG_PRIV_H_ALLOW
-# error "storage_backend_sheepdog_priv.h may only be included by storage_backend_sheepdog.c or test suites"
-#endif /* LIBVIRT_STORAGE_BACKEND_SHEEPDOG_PRIV_H_ALLOW */
-
-#pragma once
-
-#include "conf/storage_conf.h"
-
-int virStorageBackendSheepdogParseNodeInfo(virStoragePoolDef *pool,
-                                           char *output);
-int virStorageBackendSheepdogParseVdiList(virStorageVolDef *vol,
-                                          char *output);
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index c2ff4b8d06..f93aa733b9 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -1644,7 +1644,6 @@ storageVolLookupByPathCallback(virStoragePoolObj *obj,
 
         case VIR_STORAGE_POOL_GLUSTER:
         case VIR_STORAGE_POOL_RBD:
-        case VIR_STORAGE_POOL_SHEEPDOG:
         case VIR_STORAGE_POOL_ZFS:
         case VIR_STORAGE_POOL_LAST:
             stable_path = g_strdup(data->path);
diff --git a/src/storage_file/storage_source_backingstore.c b/src/storage_file/storage_source_backingstore.c
index 9021b9da0c..00d5342b9a 100644
--- a/src/storage_file/storage_source_backingstore.c
+++ b/src/storage_file/storage_source_backingstore.c
@@ -396,7 +396,6 @@ virStorageSourceParseBackingColon(virStorageSource *src,
             return -1;
         break;
 
-    case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
     case VIR_STORAGE_NET_PROTOCOL_LAST:
     case VIR_STORAGE_NET_PROTOCOL_NONE:
         virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -843,48 +842,6 @@ virStorageSourceParseBackingJSONNbd(virStorageSource *src,
 }
 
 
-static int
-virStorageSourceParseBackingJSONSheepdog(virStorageSource *src,
-                                         virJSONValue *json,
-                                         const char *jsonstr G_GNUC_UNUSED,
-                                         int opaque G_GNUC_UNUSED)
-{
-    const char *filename;
-    const char *vdi = virJSONValueObjectGetString(json, "vdi");
-    virJSONValue *server = virJSONValueObjectGetObject(json, "server");
-
-    /* legacy URI based syntax passed via 'filename' option */
-    if ((filename = virJSONValueObjectGetString(json, "filename"))) {
-        if (strstr(filename, "://"))
-            return virStorageSourceParseBackingJSONUriStr(src, filename,
-                                                          VIR_STORAGE_NET_PROTOCOL_SHEEPDOG);
-
-        /* libvirt doesn't implement a parser for the legacy non-URI syntax */
-        virReportError(VIR_ERR_INVALID_ARG, "%s",
-                       _("missing sheepdog URI in JSON backing volume definition"));
-        return -1;
-    }
-
-    src->type = VIR_STORAGE_TYPE_NETWORK;
-    src->protocol = VIR_STORAGE_NET_PROTOCOL_SHEEPDOG;
-
-    if (!vdi) {
-        virReportError(VIR_ERR_INVALID_ARG, "%s", _("missing sheepdog vdi name"));
-        return -1;
-    }
-
-    src->path = g_strdup(vdi);
-
-    src->hosts = g_new0(virStorageNetHostDef, 1);
-    src->nhosts = 1;
-
-    if (virStorageSourceParseBackingJSONSocketAddress(src->hosts, server) < 0)
-        return -1;
-
-    return 0;
-}
-
-
 static int
 virStorageSourceParseBackingJSONSSH(virStorageSource *src,
                                     virJSONValue *json,
@@ -1159,7 +1116,6 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = {
     {"gluster", false, virStorageSourceParseBackingJSONGluster, 0},
     {"iscsi", false, virStorageSourceParseBackingJSONiSCSI, 0},
     {"nbd", false, virStorageSourceParseBackingJSONNbd, 0},
-    {"sheepdog", false, virStorageSourceParseBackingJSONSheepdog, 0},
     {"ssh", false, virStorageSourceParseBackingJSONSSH, 0},
     {"rbd", false, virStorageSourceParseBackingJSONRBD, 0},
     {"raw", true, virStorageSourceParseBackingJSONRaw, 0},
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 15e9018803..88f4fbc5bc 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -7065,7 +7065,6 @@ testStorageVolumeTypeForPool(int pooltype)
     case VIR_STORAGE_POOL_NETFS:
     case VIR_STORAGE_POOL_VSTORAGE:
         return VIR_STORAGE_VOL_FILE;
-    case VIR_STORAGE_POOL_SHEEPDOG:
     case VIR_STORAGE_POOL_ISCSI_DIRECT:
     case VIR_STORAGE_POOL_GLUSTER:
     case VIR_STORAGE_POOL_RBD:
diff --git a/tests/meson.build b/tests/meson.build
index 05c3e90195..5e1955a625 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -514,12 +514,6 @@ if conf.has('WITH_STORAGE_FS')
   ]
 endif
 
-if conf.has('WITH_STORAGE_SHEEPDOG')
-  tests += [
-    { 'name': 'storagebackendsheepdogtest', 'link_with': [ storage_driver_impl_lib, storage_backend_sheepdog_priv_lib ] },
-  ]
-endif
-
 if conf.has('WITH_VBOX')
   tests += [
     { 'name': 'vboxsnapshotxmltest', 'link_with': [ vbox_driver_impl ] },
diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index 3f3e6d1532..6a46a6da72 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -1094,9 +1094,6 @@ mymain(void)
     TEST_JSON_FORMAT_NET("<source protocol='iscsi' name='iqn.2016-12.com.virttest:emulated-iscsi-noauth.target/6'>\n"
                          "  <host name='test.org' port='1234'/>\n"
                          "</source>\n");
-    TEST_JSON_FORMAT_NET("<source protocol='sheepdog' name='test'>\n"
-                         "  <host name='example.com' port='321'/>\n"
-                         "</source>\n");
     TEST_JSON_FORMAT_NET("<source protocol='vxhs' name='c6718f6b-0401-441d-a8c3-1f0064d75ee0'>\n"
                          "  <host name='example.com' port='9999'/>\n"
                          "</source>\n");
@@ -1223,7 +1220,6 @@ mymain(void)
     TEST_IMAGE_CREATE("network-gluster-qcow2", NULL);
     TEST_IMAGE_CREATE("network-rbd-qcow2", NULL);
     TEST_IMAGE_CREATE("network-ssh-qcow2", NULL);
-    TEST_IMAGE_CREATE("network-sheepdog-qcow2", NULL);
 
 #define TEST_BITMAP_DETECT(testname) \
     do { \
diff --git a/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.json b/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.json
deleted file mode 100644
index d86bef6bc8..0000000000
--- a/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.json
+++ /dev/null
@@ -1,20 +0,0 @@
-protocol:
-{
-  "driver": "sheepdog",
-  "location": {
-    "server": {
-      "type": "inet",
-      "host": "example.com",
-      "port": "1234"
-    },
-    "vdi": "asdf/i.qcow2"
-  },
-  "size": 4294967296
-}
-
-format:
-{
-  "driver": "qcow2",
-  "file": "0123456789ABCDEF0123456789ABCDE",
-  "size": 8589934590
-}
diff --git a/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.xml b/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.xml
deleted file mode 100644
index 1145daafdd..0000000000
--- a/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<disk device='disk' name='vda' type='network'>
-  <driver type='qcow2'/>
-  <source protocol='sheepdog' name='asdf/i.qcow2'>
-    <host name='example.com' port='1234'/>
-    <privateData>
-      <nodenames>
-        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
-        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
-      </nodenames>
-    </privateData>
-  </source>
-</disk>
diff --git a/tests/qemusecuritytest.c b/tests/qemusecuritytest.c
index 184ffca15f..5006824d10 100644
--- a/tests/qemusecuritytest.c
+++ b/tests/qemusecuritytest.c
@@ -221,7 +221,6 @@ mymain(void)
     DO_TEST_DOMAIN("disk-network-iscsi");
     DO_TEST_DOMAIN("disk-network-nbd");
     DO_TEST_DOMAIN("disk-network-rbd");
-    DO_TEST_DOMAIN("disk-network-sheepdog");
     DO_TEST_DOMAIN("disk-network-source-auth");
     DO_TEST_DOMAIN("disk-network-tlsx509-nbd");
     DO_TEST_DOMAIN("disk-network-tlsx509-vxhs");
diff --git a/tests/qemuxml2argvdata/disk-network-sheepdog.args b/tests/qemuxml2argvdata/disk-network-sheepdog.args
deleted file mode 100644
index fb7102fbb8..0000000000
--- a/tests/qemuxml2argvdata/disk-network-sheepdog.args
+++ /dev/null
@@ -1,30 +0,0 @@
-LC_ALL=C \
-PATH=/bin \
-HOME=/tmp/lib/domain--1-QEMUGuest1 \
-USER=test \
-LOGNAME=test \
-XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
-XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
-XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
-QEMU_AUDIO_DRV=none \
-/usr/bin/qemu-system-i386 \
--name QEMUGuest1 \
--S \
--machine pc,accel=tcg,usb=off,dump-guest-core=off \
--m 214 \
--realtime mlock=off \
--smp 1,sockets=1,cores=1,threads=1 \
--uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
--display none \
--no-user-config \
--nodefaults \
--chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server=on,wait=off \
--mon chardev=charmonitor,id=monitor,mode=control \
--rtc base=utc \
--no-shutdown \
--no-acpi \
--usb \
--drive file=/dev/HostVG/QEMU,,Guest,,,,1,format=raw,if=none,id=drive-ide0-0-0 \
--device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
--drive file=sheepdog:example.org:6000:image,,with,,commas,format=raw,if=none,id=drive-virtio-disk0 \
--device virtio-blk-pci,bus=pci.0,addr=0x3,drive=drive-virtio-disk0,id=virtio-disk0
diff --git a/tests/qemuxml2argvdata/disk-network-sheepdog.x86_64-2.12.0.args b/tests/qemuxml2argvdata/disk-network-sheepdog.x86_64-2.12.0.args
deleted file mode 100644
index 4d3b051da2..0000000000
--- a/tests/qemuxml2argvdata/disk-network-sheepdog.x86_64-2.12.0.args
+++ /dev/null
@@ -1,34 +0,0 @@
-LC_ALL=C \
-PATH=/bin \
-HOME=/tmp/lib/domain--1-QEMUGuest1 \
-USER=test \
-LOGNAME=test \
-XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
-XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
-XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
-QEMU_AUDIO_DRV=none \
-/usr/bin/qemu-system-i386 \
--name guest=QEMUGuest1,debug-threads=on \
--S \
--object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
--machine pc-i440fx-2.12,accel=tcg,usb=off,dump-guest-core=off \
--m 214 \
--realtime mlock=off \
--smp 1,sockets=1,cores=1,threads=1 \
--uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
--display none \
--no-user-config \
--nodefaults \
--chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
--mon chardev=charmonitor,id=monitor,mode=control \
--rtc base=utc \
--no-shutdown \
--no-acpi \
--boot strict=on \
--device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
--drive file=/dev/HostVG/QEMU,,Guest,,,,1,format=raw,if=none,id=drive-ide0-0-0 \
--device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
--drive file=sheepdog:example.org:6000:image,,with,,commas,format=raw,if=none,id=drive-virtio-disk0 \
--device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,id=virtio-disk0 \
--sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
--msg timestamp=on
diff --git a/tests/qemuxml2argvdata/disk-network-sheepdog.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-sheepdog.x86_64-latest.args
deleted file mode 100644
index a0c663229c..0000000000
--- a/tests/qemuxml2argvdata/disk-network-sheepdog.x86_64-latest.args
+++ /dev/null
@@ -1,38 +0,0 @@
-LC_ALL=C \
-PATH=/bin \
-HOME=/tmp/lib/domain--1-QEMUGuest1 \
-USER=test \
-LOGNAME=test \
-XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
-XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
-XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
-/usr/bin/qemu-system-i386 \
--name guest=QEMUGuest1,debug-threads=on \
--S \
--object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \
--machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \
--cpu qemu64 \
--m 214 \
--object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
--overcommit mem-lock=off \
--smp 1,sockets=1,cores=1,threads=1 \
--uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
--display none \
--no-user-config \
--nodefaults \
--chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
--mon chardev=charmonitor,id=monitor,mode=control \
--rtc base=utc \
--no-shutdown \
--no-acpi \
--boot strict=on \
--device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
--blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMU,Guest,,1","node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \
--blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw","file":"libvirt-2-storage"}' \
--device ide-hd,bus=ide.0,unit=0,drive=libvirt-2-format,id=ide0-0-0,bootindex=1 \
--blockdev '{"driver":"sheepdog","server":{"type":"inet","host":"example.org","port":"6000"},"vdi":"image,with,commas","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
--blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
--device virtio-blk-pci,bus=pci.0,addr=0x2,drive=libvirt-1-format,id=virtio-disk0 \
--audiodev id=audio1,driver=none \
--sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
--msg timestamp=on
diff --git a/tests/qemuxml2argvdata/disk-network-sheepdog.xml b/tests/qemuxml2argvdata/disk-network-sheepdog.xml
deleted file mode 100644
index 3d6d3b2ae9..0000000000
--- a/tests/qemuxml2argvdata/disk-network-sheepdog.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<domain type='qemu'>
-  <name>QEMUGuest1</name>
-  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
-  <memory unit='KiB'>219136</memory>
-  <currentMemory unit='KiB'>219136</currentMemory>
-  <vcpu placement='static'>1</vcpu>
-  <os>
-    <type arch='i686' machine='pc'>hvm</type>
-    <boot dev='hd'/>
-  </os>
-  <clock offset='utc'/>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>destroy</on_crash>
-  <devices>
-    <emulator>/usr/bin/qemu-system-i386</emulator>
-    <disk type='block' device='disk'>
-      <driver name='qemu' type='raw'/>
-      <source dev='/dev/HostVG/QEMU,Guest,,1'/>
-      <target dev='hda' bus='ide'/>
-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
-    </disk>
-    <disk type='network' device='disk'>
-      <driver name='qemu' type='raw'/>
-      <source protocol='sheepdog' name='image,with,commas'>
-        <host name='example.org' port='6000'/>
-      </source>
-      <target dev='vda' bus='virtio'/>
-    </disk>
-    <controller type='usb' index='0'/>
-    <controller type='ide' index='0'/>
-    <controller type='pci' index='0' model='pci-root'/>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <memballoon model='none'/>
-  </devices>
-</domain>
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 572c7b251a..fa4fa8d3c3 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -1399,9 +1399,6 @@ mymain(void)
     DO_TEST_CAPS_VER("disk-network-rbd", "2.12.0");
     DO_TEST_CAPS_LATEST("disk-network-rbd");
     DO_TEST_FAILURE("disk-network-rbd-no-colon", NONE);
-    DO_TEST("disk-network-sheepdog", NONE);
-    DO_TEST_CAPS_VER("disk-network-sheepdog", "2.12.0");
-    DO_TEST_CAPS_LATEST("disk-network-sheepdog");
     DO_TEST("disk-network-source-auth", NONE);
     DO_TEST_CAPS_VER("disk-network-source-auth", "2.12.0");
     DO_TEST_CAPS_LATEST("disk-network-source-auth");
diff --git a/tests/qemuxml2xmloutdata/disk-network-sheepdog.xml b/tests/qemuxml2xmloutdata/disk-network-sheepdog.xml
deleted file mode 100644
index c1862e5a54..0000000000
--- a/tests/qemuxml2xmloutdata/disk-network-sheepdog.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<domain type='qemu'>
-  <name>QEMUGuest1</name>
-  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
-  <memory unit='KiB'>219136</memory>
-  <currentMemory unit='KiB'>219136</currentMemory>
-  <vcpu placement='static'>1</vcpu>
-  <os>
-    <type arch='i686' machine='pc'>hvm</type>
-    <boot dev='hd'/>
-  </os>
-  <clock offset='utc'/>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>destroy</on_crash>
-  <devices>
-    <emulator>/usr/bin/qemu-system-i386</emulator>
-    <disk type='block' device='disk'>
-      <driver name='qemu' type='raw'/>
-      <source dev='/dev/HostVG/QEMU,Guest,,1'/>
-      <target dev='hda' bus='ide'/>
-      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
-    </disk>
-    <disk type='network' device='disk'>
-      <driver name='qemu' type='raw'/>
-      <source protocol='sheepdog' name='image,with,commas'>
-        <host name='example.org' port='6000'/>
-      </source>
-      <target dev='vda' bus='virtio'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </disk>
-    <controller type='usb' index='0'>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
-    </controller>
-    <controller type='ide' index='0'>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
-    </controller>
-    <controller type='pci' index='0' model='pci-root'/>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <audio id='1' type='none'/>
-    <memballoon model='none'/>
-  </devices>
-</domain>
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 32b68fcfb0..0b6b841ea5 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -320,7 +320,6 @@ mymain(void)
     DO_TEST("disk-network-gluster", NONE);
     DO_TEST("disk-network-rbd", NONE);
     DO_TEST("disk-network-source-auth", NONE);
-    DO_TEST("disk-network-sheepdog", NONE);
     DO_TEST("disk-network-vxhs", NONE);
     DO_TEST_CAPS_LATEST("disk-network-nfs");
     DO_TEST("disk-network-tlsx509-nbd", NONE);
diff --git a/tests/storagebackendsheepdogtest.c b/tests/storagebackendsheepdogtest.c
deleted file mode 100644
index c7dabd976b..0000000000
--- a/tests/storagebackendsheepdogtest.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * storagebackendsheepdogtest.c: storage backend for Sheepdog handling
- *
- * Copyright (C) 2014 Red Hat, Inc.
- * Copyright (C) 2012 Sebastian Wiedenroth
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-#include <config.h>
-
-#include <unistd.h>
-
-#include <fcntl.h>
-
-#include "internal.h"
-#include "testutils.h"
-#define LIBVIRT_STORAGE_BACKEND_SHEEPDOG_PRIV_H_ALLOW
-#include "storage/storage_backend_sheepdog_priv.h"
-#include "virstring.h"
-
-#define VIR_FROM_THIS VIR_FROM_NONE
-
-typedef struct {
-    const char *output;
-    int expected_return;
-    uint64_t expected_capacity;
-    uint64_t expected_allocation;
-} collie_test;
-
-struct testNodeInfoParserData {
-    collie_test data;
-    const char *poolxml;
-};
-
-struct testVDIListParserData {
-    collie_test data;
-    const char *poolxml;
-    const char *volxml;
-};
-
-
-static int
-test_node_info_parser(const void *opaque)
-{
-    const struct testNodeInfoParserData *data = opaque;
-    collie_test test = data->data;
-    g_autofree char *output = NULL;
-    g_autoptr(virStoragePoolDef) pool = NULL;
-
-    if (!(pool = virStoragePoolDefParseFile(data->poolxml)))
-        return -1;
-
-    output = g_strdup(test.output);
-
-    if (virStorageBackendSheepdogParseNodeInfo(pool, output) !=
-        test.expected_return)
-        return -1;
-
-    if (test.expected_return)
-        return 0;
-
-    if (pool->capacity == test.expected_capacity &&
-        pool->allocation == test.expected_allocation)
-        return 0;
-
-    return -1;
-}
-
-static int
-test_vdi_list_parser(const void *opaque)
-{
-    const struct testVDIListParserData *data = opaque;
-    collie_test test = data->data;
-    g_autofree char *output = NULL;
-    g_autoptr(virStoragePoolDef) pool = NULL;
-    g_autoptr(virStorageVolDef) vol = NULL;
-
-    if (!(pool = virStoragePoolDefParseFile(data->poolxml)))
-        return -1;
-
-    if (!(vol = virStorageVolDefParseFile(pool, data->volxml, 0)))
-        return -1;
-
-    output = g_strdup(test.output);
-
-    if (virStorageBackendSheepdogParseVdiList(vol, output) !=
-        test.expected_return)
-        return -1;
-
-    if (test.expected_return)
-        return 0;
-
-    if (vol->target.capacity == test.expected_capacity &&
-        vol->target.allocation == test.expected_allocation)
-        return 0;
-
-    return -1;
-}
-
-
-static int
-mymain(void)
-{
-    int ret = 0;
-    g_autofree char *poolxml = NULL;
-    g_autofree char *volxml = NULL;
-
-    collie_test node_info_tests[] = {
-        {"", -1, 0, 0},
-        {"Total 15245667872 117571104 0% 20972341\n", 0, 15245667872, 117571104},
-        {"To", -1, 0, 0},
-        {"asdf\nasdf", -1, 0, 0},
-        {"Total ", -1, 0, 0},
-        {"Total 1", -1, 0, 0},
-        {"Total 1\n", -1, 0, 0},
-        {"Total 1 ", -1, 0, 0},
-        {"Total 1 2", -1, 0, 0},
-        {"Total 1 2 ", -1, 0, 0},
-        {"Total 1 2\n", 0, 1, 2},
-        {"Total 1 2 \n", 0, 1, 2},
-        {"Total a 2 \n", -1, 0, 0},
-        {"Total 1 b \n", -1, 0, 0},
-        {"Total a b \n", -1, 0, 0},
-        {"stuff\nTotal 1 2 \n", 0, 1, 2},
-        {"0 1 2 3\nTotal 1 2 \n", 0, 1, 2},
-        {NULL, 0, 0, 0}
-    };
-
-    collie_test vdi_list_tests[] = {
-        {"", -1, 0, 0},
-        {"= test 3 10 20 0 1336557216 7c2b27\n", 0, 10, 20},
-        {"= test\\ with\\ spaces 3 10 20 0 1336557216 7c2b27\n", 0, 10, 20},
-        {"= backslashattheend\\\\ 3 10 20 0 1336557216 7c2b27\n", 0, 10, 20},
-        {"s test 1 10 20 0 1336556634 7c2b25\n= test 3 50 60 0 1336557216 7c2b27\n", 0, 50, 60},
-        {"=", -1, 0, 0},
-        {"= test", -1, 0, 0},
-        {"= test ", -1, 0, 0},
-        {"= test 1", -1, 0, 0},
-        {"= test 1 ", -1, 0, 0},
-        {"= test 1 2", -1, 0, 0},
-        {"= test 1 2 ", -1, 0, 0},
-        {"= test 1 2 3", -1, 0, 0},
-        {NULL, 0, 0, 0}
-    };
-
-    collie_test *test = node_info_tests;
-
-    poolxml = g_strdup_printf("%s/storagepoolxml2xmlin/pool-sheepdog.xml",
-                              abs_srcdir);
-
-    volxml = g_strdup_printf("%s/storagevolxml2xmlin/vol-sheepdog.xml",
-                             abs_srcdir);
-
-#define DO_TEST_NODE(collie) \
-    do { \
-        struct testNodeInfoParserData data = { \
-            .data = collie, \
-            .poolxml = poolxml, \
-        }; \
-        if (virTestRun("node_info_parser", test_node_info_parser, \
-                       &data) < 0) \
-            ret = -1; \
-    } while (0)
-
-    while (test->output != NULL) {
-        DO_TEST_NODE(*test);
-        ++test;
-    }
-
-
-#define DO_TEST_VDI(collie) \
-    do { \
-        struct testVDIListParserData data = { \
-            .data = collie, \
-            .poolxml = poolxml, \
-            .volxml = volxml, \
-        }; \
-        if (virTestRun("vdi_list_parser", test_vdi_list_parser, \
-                       &data) < 0) \
-            ret = -1; \
-    } while (0)
-
-    test = vdi_list_tests;
-
-    while (test->output != NULL) {
-        DO_TEST_VDI(*test);
-        ++test;
-    }
-
-    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
-VIR_TEST_MAIN(mymain)
diff --git a/tests/storagepoolcapsschemadata/poolcaps-fs.xml b/tests/storagepoolcapsschemadata/poolcaps-fs.xml
index eee75af746..ab5204b981 100644
--- a/tests/storagepoolcapsschemadata/poolcaps-fs.xml
+++ b/tests/storagepoolcapsschemadata/poolcaps-fs.xml
@@ -152,8 +152,6 @@
       </enum>
     </volOptions>
   </pool>
-  <pool type='sheepdog' supported='no'>
-  </pool>
   <pool type='gluster' supported='no'>
     <volOptions>
       <defaultFormat type='raw'/>
diff --git a/tests/storagepoolcapsschemadata/poolcaps-full.xml b/tests/storagepoolcapsschemadata/poolcaps-full.xml
index 805950a937..a1aaa7623e 100644
--- a/tests/storagepoolcapsschemadata/poolcaps-full.xml
+++ b/tests/storagepoolcapsschemadata/poolcaps-full.xml
@@ -152,8 +152,6 @@
       </enum>
     </volOptions>
   </pool>
-  <pool type='sheepdog' supported='yes'>
-  </pool>
   <pool type='gluster' supported='yes'>
     <volOptions>
       <defaultFormat type='raw'/>
diff --git a/tests/storagepoolxml2argvtest.c b/tests/storagepoolxml2argvtest.c
index 449b745519..95feaaf9a9 100644
--- a/tests/storagepoolxml2argvtest.c
+++ b/tests/storagepoolxml2argvtest.c
@@ -64,7 +64,6 @@ testCompareXMLToArgvFiles(bool shouldFail,
     case VIR_STORAGE_POOL_SCSI:
     case VIR_STORAGE_POOL_MPATH:
     case VIR_STORAGE_POOL_RBD:
-    case VIR_STORAGE_POOL_SHEEPDOG:
     case VIR_STORAGE_POOL_GLUSTER:
     case VIR_STORAGE_POOL_ZFS:
     case VIR_STORAGE_POOL_VSTORAGE:
@@ -178,7 +177,6 @@ mymain(void)
     DO_TEST_FAIL("pool-mpath");
     DO_TEST_FAIL("pool-iscsi-multiiqn");
     DO_TEST_FAIL("pool-iscsi-vendor-product");
-    DO_TEST_FAIL("pool-sheepdog");
     DO_TEST_FAIL("pool-gluster");
     DO_TEST_FAIL("pool-gluster-sub");
     DO_TEST_FAIL("pool-scsi-type-scsi-host-stable");
diff --git a/tests/storagepoolxml2xmlin/pool-sheepdog.xml b/tests/storagepoolxml2xmlin/pool-sheepdog.xml
deleted file mode 100644
index 49b6baf014..0000000000
--- a/tests/storagepoolxml2xmlin/pool-sheepdog.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<pool type='sheepdog'>
-  <source>
-    <name>sheepdog</name>
-    <host name='localhost' port='7000'/>
-  </source>
-  <uuid>65fcba04-5b13-bd93-cff3-52ce48e11ad7</uuid>
-  <name>sheepdog</name>
-</pool>
diff --git a/tests/storagepoolxml2xmlout/pool-sheepdog.xml b/tests/storagepoolxml2xmlout/pool-sheepdog.xml
deleted file mode 100644
index 000c068677..0000000000
--- a/tests/storagepoolxml2xmlout/pool-sheepdog.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<pool type='sheepdog'>
-  <name>sheepdog</name>
-  <uuid>65fcba04-5b13-bd93-cff3-52ce48e11ad7</uuid>
-  <capacity unit='bytes'>0</capacity>
-  <allocation unit='bytes'>0</allocation>
-  <available unit='bytes'>0</available>
-  <source>
-    <host name='localhost' port='7000'/>
-    <name>sheepdog</name>
-  </source>
-</pool>
diff --git a/tests/storagepoolxml2xmltest.c b/tests/storagepoolxml2xmltest.c
index f21f20357a..945802d567 100644
--- a/tests/storagepoolxml2xmltest.c
+++ b/tests/storagepoolxml2xmltest.c
@@ -88,7 +88,6 @@ mymain(void)
     DO_TEST("pool-mpath");
     DO_TEST("pool-iscsi-multiiqn");
     DO_TEST("pool-iscsi-vendor-product");
-    DO_TEST("pool-sheepdog");
     DO_TEST("pool-gluster");
     DO_TEST("pool-gluster-sub");
     DO_TEST("pool-scsi-type-scsi-host-stable");
diff --git a/tests/storagevolxml2xmlin/vol-sheepdog.xml b/tests/storagevolxml2xmlin/vol-sheepdog.xml
deleted file mode 100644
index d6e920bb81..0000000000
--- a/tests/storagevolxml2xmlin/vol-sheepdog.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<volume type='network'>
-  <name>test2</name>
-  <source>
-  </source>
-  <capacity unit='bytes'>1024</capacity>
-  <allocation unit='bytes'>0</allocation>
-  <target>
-    <path>sheepdog:test2</path>
-  </target>
-</volume>
diff --git a/tests/storagevolxml2xmlout/vol-sheepdog.xml b/tests/storagevolxml2xmlout/vol-sheepdog.xml
deleted file mode 100644
index 47fb8eb418..0000000000
--- a/tests/storagevolxml2xmlout/vol-sheepdog.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<volume type='network'>
-  <name>test2</name>
-  <capacity unit='bytes'>1024</capacity>
-  <allocation unit='bytes'>0</allocation>
-  <target>
-    <path>sheepdog:test2</path>
-  </target>
-</volume>
diff --git a/tests/storagevolxml2xmltest.c b/tests/storagevolxml2xmltest.c
index ed24d98426..792bc5502a 100644
--- a/tests/storagevolxml2xmltest.c
+++ b/tests/storagevolxml2xmltest.c
@@ -93,7 +93,6 @@ mymain(void)
     DO_TEST("pool-disk", "vol-partition");
     DO_TEST("pool-logical", "vol-logical");
     DO_TEST("pool-logical", "vol-logical-backing");
-    DO_TEST("pool-sheepdog", "vol-sheepdog");
     DO_TEST("pool-gluster", "vol-gluster-dir");
     DO_TEST("pool-gluster", "vol-gluster-dir-neg-uid");
     DO_TEST_FULL("pool-dir", "vol-qcow2-nocapacity",
diff --git a/tests/virjsondata/deflatten-qemu-sheepdog-in.json b/tests/virjsondata/deflatten-qemu-sheepdog-in.json
deleted file mode 100644
index 7c0286300f..0000000000
--- a/tests/virjsondata/deflatten-qemu-sheepdog-in.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-    "driver": "raw",
-    "file": {
-        "server.host": "10.10.10.10",
-        "server.port": "7000",
-        "tag": "",
-        "driver": "sheepdog",
-        "server.type": "inet",
-        "vdi": "Alice"
-    }
-}
diff --git a/tests/virjsondata/deflatten-qemu-sheepdog-out.json b/tests/virjsondata/deflatten-qemu-sheepdog-out.json
deleted file mode 100644
index 258b44a76c..0000000000
--- a/tests/virjsondata/deflatten-qemu-sheepdog-out.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "driver": "raw",
-  "file": {
-    "server": {
-      "host": "10.10.10.10",
-      "port": "7000",
-      "type": "inet"
-    },
-    "tag": "",
-    "driver": "sheepdog",
-    "vdi": "Alice"
-  }
-}
diff --git a/tests/virjsontest.c b/tests/virjsontest.c
index 5e26de1f22..c200843245 100644
--- a/tests/virjsontest.c
+++ b/tests/virjsontest.c
@@ -608,7 +608,6 @@ mymain(void)
     DO_TEST_DEFLATTEN("double-key", false);
     DO_TEST_DEFLATTEN("concat", true);
     DO_TEST_DEFLATTEN("concat-double-key", false);
-    DO_TEST_DEFLATTEN("qemu-sheepdog", true);
     DO_TEST_DEFLATTEN("dotted-array", true);
 
     return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
index 1b211b60e6..6c5d35568d 100644
--- a/tests/virstoragetest.c
+++ b/tests/virstoragetest.c
@@ -1465,27 +1465,6 @@ mymain(void)
                        "<source protocol='iscsi' name='iqn.2016-12.com.virttest:emulated-iscsi-noauth.target/6'>\n"
                        "  <host name='[2001::0]' port='3260'/>\n"
                        "</source>\n");
-    TEST_BACKING_PARSE("json:{\"file\":{\"driver\":\"sheepdog\","
-                                       "\"vdi\":\"test\","
-                                       "\"server\":{ \"type\":\"inet\","
-                                                    "\"host\":\"example.com\","
-                                                    "\"port\":\"321\""
-                                                  "}"
-                                      "}"
-                            "}",
-                       "<source protocol='sheepdog' name='test'>\n"
-                       "  <host name='example.com' port='321'/>\n"
-                       "</source>\n");
-    TEST_BACKING_PARSE("json:{\"driver\": \"raw\","
-                             "\"file\": {\"server.host\": \"10.10.10.10\","
-                                        "\"server.port\": \"7000\","
-                                        "\"tag\": \"\","
-                                        "\"driver\": \"sheepdog\","
-                                        "\"server.type\": \"inet\","
-                                        "\"vdi\": \"Alice\"}}",
-                       "<source protocol='sheepdog' name='Alice'>\n"
-                       "  <host name='10.10.10.10' port='7000'/>\n"
-                       "</source>\n");
     TEST_BACKING_PARSE("json:{\"file\":{\"driver\":\"vxhs\","
                                        "\"vdisk-id\":\"c6718f6b-0401-441d-a8c3-1f0064d75ee0\","
                                        "\"server\": {  \"host\":\"example.com\","
diff --git a/tools/virsh-pool.c b/tools/virsh-pool.c
index e8d3c33506..831eabae85 100644
--- a/tools/virsh-pool.c
+++ b/tools/virsh-pool.c
@@ -1224,9 +1224,6 @@ cmdPoolList(vshControl *ctl, const vshCmd *cmd G_GNUC_UNUSED)
             case VIR_STORAGE_POOL_RBD:
                 flags |= VIR_CONNECT_LIST_STORAGE_POOLS_RBD;
                 break;
-            case VIR_STORAGE_POOL_SHEEPDOG:
-                flags |= VIR_CONNECT_LIST_STORAGE_POOLS_SHEEPDOG;
-                break;
             case VIR_STORAGE_POOL_GLUSTER:
                 flags |= VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER;
                 break;
diff --git a/tools/virsh.c b/tools/virsh.c
index 7d7109cfdf..0060628a53 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -577,9 +577,6 @@ virshShowVersion(vshControl *ctl G_GNUC_UNUSED)
 #ifdef WITH_STORAGE_RBD
     vshPrint(ctl, " RBD");
 #endif
-#ifdef WITH_STORAGE_SHEEPDOG
-    vshPrint(ctl, " Sheepdog");
-#endif
 #ifdef WITH_STORAGE_GLUSTER
     vshPrint(ctl, " Gluster");
 #endif
-- 
2.30.2




More information about the libvir-list mailing list