mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-16 10:17:32 +00:00
btrfs: replace open coded while loop with proper construct
btrfs_inc_block_group_ro wants to ensure that the current transaction is not running dirty block groups, if it is it waits and loops again. That logic is currently implemented using a goto label. Actually using a proper do {} while() construct doesn't hurt readability nor does it introduce excessive nesting and makes the relevant code stand out by being encompassed in the loop construct. No functional changes. Signed-off-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
20bbf20e95
commit
b6e9f16c5f
@ -2267,29 +2267,33 @@ int btrfs_inc_block_group_ro(struct btrfs_block_group *cache,
|
||||
struct btrfs_trans_handle *trans;
|
||||
u64 alloc_flags;
|
||||
int ret;
|
||||
bool dirty_bg_running;
|
||||
|
||||
again:
|
||||
trans = btrfs_join_transaction(fs_info->extent_root);
|
||||
if (IS_ERR(trans))
|
||||
return PTR_ERR(trans);
|
||||
do {
|
||||
trans = btrfs_join_transaction(fs_info->extent_root);
|
||||
if (IS_ERR(trans))
|
||||
return PTR_ERR(trans);
|
||||
|
||||
/*
|
||||
* we're not allowed to set block groups readonly after the dirty
|
||||
* block groups cache has started writing. If it already started,
|
||||
* back off and let this transaction commit
|
||||
*/
|
||||
mutex_lock(&fs_info->ro_block_group_mutex);
|
||||
if (test_bit(BTRFS_TRANS_DIRTY_BG_RUN, &trans->transaction->flags)) {
|
||||
u64 transid = trans->transid;
|
||||
dirty_bg_running = false;
|
||||
|
||||
mutex_unlock(&fs_info->ro_block_group_mutex);
|
||||
btrfs_end_transaction(trans);
|
||||
/*
|
||||
* We're not allowed to set block groups readonly after the dirty
|
||||
* block group cache has started writing. If it already started,
|
||||
* back off and let this transaction commit.
|
||||
*/
|
||||
mutex_lock(&fs_info->ro_block_group_mutex);
|
||||
if (test_bit(BTRFS_TRANS_DIRTY_BG_RUN, &trans->transaction->flags)) {
|
||||
u64 transid = trans->transid;
|
||||
|
||||
ret = btrfs_wait_for_commit(fs_info, transid);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto again;
|
||||
}
|
||||
mutex_unlock(&fs_info->ro_block_group_mutex);
|
||||
btrfs_end_transaction(trans);
|
||||
|
||||
ret = btrfs_wait_for_commit(fs_info, transid);
|
||||
if (ret)
|
||||
return ret;
|
||||
dirty_bg_running = true;
|
||||
}
|
||||
} while (dirty_bg_running);
|
||||
|
||||
if (do_chunk_alloc) {
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user