mila-iqia/bcachefs

Missing extent for some files

Closed this issue · 0 comments

Some extents are skipped by the reader.

Comparing what the bcachefs-tools.sif outputs with the extents list we have for an inode I get the following:

from bcachefs import Bcachefs


with Bcachefs("disk.img") as bchfs:
    for exts in bchfs._extents_map.values():
        for ext in exts:
            # u64s 6 type extent 4100:256:U32_MAX len 256 ver 0: ptr: 0:5415936 gen 1
            file_offset = int(ext.file_offset/512)
            size = int(ext.size/512)
            offset = int(ext.offset/512)
            try:
                assert file_offset == ext.file_offset/512
                assert size == ext.size/512
                assert offset == ext.offset/512
                print(f"u64s 6 type extent {ext.inode}:{file_offset+size}:U32_MAX len {size} ver 0: ptr: 0:{offset} gen 1")
            except AssertionError:
                print(f"u64s 7 type inline_data {ext.inode}:{ext.file_offset+ext.size}B:U32_MAX len {ext.size}B ver 0: datalen {ext.size}: ptr: 0:{ext.offset//512}+({ext.offset%512}B) gen 1")
# ./bcachefs-tools.sif list -b extents disk.img > disk.img.extents
# python3 bcachefs_extents.py > disk.img.bcachefs_extents
# diff -y -W196 disk.img.extents disk.img.bcachefs_extents
# ...
u64s 6 type extent 5842:256:U32_MAX len 256 ver 0: ptr: 0:12423680 gen 1                        u64s 6 type extent 5842:256:U32_MAX len 256 ver 0: ptr: 0:12423680 gen 1
u64s 6 type extent 5842:512:U32_MAX len 256 ver 0: ptr: 0:12423936 gen 1                        u64s 6 type extent 5842:512:U32_MAX len 256 ver 0: ptr: 0:12423936 gen 1
u64s 6 type extent 5842:768:U32_MAX len 256 ver 0: ptr: 0:12424192 gen 1                        u64s 6 type extent 5842:768:U32_MAX len 256 ver 0: ptr: 0:12424192 gen 1
u64s 6 type extent 5842:1024:U32_MAX len 256 ver 0: ptr: 0:12424448 gen 1                       u64s 6 type extent 5842:1024:U32_MAX len 256 ver 0: ptr: 0:12424448 gen 1
u64s 6 type extent 5842:1280:U32_MAX len 256 ver 0: ptr: 0:12424704 gen 1                       u64s 6 type extent 5842:1280:U32_MAX len 256 ver 0: ptr: 0:12424704 gen 1
u64s 6 type extent 5842:1536:U32_MAX len 256 ver 0: ptr: 0:12424960 gen 1                     <
u64s 6 type extent 5842:1792:U32_MAX len 256 ver 0: ptr: 0:12425216 gen 1                       u64s 6 type extent 5842:1792:U32_MAX len 256 ver 0: ptr: 0:12425216 gen 1
u64s 6 type extent 5842:2048:U32_MAX len 256 ver 0: ptr: 0:12425472 gen 1                       u64s 6 type extent 5842:2048:U32_MAX len 256 ver 0: ptr: 0:12425472 gen 1
u64s 6 type extent 5842:2304:U32_MAX len 256 ver 0: ptr: 0:12425728 gen 1                       u64s 6 type extent 5842:2304:U32_MAX len 256 ver 0: ptr: 0:12425728 gen 1
u64s 6 type extent 5842:2560:U32_MAX len 256 ver 0: ptr: 0:12425984 gen 1                       u64s 6 type extent 5842:2560:U32_MAX len 256 ver 0: ptr: 0:12425984 gen 1
u64s 6 type extent 5842:2816:U32_MAX len 256 ver 0: ptr: 0:12426240 gen 1                       u64s 6 type extent 5842:2816:U32_MAX len 256 ver 0: ptr: 0:12426240 gen 1
u64s 6 type extent 5842:3072:U32_MAX len 256 ver 0: ptr: 0:12426496 gen 1                       u64s 6 type extent 5842:3072:U32_MAX len 256 ver 0: ptr: 0:12426496 gen 1
u64s 6 type extent 5842:3328:U32_MAX len 256 ver 0: ptr: 0:12426752 gen 1                       u64s 6 type extent 5842:3328:U32_MAX len 256 ver 0: ptr: 0:12426752 gen 1
u64s 6 type extent 5842:3584:U32_MAX len 256 ver 0: ptr: 0:12427008 gen 1                       u64s 6 type extent 5842:3584:U32_MAX len 256 ver 0: ptr: 0:12427008 gen 1
u64s 6 type extent 5842:3840:U32_MAX len 256 ver 0: ptr: 0:12427264 gen 1                       u64s 6 type extent 5842:3840:U32_MAX len 256 ver 0: ptr: 0:12427264 gen 1
u64s 6 type extent 5842:4096:U32_MAX len 256 ver 0: ptr: 0:12427520 gen 1                       u64s 6 type extent 5842:4096:U32_MAX len 256 ver 0: ptr: 0:12427520 gen 1
# ...

Re-adding the file in the disk image corrects issue but it does look like our implementation can skips some extents, maybe caused after a re-balancing of the btree