fix xfs_repair failure
(cherry picked from commit 305d031de198be8cc28e9d236f5b066c35690394)
This commit is contained in:
parent
181a433524
commit
310e14e5cf
@ -0,0 +1,86 @@
|
||||
From a86308c98d33e921eb133f47faedf1d9e62f2e77 Mon Sep 17 00:00:00 2001
|
||||
From: Wu Guanghao <wuguanghao3@huawei.com>
|
||||
Date: Wed, 26 Jul 2023 09:43:16 +0800
|
||||
Subject: [PATCH] xfs_repair: fix the problem of repair failure caused by dirty
|
||||
flag being abnormally set on buffer
|
||||
|
||||
We found an issue where repair failed in the fault injection.
|
||||
|
||||
$ xfs_repair test.img
|
||||
...
|
||||
Phase 3 - for each AG...
|
||||
- scan and clear agi unlinked lists...
|
||||
- process known inodes and perform inode discovery...
|
||||
- agno = 0
|
||||
- agno = 1
|
||||
- agno = 2
|
||||
Metadata CRC error detected at 0x55a30e420c7d, xfs_bmbt block 0x51d68/0x1000
|
||||
- agno = 3
|
||||
Metadata CRC error detected at 0x55a30e420c7d, xfs_bmbt block 0x51d68/0x1000
|
||||
btree block 0/41901 is suspect, error -74
|
||||
bad magic # 0x58534c4d in inode 3306572 (data fork) bmbt block 41901
|
||||
bad data fork in inode 3306572
|
||||
cleared inode 3306572
|
||||
...
|
||||
Phase 7 - verify and correct link counts...
|
||||
Metadata corruption detected at 0x55a30e420b58, xfs_bmbt block 0x51d68/0x1000
|
||||
libxfs_bwrite: write verifier failed on xfs_bmbt bno 0x51d68/0x8
|
||||
xfs_repair: Releasing dirty buffer to free list!
|
||||
xfs_repair: Refusing to write a corrupt buffer to the data device!
|
||||
xfs_repair: Lost a write to the data device!
|
||||
|
||||
fatal error -- File system metadata writeout failed, err=117. Re-run xfs_repair.
|
||||
|
||||
|
||||
$ xfs_db test.img
|
||||
xfs_db> inode 3306572
|
||||
xfs_db> p
|
||||
core.magic = 0x494e
|
||||
core.mode = 0100666 // regular file
|
||||
core.version = 3
|
||||
core.format = 3 (btree)
|
||||
...
|
||||
u3.bmbt.keys[1] = [startoff]
|
||||
1:[6]
|
||||
u3.bmbt.ptrs[1] = 41901 // btree root
|
||||
...
|
||||
|
||||
$ hexdump -C -n 4096 41901.img
|
||||
00000000 58 53 4c 4d 00 00 00 00 00 00 01 e8 d6 f4 03 14 |XSLM............|
|
||||
00000010 09 f3 a6 1b 0a 3c 45 5a 96 39 41 ac 09 2f 66 99 |.....<EZ.9A../f.|
|
||||
00000020 00 00 00 00 00 05 1f fb 00 00 00 00 00 05 1d 68 |...............h|
|
||||
...
|
||||
|
||||
The block data associated with inode 3306572 is abnormal, but check the CRC first
|
||||
when reading. If the CRC check fails, badcrc will be set. Then the dirty flag
|
||||
will be set on bp when badcrc is set. In the final stage of repair, the dirty bp
|
||||
will be refreshed in batches. When refresh to the disk, the data in bp will be
|
||||
verified. At this time, if the data verification fails, resulting in a repair
|
||||
error.
|
||||
|
||||
After scan_bmapbt returns an error, the inode will be cleaned up. Then bp
|
||||
doesn't need to set dirty flag, so that it won't trigger writeback verification
|
||||
failure.
|
||||
|
||||
Signed-off-by: Wu Guanghao <wuguanghao3@huawei.com>
|
||||
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
|
||||
---
|
||||
repair/scan.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/repair/scan.c b/repair/scan.c
|
||||
index 008ef65a..27a33286 100644
|
||||
--- a/repair/scan.c
|
||||
+++ b/repair/scan.c
|
||||
@@ -185,7 +185,7 @@ scan_lbtree(
|
||||
|
||||
ASSERT(dirty == 0 || (dirty && !no_modify));
|
||||
|
||||
- if ((dirty || badcrc) && !no_modify) {
|
||||
+ if (!err && (dirty || badcrc) && !no_modify) {
|
||||
libxfs_buf_mark_dirty(bp);
|
||||
libxfs_buf_relse(bp);
|
||||
}
|
||||
--
|
||||
2.41.0
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
Name: xfsprogs
|
||||
Version: 5.14.1
|
||||
Release: 10
|
||||
Release: 11
|
||||
Summary: Administration and debugging tools for the XFS file system
|
||||
License: GPL+ and LGPLv2+
|
||||
URL: https://xfs.wiki.kernel.org
|
||||
@ -18,14 +18,15 @@ Provides: xfsprogs-qa-devel
|
||||
Obsoletes: xfsprogs-qa-devel <= %{version}
|
||||
Conflicts: xfsdump < 3.0.1
|
||||
|
||||
Patch0: xfsprogs-5.12.0-default-bigtime-inobtcnt-on.patch
|
||||
Patch1: 0001-xfs-correct-nlink-printf-specifier-from-hd-to-PRIu32.patch
|
||||
Patch0: xfsprogs-5.12.0-default-bigtime-inobtcnt-on.patch
|
||||
Patch1: 0001-xfs-correct-nlink-printf-specifier-from-hd-to-PRIu32.patch
|
||||
Patch2: 0002-libxfs-fix-inode-reservation-space-for-removing-tran.patch
|
||||
Patch3: 0003-mkfs-prevent-corruption-of-passed-in-suboption-strin.patch
|
||||
Patch4: 0004-xfsprogs-Add-sw64-architecture.patch
|
||||
Patch5: 0005-xfs_db-use-preferable-macro-to-seek-offset-for-local.patch
|
||||
Patch6: 0006-mkfs.xfs-disable-inobtcount-feature.patch
|
||||
Patch6: 0006-mkfs.xfs-disable-inobtcount-feature.patch
|
||||
Patch7: 0007-libxcmd-add-return-value-check-for-dynamic-memory-fu.patch
|
||||
Patch8: 0008-xfs_repair-fix-the-problem-of-repair-failure-caused-.patch
|
||||
|
||||
%description
|
||||
xfsprogs are the userspace utilities that manage XFS filesystems.
|
||||
@ -109,6 +110,9 @@ rm -rf %{buildroot}%{_datadir}/doc/xfsprogs/
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Aug 15 2023 wuguanghao <wuguanghao3@huawei.com> - 5.14.1-11
|
||||
- fix xfs_repair failure
|
||||
|
||||
* Sun Jun 25 2023 Weifeng Su <suweifeng1@huawei.com> - 5.14.1-10
|
||||
- add return value check for dynamic memory function
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user