[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#6331: [sshfs] df reports wrong disk space usage on solaris
From: |
Miklos Szeredi |
Subject: |
bug#6331: [sshfs] df reports wrong disk space usage on solaris |
Date: |
Tue, 15 Jun 2010 15:14:08 +0200 |
On Thu, 03 Jun 2010, Miklos Szeredi wrote:
> Hmm, actually "struct statfs" on linux does have f_frsize, only the
> manpage doesn't document it. So correct thing would be to use that,
> no?
Here's a patch that allows df(1) to correctly calculate the disk usage
and displays f_frsize in stat(1).
Thanks,
Miklos
---
gnulib/lib/fsusage.c | 7 +++++++
m4/stat-prog.m4 | 2 +-
src/stat.c | 6 +++++-
3 files changed, 13 insertions(+), 2 deletions(-)
Index: coreutils/m4/stat-prog.m4
===================================================================
--- coreutils.orig/m4/stat-prog.m4 2010-06-15 13:08:56.000000000 +0200
+++ coreutils/m4/stat-prog.m4 2010-06-15 13:47:51.000000000 +0200
@@ -71,7 +71,7 @@ AC_INCLUDES_DEFAULT
[AC_DEFINE([STRUCT_STATVFS_F_FSID_IS_INTEGER], [1],
[Define to 1 if the f_fsid member of struct statvfs is an integer.])])
else
- AC_CHECK_MEMBERS([struct statfs.f_namelen, struct statfs.f_type],,,
+ AC_CHECK_MEMBERS([struct statfs.f_namelen, struct statfs.f_type, struct
statfs.f_frsize],,,
[$statfs_includes])
if test $ac_cv_header_OS_h != yes; then
AC_COMPILE_IFELSE(
Index: coreutils/src/stat.c
===================================================================
--- coreutils.orig/src/stat.c 2010-06-15 13:08:56.000000000 +0200
+++ coreutils/src/stat.c 2010-06-15 13:09:02.000000000 +0200
@@ -118,7 +118,11 @@ statfs (char const *filename, struct fs_
# else
# define STRUCT_STATVFS struct statfs
# define STRUCT_STATXFS_F_FSID_IS_INTEGER STRUCT_STATFS_F_FSID_IS_INTEGER
-# define STATFS_FRSIZE(S) 0
+# if HAVE_STRUCT_STATFS_F_FRSIZE
+# define STATFS_FRSIZE(S) ((S)->f_frsize)
+# else
+# define STATFS_FRSIZE(S) 0
+# endif
# endif
#endif
Index: coreutils/gnulib/lib/fsusage.c
===================================================================
--- coreutils.orig/gnulib/lib/fsusage.c 2010-06-15 13:46:49.000000000 +0200
+++ coreutils/gnulib/lib/fsusage.c 2010-06-15 13:46:56.000000000 +0200
@@ -172,7 +172,14 @@ get_fs_usage (char const *file, char con
if (statfs (file, &fsd) < 0)
return -1;
+#ifdef HAVE_STRUCT_STATFS_F_FRSIZE
+ /* f_frsize isn't guaranteed to be supported. */
+ fsp->fsu_blocksize = (fsd.f_frsize
+ ? PROPAGATE_ALL_ONES (fsd.f_frsize)
+ : PROPAGATE_ALL_ONES (fsd.f_bsize));
+#else
fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_bsize);
+#endif
# ifdef STATFS_TRUNCATES_BLOCK_COUNTS