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:
committed by
David Sterba
parent
20bbf20e95
commit
b6e9f16c5f
@@ -2267,16 +2267,19 @@ 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:
|
||||
do {
|
||||
trans = btrfs_join_transaction(fs_info->extent_root);
|
||||
if (IS_ERR(trans))
|
||||
return PTR_ERR(trans);
|
||||
|
||||
dirty_bg_running = false;
|
||||
|
||||
/*
|
||||
* 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
|
||||
* 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)) {
|
||||
@@ -2288,8 +2291,9 @@ again:
|
||||
ret = btrfs_wait_for_commit(fs_info, transid);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto again;
|
||||
dirty_bg_running = true;
|
||||
}
|
||||
} while (dirty_bg_running);
|
||||
|
||||
if (do_chunk_alloc) {
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user