From: Niels de Vos <ndevos@redhat.com>
To: Jeff Cody <jcody@redhat.com>, qemu-block@nongnu.org
Cc: qemu-devel@nongnu.org, Eric Blake <eblake@redhat.com>,
Niels de Vos <ndevos@redhat.com>,
Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Subject: [Qemu-devel] [PATCH v2] block/gluster: defend on legacy ftruncate api use
Date: Thu, 26 Jul 2018 11:19:07 +0200 [thread overview]
Message-ID: <20180726091907.26839-1-ndevos@redhat.com> (raw)
In-Reply-To: <20180412111614.9724-1-prasanna.kalever@redhat.com>
From: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
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. Never the less, the API has changed and needs to be
adopted.
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Signed-off-by: Niels de Vos <ndevos@redhat.com>
--
v2: do a compile check as suggested by Eric Blake
---
block/gluster.c | 15 +++++++++++++--
configure | 18 ++++++++++++++++++
2 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/block/gluster.c b/block/gluster.c
index 4fd55a9cc5..d1c6f81f5c 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -997,6 +997,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) {
@@ -1024,7 +1025,12 @@ 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)) {
+#ifdef CONFIG_GLUSTERFS_LEGACY_FTRUNCATE
+ ret = glfs_ftruncate(fd, offset);
+#else
+ ret = glfs_ftruncate(fd, offset, NULL, NULL);
+#endif
+ if (ret) {
error_setg_errno(errp, errno, "Could not resize file");
return -errno;
}
@@ -1035,7 +1041,12 @@ 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)) {
+#ifdef CONFIG_GLUSTERFS_LEGACY_FTRUNCATE
+ ret = glfs_ftruncate(fd, offset);
+#else
+ ret = glfs_ftruncate(fd, offset, NULL, NULL);
+#endif
+ if (ret) {
error_setg_errno(errp, errno, "Could not resize file");
return -errno;
}
diff --git a/configure b/configure
index 2a7796ea80..f3c0918d6b 100755
--- a/configure
+++ b/configure
@@ -451,6 +451,7 @@ glusterfs_xlator_opt="no"
glusterfs_discard="no"
glusterfs_fallocate="no"
glusterfs_zerofill="no"
+glusterfs_legacy_ftruncate="no"
gtk=""
gtkabi=""
gtk_gl="no"
@@ -3947,6 +3948,19 @@ if test "$glusterfs" != "no" ; then
glusterfs_fallocate="yes"
glusterfs_zerofill="yes"
fi
+ cat > $TMPC << EOF
+#include <glusterfs/api/glfs.h>
+
+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" \
@@ -6644,6 +6658,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.17.1
next prev parent reply other threads:[~2018-07-26 9:19 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-12 11:16 [Qemu-devel] [PATCH] block/gluster: defend on legacy ftruncate api use Prasanna Kumar Kalever
2018-04-12 13:31 ` Niels de Vos
2018-04-12 16:21 ` Eric Blake
2018-04-12 18:53 ` Niels de Vos
2018-07-26 9:19 ` Niels de Vos [this message]
2018-07-26 14:14 ` [Qemu-devel] [PATCH v2] " Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180726091907.26839-1-ndevos@redhat.com \
--to=ndevos@redhat.com \
--cc=eblake@redhat.com \
--cc=jcody@redhat.com \
--cc=prasanna.kalever@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).