summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Hernandez <xhernandez@datalab.es>2017-01-09 13:10:19 +0100
committerKaleb KEITHLEY <kkeithle@redhat.com>2017-01-13 13:23:30 -0800
commit05c0e6fffd30730af5c36778a3c86b6e25b2d010 (patch)
tree1de61a572163a8845a6202479f0e18147f141365
parentf8a61095fc7003b97960d3097cfa2b6a3ad9fe43 (diff)
libglusterfs: fix statvfs in FreeBSD
FreeBSD interprets statvfs' f_bsize field in a different way than Linux. This fix modifies the value returned by statvfs() on FreeBSD to match the expected value by Gluster. > Change-Id: I930dab6e895671157238146d333e95874ea28a08 > BUG: 1356076 > Signed-off-by: Xavier Hernandez <xhernandez@datalab.es> > Reviewed-on: http://review.gluster.org/16361 > Smoke: Gluster Build System <jenkins@build.gluster.org> > NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> > Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> > CentOS-regression: Gluster Build System <jenkins@build.gluster.org> > Reviewed-by: Jeff Darcy <jdarcy@redhat.com> Change-Id: I3a8e06bea7ce63d16e5569260bf9abdbced06dc1 BUG: 1411898 Signed-off-by: Xavier Hernandez <xhernandez@datalab.es> Reviewed-on: http://review.gluster.org/16398 Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
-rw-r--r--libglusterfs/src/syscall.c35
-rw-r--r--libglusterfs/src/syscall.h3
2 files changed, 37 insertions, 1 deletions
diff --git a/libglusterfs/src/syscall.c b/libglusterfs/src/syscall.c
index 93838e285a4..7336e06891a 100644
--- a/libglusterfs/src/syscall.c
+++ b/libglusterfs/src/syscall.c
@@ -326,7 +326,40 @@ sys_lseek (int fd, off_t offset, int whence)
int
sys_statvfs (const char *path, struct statvfs *buf)
{
- return statvfs (path, buf);
+ int ret;
+
+ ret = statvfs (path, buf);
+#ifdef __FreeBSD__
+ /* FreeBSD doesn't return the expected vaule in buf->f_bsize. It
+ * contains the optimal I/O size instead of the file system block
+ * size. Gluster expects that this field contains the block size.
+ */
+ if (ret == 0) {
+ buf->f_bsize = buf->f_frsize;
+ }
+#endif /* __FreeBSD__ */
+
+ return ret;
+}
+
+
+int
+sys_fstatvfs (int fd, struct statvfs *buf)
+{
+ int ret;
+
+ ret = fstatvfs (fd, buf);
+#ifdef __FreeBSD__
+ /* FreeBSD doesn't return the expected vaule in buf->f_bsize. It
+ * contains the optimal I/O size instead of the file system block
+ * size. Gluster expects this field to contain the block size.
+ */
+ if (ret == 0) {
+ buf->f_bsize = buf->f_frsize;
+ }
+#endif /* __FreeBSD__ */
+
+ return ret;
}
diff --git a/libglusterfs/src/syscall.h b/libglusterfs/src/syscall.h
index 6fee9bd5c5c..1a2658b94f1 100644
--- a/libglusterfs/src/syscall.h
+++ b/libglusterfs/src/syscall.h
@@ -147,6 +147,9 @@ int
sys_statvfs (const char *path, struct statvfs *buf);
int
+sys_fstatvfs (int fd, struct statvfs *buf);
+
+int
sys_close (int fd);
int