]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
kernel: refactor lookup_or_create_module_kobject()
authorShyam Saini <shyamsaini@linux.microsoft.com>
Thu, 27 Feb 2025 18:49:28 +0000 (10:49 -0800)
committerPetr Pavlu <petr.pavlu@suse.com>
Wed, 16 Apr 2025 12:54:35 +0000 (14:54 +0200)
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.

Suggested-by: Thomas Weißschuh <linux@weissschuh.net>
Suggested-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Signed-off-by: Shyam Saini <shyamsaini@linux.microsoft.com>
Link: https://lore.kernel.org/r/20250227184930.34163-3-shyamsaini@linux.microsoft.com
Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>
kernel/params.c

index a2441ce059aedf918eda2d9afd7e7a219f7159ec..787662663e3489ac9a2d246531315e766f4ec75e 100644 (file)
@@ -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;
 }