Skip to content
  • Theodore Ts'o's avatar
    ext4: recalucate superblock checksum after updating free blocks/inodes · 4274f516
    Theodore Ts'o authored
    
    
    When mounting the superblock, ext4_fill_super() calculates the free
    blocks and free inodes and stores them in the superblock.  It's not
    strictly necessary, since we don't use them any more, but it's nice to
    keep them roughly aligned to reality.
    
    Since it's not critical for file system correctness, the code doesn't
    call ext4_commit_super().  The problem is that it's in
    ext4_commit_super() that we recalculate the superblock checksum.  So
    if we're not going to call ext4_commit_super(), we need to call
    ext4_superblock_csum_set() to make sure the superblock checksum is
    consistent.
    
    Most of the time, this doesn't matter, since we end up calling
    ext4_commit_super() very soon thereafter, and definitely by the time
    the file system is unmounted.  However, it doesn't work in this
    sequence:
    
    mke2fs -Fq -t ext4 /dev/vdc 128M
    mount /dev/vdc /vdc
    cp xfstests/git-versions /vdc
    godown /vdc
    umount /vdc
    mount /dev/vdc
    tune2fs -l /dev/vdc
    
    With this commit, the "tune2fs -l" no longer fails.
    
    Reported-by: default avatarChengguang Xu <cgxu519@gmx.com>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    Cc: stable@vger.kernel.org
    
    
    4274f516