Remove the deprecated glusterfs block driver

Glusterfs has been marked as deprecated since QEMU v9.2, and as far
as I know, nobody spoke up 'til today that it should be kept.
The listed e-mail address integration@gluster.org in our MAINTAINERS
file seems to be bouncing nowadays, and looking at their website
https://www.gluster.org/ the most recent news are from 2020 / 2021 ...
so it seems like there is really hardly any interest in Glusterfs
anymore. Thus it's time to remove the code now from QEMU.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20260511063013.39805-1-thuth@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Thomas Huth
2026-05-11 08:30:13 +02:00
committed by Kevin Wolf
parent 2fa24e9755
commit 3822df47c2
30 changed files with 8 additions and 1907 deletions

View File

@@ -4268,12 +4268,6 @@ L: qemu-block@nongnu.org
S: Odd Fixes
F: block/curl.c
GLUSTER
L: qemu-block@nongnu.org
L: integration@gluster.org
S: Odd Fixes
F: block/gluster.c
Null Block Driver
M: Fam Zheng <fam@euphon.net>
L: qemu-block@nongnu.org

File diff suppressed because it is too large Load Diff

View File

@@ -109,7 +109,6 @@ modsrc = []
foreach m : [
[blkio, 'blkio', files('blkio.c')],
[curl, 'curl', files('curl.c')],
[glusterfs, 'gluster', files('gluster.c')],
[libiscsi, 'iscsi', files('iscsi.c')],
[libnfs, 'nfs', files('nfs.c')],
[libssh, 'ssh', files('ssh.c')],

View File

@@ -382,14 +382,6 @@ Specifying the iSCSI password in plain text on the command line using the
used instead, to refer to a ``--object secret...`` instance that provides
a password via a file, or encrypted.
``gluster`` backend (since 9.2)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
According to https://marc.info/?l=fedora-devel-list&m=171934833215726
the GlusterFS development effectively ended. Unless the development
gains momentum again, the QEMU project will remove the gluster backend
in a future release.
Character device options
''''''''''''''''''''''''

View File

@@ -1429,6 +1429,13 @@ The corresponding upstream server project is no longer maintained.
Users are recommended to switch to an alternative distributed block
device driver such as RBD.
``gluster`` backend (removed in 11.1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
According to https://marc.info/?l=fedora-devel-list&m=171934833215726
the GlusterFS development effectively ended.
VFIO devices
------------

View File

@@ -85,45 +85,6 @@ These are specified using a special URL syntax.
Currently authentication must be done using ssh-agent. Other
authentication methods may be supported in future.
``GlusterFS``
GlusterFS is a user space distributed file system. QEMU supports the
use of GlusterFS volumes for hosting VM disk images using TCP and Unix
Domain Sockets transport protocols.
Syntax for specifying a VM disk image on GlusterFS volume is
.. parsed-literal::
URI:
gluster[+type]://[host[:port]]/volume/path[?socket=...][,debug=N][,logfile=...]
JSON:
'json:{"driver":"qcow2","file":{"driver":"gluster","volume":"testvol","path":"a.img","debug":N,"logfile":"...",
  "server":[{"type":"tcp","host":"...","port":"..."},
  {"type":"unix","socket":"..."}]}}'
Example
.. parsed-literal::
URI:
|qemu_system| --drive file=gluster://192.0.2.1/testvol/a.img,
  file.debug=9,file.logfile=/var/log/qemu-gluster.log
JSON:
|qemu_system| 'json:{"driver":"qcow2",
  "file":{"driver":"gluster",
  "volume":"testvol","path":"a.img",
  "debug":9,"logfile":"/var/log/qemu-gluster.log",
  "server":[{"type":"tcp","host":"1.2.3.4","port":24007},
  {"type":"unix","socket":"/var/run/glusterd.socket"}]}}'
|qemu_system| -drive driver=qcow2,file.driver=gluster,file.volume=testvol,file.path=/path/a.img,
  file.debug=9,file.logfile=/var/log/qemu-gluster.log,
  file.server.0.type=tcp,file.server.0.host=1.2.3.4,file.server.0.port=24007,
  file.server.1.type=unix,file.server.1.socket=/var/run/glusterd.socket
See also http://www.gluster.org.
``HTTP/HTTPS/FTP/FTPS``
QEMU supports read-only access to files accessed over http(s) and
ftp(s).

View File

