From ndevos at redhat.com Mon Mar 4 16:21:01 2019 From: ndevos at redhat.com (Niels de Vos) Date: Mon, 4 Mar 2019 17:21:01 +0100 Subject: [GEDI] [PATCH 0/2] block: Gluster 6 compatibility Message-ID: <20190304162103.18912-1-ndevos@redhat.com> Gluster 6 is currently available as release candidate. There have been a few changes to libgfapi.so that need to be adapted by consuming projects like QEMU. Fedora Rawhide already contains glusterfs-6.0-RC0, and this prevents rebuilds of QEMU there (https://bugzilla.redhat.com/1684298). The following two changes should be sufficient to consume Gluster 6 once it is released. These have been tested on CentOS-7 with Gluster 5 and Gluster 6 (minimal manual qemu-img tests only). Cheers, Niels Niels de Vos (2): block/gluster: Handle changed glfs_ftruncate signature gluster: the glfs_io_cbk callback function pointer adds pre/post stat args block/gluster.c | 17 ++++++++++++++--- configure | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 3 deletions(-) -- 2.20.1 From ndevos at redhat.com Mon Mar 4 16:21:02 2019 From: ndevos at redhat.com (Niels de Vos) Date: Mon, 4 Mar 2019 17:21:02 +0100 Subject: [GEDI] [PATCH 1/2] block/gluster: Handle changed glfs_ftruncate signature In-Reply-To: <20190304162103.18912-1-ndevos@redhat.com> References: <20190304162103.18912-1-ndevos@redhat.com> Message-ID: <20190304162103.18912-2-ndevos@redhat.com> From: Prasanna Kumar Kalever New versions of Glusters libgfapi.so have an updated glfs_ftruncate() function that returns additional 'struct stat' structures to enable advanced caching of attributes. This is useful for file servers, not so much for QEMU. Nevertheless, the API has changed and needs to be adopted. Signed-off-by: Prasanna Kumar Kalever Signed-off-by: Niels de Vos --- v4: rebase to current master branch v3: define old backwards compatible glfs_ftruncate() macro, from Eric Blake v2: do a compile check as suggested by Eric Blake --- block/gluster.c | 11 +++++++++-- configure | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/block/gluster.c b/block/gluster.c index af64330211..86e5278524 100644 --- a/block/gluster.c +++ b/block/gluster.c @@ -20,6 +20,10 @@ #include "qemu/option.h" #include "qemu/cutils.h" +#ifdef CONFIG_GLUSTERFS_LEGACY_FTRUNCATE +# define glfs_ftruncate(fd, offset, _u1, _u2) glfs_ftruncate(fd, offset) +#endif + #define GLUSTER_OPT_FILENAME "filename" #define GLUSTER_OPT_VOLUME "volume" #define GLUSTER_OPT_PATH "path" @@ -1005,6 +1009,7 @@ static int qemu_gluster_do_truncate(struct glfs_fd *fd, int64_t offset, PreallocMode prealloc, Error **errp) { int64_t current_length; + int ret; current_length = glfs_lseek(fd, 0, SEEK_END); if (current_length < 0) { @@ -1032,7 +1037,8 @@ static int qemu_gluster_do_truncate(struct glfs_fd *fd, int64_t offset, #endif /* CONFIG_GLUSTERFS_FALLOCATE */ #ifdef CONFIG_GLUSTERFS_ZEROFILL case PREALLOC_MODE_FULL: - if (glfs_ftruncate(fd, offset)) { + ret = glfs_ftruncate(fd, offset, NULL, NULL); + if (ret) { error_setg_errno(errp, errno, "Could not resize file"); return -errno; } @@ -1043,7 +1049,8 @@ static int qemu_gluster_do_truncate(struct glfs_fd *fd, int64_t offset, break; #endif /* CONFIG_GLUSTERFS_ZEROFILL */ case PREALLOC_MODE_OFF: - if (glfs_ftruncate(fd, offset)) { + ret = glfs_ftruncate(fd, offset, NULL, NULL); + if (ret) { error_setg_errno(errp, errno, "Could not resize file"); return -errno; } diff --git a/configure b/configure index 540bee19ba..1d09bef1f9 100755 --- a/configure +++ b/configure @@ -456,6 +456,7 @@ glusterfs_xlator_opt="no" glusterfs_discard="no" glusterfs_fallocate="no" glusterfs_zerofill="no" +glusterfs_legacy_ftruncate="no" gtk="" gtk_gl="no" tls_priority="NORMAL" @@ -4057,6 +4058,19 @@ if test "$glusterfs" != "no" ; then glusterfs_fallocate="yes" glusterfs_zerofill="yes" fi + cat > $TMPC << EOF +#include + +int +main(void) +{ + /* new glfs_ftruncate() passes two additional args */ + return glfs_ftruncate(NULL, 0 /*, NULL, NULL */); +} +EOF + if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then + glusterfs_legacy_ftruncate="yes" + fi else if test "$glusterfs" = "yes" ; then feature_not_found "GlusterFS backend support" \ @@ -6853,6 +6867,10 @@ if test "$glusterfs_zerofill" = "yes" ; then echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak fi +if test "$glusterfs_legacy_ftruncate" = "yes" ; then + echo "CONFIG_GLUSTERFS_LEGACY_FTRUNCATE=y" >> $config_host_mak +fi + if test "$libssh2" = "yes" ; then echo "CONFIG_LIBSSH2=m" >> $config_host_mak echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak -- 2.20.1 From ndevos at redhat.com Mon Mar 4 16:21:03 2019 From: ndevos at redhat.com (Niels de Vos) Date: Mon, 4 Mar 2019 17:21:03 +0100 Subject: [GEDI] [PATCH 2/2] gluster: the glfs_io_cbk callback function pointer adds pre/post stat args In-Reply-To: <20190304162103.18912-1-ndevos@redhat.com> References: <20190304162103.18912-1-ndevos@redhat.com> Message-ID: <20190304162103.18912-3-ndevos@redhat.com> The glfs_*_async() functions do a callback once finished. This callback has changed its arguments, pre- and post-stat structures have been added. This makes it possible to improve cashing, which is useful for Samba and NFS-Ganesha, but not so much for QEMU. Gluster 6 is the first release that includes these new arguments. With an additional detection in ./configure, the new arguments can conditionally get included in the glfs_io_cbk handler. Signed-off-by: Niels de Vos --- block/gluster.c | 6 +++++- configure | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/block/gluster.c b/block/gluster.c index 86e5278524..7483c3b2aa 100644 --- a/block/gluster.c +++ b/block/gluster.c @@ -729,7 +729,11 @@ static struct glfs *qemu_gluster_init(BlockdevOptionsGluster *gconf, /* * AIO callback routine called from GlusterFS thread. */ -static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, void *arg) +static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, +#ifdef CONFIG_GLUSTERFS_IOCB_HAS_STAT + struct glfs_stat *pre, struct glfs_stat *post, +#endif + void *arg) { GlusterAIOCB *acb = (GlusterAIOCB *)arg; diff --git a/configure b/configure index 1d09bef1f9..d8ae8c2f50 100755 --- a/configure +++ b/configure @@ -457,6 +457,7 @@ glusterfs_discard="no" glusterfs_fallocate="no" glusterfs_zerofill="no" glusterfs_legacy_ftruncate="no" +glusterfs_iocb_has_stat="no" gtk="" gtk_gl="no" tls_priority="NORMAL" @@ -4071,6 +4072,25 @@ EOF if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then glusterfs_legacy_ftruncate="yes" fi + cat > $TMPC << EOF +#include + +/* 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; +} +EOF + if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then + glusterfs_iocb_has_stat="yes" + fi else if test "$glusterfs" = "yes" ; then feature_not_found "GlusterFS backend support" \ @@ -6871,6 +6891,10 @@ if test "$glusterfs_legacy_ftruncate" = "yes" ; then echo "CONFIG_GLUSTERFS_LEGACY_FTRUNCATE=y" >> $config_host_mak fi +if test "$glusterfs_iocb_has_stat" = "yes" ; then + echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak +fi + if test "$libssh2" = "yes" ; then echo "CONFIG_LIBSSH2=m" >> $config_host_mak echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak -- 2.20.1 From berrange at redhat.com Mon Mar 4 16:41:44 2019 From: berrange at redhat.com (Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?=) Date: Mon, 4 Mar 2019 16:41:44 +0000 Subject: [GEDI] [Qemu-devel] [PATCH 1/2] block/gluster: Handle changed glfs_ftruncate signature In-Reply-To: <20190304162103.18912-2-ndevos@redhat.com> References: <20190304162103.18912-1-ndevos@redhat.com> <20190304162103.18912-2-ndevos@redhat.com> Message-ID: <20190304164144.GR4239@redhat.com> On Mon, Mar 04, 2019 at 05:21:02PM +0100, Niels de Vos wrote: > From: Prasanna Kumar Kalever > > New versions of Glusters libgfapi.so have an updated glfs_ftruncate() > function that returns additional 'struct stat' structures to enable > advanced caching of attributes. This is useful for file servers, not so > much for QEMU. Nevertheless, the API has changed and needs to be > adopted. > > Signed-off-by: Prasanna Kumar Kalever > Signed-off-by: Niels de Vos > > --- > v4: rebase to current master branch > v3: define old backwards compatible glfs_ftruncate() macro, from Eric Blake > v2: do a compile check as suggested by Eric Blake > --- > block/gluster.c | 11 +++++++++-- > configure | 18 ++++++++++++++++++ > 2 files changed, 27 insertions(+), 2 deletions(-) > > diff --git a/block/gluster.c b/block/gluster.c > index af64330211..86e5278524 100644 > --- a/block/gluster.c > +++ b/block/gluster.c > @@ -20,6 +20,10 @@ > #include "qemu/option.h" > #include "qemu/cutils.h" > > +#ifdef CONFIG_GLUSTERFS_LEGACY_FTRUNCATE > +# define glfs_ftruncate(fd, offset, _u1, _u2) glfs_ftruncate(fd, offset) > +#endif I don't much like this approach as it sets up a trapdoor. If future QEMU passes a non-NULL value for the 3rd/4th argument it will be silently ignored depending on glfs version built against which can result in incorrect behaviour at runtime. If we reverse it: #ifndef CONFIG_GLUSTERFS_LEGACY_FTRUNCATE # define glfs_ftruncate(fd, offset) glfs_ftruncate(fd, offset, NULL, NULL) #endif then it ensures we can't silently do the wrong thing in future. Anyone who wants to use the 3rd/4th args will have to make an explicit effort to ensure it works correctly with old glfs APIs. An added benefit is that it avoids the following patch chunks. > + > #define GLUSTER_OPT_FILENAME "filename" > #define GLUSTER_OPT_VOLUME "volume" > #define GLUSTER_OPT_PATH "path" > @@ -1005,6 +1009,7 @@ static int qemu_gluster_do_truncate(struct glfs_fd *fd, int64_t offset, > PreallocMode prealloc, Error **errp) > { > int64_t current_length; > + int ret; > > current_length = glfs_lseek(fd, 0, SEEK_END); > if (current_length < 0) { > @@ -1032,7 +1037,8 @@ static int qemu_gluster_do_truncate(struct glfs_fd *fd, int64_t offset, > #endif /* CONFIG_GLUSTERFS_FALLOCATE */ > #ifdef CONFIG_GLUSTERFS_ZEROFILL > case PREALLOC_MODE_FULL: > - if (glfs_ftruncate(fd, offset)) { > + ret = glfs_ftruncate(fd, offset, NULL, NULL); > + if (ret) { > error_setg_errno(errp, errno, "Could not resize file"); > return -errno; > } > @@ -1043,7 +1049,8 @@ static int qemu_gluster_do_truncate(struct glfs_fd *fd, int64_t offset, > break; > #endif /* CONFIG_GLUSTERFS_ZEROFILL */ > case PREALLOC_MODE_OFF: > - if (glfs_ftruncate(fd, offset)) { > + ret = glfs_ftruncate(fd, offset, NULL, NULL); > + if (ret) { > error_setg_errno(errp, errno, "Could not resize file"); > return -errno; > } > diff --git a/configure b/configure > index 540bee19ba..1d09bef1f9 100755 > --- a/configure > +++ b/configure > @@ -456,6 +456,7 @@ glusterfs_xlator_opt="no" > glusterfs_discard="no" > glusterfs_fallocate="no" > glusterfs_zerofill="no" > +glusterfs_legacy_ftruncate="no" > gtk="" > gtk_gl="no" > tls_priority="NORMAL" > @@ -4057,6 +4058,19 @@ if test "$glusterfs" != "no" ; then > glusterfs_fallocate="yes" > glusterfs_zerofill="yes" > fi > + cat > $TMPC << EOF > +#include > + > +int > +main(void) > +{ > + /* new glfs_ftruncate() passes two additional args */ > + return glfs_ftruncate(NULL, 0 /*, NULL, NULL */); > +} > +EOF > + if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then > + glusterfs_legacy_ftruncate="yes" > + fi > else > if test "$glusterfs" = "yes" ; then > feature_not_found "GlusterFS backend support" \ > @@ -6853,6 +6867,10 @@ if test "$glusterfs_zerofill" = "yes" ; then > echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak > fi > > +if test "$glusterfs_legacy_ftruncate" = "yes" ; then > + echo "CONFIG_GLUSTERFS_LEGACY_FTRUNCATE=y" >> $config_host_mak > +fi > + > if test "$libssh2" = "yes" ; then > echo "CONFIG_LIBSSH2=m" >> $config_host_mak > echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak > -- > 2.20.1 > > Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| From kwolf at redhat.com Tue Mar 5 10:29:34 2019 From: kwolf at redhat.com (Kevin Wolf) Date: Tue, 5 Mar 2019 11:29:34 +0100 Subject: [GEDI] [Qemu-block] [PATCH 2/2] gluster: the glfs_io_cbk callback function pointer adds pre/post stat args In-Reply-To: <20190304162103.18912-3-ndevos@redhat.com> References: <20190304162103.18912-1-ndevos@redhat.com> <20190304162103.18912-3-ndevos@redhat.com> Message-ID: <20190305102934.GD5280@dhcp-200-226.str.redhat.com> Am 04.03.2019 um 17:21 hat Niels de Vos geschrieben: > The glfs_*_async() functions do a callback once finished. This callback > has changed its arguments, pre- and post-stat structures have been > added. This makes it possible to improve cashing, which is useful for Did you mean "caching"? > Samba and NFS-Ganesha, but not so much for QEMU. Gluster 6 is the first > release that includes these new arguments. > > With an additional detection in ./configure, the new arguments can > conditionally get included in the glfs_io_cbk handler. > > Signed-off-by: Niels de Vos Kevin From ndevos at redhat.com Tue Mar 5 15:16:57 2019 From: ndevos at redhat.com (Niels de Vos) Date: Tue, 5 Mar 2019 16:16:57 +0100 Subject: [GEDI] [Qemu-devel] [PATCH 1/2] block/gluster: Handle changed glfs_ftruncate signature In-Reply-To: <20190304164144.GR4239@redhat.com> References: <20190304162103.18912-1-ndevos@redhat.com> <20190304162103.18912-2-ndevos@redhat.com> <20190304164144.GR4239@redhat.com> Message-ID: <20190305151657.GC16424@ndevos-x270> On Mon, Mar 04, 2019 at 04:41:44PM +0000, Daniel P. Berrang? wrote: > On Mon, Mar 04, 2019 at 05:21:02PM +0100, Niels de Vos wrote: > > From: Prasanna Kumar Kalever > > > > New versions of Glusters libgfapi.so have an updated glfs_ftruncate() > > function that returns additional 'struct stat' structures to enable > > advanced caching of attributes. This is useful for file servers, not so > > much for QEMU. Nevertheless, the API has changed and needs to be > > adopted. > > > > Signed-off-by: Prasanna Kumar Kalever > > Signed-off-by: Niels de Vos > > > > --- > > v4: rebase to current master branch > > v3: define old backwards compatible glfs_ftruncate() macro, from Eric Blake > > v2: do a compile check as suggested by Eric Blake > > --- > > block/gluster.c | 11 +++++++++-- > > configure | 18 ++++++++++++++++++ > > 2 files changed, 27 insertions(+), 2 deletions(-) > > > > diff --git a/block/gluster.c b/block/gluster.c > > index af64330211..86e5278524 100644 > > --- a/block/gluster.c > > +++ b/block/gluster.c > > @@ -20,6 +20,10 @@ > > #include "qemu/option.h" > > #include "qemu/cutils.h" > > > > +#ifdef CONFIG_GLUSTERFS_LEGACY_FTRUNCATE > > +# define glfs_ftruncate(fd, offset, _u1, _u2) glfs_ftruncate(fd, offset) > > +#endif > > I don't much like this approach as it sets up a trapdoor. If future > QEMU passes a non-NULL value for the 3rd/4th argument it will be > silently ignored depending on glfs version built against which can > result in incorrect behaviour at runtime. If we reverse it: > > #ifndef CONFIG_GLUSTERFS_LEGACY_FTRUNCATE > # define glfs_ftruncate(fd, offset) glfs_ftruncate(fd, offset, NULL, NULL) > #endif > > then it ensures we can't silently do the wrong thing in future. Anyone > who wants to use the 3rd/4th args will have to make an explicit effort > to ensure it works correctly with old glfs APIs. An added benefit is > that it avoids the following patch chunks. Thanks for the suggestion. All makes sense and I'll update the patch accordingly. Niels From ndevos at redhat.com Tue Mar 5 15:18:11 2019 From: ndevos at redhat.com (Niels de Vos) Date: Tue, 5 Mar 2019 16:18:11 +0100 Subject: [GEDI] [Qemu-block] [PATCH 2/2] gluster: the glfs_io_cbk callback function pointer adds pre/post stat args In-Reply-To: <20190305102934.GD5280@dhcp-200-226.str.redhat.com> References: <20190304162103.18912-1-ndevos@redhat.com> <20190304162103.18912-3-ndevos@redhat.com> <20190305102934.GD5280@dhcp-200-226.str.redhat.com> Message-ID: <20190305151811.GD16424@ndevos-x270> On Tue, Mar 05, 2019 at 11:29:34AM +0100, Kevin Wolf wrote: > Am 04.03.2019 um 17:21 hat Niels de Vos geschrieben: > > The glfs_*_async() functions do a callback once finished. This callback > > has changed its arguments, pre- and post-stat structures have been > > added. This makes it possible to improve cashing, which is useful for > > Did you mean "caching"? Yuck, yes, of course. I'll correct that when I send an updated version for patch 1/2. Niels From ndevos at redhat.com Tue Mar 5 15:46:32 2019 From: ndevos at redhat.com (Niels de Vos) Date: Tue, 5 Mar 2019 16:46:32 +0100 Subject: [GEDI] [PATCH v2 0/2] block: Gluster 6 compatibility Message-ID: <20190305154634.4609-1-ndevos@redhat.com> Gluster 6 is currently available as release candidate. There have been a few changes to libgfapi.so that need to be adapted by consuming projects like QEMU. Fedora Rawhide already contains glusterfs-6.0-RC0, and this prevents rebuilds of QEMU there (https://bugzilla.redhat.com/1684298). The following two changes should be sufficient to consume Gluster 6 once it is released. These have been tested on CentOS-7 with Gluster 5 and Gluster 6 (minimal manual qemu-img tests only). This v2 post contains changes suggested by Daniel P. Berrang? and Kevin Wolf. Thanks! Cheers, Niels Niels de Vos (2): block/gluster: Handle changed glfs_ftruncate signature gluster: the glfs_io_cbk callback function pointer adds pre/post stat args block/gluster.c | 17 ++++++++++++++--- configure | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 3 deletions(-) -- 2.20.1 From ndevos at redhat.com Tue Mar 5 15:46:33 2019 From: ndevos at redhat.com (Niels de Vos) Date: Tue, 5 Mar 2019 16:46:33 +0100 Subject: [GEDI] [PATCH v5 1/2] block/gluster: Handle changed glfs_ftruncate signature In-Reply-To: <20190305154634.4609-1-ndevos@redhat.com> References: <20190305154634.4609-1-ndevos@redhat.com> Message-ID: <20190305154634.4609-2-ndevos@redhat.com> From: Prasanna Kumar Kalever New versions of Glusters libgfapi.so have an updated glfs_ftruncate() function that returns additional 'struct stat' structures to enable advanced caching of attributes. This is useful for file servers, not so much for QEMU. Nevertheless, the API has changed and needs to be adopted. Signed-off-by: Prasanna Kumar Kalever Signed-off-by: Niels de Vos -- v5: pass default NULL arguments through macro (Daniel P. Berrang?) v4: rebase to current master branch v3: define old backwards compatible glfs_ftruncate() macro, from Eric Blake v2: do a compile check as suggested by Eric Blake --- block/gluster.c | 4 ++++ configure | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/block/gluster.c b/block/gluster.c index af64330211..f853aa87f4 100644 --- a/block/gluster.c +++ b/block/gluster.c @@ -20,6 +20,10 @@ #include "qemu/option.h" #include "qemu/cutils.h" +#ifdef CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT +# define glfs_ftruncate(fd, offset) glfs_ftruncate(fd, offset, NULL, NULL) +#endif + #define GLUSTER_OPT_FILENAME "filename" #define GLUSTER_OPT_VOLUME "volume" #define GLUSTER_OPT_PATH "path" diff --git a/configure b/configure index cefeb8fcce..bbfe587b88 100755 --- a/configure +++ b/configure @@ -456,6 +456,7 @@ glusterfs_xlator_opt="no" glusterfs_discard="no" glusterfs_fallocate="no" glusterfs_zerofill="no" +glusterfs_ftruncate_has_stat="no" gtk="" gtk_gl="no" tls_priority="NORMAL" @@ -4083,6 +4084,19 @@ if test "$glusterfs" != "no" ; then glusterfs_fallocate="yes" glusterfs_zerofill="yes" fi + cat > $TMPC << EOF +#include + +int +main(void) +{ + /* new glfs_ftruncate() passes two additional args */ + return glfs_ftruncate(NULL, 0, NULL, NULL); +} +EOF + if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then + glusterfs_ftruncate_has_stat="yes" + fi else if test "$glusterfs" = "yes" ; then feature_not_found "GlusterFS backend support" \ @@ -6885,6 +6899,10 @@ if test "$glusterfs_zerofill" = "yes" ; then echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak fi +if test "$glusterfs_ftruncate_has_stat" = "yes" ; then + echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak +fi + if test "$libssh2" = "yes" ; then echo "CONFIG_LIBSSH2=m" >> $config_host_mak echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak -- 2.20.1 From ndevos at redhat.com Tue Mar 5 15:46:34 2019 From: ndevos at redhat.com (Niels de Vos) Date: Tue, 5 Mar 2019 16:46:34 +0100 Subject: [GEDI] [PATCH v2 2/2] gluster: the glfs_io_cbk callback function pointer adds pre/post stat args In-Reply-To: <20190305154634.4609-1-ndevos@redhat.com> References: <20190305154634.4609-1-ndevos@redhat.com> Message-ID: <20190305154634.4609-3-ndevos@redhat.com> The glfs_*_async() functions do a callback once finished. This callback has changed its arguments, pre- and post-stat structures have been added. This makes it possible to improve caching, which is useful for Samba and NFS-Ganesha, but not so much for QEMU. Gluster 6 is the first release that includes these new arguments. With an additional detection in ./configure, the new arguments can conditionally get included in the glfs_io_cbk handler. Signed-off-by: Niels de Vos -- v2: correct typo in commit message (Kevin Wolf) --- block/gluster.c | 6 +++++- configure | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/block/gluster.c b/block/gluster.c index f853aa87f4..51f184cbd8 100644 --- a/block/gluster.c +++ b/block/gluster.c @@ -729,7 +729,11 @@ static struct glfs *qemu_gluster_init(BlockdevOptionsGluster *gconf, /* * AIO callback routine called from GlusterFS thread. */ -static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, void *arg) +static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, +#ifdef CONFIG_GLUSTERFS_IOCB_HAS_STAT + struct glfs_stat *pre, struct glfs_stat *post, +#endif + void *arg) { GlusterAIOCB *acb = (GlusterAIOCB *)arg; diff --git a/configure b/configure index bbfe587b88..db548d9b08 100755 --- a/configure +++ b/configure @@ -457,6 +457,7 @@ glusterfs_discard="no" glusterfs_fallocate="no" glusterfs_zerofill="no" glusterfs_ftruncate_has_stat="no" +glusterfs_iocb_has_stat="no" gtk="" gtk_gl="no" tls_priority="NORMAL" @@ -4097,6 +4098,25 @@ EOF if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then glusterfs_ftruncate_has_stat="yes" fi + cat > $TMPC << EOF +#include + +/* 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; +} +EOF + if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then + glusterfs_iocb_has_stat="yes" + fi else if test "$glusterfs" = "yes" ; then feature_not_found "GlusterFS backend support" \ @@ -6903,6 +6923,10 @@ if test "$glusterfs_ftruncate_has_stat" = "yes" ; then echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak fi +if test "$glusterfs_iocb_has_stat" = "yes" ; then + echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak +fi + if test "$libssh2" = "yes" ; then echo "CONFIG_LIBSSH2=m" >> $config_host_mak echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak -- 2.20.1 From sgarzare at redhat.com Wed Mar 6 10:46:37 2019 From: sgarzare at redhat.com (Stefano Garzarella) Date: Wed, 6 Mar 2019 11:46:37 +0100 Subject: [GEDI] [Qemu-devel] [PATCH v5 1/2] block/gluster: Handle changed glfs_ftruncate signature In-Reply-To: <20190305154634.4609-2-ndevos@redhat.com> References: <20190305154634.4609-1-ndevos@redhat.com> <20190305154634.4609-2-ndevos@redhat.com> Message-ID: <20190306104637.fq2akqumjqpkzmgh@steredhat.homenet.telecomitalia.it> Hi Niels, On Tue, Mar 05, 2019 at 04:46:33PM +0100, Niels de Vos wrote: > From: Prasanna Kumar Kalever > > New versions of Glusters libgfapi.so have an updated glfs_ftruncate() > function that returns additional 'struct stat' structures to enable > advanced caching of attributes. This is useful for file servers, not so > much for QEMU. Nevertheless, the API has changed and needs to be > adopted. > > Signed-off-by: Prasanna Kumar Kalever > Signed-off-by: Niels de Vos > > -- > v5: pass default NULL arguments through macro (Daniel P. Berrang?) > v4: rebase to current master branch > v3: define old backwards compatible glfs_ftruncate() macro, from Eric Blake > v2: do a compile check as suggested by Eric Blake to avoid to record these information in the commit message, you should use 3 dashes or move these lines after the 3 dashes below. > --- > block/gluster.c | 4 ++++ > configure | 18 ++++++++++++++++++ > 2 files changed, 22 insertions(+) > > diff --git a/block/gluster.c b/block/gluster.c > index af64330211..f853aa87f4 100644 > --- a/block/gluster.c > +++ b/block/gluster.c > @@ -20,6 +20,10 @@ > #include "qemu/option.h" > #include "qemu/cutils.h" > > +#ifdef CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT > +# define glfs_ftruncate(fd, offset) glfs_ftruncate(fd, offset, NULL, NULL) > +#endif > + > #define GLUSTER_OPT_FILENAME "filename" > #define GLUSTER_OPT_VOLUME "volume" > #define GLUSTER_OPT_PATH "path" > diff --git a/configure b/configure > index cefeb8fcce..bbfe587b88 100755 > --- a/configure > +++ b/configure > @@ -456,6 +456,7 @@ glusterfs_xlator_opt="no" > glusterfs_discard="no" > glusterfs_fallocate="no" > glusterfs_zerofill="no" > +glusterfs_ftruncate_has_stat="no" > gtk="" > gtk_gl="no" > tls_priority="NORMAL" > @@ -4083,6 +4084,19 @@ if test "$glusterfs" != "no" ; then > glusterfs_fallocate="yes" > glusterfs_zerofill="yes" > fi > + cat > $TMPC << EOF > +#include > + > +int > +main(void) > +{ > + /* new glfs_ftruncate() passes two additional args */ > + return glfs_ftruncate(NULL, 0, NULL, NULL); > +} > +EOF > + if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then > + glusterfs_ftruncate_has_stat="yes" > + fi > else > if test "$glusterfs" = "yes" ; then > feature_not_found "GlusterFS backend support" \ > @@ -6885,6 +6899,10 @@ if test "$glusterfs_zerofill" = "yes" ; then > echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak > fi > > +if test "$glusterfs_ftruncate_has_stat" = "yes" ; then > + echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak > +fi > + > if test "$libssh2" = "yes" ; then > echo "CONFIG_LIBSSH2=m" >> $config_host_mak > echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak > -- > 2.20.1 > > The patch LGTM. Reviewed-by: Stefano Garzarella Thanks, Stefano From sgarzare at redhat.com Wed Mar 6 10:52:06 2019 From: sgarzare at redhat.com (Stefano Garzarella) Date: Wed, 6 Mar 2019 11:52:06 +0100 Subject: [GEDI] [Qemu-devel] [PATCH v2 2/2] gluster: the glfs_io_cbk callback function pointer adds pre/post stat args In-Reply-To: <20190305154634.4609-3-ndevos@redhat.com> References: <20190305154634.4609-1-ndevos@redhat.com> <20190305154634.4609-3-ndevos@redhat.com> Message-ID: <20190306105206.5f6bjbc5cncty6bt@steredhat.homenet.telecomitalia.it> On Tue, Mar 05, 2019 at 04:46:34PM +0100, Niels de Vos wrote: > The glfs_*_async() functions do a callback once finished. This callback > has changed its arguments, pre- and post-stat structures have been > added. This makes it possible to improve caching, which is useful for > Samba and NFS-Ganesha, but not so much for QEMU. Gluster 6 is the first > release that includes these new arguments. > > With an additional detection in ./configure, the new arguments can > conditionally get included in the glfs_io_cbk handler. > > Signed-off-by: Niels de Vos > > -- > v2: correct typo in commit message (Kevin Wolf) Also here, please use 3 dashes or move below. > --- > block/gluster.c | 6 +++++- > configure | 24 ++++++++++++++++++++++++ > 2 files changed, 29 insertions(+), 1 deletion(-) > > diff --git a/block/gluster.c b/block/gluster.c > index f853aa87f4..51f184cbd8 100644 > --- a/block/gluster.c > +++ b/block/gluster.c > @@ -729,7 +729,11 @@ static struct glfs *qemu_gluster_init(BlockdevOptionsGluster *gconf, > /* > * AIO callback routine called from GlusterFS thread. > */ > -static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, void *arg) > +static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, > +#ifdef CONFIG_GLUSTERFS_IOCB_HAS_STAT > + struct glfs_stat *pre, struct glfs_stat *post, > +#endif > + void *arg) I'm note sure that is a good idea put function parameters in the ifdef block. What do you think to rename gluster_finish_aiocb() in gluster_finish_aiocb_common() or something like that and create two functions for the two cases with the right parameters that call gluster_finish_aiocb_common()? #ifdef CONFIG_GLUSTERFS_IOCB_HAS_STAT static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, struct glfs_stat *pre, struct glfs_stat *post, void *arg) { gluster_finish_aiocb_common(fd, ret, args); } #else static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, void *arg) { gluster_finish_aiocb_common(fd, ret, args); } #endif /* CONFIG_GLUSTERFS_IOCB_HAS_STAT */ Thanks, Stefano > { > GlusterAIOCB *acb = (GlusterAIOCB *)arg; > > diff --git a/configure b/configure > index bbfe587b88..db548d9b08 100755 > --- a/configure > +++ b/configure > @@ -457,6 +457,7 @@ glusterfs_discard="no" > glusterfs_fallocate="no" > glusterfs_zerofill="no" > glusterfs_ftruncate_has_stat="no" > +glusterfs_iocb_has_stat="no" > gtk="" > gtk_gl="no" > tls_priority="NORMAL" > @@ -4097,6 +4098,25 @@ EOF > if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then > glusterfs_ftruncate_has_stat="yes" > fi > + cat > $TMPC << EOF > +#include > + > +/* 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; > +} > +EOF > + if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then > + glusterfs_iocb_has_stat="yes" > + fi > else > if test "$glusterfs" = "yes" ; then > feature_not_found "GlusterFS backend support" \ > @@ -6903,6 +6923,10 @@ if test "$glusterfs_ftruncate_has_stat" = "yes" ; then > echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak > fi > > +if test "$glusterfs_iocb_has_stat" = "yes" ; then > + echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak > +fi > + > if test "$libssh2" = "yes" ; then > echo "CONFIG_LIBSSH2=m" >> $config_host_mak > echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak > -- > 2.20.1 > > From kwolf at redhat.com Fri Mar 8 13:11:51 2019 From: kwolf at redhat.com (Kevin Wolf) Date: Fri, 8 Mar 2019 14:11:51 +0100 Subject: [GEDI] [Qemu-block] [PATCH v2 0/2] block: Gluster 6 compatibility In-Reply-To: <20190305154634.4609-1-ndevos@redhat.com> References: <20190305154634.4609-1-ndevos@redhat.com> Message-ID: <20190308131151.GA31583@localhost.localdomain> Am 05.03.2019 um 16:46 hat Niels de Vos geschrieben: > Gluster 6 is currently available as release candidate. There have been a > few changes to libgfapi.so that need to be adapted by consuming projects > like QEMU. Fedora Rawhide already contains glusterfs-6.0-RC0, and this > prevents rebuilds of QEMU there (https://bugzilla.redhat.com/1684298). > > The following two changes should be sufficient to consume Gluster 6 once > it is released. These have been tested on CentOS-7 with Gluster 5 and > Gluster 6 (minimal manual qemu-img tests only). > > This v2 post contains changes suggested by Daniel P. Berrang? and Kevin > Wolf. Thanks! Thanks, applied to the block branch. Kevin From ndevos at redhat.com Sat Mar 9 09:40:00 2019 From: ndevos at redhat.com (Niels de Vos) Date: Sat, 9 Mar 2019 10:40:00 +0100 Subject: [GEDI] [Qemu-block] [PATCH v2 0/2] block: Gluster 6 compatibility In-Reply-To: <20190308131151.GA31583@localhost.localdomain> References: <20190305154634.4609-1-ndevos@redhat.com> <20190308131151.GA31583@localhost.localdomain> Message-ID: <20190309094000.GB3535@ndevos-x270> On Fri, Mar 08, 2019 at 02:11:51PM +0100, Kevin Wolf wrote: > Am 05.03.2019 um 16:46 hat Niels de Vos geschrieben: > > Gluster 6 is currently available as release candidate. There have been a > > few changes to libgfapi.so that need to be adapted by consuming projects > > like QEMU. Fedora Rawhide already contains glusterfs-6.0-RC0, and this > > prevents rebuilds of QEMU there (https://bugzilla.redhat.com/1684298). > > > > The following two changes should be sufficient to consume Gluster 6 once > > it is released. These have been tested on CentOS-7 with Gluster 5 and > > Gluster 6 (minimal manual qemu-img tests only). > > > > This v2 post contains changes suggested by Daniel P. Berrang? and Kevin > > Wolf. Thanks! > > Thanks, applied to the block branch. Thanks! Stefano Garzarella gave a suggestion for further cleanup. I was planning to address that (no #ifdef for function arguments) next week when I'm back from a trip, Is that something you would also like to see, or do you prefer the change to stay minimal/small as it is now? I'm happy to send a followup if you agree that it is cleaner. Niels From kwolf at redhat.com Mon Mar 11 11:10:06 2019 From: kwolf at redhat.com (Kevin Wolf) Date: Mon, 11 Mar 2019 12:10:06 +0100 Subject: [GEDI] [Qemu-block] [PATCH v2 0/2] block: Gluster 6 compatibility In-Reply-To: <20190309094000.GB3535@ndevos-x270> References: <20190305154634.4609-1-ndevos@redhat.com> <20190308131151.GA31583@localhost.localdomain> <20190309094000.GB3535@ndevos-x270> Message-ID: <20190311111006.GD7899@localhost.localdomain> Am 09.03.2019 um 10:40 hat Niels de Vos geschrieben: > On Fri, Mar 08, 2019 at 02:11:51PM +0100, Kevin Wolf wrote: > > Am 05.03.2019 um 16:46 hat Niels de Vos geschrieben: > > > Gluster 6 is currently available as release candidate. There have been a > > > few changes to libgfapi.so that need to be adapted by consuming projects > > > like QEMU. Fedora Rawhide already contains glusterfs-6.0-RC0, and this > > > prevents rebuilds of QEMU there (https://bugzilla.redhat.com/1684298). > > > > > > The following two changes should be sufficient to consume Gluster 6 once > > > it is released. These have been tested on CentOS-7 with Gluster 5 and > > > Gluster 6 (minimal manual qemu-img tests only). > > > > > > This v2 post contains changes suggested by Daniel P. Berrang? and Kevin > > > Wolf. Thanks! > > > > Thanks, applied to the block branch. > > Thanks! Stefano Garzarella gave a suggestion for further cleanup. I was > planning to address that (no #ifdef for function arguments) next week > when I'm back from a trip, Is that something you would also like to see, > or do you prefer the change to stay minimal/small as it is now? I'm > happy to send a followup if you agree that it is cleaner. I don't mind either way. I'm going to send a pull request tomorrow for soft freeze, but if you tell me that I should wait with this one, I can remove it from my queue for now. It's a bug fix, so we can still apply an updated version during the freeze. A follow-up works for me, too, so whatever you prefer. Kevin From ndevos at redhat.com Tue Mar 12 09:45:24 2019 From: ndevos at redhat.com (Niels de Vos) Date: Tue, 12 Mar 2019 10:45:24 +0100 Subject: [GEDI] [Qemu-block] [PATCH v2 0/2] block: Gluster 6 compatibility In-Reply-To: <20190311111006.GD7899@localhost.localdomain> References: <20190305154634.4609-1-ndevos@redhat.com> <20190308131151.GA31583@localhost.localdomain> <20190309094000.GB3535@ndevos-x270> <20190311111006.GD7899@localhost.localdomain> Message-ID: <20190312094524.GH3535@ndevos-x270> On Mon, Mar 11, 2019 at 12:10:06PM +0100, Kevin Wolf wrote: > Am 09.03.2019 um 10:40 hat Niels de Vos geschrieben: > > On Fri, Mar 08, 2019 at 02:11:51PM +0100, Kevin Wolf wrote: > > > Am 05.03.2019 um 16:46 hat Niels de Vos geschrieben: > > > > Gluster 6 is currently available as release candidate. There have been a > > > > few changes to libgfapi.so that need to be adapted by consuming projects > > > > like QEMU. Fedora Rawhide already contains glusterfs-6.0-RC0, and this > > > > prevents rebuilds of QEMU there (https://bugzilla.redhat.com/1684298). > > > > > > > > The following two changes should be sufficient to consume Gluster 6 once > > > > it is released. These have been tested on CentOS-7 with Gluster 5 and > > > > Gluster 6 (minimal manual qemu-img tests only). > > > > > > > > This v2 post contains changes suggested by Daniel P. Berrang? and Kevin > > > > Wolf. Thanks! > > > > > > Thanks, applied to the block branch. > > > > Thanks! Stefano Garzarella gave a suggestion for further cleanup. I was > > planning to address that (no #ifdef for function arguments) next week > > when I'm back from a trip, Is that something you would also like to see, > > or do you prefer the change to stay minimal/small as it is now? I'm > > happy to send a followup if you agree that it is cleaner. > > I don't mind either way. > > I'm going to send a pull request tomorrow for soft freeze, but if you > tell me that I should wait with this one, I can remove it from my queue > for now. It's a bug fix, so we can still apply an updated version during > the freeze. > > A follow-up works for me, too, so whatever you prefer. In that case, I prefer to keep the current patches as they are. If further changes make the code much better readable/maintainable I would have provided a new version. But at the moment, and after a little more consideration, I do not think there is much benefit in the cleanup Stefano suggested. Thanks, Niels From ndevos at redhat.com Tue Mar 12 10:50:41 2019 From: ndevos at redhat.com (Niels de Vos) Date: Tue, 12 Mar 2019 11:50:41 +0100 Subject: [GEDI] [Gluster-devel] gfapi: add function to set client-pid In-Reply-To: References: Message-ID: <20190312105041.GI3535@ndevos-x270> On Tue, Mar 12, 2019 at 03:00:27PM +0530, Ravishankar N wrote: > Hello, > > I'm planning to expose setting client-pid for gfapi clients via a new api, > something like `glfs_set_client_pid (fs, pid)`. > The functionality already exists for fuse mounts via the --client-pid=$PID > option, where the value is captured in > glusterfs_ctx_t->cmd_args->client_pid. > > Background: > > If the glusterfs eventing framework is enabled, AFR sends child-up/child > down events (via the gf_event() call) in the notify code path whenever there > is a connect/disconnect at AFR level. While this is okay for normal client > processes, it does not make much sense if the event is coming from say > glfsheal, which is a gfapi based program (having the AFR xlator) that is > invoked when you run the heal info set of commands. Many applications > periodically run heal info to monitor the heals and display it on the > dashboard (like tendryl), leading to a flood of child up/ down messages to > the application monitoring these events. > > We need to add a unique key=value to all such gf_event() calls in AFR, based > on which the consumer of the events can decide to ignore them if needed. > This key-value can be client-pid=$PID, where PID can be > GF_CLIENT_PID_SELF_HEALD for selfheal daemon, GF_CLIENT_PID_GLFS_HEAL for > glfsheal etc (these values are already defined in the code). This is why we > need a way to set the client-pid for gfapi clients as well. > > Another approach would be to add an xlator option (say 'client-name') > specific to AFR? and use that as the key-value pair but it seems to be an > overkill to do that just for the sake of eventing purposes. Besides, the pid > approach can also be extended to other gluster processes like rebalance, shd > and other daemons where AFR is loaded but AFR child-up/down events from it > are not of any particular interest.These daemons will now have to be spawned > by glusterd with the --client-pid option. Sounds good to me. This probably should be a function that is not available to all gfapi consumers, so please use api/src/glfs-internal.h for that. With clear documentation as written in the email, it should be obvious that only Gluster internal processes may use it. Adding the integration mailinglist on CC, as that is where all discussions around gfapi should be archived. Thanks, Niels From ravishankar at redhat.com Tue Mar 26 04:12:30 2019 From: ravishankar at redhat.com (Ravishankar N) Date: Tue, 26 Mar 2019 09:42:30 +0530 Subject: [GEDI] [Gluster-devel] gfapi: add function to set client-pid In-Reply-To: <20190312105041.GI3535@ndevos-x270> References: <20190312105041.GI3535@ndevos-x270> Message-ID: On 12/03/19 4:20 PM, Niels de Vos wrote: > On Tue, Mar 12, 2019 at 03:00:27PM +0530, Ravishankar N wrote: >> Hello, >> >> I'm planning to expose setting client-pid for gfapi clients via a new api, >> something like `glfs_set_client_pid (fs, pid)`. >> The functionality already exists for fuse mounts via the --client-pid=$PID >> option, where the value is captured in >> glusterfs_ctx_t->cmd_args->client_pid. >> >> Background: >> >> If the glusterfs eventing framework is enabled, AFR sends child-up/child >> down events (via the gf_event() call) in the notify code path whenever there >> is a connect/disconnect at AFR level. While this is okay for normal client >> processes, it does not make much sense if the event is coming from say >> glfsheal, which is a gfapi based program (having the AFR xlator) that is >> invoked when you run the heal info set of commands. Many applications >> periodically run heal info to monitor the heals and display it on the >> dashboard (like tendryl), leading to a flood of child up/ down messages to >> the application monitoring these events. >> >> We need to add a unique key=value to all such gf_event() calls in AFR, based >> on which the consumer of the events can decide to ignore them if needed. >> This key-value can be client-pid=$PID, where PID can be >> GF_CLIENT_PID_SELF_HEALD for selfheal daemon, GF_CLIENT_PID_GLFS_HEAL for >> glfsheal etc (these values are already defined in the code). This is why we >> need a way to set the client-pid for gfapi clients as well. >> >> Another approach would be to add an xlator option (say 'client-name') >> specific to AFR? and use that as the key-value pair but it seems to be an >> overkill to do that just for the sake of eventing purposes. Besides, the pid >> approach can also be extended to other gluster processes like rebalance, shd >> and other daemons where AFR is loaded but AFR child-up/down events from it >> are not of any particular interest.These daemons will now have to be spawned >> by glusterd with the --client-pid option. > Sounds good to me. This probably should be a function that is not > available to all gfapi consumers, so please use api/src/glfs-internal.h > for that. With clear documentation as written in the email, it should be > obvious that only Gluster internal processes may use it. > > Adding the integration mailinglist on CC, as that is where all > discussions around gfapi should be archived. Hi Niels, The gfapi patch [1] is awaiting your review. Thanks, Ravi [1] https://review.gluster.org/#/c/glusterfs/+/22368/ > > Thanks, > Niels