In the unlikely event of the allocation failing, it is better to let
the machine boot with a not fully populated sysfs than to kill it with
this BUG_ON(). All callers are already prepared for
lookup_or_create_module_kobject() returning NULL.

This is also preparation for calling this function from non __init
code, where using BUG_ON for allocation failure handling is not
acceptable.

Since we are here, also start using IS_ENABLED instead of #ifdef
construct.

Fixes: 96a1a2412acb ("kernel/params.c: defer most of param_sysfs_init() to 
late_initcall time")
Cc: sta...@kernel.org
Suggested-by: Thomas Weißschuh <li...@weissschuh.net>
Suggested-by: Rasmus Villemoes <li...@rasmusvillemoes.dk>
Signed-off-by: Shyam Saini <shyamsa...@linux.microsoft.com>
---
 kernel/params.c | 41 +++++++++++++++++++----------------------
 1 file changed, 19 insertions(+), 22 deletions(-)

diff --git a/kernel/params.c b/kernel/params.c
index a2441ce059ae..787662663e34 100644
--- a/kernel/params.c
+++ b/kernel/params.c
@@ -767,31 +767,28 @@ static struct module_kobject * __init 
lookup_or_create_module_kobject(const char
        int err;
 
        kobj = kset_find_obj(module_kset, name);
-       if (kobj) {
-               mk = to_module_kobject(kobj);
-       } else {
-               mk = kzalloc(sizeof(struct module_kobject), GFP_KERNEL);
-               BUG_ON(!mk);
-
-               mk->mod = THIS_MODULE;
-               mk->kobj.kset = module_kset;
-               err = kobject_init_and_add(&mk->kobj, &module_ktype, NULL,
-                                          "%s", name);
-#ifdef CONFIG_MODULES
-               if (!err)
-                       err = sysfs_create_file(&mk->kobj, &module_uevent.attr);
-#endif
-               if (err) {
-                       kobject_put(&mk->kobj);
-                       pr_crit("Adding module '%s' to sysfs failed (%d), the 
system may be unstable.\n",
-                               name, err);
-                       return NULL;
-               }
+       if (kobj)
+               return to_module_kobject(kobj);
 
-               /* So that we hold reference in both cases. */
-               kobject_get(&mk->kobj);
+       mk = kzalloc(sizeof(struct module_kobject), GFP_KERNEL);
+       if (!mk)
+               return NULL;
+
+       mk->mod = THIS_MODULE;
+       mk->kobj.kset = module_kset;
+       err = kobject_init_and_add(&mk->kobj, &module_ktype, NULL, "%s", name);
+       if (IS_ENABLED(CONFIG_MODULES) && !err)
+               err = sysfs_create_file(&mk->kobj, &module_uevent.attr);
+       if (err) {
+               kobject_put(&mk->kobj);
+               pr_crit("Adding module '%s' to sysfs failed (%d), the system 
may be unstable.\n",
+                       name, err);
+               return NULL;
        }
 
+       /* So that we hold reference in both cases. */
+       kobject_get(&mk->kobj);
+
        return mk;
 }
 
-- 
2.34.1


Reply via email to