@@ -3897,6 +3897,9 @@ static const struct init_sequence open_ctree_seq[] = {
}, {
.init_func = open_ctree_kthread_init,
.exit_func = open_ctree_kthread_exit,
+ }, {
+ .init_func = btrfs_read_qgroup_config,
+ .exit_func = btrfs_free_qgroup_config,
}
};
@@ -3906,7 +3909,6 @@ int __cold open_ctree(struct super_block *sb, char *options)
struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
bool open_ctree_res[ARRAY_SIZE(open_ctree_seq)] = {0};
int ret;
- int err = -EINVAL;
int i;
fs_info->sb = sb;
@@ -3922,10 +3924,6 @@ int __cold open_ctree(struct super_block *sb, char *options)
open_ctree_res[i] = true;
}
- ret = btrfs_read_qgroup_config(fs_info);
- if (ret)
- goto fail;
-
if (btrfs_build_ref_tree(fs_info))
btrfs_err(fs_info, "couldn't build ref tree");
@@ -3934,10 +3932,8 @@ int __cold open_ctree(struct super_block *sb, char *options)
!btrfs_test_opt(fs_info, NOLOGREPLAY)) {
btrfs_info(fs_info, "start tree-log replay");
ret = btrfs_replay_log(fs_info, fs_devices);
- if (ret) {
- err = ret;
- goto fail_qgroup;
- }
+ if (ret)
+ goto fail;
}
if (sb_rdonly(fs_info->sb))
@@ -3974,9 +3970,6 @@ int __cold open_ctree(struct super_block *sb, char *options)
btrfs_clear_oneshot_options(fs_info);
return 0;
-fail_qgroup:
- btrfs_free_qgroup_config(fs_info);
-
fail:
for (i = ARRAY_SIZE(open_ctree_seq) - 1; i >= 0; i--) {
if (!open_ctree_res[i] || !open_ctree_seq[i].exit_func)
@@ -3985,9 +3978,7 @@ int __cold open_ctree(struct super_block *sb, char *options)
open_ctree_res[i] = false;
}
btrfs_close_devices(fs_info->fs_devices);
- if (ret < 0)
- err = ret;
- return err;
+ return ret;
}
ALLOW_ERROR_INJECTION(open_ctree, ERRNO);
The qgroup related code is already extracted into two functions, btrfs_read_qgroup_config() and btrfs_free_qgroup_config(). They are perfect matches for open_ctree_seq[], so just move them into open_ctree_seq[] array. And with the usage of open_ctree_seq[], there is no more need for @err variable, just remove it. Signed-off-by: Qu Wenruo <wqu@suse.com> --- fs/btrfs/disk-io.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-)