From nobody Sun Nov 9 17:51:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 155171691572153.16922664438107; Mon, 4 Mar 2019 08:28:35 -0800 (PST) Received: from localhost ([127.0.0.1]:56772 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0qS7-00085q-GX for importer@patchew.org; Mon, 04 Mar 2019 11:28:31 -0500 Received: from eggs.gnu.org ([209.51.188.92]:46534) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0qQZ-000757-Pr for qemu-devel@nongnu.org; Mon, 04 Mar 2019 11:26:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0qQX-0004ji-2g for qemu-devel@nongnu.org; Mon, 04 Mar 2019 11:26:54 -0500 Received: from mx1.redhat.com ([209.132.183.28]:49314) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0qQJ-0004SL-S8; Mon, 04 Mar 2019 11:26:40 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 80DECC057F5D; Mon, 4 Mar 2019 16:21:10 +0000 (UTC) Received: from localhost (unknown [10.36.118.96]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2A9565C28F; Mon, 4 Mar 2019 16:21:10 +0000 (UTC) From: Niels de Vos To: qemu-block@nongnu.org Date: Mon, 4 Mar 2019 17:21:02 +0100 Message-Id: <20190304162103.18912-2-ndevos@redhat.com> In-Reply-To: <20190304162103.18912-1-ndevos@redhat.com> References: <20190304162103.18912-1-ndevos@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Mon, 04 Mar 2019 16:21:10 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 1/2] block/gluster: Handle changed glfs_ftruncate signature X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Niels de Vos , integration@gluster.org, Prasanna Kumar Kalever , qemu-devel@nongnu.org, Cole Robinson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" 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" =20 +#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 *f= d, int64_t offset, PreallocMode prealloc, Error **errp) { int64_t current_length; + int ret; =20 current_length =3D glfs_lseek(fd, 0, SEEK_END); if (current_length < 0) { @@ -1032,7 +1037,8 @@ static int qemu_gluster_do_truncate(struct glfs_fd *f= d, int64_t offset, #endif /* CONFIG_GLUSTERFS_FALLOCATE */ #ifdef CONFIG_GLUSTERFS_ZEROFILL case PREALLOC_MODE_FULL: - if (glfs_ftruncate(fd, offset)) { + ret =3D 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 *f= d, int64_t offset, break; #endif /* CONFIG_GLUSTERFS_ZEROFILL */ case PREALLOC_MODE_OFF: - if (glfs_ftruncate(fd, offset)) { + ret =3D 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=3D"no" glusterfs_discard=3D"no" glusterfs_fallocate=3D"no" glusterfs_zerofill=3D"no" +glusterfs_legacy_ftruncate=3D"no" gtk=3D"" gtk_gl=3D"no" tls_priority=3D"NORMAL" @@ -4057,6 +4058,19 @@ if test "$glusterfs" !=3D "no" ; then glusterfs_fallocate=3D"yes" glusterfs_zerofill=3D"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=3D"yes" + fi else if test "$glusterfs" =3D "yes" ; then feature_not_found "GlusterFS backend support" \ @@ -6853,6 +6867,10 @@ if test "$glusterfs_zerofill" =3D "yes" ; then echo "CONFIG_GLUSTERFS_ZEROFILL=3Dy" >> $config_host_mak fi =20 +if test "$glusterfs_legacy_ftruncate" =3D "yes" ; then + echo "CONFIG_GLUSTERFS_LEGACY_FTRUNCATE=3Dy" >> $config_host_mak +fi + if test "$libssh2" =3D "yes" ; then echo "CONFIG_LIBSSH2=3Dm" >> $config_host_mak echo "LIBSSH2_CFLAGS=3D$libssh2_cflags" >> $config_host_mak --=20 2.20.1 From nobody Sun Nov 9 17:51:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 155171726839421.367618529582046; Mon, 4 Mar 2019 08:34:28 -0800 (PST) Received: from localhost ([127.0.0.1]:56884 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0qXr-0003xY-Ce for importer@patchew.org; Mon, 04 Mar 2019 11:34:27 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47539) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0qTm-0001BP-7a for qemu-devel@nongnu.org; Mon, 04 Mar 2019 11:30:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0qTk-0001eu-7w for qemu-devel@nongnu.org; Mon, 04 Mar 2019 11:30:14 -0500 Received: from mx1.redhat.com ([209.132.183.28]:13745) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0qTb-0001N0-Pn; Mon, 04 Mar 2019 11:30:03 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 574D6883B8; Mon, 4 Mar 2019 16:21:12 +0000 (UTC) Received: from localhost (unknown [10.36.118.96]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0407B5D9CC; Mon, 4 Mar 2019 16:21:11 +0000 (UTC) From: Niels de Vos To: qemu-block@nongnu.org Date: Mon, 4 Mar 2019 17:21:03 +0100 Message-Id: <20190304162103.18912-3-ndevos@redhat.com> In-Reply-To: <20190304162103.18912-1-ndevos@redhat.com> References: <20190304162103.18912-1-ndevos@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Mon, 04 Mar 2019 16:21:12 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 2/2] gluster: the glfs_io_cbk callback function pointer adds pre/post stat args X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Niels de Vos , integration@gluster.org, qemu-devel@nongnu.org, Cole Robinson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" 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(BlockdevOptionsG= luster *gconf, /* * AIO callback routine called from GlusterFS thread. */ -static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, void *ar= g) +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 =3D (GlusterAIOCB *)arg; =20 diff --git a/configure b/configure index 1d09bef1f9..d8ae8c2f50 100755 --- a/configure +++ b/configure @@ -457,6 +457,7 @@ glusterfs_discard=3D"no" glusterfs_fallocate=3D"no" glusterfs_zerofill=3D"no" glusterfs_legacy_ftruncate=3D"no" +glusterfs_iocb_has_stat=3D"no" gtk=3D"" gtk_gl=3D"no" tls_priority=3D"NORMAL" @@ -4071,6 +4072,25 @@ EOF if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then glusterfs_legacy_ftruncate=3D"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, stru= ct glfs_stat *poststat, void *data) +{} + +int +main(void) +{ + glfs_io_cbk iocb =3D &glusterfs_iocb; + iocb(NULL, 0 , NULL, NULL, NULL); + return 0; +} +EOF + if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then + glusterfs_iocb_has_stat=3D"yes" + fi else if test "$glusterfs" =3D "yes" ; then feature_not_found "GlusterFS backend support" \ @@ -6871,6 +6891,10 @@ if test "$glusterfs_legacy_ftruncate" =3D "yes" ; th= en echo "CONFIG_GLUSTERFS_LEGACY_FTRUNCATE=3Dy" >> $config_host_mak fi =20 +if test "$glusterfs_iocb_has_stat" =3D "yes" ; then + echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=3Dy" >> $config_host_mak +fi + if test "$libssh2" =3D "yes" ; then echo "CONFIG_LIBSSH2=3Dm" >> $config_host_mak echo "LIBSSH2_CFLAGS=3D$libssh2_cflags" >> $config_host_mak --=20 2.20.1