• Josef Bacik's avatar
    Btrfs: always reserve metadata for delalloc extents · 48c3d480
    Josef Bacik authored
    There are a few races in the metadata reservation stuff.  First we add the bytes
    to the block_rsv well after we've set the bit on the inode saying that we have
    space for it and after we've reserved the bytes.  So use the normal
    btrfs_block_rsv_add helper for this case.  Secondly we can flush delalloc
    extents when we try to reserve space for our write, which means that we could
    have used up the space for the inode and we wouldn't know because we only check
    before the reservation.  So instead make sure we are always reserving space for
    the inode update, and then if we don't need it release those bytes afterward.
    Thanks,
    Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
    Reviewed-by: default avatarLiu Bo <bo.li.liu@oracle.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    48c3d480
extent-tree.c 296 KB