bonding: convert num_peer_notif to use the new option API
authorNikolay Aleksandrov <nikolay@redhat.com>
Wed, 22 Jan 2014 13:53:30 +0000 (14:53 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 22 Jan 2014 23:38:43 +0000 (15:38 -0800)
This patch adds the necessary changes so num_peer_notif would use
the new bonding option API.
When the auto-sysfs generation is done an alias should be added for
this option as there're currently 2 entries in sysfs for it.

Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bonding/bond_netlink.c
drivers/net/bonding/bond_options.c
drivers/net/bonding/bond_options.h
drivers/net/bonding/bond_sysfs.c
drivers/net/bonding/bonding.h

index 830203dae20c19cb66b2f53c82ee575f55c85e35..6855f28ac780814317a81cd00648c671ed1f1ab6 100644 (file)
@@ -268,7 +268,8 @@ static int bond_changelink(struct net_device *bond_dev,
                int num_peer_notif =
                        nla_get_u8(data[IFLA_BOND_NUM_PEER_NOTIF]);
 
-               err = bond_option_num_peer_notif_set(bond, num_peer_notif);
+               bond_opt_initval(&newval, num_peer_notif);
+               err = __bond_opt_set(bond, BOND_OPT_NUM_PEER_NOTIF, &newval);
                if (err)
                        return err;
        }
index 081ab9b5d48ae7568867e6aa7d31436f4802cfd2..1bd19f1f1af25f4d54d1b5280e68477f5192815b 100644 (file)
@@ -85,6 +85,13 @@ static struct bond_opt_value bond_ad_select_tbl[] = {
        { NULL,        -1,                0},
 };
 
+static struct bond_opt_value bond_num_peer_notif_tbl[] = {
+       { "off",     0,   0},
+       { "maxval",  255, BOND_VALFLAG_MAX},
+       { "default", 1,   BOND_VALFLAG_DEFAULT},
+       { NULL,      -1,  0}
+};
+
 static struct bond_option bond_opts[] = {
        [BOND_OPT_MODE] = {
                .id = BOND_OPT_MODE,
@@ -186,6 +193,13 @@ static struct bond_option bond_opts[] = {
                .values = bond_ad_select_tbl,
                .set = bond_option_ad_select_set
        },
+       [BOND_OPT_NUM_PEER_NOTIF] = {
+               .id = BOND_OPT_NUM_PEER_NOTIF,
+               .name = "num_unsol_na",
+               .desc = "Number of peer notifications to send on failover event",
+               .values = bond_num_peer_notif_tbl,
+               .set = bond_option_num_peer_notif_set
+       },
        { }
 };
 
@@ -977,9 +991,11 @@ int bond_option_resend_igmp_set(struct bonding *bond, int resend_igmp)
        return 0;
 }
 
-int bond_option_num_peer_notif_set(struct bonding *bond, int num_peer_notif)
+int bond_option_num_peer_notif_set(struct bonding *bond,
+                                  struct bond_opt_value *newval)
 {
-       bond->params.num_peer_notif = num_peer_notif;
+       bond->params.num_peer_notif = newval->value;
+
        return 0;
 }
 
index 53df1762d80f83eb558d0e7cd12fab99b9ab5774..014a359460e566ade21d688992be18337840a168 100644 (file)
@@ -51,6 +51,7 @@ enum {
        BOND_OPT_LACP_RATE,
        BOND_OPT_MINLINKS,
        BOND_OPT_AD_SELECT,
+       BOND_OPT_NUM_PEER_NOTIF,
        BOND_OPT_LAST
 };
 
@@ -136,4 +137,6 @@ int bond_option_min_links_set(struct bonding *bond,
                              struct bond_opt_value *newval);
 int bond_option_ad_select_set(struct bonding *bond,
                              struct bond_opt_value *newval);
+int bond_option_num_peer_notif_set(struct bonding *bond,
+                                  struct bond_opt_value *newval);
 #endif /* _BOND_OPTIONS_H */
index 02e493ae5173eaccf035951d9b484ad032fa7f85..e1c99db134a9cd2fe28840239492f5637cbb909d 100644 (file)
@@ -641,24 +641,12 @@ static ssize_t bonding_store_num_peer_notif(struct device *d,
                                            const char *buf, size_t count)
 {
        struct bonding *bond = to_bond(d);
-       u8 new_value;
        int ret;
 
-       ret = kstrtou8(buf, 10, &new_value);
-       if (ret) {
-               pr_err("%s: invalid value %s specified.\n",
-                      bond->dev->name, buf);
-               return ret;
-       }
-
-       if (!rtnl_trylock())
-               return restart_syscall();
-
-       ret = bond_option_num_peer_notif_set(bond, new_value);
+       ret = bond_opt_tryset_rtnl(bond, BOND_OPT_NUM_PEER_NOTIF, (char *)buf);
        if (!ret)
                ret = count;
 
-       rtnl_unlock();
        return ret;
 }
 static DEVICE_ATTR(num_grat_arp, S_IRUGO | S_IWUSR,
index 235fb18b65bfdb1f1602a912428cb9ec9bffb49e..4554a16a0f3edf77f7662e034342d034cefffb7d 100644 (file)
@@ -461,7 +461,6 @@ int bond_option_primary_set(struct bonding *bond, const char *primary);
 int bond_option_primary_reselect_set(struct bonding *bond,
                                     int primary_reselect);
 int bond_option_resend_igmp_set(struct bonding *bond, int resend_igmp);
-int bond_option_num_peer_notif_set(struct bonding *bond, int num_peer_notif);
 int bond_option_all_slaves_active_set(struct bonding *bond,
                                      int all_slaves_active);
 int bond_option_lp_interval_set(struct bonding *bond, int min_links);