• Josef Bacik's avatar
    btrfs: use btrfs_block_group_cache_done in update_block_group · a60adce8
    Josef Bacik authored
    When free'ing extents in a block group we check to see if the block
    group is not cached, and then cache it if we need to.  However we'll
    just carry on as long as we're loading the cache.  This is problematic
    because we are dirtying the block group here.  If we are fast enough we
    could do a transaction commit and clear the free space cache while we're
    still loading the space cache in another thread.  This truncates the
    free space inode, which will keep it from loading the space cache.
    
    Fix this by using the btrfs_block_group_cache_done helper so that we try
    to load the space cache unconditionally here, which will result in the
    caller waiting for the fast caching to complete and keep us from
    truncating the free space inode.
    
    CC: stable@vger.kernel.org # 4.4+
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    a60adce8
block-group.c 89.3 KB