[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 2/2] xen: balloon: Use static attribute groups for sysfs entries



Instead of manual calls of device_create_file(), device_remove_file()
and sysfs_create_group(), assign static attribute groups to the device
to register.  This simplifies the code and avoids possible races.

Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
---
 drivers/xen/xen-balloon.c | 45 ++++++++++++++++++++-------------------------
 1 file changed, 20 insertions(+), 25 deletions(-)

diff --git a/drivers/xen/xen-balloon.c b/drivers/xen/xen-balloon.c
index e555845d61fa..39e7ef8d3957 100644
--- a/drivers/xen/xen-balloon.c
+++ b/drivers/xen/xen-balloon.c
@@ -193,13 +193,18 @@ static DEVICE_ATTR(target, S_IRUGO | S_IWUSR,
                   show_target, store_target);
 
 
-static struct device_attribute *balloon_attrs[] = {
-       &dev_attr_target_kb,
-       &dev_attr_target,
-       &dev_attr_schedule_delay.attr,
-       &dev_attr_max_schedule_delay.attr,
-       &dev_attr_retry_count.attr,
-       &dev_attr_max_retry_count.attr
+static struct attribute *balloon_attrs[] = {
+       &dev_attr_target_kb.attr,
+       &dev_attr_target.attr,
+       &dev_attr_schedule_delay.attr.attr,
+       &dev_attr_max_schedule_delay.attr.attr,
+       &dev_attr_retry_count.attr.attr,
+       &dev_attr_max_retry_count.attr.attr,
+       NULL
+};
+
+static const struct attribute_group balloon_group = {
+       .attrs = balloon_attrs
 };
 
 static struct attribute *balloon_info_attrs[] = {
@@ -214,6 +219,12 @@ static const struct attribute_group balloon_info_group = {
        .attrs = balloon_info_attrs
 };
 
+static const struct attribute_group *balloon_groups[] = {
+       &balloon_group,
+       &balloon_info_group,
+       NULL
+};
+
 static struct bus_type balloon_subsys = {
        .name = BALLOON_CLASS_NAME,
        .dev_name = BALLOON_CLASS_NAME,
@@ -221,7 +232,7 @@ static struct bus_type balloon_subsys = {
 
 static int register_balloon(struct device *dev)
 {
-       int i, error;
+       int error;
 
        error = subsys_system_register(&balloon_subsys, NULL);
        if (error)
@@ -229,6 +240,7 @@ static int register_balloon(struct device *dev)
 
        dev->id = 0;
        dev->bus = &balloon_subsys;
+       dev->groups = balloon_groups;
 
        error = device_register(dev);
        if (error) {
@@ -236,24 +248,7 @@ static int register_balloon(struct device *dev)
                return error;
        }
 
-       for (i = 0; i < ARRAY_SIZE(balloon_attrs); i++) {
-               error = device_create_file(dev, balloon_attrs[i]);
-               if (error)
-                       goto fail;
-       }
-
-       error = sysfs_create_group(&dev->kobj, &balloon_info_group);
-       if (error)
-               goto fail;
-
        return 0;
-
- fail:
-       while (--i >= 0)
-               device_remove_file(dev, balloon_attrs[i]);
-       device_unregister(dev);
-       bus_unregister(&balloon_subsys);
-       return error;
 }
 
 MODULE_LICENSE("GPL");
-- 
2.2.2


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.