FAILED: patch "[PATCH] ext4: fix super block checksum incorrect after mount" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Possible dependencies:
9b6641dd95a0 ("ext4: fix super block checksum incorrect after mount")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 9b6641dd95a0c441b277dd72ba22fed8d61f76ad Mon Sep 17 00:00:00 2001
From: Ye Bin <[email protected]>
Date: Wed, 25 May 2022 09:29:04 +0800
Subject: [PATCH] ext4: fix super block checksum incorrect after mount
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
We got issue as follows:
[home]# mount /dev/sda test
EXT4-fs (sda): warning: mounting fs with errors, running e2fsck is recommended [home]# dmesg
EXT4-fs (sda): warning: mounting fs with errors, running e2fsck is recommended EXT4-fs (sda): Errors on filesystem, clearing orphan list. EXT4-fs (sda): recovery complete
EXT4-fs (sda): mounted filesystem with ordered data mode. Quota mode: none. [home]# debugfs /dev/sda
debugfs 1.46.5 (30-Dec-2021)
Checksum errors in superblock! Retrying...
Reason is ext4_orphan_cleanup will reset ‘s_last_orphan’ but not update super block checksum.
To solve above issue, defer update super block checksum after ext4_orphan_cleanup.
fs/ext4/super.c +8 -8
@@ -5302,14 +5302,6 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb) 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 );
@@ -5367,6 +5359,14 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)EXT4_SB (sb)->s_mount_state |=EXT4_ORPHAN_FS ;ext4_orphan_cleanup (sb, es);EXT4_SB (sb)->s_mount_state &= ~EXT4_ORPHAN_FS ; +/* +* Update the checksum after updating free space/inode counters and +* ext4_orphan_cleanup. 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 (needs_recovery) {ext4_msg (sb,KERN_INFO ,"recovery complete" ); err =ext4_mark_recovery_complete (sb, es);