driver core: bus: convert bus_create/remove_file to be constant
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 8 Feb 2023 11:13:13 +0000 (12:13 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Feb 2023 09:43:12 +0000 (10:43 +0100)
bus_create_file() and bus_remove_file() can be made to take a constant
bus pointer, as it should not be modifying anything in the bus
structure.  Make this change and move the functions to use the internal
subsys_get/put() logic as well, to prevent the use of the back-pointer
in struct bus_type.

Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Link: https://lore.kernel.org/r/20230208111330.439504-5-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/base/bus.c
include/linux/device/bus.h

index b27ddf9..6552d38 100644 (file)
@@ -175,24 +175,30 @@ static const struct sysfs_ops bus_sysfs_ops = {
        .store  = bus_attr_store,
 };
 
-int bus_create_file(struct bus_type *bus, struct bus_attribute *attr)
+int bus_create_file(const struct bus_type *bus, struct bus_attribute *attr)
 {
+       struct subsys_private *sp = bus_to_subsys(bus);
        int error;
-       if (bus_get(bus)) {
-               error = sysfs_create_file(&bus->p->subsys.kobj, &attr->attr);
-               bus_put(bus);
-       } else
-               error = -EINVAL;
+
+       if (!sp)
+               return -EINVAL;
+
+       error = sysfs_create_file(&sp->subsys.kobj, &attr->attr);
+
+       subsys_put(sp);
        return error;
 }
 EXPORT_SYMBOL_GPL(bus_create_file);
 
-void bus_remove_file(struct bus_type *bus, struct bus_attribute *attr)
+void bus_remove_file(const struct bus_type *bus, struct bus_attribute *attr)
 {
-       if (bus_get(bus)) {
-               sysfs_remove_file(&bus->p->subsys.kobj, &attr->attr);
-               bus_put(bus);
-       }
+       struct subsys_private *sp = bus_to_subsys(bus);
+
+       if (!sp)
+               return;
+
+       sysfs_remove_file(&sp->subsys.kobj, &attr->attr);
+       subsys_put(sp);
 }
 EXPORT_SYMBOL_GPL(bus_remove_file);
 
index f0c8bf9..f6537f5 100644 (file)
@@ -135,9 +135,8 @@ struct bus_attribute {
 #define BUS_ATTR_WO(_name) \
        struct bus_attribute bus_attr_##_name = __ATTR_WO(_name)
 
-extern int __must_check bus_create_file(struct bus_type *,
-                                       struct bus_attribute *);
-extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
+int __must_check bus_create_file(const struct bus_type *bus, struct bus_attribute *attr);
+void bus_remove_file(const struct bus_type *bus, struct bus_attribute *attr);
 
 /* Generic device matching functions that all busses can use to match with */
 int device_match_name(struct device *dev, const void *name);