int min_links =
                        nla_get_u32(data[IFLA_BOND_MIN_LINKS]);
 
-               err = bond_option_min_links_set(bond, min_links);
+               bond_opt_initval(&newval, min_links);
+               err = __bond_opt_set(bond, BOND_OPT_MINLINKS, &newval);
                if (err)
                        return err;
        }
 
                .values = bond_lacp_rate_tbl,
                .set = bond_option_lacp_rate_set
        },
+       [BOND_OPT_MINLINKS] = {
+               .id = BOND_OPT_MINLINKS,
+               .name = "min_links",
+               .desc = "Minimum number of available links before turning on carrier",
+               .values = bond_intmax_tbl,
+               .set = bond_option_min_links_set
+       },
        { }
 };
 
        return 0;
 }
 
-int bond_option_min_links_set(struct bonding *bond, int min_links)
+int bond_option_min_links_set(struct bonding *bond,
+                             struct bond_opt_value *newval)
 {
-       pr_info("%s: Setting min links value to %u\n",
-               bond->dev->name, min_links);
-       bond->params.min_links = min_links;
+       pr_info("%s: Setting min links value to %llu\n",
+               bond->dev->name, newval->value);
+       bond->params.min_links = newval->value;
 
        return 0;
 }
 
        BOND_OPT_DOWNDELAY,
        BOND_OPT_UPDELAY,
        BOND_OPT_LACP_RATE,
+       BOND_OPT_MINLINKS,
        BOND_OPT_LAST
 };
 
                            struct bond_opt_value *newval);
 int bond_option_lacp_rate_set(struct bonding *bond,
                              struct bond_opt_value *newval);
+int bond_option_min_links_set(struct bonding *bond,
+                             struct bond_opt_value *newval);
 #endif /* _BOND_OPTIONS_H */
 
 {
        struct bonding *bond = to_bond(d);
        int ret;
-       unsigned int new_value;
 
-       ret = kstrtouint(buf, 0, &new_value);
-       if (ret < 0) {
-               pr_err("%s: Ignoring invalid min links value %s.\n",
-                      bond->dev->name, buf);
-               return ret;
-       }
-
-       if (!rtnl_trylock())
-               return restart_syscall();
-
-       ret = bond_option_min_links_set(bond, new_value);
+       ret = bond_opt_tryset_rtnl(bond, BOND_OPT_MINLINKS, (char *)buf);
        if (!ret)
                ret = count;
 
-       rtnl_unlock();
        return ret;
 }
 static DEVICE_ATTR(min_links, S_IRUGO | S_IWUSR,
 
 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_min_links_set(struct bonding *bond, int min_links);
 int bond_option_lp_interval_set(struct bonding *bond, int min_links);
 int bond_option_ad_select_set(struct bonding *bond, int ad_select);
 struct net_device *bond_option_active_slave_get_rcu(struct bonding *bond);