|
@@ -66,8 +66,7 @@ static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
|
|
|
static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
|
|
|
struct btrfs_delayed_ref_node *node,
|
|
|
struct btrfs_delayed_extent_op *extent_op);
|
|
|
-static int do_chunk_alloc(struct btrfs_trans_handle *trans,
|
|
|
- struct btrfs_fs_info *fs_info, u64 flags,
|
|
|
+static int do_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags,
|
|
|
int force);
|
|
|
static int find_next_key(struct btrfs_path *path, int level,
|
|
|
struct btrfs_key *key);
|
|
@@ -4306,7 +4305,7 @@ again:
|
|
|
if (IS_ERR(trans))
|
|
|
return PTR_ERR(trans);
|
|
|
|
|
|
- ret = do_chunk_alloc(trans, fs_info, alloc_target,
|
|
|
+ ret = do_chunk_alloc(trans, alloc_target,
|
|
|
CHUNK_ALLOC_NO_FORCE);
|
|
|
btrfs_end_transaction(trans);
|
|
|
if (ret < 0) {
|
|
@@ -4590,9 +4589,10 @@ void check_system_chunk(struct btrfs_trans_handle *trans,
|
|
|
* - return 1 if it successfully allocates a chunk,
|
|
|
* - return errors including -ENOSPC otherwise.
|
|
|
*/
|
|
|
-static int do_chunk_alloc(struct btrfs_trans_handle *trans,
|
|
|
- struct btrfs_fs_info *fs_info, u64 flags, int force)
|
|
|
+static int do_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags,
|
|
|
+ int force)
|
|
|
{
|
|
|
+ struct btrfs_fs_info *fs_info = trans->fs_info;
|
|
|
struct btrfs_space_info *space_info;
|
|
|
int wait_for_alloc = 0;
|
|
|
int ret = 0;
|
|
@@ -5001,7 +5001,7 @@ static void flush_space(struct btrfs_fs_info *fs_info,
|
|
|
ret = PTR_ERR(trans);
|
|
|
break;
|
|
|
}
|
|
|
- ret = do_chunk_alloc(trans, fs_info,
|
|
|
+ ret = do_chunk_alloc(trans,
|
|
|
btrfs_metadata_alloc_profile(fs_info),
|
|
|
CHUNK_ALLOC_NO_FORCE);
|
|
|
btrfs_end_transaction(trans);
|
|
@@ -7842,8 +7842,7 @@ loop:
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- ret = do_chunk_alloc(trans, fs_info, flags,
|
|
|
- CHUNK_ALLOC_FORCE);
|
|
|
+ ret = do_chunk_alloc(trans, flags, CHUNK_ALLOC_FORCE);
|
|
|
|
|
|
/*
|
|
|
* If we can't allocate a new chunk we've already looped
|
|
@@ -9469,7 +9468,7 @@ again:
|
|
|
*/
|
|
|
alloc_flags = update_block_group_flags(fs_info, cache->flags);
|
|
|
if (alloc_flags != cache->flags) {
|
|
|
- ret = do_chunk_alloc(trans, fs_info, alloc_flags,
|
|
|
+ ret = do_chunk_alloc(trans, alloc_flags,
|
|
|
CHUNK_ALLOC_FORCE);
|
|
|
/*
|
|
|
* ENOSPC is allowed here, we may have enough space
|
|
@@ -9486,8 +9485,7 @@ again:
|
|
|
if (!ret)
|
|
|
goto out;
|
|
|
alloc_flags = get_alloc_profile(fs_info, cache->space_info->flags);
|
|
|
- ret = do_chunk_alloc(trans, fs_info, alloc_flags,
|
|
|
- CHUNK_ALLOC_FORCE);
|
|
|
+ ret = do_chunk_alloc(trans, alloc_flags, CHUNK_ALLOC_FORCE);
|
|
|
if (ret < 0)
|
|
|
goto out;
|
|
|
ret = inc_block_group_ro(cache, 0);
|
|
@@ -9509,7 +9507,7 @@ int btrfs_force_chunk_alloc(struct btrfs_trans_handle *trans,
|
|
|
{
|
|
|
u64 alloc_flags = get_alloc_profile(fs_info, type);
|
|
|
|
|
|
- return do_chunk_alloc(trans, fs_info, alloc_flags, CHUNK_ALLOC_FORCE);
|
|
|
+ return do_chunk_alloc(trans, alloc_flags, CHUNK_ALLOC_FORCE);
|
|
|
}
|
|
|
|
|
|
/*
|