lkml.org 
[lkml]   [2021]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 02/24] ext4: fix e2fsprogs checksum failure for mounted filesystem
    Date
    From: Jan Kara <jack@suse.cz>

    commit b2bbb92f7042e8075fb036bf97043339576330c3 upstream.

    Commit 81414b4dd48 ("ext4: remove redundant sb checksum
    recomputation") removed checksum recalculation after updating
    superblock free space / inode counters in ext4_fill_super() based on
    the fact that we will recalculate the checksum on superblock
    writeout.

    That is correct assumption but until the writeout happens (which can
    take a long time) the checksum is incorrect in the buffer cache and if
    programs such as tune2fs or resize2fs is called shortly after a file
    system is mounted can fail. So return back the checksum recalculation
    and add a comment explaining why.

    Fixes: 81414b4dd48f ("ext4: remove redundant sb checksum recomputation")
    Cc: stable@kernel.org
    Reported-by: Boyang Xue <bxue@redhat.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Link: https://lore.kernel.org/r/20210812124737.21981-1-jack@suse.cz
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/ext4/super.c | 8 ++++++++
    1 file changed, 8 insertions(+)

    --- a/fs/ext4/super.c
    +++ b/fs/ext4/super.c
    @@ -5051,6 +5051,14 @@ no_journal:
    err = percpu_counter_init(&sbi->s_freeinodes_counter, freei,
    GFP_KERNEL);
    }
    + /*
    + * Update the checksum after updating free space/inode
    + * counters. Otherwise the superblock can have an incorrect
    + * checksum in the buffer cache until it is written out and
    + * e2fsprogs programs trying to open a file system immediately
    + * after it is mounted can fail.
    + */
    + ext4_superblock_csum_set(sb);
    if (!err)
    err = percpu_counter_init(&sbi->s_dirs_counter,
    ext4_count_dirs(sb), GFP_KERNEL);

    \
     
     \ /
      Last update: 2021-09-06 15:07    [W:5.659 / U:0.260 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site