aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-08-21 16:47:50 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-08-21 19:02:19 -0400
commit3e9b2bae8369661070622d05570cbcdfa01770e6 (patch)
treea5e22d5953306740dca0da253752ad6830baaa50 /drivers/base
parentfa2be40fe7c0aa3b7accbf6dfa9ef0976e191d4c (diff)
sysfs: add sysfs_create/remove_groups()
These functions are being open-coded in 3 different places in the driver core, and other driver subsystems will want to start doing this as well, so move it to the sysfs core to keep it all in one place, where we know it is written properly. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/bus.c23
-rw-r--r--drivers/base/core.c22
-rw-r--r--drivers/base/driver.c22
3 files changed, 6 insertions, 61 deletions
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 5ee5d3c1d74b..f099af0b41af 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -884,32 +884,13 @@ static void bus_remove_attrs(struct bus_type *bus)
884static int bus_add_groups(struct bus_type *bus, 884static int bus_add_groups(struct bus_type *bus,
885 const struct attribute_group **groups) 885 const struct attribute_group **groups)
886{ 886{
887 int error = 0; 887 return sysfs_create_groups(&bus->p->subsys.kobj, groups);
888 int i;
889
890 if (groups) {
891 for (i = 0; groups[i]; i++) {
892 error = sysfs_create_group(&bus->p->subsys.kobj,
893 groups[i]);
894 if (error) {
895 while (--i >= 0)
896 sysfs_remove_group(&bus->p->subsys.kobj,
897 groups[i]);
898 break;
899 }
900 }
901 }
902 return error;
903} 888}
904 889
905static void bus_remove_groups(struct bus_type *bus, 890static void bus_remove_groups(struct bus_type *bus,
906 const struct attribute_group **groups) 891 const struct attribute_group **groups)
907{ 892{
908 int i; 893 sysfs_remove_groups(&bus->p->subsys.kobj, groups);
909
910 if (groups)
911 for (i = 0; groups[i]; i++)
912 sysfs_remove_group(&bus->p->subsys.kobj, groups[i]);
913} 894}
914 895
915static void klist_devices_get(struct klist_node *n) 896static void klist_devices_get(struct klist_node *n)
diff --git a/drivers/base/core.c b/drivers/base/core.c
index af646afa5b7e..d743dcee1e77 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -493,31 +493,13 @@ static void device_remove_bin_attributes(struct device *dev,
493 493
494int device_add_groups(struct device *dev, const struct attribute_group **groups) 494int device_add_groups(struct device *dev, const struct attribute_group **groups)
495{ 495{
496 int error = 0; 496 return sysfs_create_groups(&dev->kobj, groups);
497 int i;
498
499 if (groups) {
500 for (i = 0; groups[i]; i++) {
501 error = sysfs_create_group(&dev->kobj, groups[i]);
502 if (error) {
503 while (--i >= 0)
504 sysfs_remove_group(&dev->kobj,
505 groups[i]);
506 break;
507 }
508 }
509 }
510 return error;
511} 497}
512 498
513void device_remove_groups(struct device *dev, 499void device_remove_groups(struct device *dev,
514 const struct attribute_group **groups) 500 const struct attribute_group **groups)
515{ 501{
516 int i; 502 sysfs_remove_groups(&dev->kobj, groups);
517
518 if (groups)
519 for (i = 0; groups[i]; i++)
520 sysfs_remove_group(&dev->kobj, groups[i]);
521} 503}
522 504
523static int device_add_attrs(struct device *dev) 505static int device_add_attrs(struct device *dev)
diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index 89db726ebb98..c7efccb6f3bb 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -126,31 +126,13 @@ EXPORT_SYMBOL_GPL(driver_remove_file);
126int driver_add_groups(struct device_driver *drv, 126int driver_add_groups(struct device_driver *drv,
127 const struct attribute_group **groups) 127 const struct attribute_group **groups)
128{ 128{
129 int error = 0; 129 return sysfs_create_groups(&drv->p->kobj, groups);
130 int i;
131
132 if (groups) {
133 for (i = 0; groups[i]; i++) {
134 error = sysfs_create_group(&drv->p->kobj, groups[i]);
135 if (error) {
136 while (--i >= 0)
137 sysfs_remove_group(&drv->p->kobj,
138 groups[i]);
139 break;
140 }
141 }
142 }
143 return error;
144} 130}
145 131
146void driver_remove_groups(struct device_driver *drv, 132void driver_remove_groups(struct device_driver *drv,
147 const struct attribute_group **groups) 133 const struct attribute_group **groups)
148{ 134{
149 int i; 135 sysfs_remove_groups(&drv->p->kobj, groups);
150
151 if (groups)
152 for (i = 0; groups[i]; i++)
153 sysfs_remove_group(&drv->p->kobj, groups[i]);
154} 136}
155 137
156/** 138/**