diff options
author | Christoph Hellwig <hch@lst.de> | 2025-01-13 05:32:58 +0100 |
---|---|---|
committer | Carlos Maiolino <cem@kernel.org> | 2025-01-13 14:56:24 +0100 |
commit | 72843ca62417a0587ca98791b172e4c3b3f8d3a8 (patch) | |
tree | f424471a3f9aaabe517b2ec277f4919adbf7f748 /fs/xfs | |
parent | f4752daf472b52a376f38243436c67b188a5eddf (diff) |
xfs: don't take m_sb_lock in xfs_fs_statfs
The only non-constant value read under m_sb_lock in xfs_fs_statfs is
sb_dblocks, and it could become stale right after dropping the lock
anyway. Remove the thus pointless lock section.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/xfs_super.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 7c3f996cd39e..20cc00b992a6 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -850,11 +850,13 @@ xfs_fs_statfs( ifree = percpu_counter_sum(&mp->m_ifree); fdblocks = percpu_counter_sum(&mp->m_fdblocks); - spin_lock(&mp->m_sb_lock); statp->f_bsize = sbp->sb_blocksize; lsize = sbp->sb_logstart ? sbp->sb_logblocks : 0; + /* + * sb_dblocks can change during growfs, but nothing cares about reporting + * the old or new value during growfs. + */ statp->f_blocks = sbp->sb_dblocks - lsize; - spin_unlock(&mp->m_sb_lock); /* make sure statp->f_bfree does not underflow */ statp->f_bfree = max_t(int64_t, 0, |