forked from Minki/linux
btrfs: Don't BUG_ON alloc_path errors in find_next_chunk
I also removed the BUG_ON from error return of find_next_chunk in init_first_rw_device(). It turns out that the only caller of init_first_rw_device() also BUGS on any nonzero return so no actual behavior change has occurred here. do_chunk_alloc() also needed an update since it calls btrfs_alloc_chunk() which can now return -ENOMEM. Instead of setting space_info->full on any error from btrfs_alloc_chunk() I catch and return every error value _except_ -ENOSPC. Thanks goes to Tsutomu Itoh for pointing that issue out. Signed-off-by: Mark Fasheh <mfasheh@suse.com>
This commit is contained in:
parent
17e9f796bd
commit
92b8e897f6
@ -3277,6 +3277,9 @@ again:
|
||||
}
|
||||
|
||||
ret = btrfs_alloc_chunk(trans, extent_root, flags);
|
||||
if (ret < 0 && ret != -ENOSPC)
|
||||
goto out;
|
||||
|
||||
spin_lock(&space_info->lock);
|
||||
if (ret)
|
||||
space_info->full = 1;
|
||||
@ -3286,6 +3289,7 @@ again:
|
||||
space_info->force_alloc = CHUNK_ALLOC_NO_FORCE;
|
||||
space_info->chunk_alloc = 0;
|
||||
spin_unlock(&space_info->lock);
|
||||
out:
|
||||
mutex_unlock(&extent_root->fs_info->chunk_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1037,7 +1037,8 @@ static noinline int find_next_chunk(struct btrfs_root *root,
|
||||
struct btrfs_key found_key;
|
||||
|
||||
path = btrfs_alloc_path();
|
||||
BUG_ON(!path);
|
||||
if (!path)
|
||||
return -ENOMEM;
|
||||
|
||||
key.objectid = objectid;
|
||||
key.offset = (u64)-1;
|
||||
@ -2663,7 +2664,8 @@ static noinline int init_first_rw_device(struct btrfs_trans_handle *trans,
|
||||
|
||||
ret = find_next_chunk(fs_info->chunk_root,
|
||||
BTRFS_FIRST_CHUNK_TREE_OBJECTID, &chunk_offset);
|
||||
BUG_ON(ret);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
alloc_profile = BTRFS_BLOCK_GROUP_METADATA |
|
||||
(fs_info->metadata_alloc_profile &
|
||||
|
Loading…
Reference in New Issue
Block a user