On 6/11/24 9:27 AM, Luis Henriques (SUSE) wrote: > Hi! > > I'm sending a fix to e2fsck that forces the filesystem checks to happen > when the orphan file is present in the filesystem. This patch resulted from > a bug reported in openSUSE Tumbleweed[1] where e2fsck doesn't clean-up this > file and later the filesystem fails to be mounted read-only (because it > still requires recovery). Looks like Fedora is hitting this bug now: https://bugzilla.redhat.com/show_bug.cgi?id=2318710 (unclear why fedora upgrade is leaving an unclean root fs on reboot, but that's a separate issue.) With this patch in place, bare e2fsck asks for confirmation, not sure if that's expected. But with "yes" answers, the filesystem is cleaned properly and mounts just fine. Also - shouldn't we go ahead and deal with the orphan inode file even on a readonly mount, as long as the bdev itself is not readonly? ext4_mark_recovery_complete(): if (sb_rdonly(sb) && (ext4_has_feature_journal_needs_recovery(sb) || ext4_has_feature_orphan_present(sb))) { if (!ext4_orphan_file_empty(sb)) { ext4_error(sb, "Orphan file not empty on read-only fs."); err = -EFSCORRUPTED; goto out; } ext4_clear_feature_journal_needs_recovery(sb); ext4_clear_feature_orphan_present(sb); ext4_commit_super(sb); } # losetup /dev/loop0 2318710-e2image.raw ## from above bz attachment # e2fsck /dev/loop0 (without this patch) ... # mount -o ro /dev/loop0 mnt mount: /root/e2fsprogs/mnt: fsconfig system call failed: Structure needs cleaning. dmesg(1) may have more information after failed mount system call. # dmesg | tail -n 2 [ 3083.343622] EXT4-fs error (device loop0): ext4_mark_recovery_complete:6229: comm mount: Orphan file not empty on read-only fs. [ 3083.345339] EXT4-fs (loop0): mount failed # mount -o rw /dev/loop0 mnt # echo $? 0 -Eric > I'm also sending a new test to validate this scenario. > > [1] https://bugzilla.suse.com/show_bug.cgi?id=1226043 > > Luis Henriques (SUSE) (2): > e2fsck: don'k skip checks if the orphan file is present in the > filesystem > tests: new test to check that the orphan file is cleaned up > > e2fsck/unix.c | 4 ++++ > tests/f_clear_orphan_file/expect.1 | 35 +++++++++++++++++++++++++++++ > tests/f_clear_orphan_file/expect.2 | 7 ++++++ > tests/f_clear_orphan_file/image.gz | Bin 0 -> 12449 bytes > tests/f_clear_orphan_file/name | 1 + > tests/f_clear_orphan_file/script | 2 ++ > 6 files changed, 49 insertions(+) > create mode 100644 tests/f_clear_orphan_file/expect.1 > create mode 100644 tests/f_clear_orphan_file/expect.2 > create mode 100644 tests/f_clear_orphan_file/image.gz > create mode 100644 tests/f_clear_orphan_file/name > create mode 100644 tests/f_clear_orphan_file/script > >