Btrfs: return ENOSPC when target space is full

In extent-tree.c:do_chunk_alloc(), early on we returned 0 (success)
when the target space was full and when chunk allocation is needed.
However, later on in that same function we return ENOSPC if
btrfs_alloc_chunk() fails (and chunk allocation was needed) and
set the space's full flag.

This was inconsistent, as -ENOSPC should be returned if the space
is full and a chunk allocation needs to performed. If the space is
full but no chunk allocation is needed, just return 0 (success).

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
This commit is contained in:
Filipe David Borba Manana 2013-08-05 16:25:12 +01:00 committed by Chris Mason
parent ada9af215c
commit 09fb99a696

View file

@ -3836,8 +3836,12 @@ again:
if (force < space_info->force_alloc) if (force < space_info->force_alloc)
force = space_info->force_alloc; force = space_info->force_alloc;
if (space_info->full) { if (space_info->full) {
if (should_alloc_chunk(extent_root, space_info, force))
ret = -ENOSPC;
else
ret = 0;
spin_unlock(&space_info->lock); spin_unlock(&space_info->lock);
return 0; return ret;
} }
if (!should_alloc_chunk(extent_root, space_info, force)) { if (!should_alloc_chunk(extent_root, space_info, force)) {