On Fri, Jun 01, 2018 at 04:27:46PM +0800, Qu Wenruo wrote: > Reuse extent-cache facility to record multiple bytenr so '-b|--block' > can be specified multiple times. > > Despite that, add a sector size alignment check before we try to print a > tree block. > (Please note that, nodesize alignment check is not suitable here as meta > chunk start bytenr could be unaligned to nodesize) > > Signed-off-by: Qu Wenruo <w...@suse.com>
I'm going to add this patch to devel, but there's a crash when there's not valid block on the offset, eg. 'btrfs inspect dump-tree -b 8192 /dev/' $ ./btrfs inspect dump-tree -b 1024 -b 2048 -b 4096 -b 8192 zimg btrfs-progs v4.20.2 ERROR: tree block bytenr 1024 is not aligned to sectorsize 4096 ERROR: tree block bytenr 2048 is not aligned to sectorsize 4096 Couldn't map the block 4096 Invalid mapping for 4096-20480, got 13631488-22020096 Couldn't map the block 4096 bad tree block 4096, bytenr mismatch, want=4096, have=0 ERROR: failed to read tree block 4096 extent_io.c:665: free_extent_buffer_internal: BUG_ON `eb->refs < 0` triggered, value 1 ./btrfs[0x426e57] ./btrfs(free_extent_buffer+0xe)[0x427701] ./btrfs(alloc_extent_buffer+0x3f)[0x427872] ./btrfs(btrfs_find_create_tree_block+0xf)[0x415b3c] ./btrfs(read_tree_block+0x5c)[0x4171b5] ./btrfs(cmd_inspect_dump_tree+0x587)[0x46fb75] ./btrfs(handle_command_group+0x44)[0x40df89] ./btrfs(cmd_inspect+0x15)[0x44b569] ./btrfs(main+0x8b)[0x40e032] /lib64/libc.so.6(__libc_start_main+0xeb)[0x7f2001a54b7b] ./btrfs(_start+0x2a)[0x40dd1a] Aborted (core dumped) I think the fix will be simple so I'll fold it in, otherwise the multiple block offsets work and using the cache is ok.