Btrfs: add better -ENOSPC handling
authorJosef Bacik <jbacik@redhat.com>
Fri, 20 Feb 2009 16:00:09 +0000 (11:00 -0500)
committerChris Mason <chris.mason@oracle.com>
Fri, 20 Feb 2009 16:00:09 +0000 (11:00 -0500)
commit6a63209fc02d5483371f07e4913ee8abad608051
tree7595e0df452928b677b66a64baf0cb3b7ec53dfc
parent2cfbd50b536c878e58ab3681c4e944fa3d99b415
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>
fs/btrfs/btrfs_inode.h
fs/btrfs/ctree.h
fs/btrfs/extent-tree.c
fs/btrfs/file.c
fs/btrfs/inode.c
fs/btrfs/ioctl.c