Sage Weil <sage@xxxxxxxxxxx> writes: > Hi, > > This applies cleanly to probably any 3.x kernel, but really only needs to > go into 3.4 (or other stable kernels from 3.4 to 3.9). It first appeared > in 3.9. Thank you, I'm queuing it for the 3.5 kernel Cheers, -- Luis > > Thanks! > sage > > > From 92a49fb0f79f3300e6e50ddf56238e70678e4202 Mon Sep 17 00:00:00 2001 > From: Sage Weil <sage@xxxxxxxxxxx> > Date: Fri, 22 Feb 2013 15:31:00 -0800 > Subject: [PATCH] ceph: fix statvfs fr_size > > 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@xxxxxxxxxxx> > Reviewed-by: Greg Farnum <greg@xxxxxxxxxxx> > --- > fs/ceph/super.c | 7 ++++++- > fs/ceph/super.h | 2 +- > 2 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/fs/ceph/super.c b/fs/ceph/super.c > index e86aa994..9fe17c6c 100644 > --- a/fs/ceph/super.c > +++ b/fs/ceph/super.c > @@ -71,8 +71,14 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf) > /* > * 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_avail) >> (CEPH_BLOCK_SHIFT-10); > buf->f_bavail = le64_to_cpu(st.kb_avail) >> (CEPH_BLOCK_SHIFT-10); > @@ -80,7 +86,6 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf) > 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); > diff --git a/fs/ceph/super.h b/fs/ceph/super.h > index 9861cce..604526a 100644 > --- 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 */ -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html