]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Jun 2013 22:46:46 +0000 (15:46 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Jun 2013 22:46:46 +0000 (15:46 -0700)
added patches:
ceph-fix-statvfs-fr_size.patch

queue-3.0/ceph-fix-statvfs-fr_size.patch [new file with mode: 0644]
queue-3.0/series

diff --git a/queue-3.0/ceph-fix-statvfs-fr_size.patch b/queue-3.0/ceph-fix-statvfs-fr_size.patch
new file mode 100644 (file)
index 0000000..cd8f298
--- /dev/null
@@ -0,0 +1,62 @@
+From 92a49fb0f79f3300e6e50ddf56238e70678e4202 Mon Sep 17 00:00:00 2001
+From: Sage Weil <sage@inktank.com>
+Date: Fri, 22 Feb 2013 15:31:00 -0800
+Subject: ceph: fix statvfs fr_size
+
+From: Sage Weil <sage@inktank.com>
+
+commit 92a49fb0f79f3300e6e50ddf56238e70678e4202 upstream.
+
+Different versions of glibc are broken in different ways, but the short of
+it is that for the time being, frsize should == bsize, and be used as the
+multiple for the blocks, free, and available fields.  This mirrors what is
+done for NFS.  The previous reporting of the page size for frsize meant
+that newer glibc and df would report a very small value for the fs size.
+
+Fixes http://tracker.ceph.com/issues/3793.
+
+Signed-off-by: Sage Weil <sage@inktank.com>
+Reviewed-by: Greg Farnum <greg@inktank.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/ceph/super.c |    7 ++++++-
+ fs/ceph/super.h |    2 +-
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+--- a/fs/ceph/super.c
++++ b/fs/ceph/super.c
+@@ -70,8 +70,14 @@ static int ceph_statfs(struct dentry *de
+       /*
+        * express utilization in terms of large blocks to avoid
+        * overflow on 32-bit machines.
++       *
++       * NOTE: for the time being, we make bsize == frsize to humor
++       * not-yet-ancient versions of glibc that are broken.
++       * Someday, we will probably want to report a real block
++       * size...  whatever that may mean for a network file system!
+        */
+       buf->f_bsize = 1 << CEPH_BLOCK_SHIFT;
++      buf->f_frsize = 1 << CEPH_BLOCK_SHIFT;
+       buf->f_blocks = le64_to_cpu(st.kb) >> (CEPH_BLOCK_SHIFT-10);
+       buf->f_bfree = (le64_to_cpu(st.kb) - le64_to_cpu(st.kb_used)) >>
+               (CEPH_BLOCK_SHIFT-10);
+@@ -80,7 +86,6 @@ static int ceph_statfs(struct dentry *de
+       buf->f_files = le64_to_cpu(st.num_objects);
+       buf->f_ffree = -1;
+       buf->f_namelen = NAME_MAX;
+-      buf->f_frsize = PAGE_CACHE_SIZE;
+       /* leave fsid little-endian, regardless of host endianness */
+       fsid = *(u64 *)(&monmap->fsid) ^ *((u64 *)&monmap->fsid + 1);
+--- a/fs/ceph/super.h
++++ b/fs/ceph/super.h
+@@ -21,7 +21,7 @@
+ /* large granularity for statfs utilization stats to facilitate
+  * large volume sizes on 32-bit machines. */
+-#define CEPH_BLOCK_SHIFT   20  /* 1 MB */
++#define CEPH_BLOCK_SHIFT   22  /* 4 MB */
+ #define CEPH_BLOCK         (1 << CEPH_BLOCK_SHIFT)
+ #define CEPH_MOUNT_OPT_DIRSTAT         (1<<4) /* `cat dirname` for stats */
index 01fa5a8615021007371852d3e66bf5a5478fe00a..6868832ff9e6a9ffaf53fa3c8d7cf44f3bcb891a 100644 (file)
@@ -4,3 +4,4 @@ drm-i915-prefer-vbt-modes-for-svdo-lvds-over-edid.patch
 swap-avoid-read_swap_cache_async-race-to-deadlock-while-waiting-on-discard-i-o-completion.patch
 mm-migration-add-migrate_entry_wait_huge.patch
 x86-fix-typo-in-kexec-register-clearing.patch
+ceph-fix-statvfs-fr_size.patch