fix bad htree checksums in peer mode
(cherry picked from commit b1b24b85c7b086cd66da0eebf986f6499d28b53d)
This commit is contained in:
parent
df7d1c1af1
commit
12d2647694
60
0040-e2fsck-fix-bad-htree-checksums-in-preen-mode.patch
Normal file
60
0040-e2fsck-fix-bad-htree-checksums-in-preen-mode.patch
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
From 79a7b5e1f387caf907ec88460cdb39b8364bfb0b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Theodore Ts'o <tytso@mit.edu>
|
||||||
|
Date: Thu, 16 Mar 2023 22:57:10 -0400
|
||||||
|
Subject: e2fsck: fix bad htree checksums in preen mode
|
||||||
|
|
||||||
|
We attempt to fix directories which have a bad/corrupted htree index
|
||||||
|
node by completely rebuilding the directory htree nodes. Since this
|
||||||
|
is a very safe thing to do and has no risk of losing directory
|
||||||
|
entries, we've enabled this for preen mode. Unfortunately, subsequent
|
||||||
|
index nodes look like empty directory entries that fill the entire
|
||||||
|
block --- without a checksum at the end of the directory. So these
|
||||||
|
nodes will be treated as a completely corrupted directory block, and
|
||||||
|
this will *not* be fixed while in preen mode.
|
||||||
|
|
||||||
|
So add code to treat an empty directory entry which covers the entire
|
||||||
|
block as valid if the directory is already on the list of inodes to be
|
||||||
|
rebuilt.
|
||||||
|
|
||||||
|
Addresses-Gooogle-Bug: 178607853
|
||||||
|
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||||
|
---
|
||||||
|
e2fsck/pass2.c | 16 ++++++++++++++--
|
||||||
|
1 file changed, 14 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/e2fsck/pass2.c b/e2fsck/pass2.c
|
||||||
|
index 287360943..2700e3409 100644
|
||||||
|
--- a/e2fsck/pass2.c
|
||||||
|
+++ b/e2fsck/pass2.c
|
||||||
|
@@ -1341,7 +1341,18 @@ skip_checksum:
|
||||||
|
(rec_len < min_dir_len) ||
|
||||||
|
((rec_len % 4) != 0) ||
|
||||||
|
((ext2fs_dir_rec_len(ext2fs_dirent_name_len(dirent),
|
||||||
|
- extended)) > rec_len)) {
|
||||||
|
+ extended)) > rec_len))
|
||||||
|
+ problem = PR_2_DIR_CORRUPTED;
|
||||||
|
+ if (problem) {
|
||||||
|
+ if ((offset == 0) &&
|
||||||
|
+ (rec_len == fs->blocksize) &&
|
||||||
|
+ (dirent->inode == 0) &&
|
||||||
|
+ e2fsck_dir_will_be_rehashed(ctx, ino)) {
|
||||||
|
+ problem = 0;
|
||||||
|
+ max_block_size = fs->blocksize;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (problem) {
|
||||||
|
if (fix_problem(ctx, PR_2_DIR_CORRUPTED,
|
||||||
|
&cd->pctx)) {
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
@@ -1573,7 +1584,8 @@ skip_checksum:
|
||||||
|
*/
|
||||||
|
if (!(ctx->flags & E2F_FLAG_RESTART_LATER) &&
|
||||||
|
!(ext2fs_test_inode_bitmap2(ctx->inode_used_map,
|
||||||
|
- dirent->inode)))
|
||||||
|
+ dirent->inode))
|
||||||
|
+ )
|
||||||
|
problem = PR_2_UNUSED_INODE;
|
||||||
|
|
||||||
|
if (problem) {
|
||||||
|
--
|
||||||
|
cgit
|
||||||
@ -1,6 +1,6 @@
|
|||||||
Name: e2fsprogs
|
Name: e2fsprogs
|
||||||
Version: 1.46.4
|
Version: 1.46.4
|
||||||
Release: 21
|
Release: 22
|
||||||
Summary: Second extended file system management tools
|
Summary: Second extended file system management tools
|
||||||
License: GPLv2+ and LGPLv2 and MIT
|
License: GPLv2+ and LGPLv2 and MIT
|
||||||
URL: http://e2fsprogs.sourceforge.net/
|
URL: http://e2fsprogs.sourceforge.net/
|
||||||
@ -46,6 +46,7 @@ Patch36: 0036-lib-ext2fs-fix-unbalanced-mutex-unlock-for-BOUNCE_MT.patch
|
|||||||
Patch37: 0037-libext2fs-fix-ext2fs_compare_generic_bmap-logic.patch
|
Patch37: 0037-libext2fs-fix-ext2fs_compare_generic_bmap-logic.patch
|
||||||
Patch38: 0038-Quiet-unused-variable-warnings.patch
|
Patch38: 0038-Quiet-unused-variable-warnings.patch
|
||||||
Patch39: 0039-ext2fs-Use-64bit-lseek-when-_FILE_OFFSET_BITS-is-64.patch
|
Patch39: 0039-ext2fs-Use-64bit-lseek-when-_FILE_OFFSET_BITS-is-64.patch
|
||||||
|
Patch40: 0040-e2fsck-fix-bad-htree-checksums-in-preen-mode.patch
|
||||||
|
|
||||||
|
|
||||||
BuildRequires: gcc pkgconfig texinfo
|
BuildRequires: gcc pkgconfig texinfo
|
||||||
@ -187,6 +188,9 @@ exit 0
|
|||||||
%{_mandir}/man8/*
|
%{_mandir}/man8/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Oct 30 2023 volcanodragon <linfeilong@huawei.com> - 1.46.4-22
|
||||||
|
- e2fsck fix bad htree checksum in preen mode
|
||||||
|
|
||||||
* Sun Jun 25 2023 suweifeng <suweifeng1@huawei.com> - 1.46.4-21
|
* Sun Jun 25 2023 suweifeng <suweifeng1@huawei.com> - 1.46.4-21
|
||||||
- backport patches from upstream
|
- backport patches from upstream
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user