• Josef Bacik's avatar
    btrfs: free block groups after free'ing fs trees · 4e19443d
    Josef Bacik authored
    Sometimes when running generic/475 we would trip the
    WARN_ON(cache->reserved) check when free'ing the block groups on umount.
    This is because sometimes we don't commit the transaction because of IO
    errors and thus do not cleanup the tree logs until at umount time.
    
    These blocks are still reserved until they are cleaned up, but they
    aren't cleaned up until _after_ we do the free block groups work.  Fix
    this by moving the free after free'ing the fs roots, that way all of the
    tree logs are cleaned up and we have a properly cleaned fs.  A bunch of
    loops of generic/475 confirmed this fixes the problem.
    
    CC: stable@vger.kernel.org # 4.9+
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    4e19443d
disk-io.c 124 KB