summaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_super.c
diff options
context:
space:
mode:
authorEric Sandeen2015-02-05 23:53:02 +0100
committerDave Chinner2015-02-05 23:53:02 +0100
commit01f9882eac84b85421a469cb65ee9bb555a5985f (patch)
tree9d2903b03f8923d93db1f6408231254ec5c3514b /fs/xfs/xfs_super.c
parentxfs: fix panic_mask documentation (diff)
downloadkernel-qcow2-linux-01f9882eac84b85421a469cb65ee9bb555a5985f.tar.gz
kernel-qcow2-linux-01f9882eac84b85421a469cb65ee9bb555a5985f.tar.xz
kernel-qcow2-linux-01f9882eac84b85421a469cb65ee9bb555a5985f.zip
xfs: report proper f_files in statfs if we overshoot imaxpct
Normally, a statfs syscall reports m_maxicount as f_files (total file nodes in file system) because it is supposed to be the upper limit for dynamically-allocated inodes. It's possible, however, to overshoot imaxpct / m_maxicount. If this happens, we should report the actual number of allocated inodes, which is contained in sb_icount. Add one more adjustment to the statfs code to make this happen. Reported-by: Alexander Tsvetkov <alexander.tsvetkov@oracle.com> Signed-off-by: Eric Sandeen <sandeen@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/xfs/xfs_super.c')
-rw-r--r--fs/xfs/xfs_super.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index a3b791b85336..26afa436fafe 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -1111,6 +1111,11 @@ xfs_fs_statfs(
statp->f_files,
mp->m_maxicount);
+ /* If sb_icount overshot maxicount, report actual allocation */
+ statp->f_files = max_t(typeof(statp->f_files),
+ statp->f_files,
+ sbp->sb_icount);
+
/* make sure statp->f_ffree does not underflow */
ffree = statp->f_files - (sbp->sb_icount - sbp->sb_ifree);
statp->f_ffree = max_t(__int64_t, ffree, 0);