• Josef Bacik's avatar
    Btrfs: merge contigous regions when loading free space cache · cd023e7b
    Josef Bacik authored
    When we write out the free space cache we will write out everything that is
    in our in memory tree, and then we will just walk the pinned extents tree
    and write anything we see there.  The problem with this is that during
    normal operations the pinned extents will be merged back into the free space
    tree normally, and then we can allocate space from the merged areas and
    commit them to the tree log.  If we crash and replay the tree log we will
    crash again because the tree log will try to free up space from what looks
    like 2 seperate but contiguous entries, since one entry is from the original
    free space cache and the other was a pinned extent that was merged back.  To
    fix this we just need to walk the free space tree after we load it and merge
    contiguous entries back together.  This will keep the tree log stuff from
    breaking and it will make the allocator behave more nicely.  Thanks,
    Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
    cd023e7b
free-space-cache.c 73.6 KB