batman-adv: only call post function if something changed
authorSimon Wunderlich <simon@open-mesh.com>
Tue, 17 Nov 2015 13:11:26 +0000 (14:11 +0100)
committerAntonio Quartulli <a@unstable.cc>
Sat, 9 Jan 2016 12:56:00 +0000 (20:56 +0800)
Currently, the post function is also called on errors or if there were
no changes, which is redundant for the functions currently using these
facilities.

Signed-off-by: Simon Wunderlich <simon@open-mesh.com>
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
net/batman-adv/sysfs.c

index 48e2aaddda49d3c33dee2c792dc1d054bf6247db..fe87777fda8a0a0e2074adffd9b833284c370006 100644 (file)
@@ -242,10 +242,13 @@ ssize_t batadv_show_vlan_##_name(struct kobject *kobj,                    \
 
 static int batadv_store_bool_attr(char *buff, size_t count,
                                  struct net_device *net_dev,
-                                 const char *attr_name, atomic_t *attr)
+                                 const char *attr_name, atomic_t *attr,
+                                 bool *changed)
 {
        int enabled = -1;
 
+       *changed = false;
+
        if (buff[count - 1] == '\n')
                buff[count - 1] = '\0';
 
@@ -272,6 +275,8 @@ static int batadv_store_bool_attr(char *buff, size_t count,
                    atomic_read(attr) == 1 ? "enabled" : "disabled",
                    enabled == 1 ? "enabled" : "disabled");
 
+       *changed = true;
+
        atomic_set(attr, (unsigned int)enabled);
        return count;
 }
@@ -282,11 +287,12 @@ __batadv_store_bool_attr(char *buff, size_t count,
                         struct attribute *attr,
                         atomic_t *attr_store, struct net_device *net_dev)
 {
+       bool changed;
        int ret;
 
        ret = batadv_store_bool_attr(buff, count, net_dev, attr->name,
-                                    attr_store);
-       if (post_func && ret)
+                                    attr_store, &changed);
+       if (post_func && changed)
                post_func(net_dev);
 
        return ret;