From: Anand Jain Date: Wed, 19 Oct 2022 16:21:42 +0000 (+0530) Subject: btrfs: merge module cleanup sequence to one helper X-Git-Tag: v6.6.7~3585^2~203 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=82c0efd3cd5d4ecce028da75d29e3345535b3389;p=platform%2Fkernel%2Flinux-starfive.git btrfs: merge module cleanup sequence to one helper The module exit function exit_btrfs_fs() is duplicating a section of code in init_btrfs_fs(). Add a helper to remove the duplicated code. Due to the init/exit section requirements the function must be inline and not a plain static as it could cause section mismatch. Signed-off-by: Anand Jain Reviewed-by: David Sterba Signed-off-by: David Sterba --- diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index c02fcdb..75b1c09 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -2837,7 +2837,7 @@ static const struct init_sequence mod_init_seq[] = { static bool mod_init_result[ARRAY_SIZE(mod_init_seq)]; -static void __exit exit_btrfs_fs(void) +static __always_inline void btrfs_exit_btrfs_fs(void) { int i; @@ -2850,6 +2850,11 @@ static void __exit exit_btrfs_fs(void) } } +static void __exit exit_btrfs_fs(void) +{ + btrfs_exit_btrfs_fs(); +} + static int __init init_btrfs_fs(void) { int ret; @@ -2858,26 +2863,13 @@ static int __init init_btrfs_fs(void) for (i = 0; i < ARRAY_SIZE(mod_init_seq); i++) { ASSERT(!mod_init_result[i]); ret = mod_init_seq[i].init_func(); - if (ret < 0) - goto error; + if (ret < 0) { + btrfs_exit_btrfs_fs(); + return ret; + } mod_init_result[i] = true; } return 0; - -error: - /* - * If we call exit_btrfs_fs() it would cause section mismatch. - * As init_btrfs_fs() belongs to .init.text, while exit_btrfs_fs() - * belongs to .exit.text. - */ - for (i = ARRAY_SIZE(mod_init_seq) - 1; i >= 0; i--) { - if (!mod_init_result[i]) - continue; - if (mod_init_seq[i].exit_func) - mod_init_seq[i].exit_func(); - mod_init_result[i] = false; - } - return ret; } late_initcall(init_btrfs_fs);