Message ID | 20210106103550.1145-1-l@damenly.su (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs-progs: print bytenr of child eb if mismatched level found in read_node_slot() | expand |
On Wed, Jan 06, 2021 at 06:35:50PM +0800, Su Yue wrote: > If btrfs check reported like "ERROR: child eb corrupted: parent bytenr > =178081 item=246 parent level=1 child level=2". It's hard to find > which eb is corrupted without bytenr in dump tree information: > =================================================================== > node 178081 level 1 items 424 free 69 generation 44495 owner EXTENT_TREE > fs uuid 7d9dbe1b-dea6-4141-807b-026325123ad8 > chunk uuid 97a3e3aa-7105-4101-aaf7-50204a240e69 > key (16613126144 EXTENT_ITEM 4096) block 177939087360 gen 44433 > key (16632803328 EXTENT_ITEM 4096) block 177939120128 gen 44433 > key (16654548992 EXTENT_ITEM 8192) block 177970380800 gen 44336 > key (16697884672 EXTENT_ITEM 8192) block 177970397184 gen 44336 > key (16714223616 EXTENT_ITEM 16384) block 177970413568 gen 44336 > key (16721760256 EXTENT_ITEM 16384) block 177943855104 gen 44436 > key (16857755648 EXTENT_ITEM 4096) block 177857544192 gen 44416 > ... > > =================================================================== > > For easier lookup, print bytenr of child eb if its level is not equal > to parent's level - 1 in read_node_slot(). > > Signed-off-by: Su Yue <l@damenly.su> Added to devel, thanks.
diff --git a/kernel-shared/ctree.c b/kernel-shared/ctree.c index 01bc33a43c33..4cc3aebc1412 100644 --- a/kernel-shared/ctree.c +++ b/kernel-shared/ctree.c @@ -809,9 +809,9 @@ struct extent_buffer *read_node_slot(struct btrfs_fs_info *fs_info, if (btrfs_header_level(ret) != level - 1) { error( -"child eb corrupted: parent bytenr=%llu item=%d parent level=%d child level=%d", - btrfs_header_bytenr(parent), slot, - btrfs_header_level(parent), btrfs_header_level(ret)); +"child eb corrupted: parent bytenr=%llu item=%d parent level=%d child bytenr=%llu child level=%d", + btrfs_header_bytenr(parent), slot, btrfs_header_level(parent), + btrfs_header_bytenr(ret), btrfs_header_level(ret)); free_extent_buffer(ret); return ERR_PTR(-EIO); }
If btrfs check reported like "ERROR: child eb corrupted: parent bytenr =178081 item=246 parent level=1 child level=2". It's hard to find which eb is corrupted without bytenr in dump tree information: =================================================================== node 178081 level 1 items 424 free 69 generation 44495 owner EXTENT_TREE fs uuid 7d9dbe1b-dea6-4141-807b-026325123ad8 chunk uuid 97a3e3aa-7105-4101-aaf7-50204a240e69 key (16613126144 EXTENT_ITEM 4096) block 177939087360 gen 44433 key (16632803328 EXTENT_ITEM 4096) block 177939120128 gen 44433 key (16654548992 EXTENT_ITEM 8192) block 177970380800 gen 44336 key (16697884672 EXTENT_ITEM 8192) block 177970397184 gen 44336 key (16714223616 EXTENT_ITEM 16384) block 177970413568 gen 44336 key (16721760256 EXTENT_ITEM 16384) block 177943855104 gen 44436 key (16857755648 EXTENT_ITEM 4096) block 177857544192 gen 44416 ... =================================================================== For easier lookup, print bytenr of child eb if its level is not equal to parent's level - 1 in read_node_slot(). Signed-off-by: Su Yue <l@damenly.su> --- kernel-shared/ctree.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)