]> err.no Git - linux-2.6/blobdiff - drivers/net/bonding/bond_sysfs.c
bonding: Relax unneeded _safe lists iterations.
[linux-2.6] / drivers / net / bonding / bond_sysfs.c
index 68c41a00d93d3bd41e84f9c455503a1119895cab..1f028579e53bd8d1da2db99be549734d0577f396 100644 (file)
@@ -111,7 +111,6 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
        char *ifname;
        int rv, res = count;
        struct bonding *bond;
-       struct bonding *nxt;
 
        sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
        ifname = command + 1;
@@ -122,7 +121,7 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
        if (command[0] == '+') {
                printk(KERN_INFO DRV_NAME
                        ": %s is being created...\n", ifname);
-               rv = bond_create(ifname, &bonding_defaults, &bond);
+               rv = bond_create(ifname, &bonding_defaults);
                if (rv) {
                        printk(KERN_INFO DRV_NAME ": Bond creation failed.\n");
                        res = rv;
@@ -134,7 +133,7 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
                rtnl_lock();
                down_write(&bonding_rwsem);
 
-               list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
+               list_for_each_entry(bond, &bond_dev_list, bond_list)
                        if (strnicmp(bond->dev->name, ifname, IFNAMSIZ) == 0) {
                                /* check the ref count on the bond's kobject.
                                 * If it's > expected, then there's a file open,
@@ -1437,8 +1436,16 @@ int bond_create_sysfs(void)
         * configure multiple bonding devices.
         */
        if (ret == -EEXIST) {
-               netdev_class = NULL;
-               return 0;
+               /* Is someone being kinky and naming a device bonding_master? */
+               if (__dev_get_by_name(&init_net,
+                                     class_attr_bonding_masters.attr.name))
+                       printk(KERN_ERR
+                              "network device named %s already exists in sysfs",
+                              class_attr_bonding_masters.attr.name);
+               else {
+                       netdev_class = NULL;
+                       return 0;
+               }
        }
 
        return ret;