Signed-off-by: wguanghao <wuguanghao3@huawei.com> (cherry picked from commit ee377eff1d584f7cb96ede2f0448516cf645f4a2)
93 lines
4.6 KiB
Diff
93 lines
4.6 KiB
Diff
From d1b7a268a4d5f47e6e8d1ed9f2d44c61ba9103a2 Mon Sep 17 00:00:00 2001
|
|
From: Long Li <leo.lilong@huawei.com>
|
|
Date: Fri, 7 Jul 2023 17:01:52 +0800
|
|
Subject: [PATCH] xfs_repair: fix warn in xfs_buf_find when growfs fails
|
|
|
|
The kernel does not update secondary superblock through transactions, so
|
|
the atomicity of secondary sb cannot be guaranteed. If IO failures are
|
|
encountered during the growfs, secondary superblocks and primary superblock
|
|
will be inconsistent, and xfs_repair may update the old data in secondary
|
|
superblocks to primary superblock. This will cause sb_dblocks to be less
|
|
than the actual value and trigger the following warning.
|
|
|
|
When checking whether secondary superblocks and primary superblock are
|
|
consistent, do not judge the fields that will change during growfs in
|
|
superblock.
|
|
|
|
XFS (sdb): Starting recovery (logdev: internal)
|
|
XFS (sdb): xfs_buf_find: daddr 0xf00001 out of range, EOFS 0xeec208
|
|
------------[ cut here ]------------
|
|
WARNING: CPU: 2 PID: 54142 at fs/xfs/xfs_buf.c:615 xfs_buf_find+0x268a/0x2f90 fs/xfs/xfs_buf.c:612
|
|
Modules linked in:
|
|
CPU: 2 PID: 54142 Comm: mount Not tainted 5.10.0-02690-g9edb619c0692 #24
|
|
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
|
|
RIP: 0010:xfs_buf_find+0x268a/0x2f90 fs/xfs/xfs_buf.c:615
|
|
Code: 01 e8 aa 1e 16 ff 49 89 d8 4c 89 e1 4c 89 ef 48 c7 c2 a0 c2 02 af 48 c7 c6 e0 b8 02 af e8 16 dc a2 02 48 83 05 3e 56 00 09 01 <0f> 0b 48 83 05 3c 56 00 09 01 48 83 05 3c 56 00 09 01 41 bc 8b ff
|
|
RSP: 0018:ffff88811c6b7138 EFLAGS: 00010202
|
|
RAX: 0000000000000000 RBX: 0000000000eec208 RCX: 0000000000000000
|
|
RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffed10238d6e17
|
|
RBP: ffff88811c6b72b8 R08: ffff88810168c000 R09: 0000000000000001
|
|
R10: ffff8881f6738427 R11: ffffed103ece7084 R12: 0000000000f00001
|
|
R13: ffff88812fe44000 R14: ffff88810da77418 R15: 0000000000000001
|
|
FS: 00007f9ef08e0080(0000) GS:ffff8881f6700000(0000) knlGS:0000000000000000
|
|
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
|
|
CR2: 0000564ec77273d0 CR3: 000000011ba20005 CR4: 0000000000370ee0
|
|
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
|
|
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
|
|
Call Trace:
|
|
xfs_buf_get_map+0xc3/0xa20 fs/xfs/xfs_buf.c:717
|
|
xfs_buf_read_map+0xd1/0xbe0 fs/xfs/xfs_buf.c:832
|
|
xfs_buf_readahead_map+0x185/0x1c0 fs/xfs/xfs_buf.c:913
|
|
xfs_buf_readahead fs/xfs/xfs_buf.h:249 [inline]
|
|
xlog_buf_readahead+0x13d/0x160 fs/xfs/xfs_log_recover.c:1921
|
|
xlog_recover_buf_ra_pass2+0xad/0xf0 fs/xfs/xfs_buf_item_recover.c:177
|
|
xlog_recover_commit_trans+0x3bb/0xec0 fs/xfs/xfs_log_recover.c:2003
|
|
xlog_recovery_process_trans+0x1de/0x290 fs/xfs/xfs_log_recover.c:2256
|
|
xlog_recover_process_ophdr+0x205/0x4c0 fs/xfs/xfs_log_recover.c:2402
|
|
xlog_recover_process_data+0x1dc/0x620 fs/xfs/xfs_log_recover.c:2444
|
|
xlog_recover_process+0x296/0x390 fs/xfs/xfs_log_recover.c:2892
|
|
xlog_do_recovery_pass+0x7fb/0x13e0 fs/xfs/xfs_log_recover.c:3178
|
|
xlog_do_log_recovery+0xf8/0x170 fs/xfs/xfs_log_recover.c:3258
|
|
xlog_do_recover+0x118/0x810 fs/xfs/xfs_log_recover.c:3286
|
|
xlog_recover+0x2d1/0x5d0 fs/xfs/xfs_log_recover.c:3420
|
|
xfs_log_mount+0x40f/0xa00 fs/xfs/xfs_log.c:713
|
|
xfs_mountfs+0x12f5/0x2390 fs/xfs/xfs_mount.c:905
|
|
xfs_fc_fill_super+0x1482/0x1f80 fs/xfs/xfs_super.c:1684
|
|
get_tree_bdev+0x4ba/0x890 fs/super.c:1345
|
|
xfs_fc_get_tree+0x20/0x30 fs/xfs/xfs_super.c:1731
|
|
vfs_get_tree+0x96/0x390 fs/super.c:1550
|
|
do_new_mount fs/namespace.c:2900 [inline]
|
|
path_mount+0x7b0/0x2430 fs/namespace.c:3230
|
|
do_mount+0x10f/0x140 fs/namespace.c:3243
|
|
__do_sys_mount fs/namespace.c:3451 [inline]
|
|
__se_sys_mount fs/namespace.c:3428 [inline]
|
|
__x64_sys_mount+0x1bb/0x2b0 fs/namespace.c:3428
|
|
do_syscall_64+0x4b/0x80 arch/x86/entry/common.c:46
|
|
entry_SYSCALL_64_after_hwframe+0x61/0xc6
|
|
|
|
Signed-off-by: Long Li <leo.lilong@huawei.com>
|
|
Signed-off-by: Wu Guanghao <wuguanghao3@huawei.com>
|
|
---
|
|
repair/sb.c | 2 --
|
|
1 file changed, 2 deletions(-)
|
|
|
|
diff --git a/repair/sb.c b/repair/sb.c
|
|
index 7391cf04..fe63bff3 100644
|
|
--- a/repair/sb.c
|
|
+++ b/repair/sb.c
|
|
@@ -663,13 +663,11 @@ get_sb_geometry(fs_geometry_t *geo, xfs_sb_t *sbp)
|
|
* blindly set fields that we know are always good
|
|
*/
|
|
geo->sb_blocksize = sbp->sb_blocksize;
|
|
- geo->sb_dblocks = sbp->sb_dblocks;
|
|
geo->sb_rblocks = sbp->sb_rblocks;
|
|
geo->sb_rextents = sbp->sb_rextents;
|
|
geo->sb_logstart = sbp->sb_logstart;
|
|
geo->sb_rextsize = sbp->sb_rextsize;
|
|
geo->sb_agblocks = sbp->sb_agblocks;
|
|
- geo->sb_agcount = sbp->sb_agcount;
|
|
geo->sb_rbmblocks = sbp->sb_rbmblocks;
|
|
geo->sb_logblocks = sbp->sb_logblocks;
|
|
geo->sb_sectsize = sbp->sb_sectsize;
|
|
--
|
|
2.31.1
|