From: Greg Kroah-Hartman Date: Fri, 14 Jun 2013 22:46:46 +0000 (-0700) Subject: 3.0-stable patches X-Git-Tag: v3.0.83~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e11673e37891d641ca823524e48512971079b9a6;p=thirdparty%2Fkernel%2Fstable-queue.git 3.0-stable patches added patches: ceph-fix-statvfs-fr_size.patch --- 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 index 00000000000..cd8f29871a3 --- /dev/null +++ b/queue-3.0/ceph-fix-statvfs-fr_size.patch @@ -0,0 +1,62 @@ +From 92a49fb0f79f3300e6e50ddf56238e70678e4202 Mon Sep 17 00:00:00 2001 +From: Sage Weil +Date: Fri, 22 Feb 2013 15:31:00 -0800 +Subject: ceph: fix statvfs fr_size + +From: Sage Weil + +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 +Reviewed-by: Greg Farnum +Signed-off-by: Greg Kroah-Hartman + +--- + 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 */ diff --git a/queue-3.0/series b/queue-3.0/series index 01fa5a86150..6868832ff9e 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -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