On 2019/6/26 下午3:04, Erik Jensen wrote: > I'm still seeing this. Anything else I can try? [...] >>>> >>>> [ 83.066301] BTRFS info (device dm-3): disk space caching is enabled >>>> [ 83.072817] BTRFS info (device dm-3): has skinny extents >>>> [ 83.553973] BTRFS error (device dm-3): bad tree block start, want >>>> 17628726968320 have 396461950000496896 >>>> [ 83.554089] BTRFS error (device dm-3): bad tree block start, want >>>> 17628727001088 have 5606876608493751477 >>>> [ 83.601176] BTRFS error (device dm-3): bad tree block start, want >>>> 17628727001088 have 5606876608493751477 >>>> [ 83.610811] BTRFS error (device dm-3): failed to verify dev extents >>>> against chunks: -5 >>>> [ 83.639058] BTRFS error (device dm-3): open_ctree failed Since your fsck reports no error, I'd say your on-disk data is completely fine. So it's either the block layer reading some wrong from the disk or btrfs layer doesn't do correct endian convert. Would you dump the following data (X86 and ARM should output the same content, thus one output is enough). # btrfs ins dump-tree -b 17628726968320 /dev/dm-3 # btrfs ins dump-tree -b 17628727001088 /dev/dm-3 And then, for the ARM system, please apply the following diff, and try mount again. The diff adds extra debug info, to exam the vital members of a tree block. Correct fs should output something like: BTRFS error (device dm-4): bad tree block start, want 30408704 have 0 tree block gen=4 owner=5 nritems=2 level=0 csum: a304e483-0000-0000-0000-00000000000000000000-0000-0000-0000-000000000000 The csum one is the most important one, if there aren't so many zeros, it means at that timing, btrfs just got a bunch of garbage, thus we could do further debug. Thanks, Qu diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index deb74a8c191a..e9d11d501b7b 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -618,8 +618,16 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio, found_start = btrfs_header_bytenr(eb); if (found_start != eb->start) { + u8 csum[BTRFS_CSUM_SIZE]; + btrfs_err_rl(fs_info, "bad tree block start, want %llu have %llu", eb->start, found_start); + pr_info("tree block gen=%llu owner=%llu nritems=%u level=%u\n", + btrfs_header_generation(eb), btrfs_header_owner(eb), + btrfs_header_nritems(eb), btrfs_header_level(eb)); + read_extent_buffer(eb, csum, 0, BTRFS_CSUM_SIZE); + pr_info("csum: %pU%-pU\n", csum, csum + 16); + ret = -EIO; goto err; }