@@ -665,90 +665,6 @@ systems as the package 'scsi-target-utils'.
-boot d -drive file=iscsi://127.0.0.1/iqn.qemu.test/1 \\
-cdrom iscsi://127.0.0.1/iqn.qemu.test/2
GlusterFS disk images
~~~~~~~~~~~~~~~~~~~~~
GlusterFS is a user space distributed file system.
You can boot from the GlusterFS disk image with the command:
URI:
.. parsed-literal::
|qemu_system| -drive file=gluster[+TYPE]://[HOST}[:PORT]]/VOLUME/PATH
[?socket=...][,file.debug=9][,file.logfile=...]
JSON:
.. parsed-literal::
|qemu_system| 'json:{"driver":"qcow2",
"file":{"driver":"gluster",
"volume":"testvol","path":"a.img","debug":9,"logfile":"...",
"server":[{"type":"tcp","host":"...","port":"..."},
{"type":"unix","socket":"..."}]}}'
*gluster* is the protocol.
*TYPE* specifies the transport type used to connect to gluster
management daemon (glusterd). Valid transport types are
tcp and unix. In the URI form, if a transport type isn't specified,
then tcp type is assumed.
*HOST* specifies the server where the volume file specification for
the given volume resides. This can be either a hostname or an ipv4 address.
If transport type is unix, then *HOST* field should not be specified.
Instead *socket* field needs to be populated with the path to unix domain
socket.
*PORT* is the port number on which glusterd is listening. This is optional
and if not specified, it defaults to port 24007. If the transport type is unix,
then *PORT* should not be specified.
*VOLUME* is the name of the gluster volume which contains the disk image.
*PATH* is the path to the actual disk image that resides on gluster volume.
*debug* is the logging level of the gluster protocol driver. Debug levels
are 0-9, with 9 being the most verbose, and 0 representing no debugging output.
The default level is 4. The current logging levels defined in the gluster source
are 0 - None, 1 - Emergency, 2 - Alert, 3 - Critical, 4 - Error, 5 - Warning,
6 - Notice, 7 - Info, 8 - Debug, 9 - Trace
*logfile* is a commandline option to mention log file path which helps in
logging to the specified file and also help in persisting the gfapi logs. The
default is stderr.
You can create a GlusterFS disk image with the command:
.. parsed-literal::
qemu-img create gluster://HOST/VOLUME/PATH SIZE
Examples
.. parsed-literal::
|qemu_system| -drive file=gluster://1.2.3.4/testvol/a.img
|qemu_system| -drive file=gluster+tcp://1.2.3.4/testvol/a.img
|qemu_system| -drive file=gluster+tcp://1.2.3.4:24007/testvol/dir/a.img
|qemu_system| -drive file=gluster+tcp://[1:2:3:4:5:6:7:8]/testvol/dir/a.img
|qemu_system| -drive file=gluster+tcp://[1:2:3:4:5:6:7:8]:24007/testvol/dir/a.img
|qemu_system| -drive file=gluster+tcp://server.domain.com:24007/testvol/dir/a.img
|qemu_system| -drive file=gluster+unix:///testvol/dir/a.img?socket=/tmp/glusterd.socket
|qemu_system| -drive file=gluster://1.2.3.4/testvol/a.img,file.debug=9,file.logfile=/var/log/qemu-gluster.log
|qemu_system| 'json:{"driver":"qcow2",
"file":{"driver":"gluster",
"volume":"testvol","path":"a.img",
"debug":9,"logfile":"/var/log/qemu-gluster.log",
"server":[{"type":"tcp","host":"1.2.3.4","port":24007},
{"type":"unix","socket":"/var/run/glusterd.socket"}]}}'
|qemu_system| -drive driver=qcow2,file.driver=gluster,file.volume=testvol,file.path=/path/a.img,
file.debug=9,file.logfile=/var/log/qemu-gluster.log,
file.server.0.type=tcp,file.server.0.host=1.2.3.4,file.server.0.port=24007,
file.server.1.type=unix,file.server.1.socket=/var/run/glusterd.socket
Secure Shell (ssh) disk images
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -1662,43 +1662,6 @@ if not get_option('rbd').auto() or have_block
endif
endif
glusterfs = not_found
glusterfs_ftruncate_has_stat = false
glusterfs_iocb_has_stat = false
if not get_option('glusterfs').auto() or have_block
glusterfs = dependency('glusterfs-api', version: '>=3',
required: get_option('glusterfs'),
method: 'pkg-config')
if glusterfs.found()
glusterfs_ftruncate_has_stat = cc.links('''
#include <glusterfs/api/glfs.h>
int
main(void)
{
/* new glfs_ftruncate() passes two additional args */
return glfs_ftruncate(NULL, 0, NULL, NULL);
}
''', dependencies: glusterfs)
glusterfs_iocb_has_stat = cc.links('''
#include <glusterfs/api/glfs.h>
/* new glfs_io_cbk() passes two additional glfs_stat structs */
static void
glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
{}
int
main(void)
{
glfs_io_cbk iocb = &glusterfs_iocb;
iocb(NULL, 0 , NULL, NULL, NULL);
return 0;
}
''', dependencies: glusterfs)
endif
endif
hv_balloon = false
if get_option('hv_balloon').allowed() and have_system
if cc.links('''
@@ -2478,15 +2441,6 @@ config_host_data.set('CONFIG_CURL', curl.found())
config_host_data.set('CONFIG_CURSES', curses.found())
config_host_data.set('CONFIG_GBM', gbm.found())
config_host_data.set('CONFIG_GIO', gio.found())
config_host_data.set('CONFIG_GLUSTERFS', glusterfs.found())
if glusterfs.found()
config_host_data.set('CONFIG_GLUSTERFS_XLATOR_OPT', glusterfs.version().version_compare('>=4'))
config_host_data.set('CONFIG_GLUSTERFS_DISCARD', glusterfs.version().version_compare('>=5'))
config_host_data.set('CONFIG_GLUSTERFS_FALLOCATE', glusterfs.version().version_compare('>=6'))
config_host_data.set('CONFIG_GLUSTERFS_ZEROFILL', glusterfs.version().version_compare('>=6'))
config_host_data.set('CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT', glusterfs_ftruncate_has_stat)
config_host_data.set('CONFIG_GLUSTERFS_IOCB_HAS_STAT', glusterfs_iocb_has_stat)
endif
config_host_data.set('CONFIG_GTK', gtk.found())
config_host_data.set('CONFIG_VTE', vte.found())
config_host_data.set('CONFIG_HEXAGON_IDEF_PARSER', get_option('hexagon_idef_parser'))
@@ -5014,7 +4968,6 @@ if host_os == 'windows'
endif
endif
summary_info += {'seccomp support': seccomp}
summary_info += {'GlusterFS support': glusterfs}
summary_info += {'hv-balloon support': hv_balloon}
summary_info += {'TPM support': have_tpm}
summary_info += {'IGVM support': igvm}

View File

@@ -160,8 +160,6 @@ option('curl', type : 'feature', value : 'auto',
description: 'CURL block device driver')
option('gio', type : 'feature', value : 'auto',
description: 'use libgio for D-Bus support')
option('glusterfs', type : 'feature', value : 'auto',
description: 'Glusterfs block device driver')
option('hv_balloon', type : 'feature', value : 'auto',
description: 'hv-balloon driver (requires Glib 2.68+ GTree API)')
option('libdw', type : 'feature', value : 'auto',

View File

@@ -3334,18 +3334,12 @@
#
# @snapshot-access: Since 7.0
#
# Features:
#
# @deprecated: Member @gluster is deprecated because GlusterFS
# development ceased.
#
# Since: 2.9
##
{ 'enum': 'BlockdevDriver',
'data': [ 'blkdebug', 'blklogwrites', 'blkreplay', 'blkverify', 'bochs',
'cloop', 'compress', 'copy-before-write', 'copy-on-read', 'dmg',
'file', 'snapshot-access', 'ftp', 'ftps',
{'name': 'gluster', 'features': [ 'deprecated' ] },
{'name': 'host_cdrom', 'if': 'HAVE_HOST_BLOCK_DEVICE' },
{'name': 'host_device', 'if': 'HAVE_HOST_BLOCK_DEVICE' },
'http', 'https',
@@ -4118,30 +4112,6 @@
'*rewrite-corrupted': 'bool',
'*read-pattern': 'QuorumReadPattern' } }
##
# @BlockdevOptionsGluster:
#
# Driver specific block device options for Gluster
#
# @volume: name of gluster volume where VM image resides
#
# @path: absolute path to image file in gluster volume
#
# @server: gluster servers description
#
# @debug: libgfapi log level (default '4' which is Error) (Since 2.8)
#
# @logfile: libgfapi log file (default /dev/stderr) (Since 2.8)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsGluster',
'data': { 'volume': 'str',
'path': 'str',
'server': ['SocketAddress'],
'*debug': 'int',
'*logfile': 'str' } }
##
# @BlockdevOptionsIoUring:
#
@@ -4875,7 +4845,6 @@
'file': 'BlockdevOptionsFile',
'ftp': 'BlockdevOptionsCurlFtp',
'ftps': 'BlockdevOptionsCurlFtps',
'gluster': 'BlockdevOptionsGluster',
'host_cdrom': { 'type': 'BlockdevOptionsFile',
'if': 'HAVE_HOST_BLOCK_DEVICE' },
'host_device': { 'type': 'BlockdevOptionsFile',
@@ -5146,26 +5115,6 @@
'*nocow': 'bool',
'*extent-size-hint': 'size'} }
##
# @BlockdevCreateOptionsGluster:
#
# Driver specific image creation options for gluster.
#
# @location: Where to store the new image file
#
# @size: Size of the virtual disk in bytes
#
# @preallocation: Preallocation mode for the new image (default: off;
# allowed values: off, falloc (if CONFIG_GLUSTERFS_FALLOCATE),
# full (if CONFIG_GLUSTERFS_ZEROFILL))
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsGluster',
'data': { 'location': 'BlockdevOptionsGluster',
'size': 'size',
'*preallocation': 'PreallocMode' } }
##
# @BlockdevCreateOptionsLUKS:
#
@@ -5593,7 +5542,6 @@
'discriminator': 'driver',
'data': {
'file': 'BlockdevCreateOptionsFile',
'gluster': 'BlockdevCreateOptionsGluster',
'luks': 'BlockdevCreateOptionsLUKS',
'nfs': 'BlockdevCreateOptionsNfs',
'parallels': 'BlockdevCreateOptionsParallels',

View File

@@ -50,7 +50,6 @@ packages:
- libgbm-dev
- libgcrypt20-dev
- libglib2.0-dev
- libglusterfs-dev
- libgnutls28-dev
- libgtk-3-dev
- libgtk-vnc-2.0-dev

View File

@@ -50,7 +50,6 @@ packages:
- libgbm-dev
- libgcrypt20-dev
- libglib2.0-dev
- libglusterfs-dev
- libgnutls28-dev
- libgtk-3-dev
- libgtk-vnc-2.0-dev

View File

@@ -50,7 +50,6 @@ packages:
- libgbm-dev
- libgcrypt20-dev
- libglib2.0-dev
- libglusterfs-dev
- libgnutls28-dev
- libgtk-3-dev
- libgtk-vnc-2.0-dev

View File

@@ -61,7 +61,6 @@ exec "$@"' > /usr/bin/nosync && \
glib2-static \
glibc-langpack-en \
glibc-static \
glusterfs-api-devel \
gnutls-devel \
gtk3-devel \
hostname \

View File

@@ -427,7 +427,7 @@ echo "Configuring..."
--enable-libiscsi --enable-seccomp \
--enable-tpm --enable-libssh --enable-lzo --enable-snappy --enable-bzip2 \
--enable-numa --enable-rdma --enable-smartcard --enable-virglrenderer \
--enable-mpath --enable-glusterfs \
--enable-mpath \
--enable-virtfs --enable-zstd
echo "Running cov-build..."

View File

@@ -121,7 +121,6 @@ meson_options_help() {
printf "%s\n" ' gcrypt libgcrypt cryptography support'
printf "%s\n" ' gettext Localization of the GTK+ user interface'
printf "%s\n" ' gio use libgio for D-Bus support'
printf "%s\n" ' glusterfs Glusterfs block device driver'
printf "%s\n" ' gnutls GNUTLS cryptography support'
printf "%s\n" ' gtk GTK+ user interface'
printf "%s\n" ' guest-agent Build QEMU Guest Agent'
@@ -330,8 +329,6 @@ _meson_option_parse() {
--disable-gettext) printf "%s" -Dgettext=disabled ;;
--enable-gio) printf "%s" -Dgio=enabled ;;
--disable-gio) printf "%s" -Dgio=disabled ;;
--enable-glusterfs) printf "%s" -Dglusterfs=enabled ;;
--disable-glusterfs) printf "%s" -Dglusterfs=disabled ;;
--enable-gnutls) printf "%s" -Dgnutls=enabled ;;
--disable-gnutls) printf "%s" -Dgnutls=disabled ;;
--enable-gtk) printf "%s" -Dgtk=enabled ;;

View File

@@ -108,7 +108,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libgbm-dev:amd64 \
libgcrypt20-dev:amd64 \
libglib2.0-dev:amd64 \
libglusterfs-dev:amd64 \
libgnutls28-dev:amd64 \
libgtk-3-dev:amd64 \
libgtk-vnc-2.0-dev:amd64 \

View File

@@ -108,7 +108,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libgbm-dev:arm64 \
libgcrypt20-dev:arm64 \
libglib2.0-dev:arm64 \
libglusterfs-dev:arm64 \
libgnutls28-dev:arm64 \
libgtk-3-dev:arm64 \
libgtk-vnc-2.0-dev:arm64 \

View File

@@ -106,7 +106,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libgbm-dev:mips64el \
libgcrypt20-dev:mips64el \
libglib2.0-dev:mips64el \
libglusterfs-dev:mips64el \
libgnutls28-dev:mips64el \
libgtk-3-dev:mips64el \
libgtk-vnc-2.0-dev:mips64el \

View File

@@ -106,7 +106,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libgbm-dev:mipsel \
libgcrypt20-dev:mipsel \
libglib2.0-dev:mipsel \
libglusterfs-dev:mipsel \
libgnutls28-dev:mipsel \
libgtk-3-dev:mipsel \
libgtk-vnc-2.0-dev:mipsel \

View File

@@ -108,7 +108,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libgbm-dev:ppc64el \
libgcrypt20-dev:ppc64el \
libglib2.0-dev:ppc64el \
libglusterfs-dev:ppc64el \
libgnutls28-dev:ppc64el \
libgtk-3-dev:ppc64el \
libgtk-vnc-2.0-dev:ppc64el \

View File

@@ -108,7 +108,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libgbm-dev:riscv64 \
libgcrypt20-dev:riscv64 \
libglib2.0-dev:riscv64 \
libglusterfs-dev:riscv64 \
libgnutls28-dev:riscv64 \
libgtk-3-dev:riscv64 \
libgtk-vnc-2.0-dev:riscv64 \

View File

@@ -108,7 +108,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libgbm-dev:s390x \
libgcrypt20-dev:s390x \
libglib2.0-dev:s390x \
libglusterfs-dev:s390x \
libgnutls28-dev:s390x \
libgtk-3-dev:s390x \
libgtk-vnc-2.0-dev:s390x \

View File

@@ -56,7 +56,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libgbm-dev \
libgcrypt20-dev \
libglib2.0-dev \
libglusterfs-dev \
libgnutls28-dev \
libgtk-3-dev \
libgtk-vnc-2.0-dev \

View File

@@ -50,7 +50,6 @@ exec "$@"\n' > /usr/bin/nosync && \
glib2-static \
glibc-langpack-en \
glibc-static \
glusterfs-api-devel \
gnutls-devel \
gtk-vnc2-devel \
gtk3-devel \

View File

@@ -50,7 +50,6 @@ exec "$@"\n' > /usr/bin/nosync && \
glib2-static \
glibc-langpack-en \
glibc-static \
glusterfs-api-devel \
gnutls-devel \
gtk-vnc2-devel \
gtk3-devel \

View File

@@ -34,7 +34,6 @@ RUN zypper update -y && \
glib2-devel \
glibc-locale \
glibc-static \
glusterfs-devel \
gtk-vnc-devel \
gtk3-devel \
hostname \

View File

@@ -55,7 +55,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libgbm-dev \
libgcrypt20-dev \
libglib2.0-dev \
libglusterfs-dev \
libgnutls28-dev \
libgtk-3-dev \
libgtk-vnc-2.0-dev \

View File

@@ -31,7 +31,6 @@ packages:
- glib2
- glib2-native
- glib2-static
- glusterfs
- gnutls
- gtk3
- gtk-vnc

View File

@@ -22,9 +22,6 @@ int main(int argc, char *argv[])
#ifdef CONFIG_CURL
"block-", "curl",
#endif
#ifdef CONFIG_GLUSTERFS
"block-", "gluster",
#endif
#ifdef CONFIG_LIBISCSI
"block-", "iscsi",
#endif