Hey Qu.
On Sun, 2015-11-22 at 10:04 +0800, Qu Wenruo wrote:
> If any of you can recompile btrfs-progs and use gdb to debug it,
> would
> anyone please to investigate where did the wrong_chunk_type is set?
> It is in the function check_extent_type():
Not 100% what you want... AFAIU, you just want to see whether that line
is reached?
If didn't re-compile but used the btrfs-tools-dbg package, but I guess
that should do.
In the debian version that line seems to be at:
4374
4375 /* Check if the type of extent matches with its chunk */
4376 static void check_extent_type(struct extent_record *rec)
4377 {
...
4419 bg_type = BTRFS_BLOCK_GROUP_METADATA;
4420 if (!(bg_cache->flags & bg_type))
4421 rec->wrong_chunk_type = 1;
4422 }
4423 }
Running:
# gdb btrfs
(gdb) dir /root/btrfs-tools-4.3
Source directories searched: /root/btrfs-tools-4.3:$cdir:$cwd
(gdb) break cmds-check.c:4421
Breakpoint 1 at 0x41d859: file cmds-check.c, line 4421.
(gdb) run check /dev/mapper/data-b
Starting program: /bin/btrfs check /dev/mapper/data-b
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
... in fact reaches that breakpoint:
Breakpoint 1, check_extent_type (rec=rec@entry=0x884290) at cmds-check.c:4423
4423 }
... but the error message ("bad extent [5993525264384, 5993525280768),
type mismatch with chunk") doesn't seem to be printed at that stage...
If I continue, it goes for a while:
Breakpoint 1, check_extent_type (rec=rec@entry=0x884290) at cmds-check.c:4423
4423 }
(gdb) cont 100000
Will ignore next 99999 crossings of breakpoint 1. Continuing.
and so on for at least several million crossings... I then removed the
breakpoint and after a longer while the usual error messages came up.
Does that help?
Chris.Attachment:
smime.p7s
Description: S/MIME cryptographic signature
