aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2009-11-23 07:24:52 -0500
committerTheodore Ts'o <tytso@mit.edu>2009-11-23 07:24:52 -0500
commit3f8fb9490efbd300887470a2a880a64e04dcc3f5 (patch)
tree0cd1fd1ab185885cf4a4dd1416015fe2784b710f /fs/ext4
parent86ebfd08a1930ccedb8eac0aeb1ed4b8b6a41dbc (diff)
ext4: don't update the superblock in ext4_statfs()
commit a71ce8c6c9bf269b192f352ea555217815cf027e updated ext4_statfs() to update the on-disk superblock counters, but modified this buffer directly without any journaling of the change. This is one of the accesses that was causing the crc errors in journal replay as seen in kernel.org bugzilla #14354. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Cc: stable@kernel.org
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/super.c2
1 files changed, 0 insertions, 2 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 04c66907b2fe..f2d5ec77c1e9 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -3648,13 +3648,11 @@ static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)
3648 buf->f_blocks = ext4_blocks_count(es) - sbi->s_overhead_last; 3648 buf->f_blocks = ext4_blocks_count(es) - sbi->s_overhead_last;
3649 buf->f_bfree = percpu_counter_sum_positive(&sbi->s_freeblocks_counter) - 3649 buf->f_bfree = percpu_counter_sum_positive(&sbi->s_freeblocks_counter) -
3650 percpu_counter_sum_positive(&sbi->s_dirtyblocks_counter); 3650 percpu_counter_sum_positive(&sbi->s_dirtyblocks_counter);
3651 ext4_free_blocks_count_set(es, buf->f_bfree);
3652 buf->f_bavail = buf->f_bfree - ext4_r_blocks_count(es); 3651 buf->f_bavail = buf->f_bfree - ext4_r_blocks_count(es);
3653 if (buf->f_bfree < ext4_r_blocks_count(es)) 3652 if (buf->f_bfree < ext4_r_blocks_count(es))
3654 buf->f_bavail = 0; 3653 buf->f_bavail = 0;
3655 buf->f_files = le32_to_cpu(es->s_inodes_count); 3654 buf->f_files = le32_to_cpu(es->s_inodes_count);
3656 buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter); 3655 buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter);
3657 es->s_free_inodes_count = cpu_to_le32(buf->f_ffree);
3658 buf->f_namelen = EXT4_NAME_LEN; 3656 buf->f_namelen = EXT4_NAME_LEN;
3659 fsid = le64_to_cpup((void *)es->s_uuid) ^ 3657 fsid = le64_to_cpup((void *)es->s_uuid) ^
3660 le64_to_cpup((void *)es->s_uuid + sizeof(u64)); 3658 le64_to_cpup((void *)es->s_uuid + sizeof(u64));