Btrfs: add better -ENOSPC handling
This is a step in the direction of better -ENOSPC handling. Instead of
checking the global bytes counter we check the space_info bytes counters to
make sure we have enough space.
If we don't we go ahead and try to allocate a new chunk, and then if that fails
we return -ENOSPC. This patch adds two counters to btrfs_space_info,
bytes_delalloc and bytes_may_use.
bytes_delalloc account for extents we've actually setup for delalloc and will
be allocated at some point down the line.
bytes_may_use is to keep track of how many bytes we may use for delalloc at
some point. When we actually set the extent_bit for the delalloc bytes we
subtract the reserved bytes from the bytes_may_use counter. This keeps us from
not actually being able to allocate space for any delalloc bytes.
Signed-off-by:
Josef Bacik <jbacik@redhat.com>
Showing
- fs/btrfs/btrfs_inode.h 8 additions, 0 deletionsfs/btrfs/btrfs_inode.h
- fs/btrfs/ctree.h 31 additions, 9 deletionsfs/btrfs/ctree.h
- fs/btrfs/extent-tree.c 200 additions, 15 deletionsfs/btrfs/extent-tree.c
- fs/btrfs/file.c 13 additions, 3 deletionsfs/btrfs/file.c
- fs/btrfs/inode.c 16 additions, 46 deletionsfs/btrfs/inode.c
- fs/btrfs/ioctl.c 3 additions, 3 deletionsfs/btrfs/ioctl.c
Loading
Please register or sign in to comment