Use the per-bond value of the bond_mode parameter
Subsystems (3)
PATCH 2/3 Use the per-bond value of the bond_mode parameter
Change usage of the global 'bond_mode' parameter to the per-bond value.
drivers/net/bonding/bond_main.c +76 -71
@@ -595,9 +595,9 @@ static inline void bond_set_mode_ops(str/*---------------------------- General routines -----------------------------*/ -static const char *bond_mode_name (void ) +static const char *bond_mode_name (int mode) { -switch (bond_mode) { +switch (mode) {case BOND_MODE_ROUNDROBIN :return "load balancing (round-robin)" ;case BOND_MODE_ACTIVEBACKUP :
@@ -803,7 +803,7 @@ static struct dev_mc_list *bond_mc_list_*/ static void bond_set_promiscuity (struct bonding *bond,int inc) { -if (USES_PRIMARY (bond_mode)) { +if (USES_PRIMARY (bond->params.mode)) {/* write lock already acquired */ if (bond->curr_active_slave) {dev_set_promiscuity (bond->curr_active_slave->dev, inc);
@@ -822,7 +822,7 @@ static void bond_set_promiscuity(struct*/ static void bond_set_allmulti (struct bonding *bond,int inc) { -if (USES_PRIMARY (bond_mode)) { +if (USES_PRIMARY (bond->params.mode)) {/* write lock already acquired */ if (bond->curr_active_slave) {dev_set_allmulti (bond->curr_active_slave->dev, inc);
@@ -842,7 +842,7 @@ static void bond_set_allmulti(struct bon*/ static void bond_mc_add (struct bonding *bond,void *addr,int alen) { -if (USES_PRIMARY (bond_mode)) { +if (USES_PRIMARY (bond->params.mode)) {/* write lock already acquired */ if (bond->curr_active_slave) {dev_mc_add (bond->curr_active_slave->dev, addr, alen,0 );
@@ -862,7 +862,7 @@ static void bond_mc_add(struct bonding **/ static void bond_mc_delete (struct bonding *bond,void *addr,int alen) { -if (USES_PRIMARY (bond_mode)) { +if (USES_PRIMARY (bond->params.mode)) {/* write lock already acquired */ if (bond->curr_active_slave) {dev_mc_delete (bond->curr_active_slave->dev, addr, alen,0 );
@@ -922,13 +922,14 @@ static int bond_mc_list_copy(struct dev_*/ static void bond_mc_list_flush (struct net_device *bond_dev,struct net_device *slave_dev) { +struct bonding *bond = bond_dev->priv;struct dev_mc_list *dmi;for (dmi = bond_dev->mc_list; dmi; dmi = dmi->next) {dev_mc_delete (slave_dev, dmi->dmi_addr, dmi->dmi_addrlen,0 ); } -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {/* del lacpdu mc addr from mc list */ u8 lacpdu_multicast[ETH_ALEN ] =MULTICAST_LACPDU_ADDR ;
@@ -947,7 +948,7 @@ static void bond_mc_swap(struct bonding {struct dev_mc_list *dmi; -if (!USES_PRIMARY (bond_mode)) { +if (!USES_PRIMARY (bond->params.mode)) {/* nothing to do - mc list is already up-to-date on * all slaves */
@@ -1064,7 +1065,7 @@ static void bond_change_active_slave(strif (new_active) {if (new_active->link ==BOND_LINK_BACK ) { -if (USES_PRIMARY (bond_mode)) { +if (USES_PRIMARY (bond->params.mode)) { printk(KERN_INFO DRV_NAME": %s: making interface %s the new " "active one %d ms earlier.\n",
@@ -1076,16 +1077,16 @@ static void bond_change_active_slave(str new_active->link =BOND_LINK_UP ; new_active->jiffies = jiffies; -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {bond_3ad_handle_link_change (new_active,BOND_LINK_UP ); } -if ((bond_mode ==BOND_MODE_TLB ) || - (bond_mode ==BOND_MODE_ALB )) { +if ((bond->params.mode ==BOND_MODE_TLB ) || + (bond->params.mode ==BOND_MODE_ALB )) {bond_alb_handle_link_change (bond, new_active,BOND_LINK_UP ); } }else { -if (USES_PRIMARY (bond_mode)) { +if (USES_PRIMARY (bond->params.mode)) { printk(KERN_INFO DRV_NAME": %s: making interface %s the new " "active one.\n",
@@ -1094,7 +1095,7 @@ static void bond_change_active_slave(str } } -if (bond_mode ==BOND_MODE_ACTIVEBACKUP ) { +if (bond->params.mode ==BOND_MODE_ACTIVEBACKUP ) {if (old_active) {bond_set_slave_inactive_flags (old_active); }
@@ -1104,12 +1105,12 @@ static void bond_change_active_slave(str } } -if (USES_PRIMARY (bond_mode)) { +if (USES_PRIMARY (bond->params.mode)) {bond_mc_swap (bond, new_active, old_active); } -if ((bond_mode ==BOND_MODE_TLB ) || - (bond_mode ==BOND_MODE_ALB )) { +if ((bond->params.mode ==BOND_MODE_TLB ) || + (bond->params.mode ==BOND_MODE_ALB )) {bond_alb_handle_active_change (bond, new_active); }else { bond->curr_active_slave = new_active;
@@ -1264,13 +1265,13 @@ static int bond_enslave(struct net_devicreturn -EINVAL ; } -if ((bond_mode ==BOND_MODE_8023AD ) || - (bond_mode ==BOND_MODE_TLB ) || - (bond_mode ==BOND_MODE_ALB )) { +if ((bond->params.mode ==BOND_MODE_8023AD ) || + (bond->params.mode ==BOND_MODE_TLB ) || + (bond->params.mode ==BOND_MODE_ALB )) { printk(KERN_ERR DRV_NAME": Error: to use %s mode, you must upgrade " "ifenslave.\n" , - bond_mode_name()); + bond_mode_name(bond->params.mode));return -EOPNOTSUPP ; } }
@@ -1326,8 +1327,8 @@ static int bond_enslave(struct net_devic new_slave->dev = slave_dev; -if ((bond_mode ==BOND_MODE_TLB ) || - (bond_mode ==BOND_MODE_ALB )) { +if ((bond->params.mode ==BOND_MODE_TLB ) || + (bond->params.mode ==BOND_MODE_ALB )) {/* bond_alb_init_slave() must be called before all other stages since * it might fail and we do not want to have to undo everything */
@@ -1342,7 +1343,7 @@ static int bond_enslave(struct net_devic* curr_active_slave, and that is taken care of later when calling * bond_change_active() */ -if (!USES_PRIMARY (bond_mode)) { +if (!USES_PRIMARY (bond->params.mode)) {/* set promiscuity level to new slave */ if (bond_dev->flags &IFF_PROMISC ) {dev_set_promiscuity (slave_dev,1 );
@@ -1359,7 +1360,7 @@ static int bond_enslave(struct net_devic } } -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {/* add lacpdu mc addr to mc list */ u8 lacpdu_multicast[ETH_ALEN ] =MULTICAST_LACPDU_ADDR ;
@@ -1432,7 +1433,7 @@ static int bond_enslave(struct net_devic"forced to 100Mbps, duplex forced to Full.\n" , new_slave->dev->name); -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {printk (KERN_WARNING "Operation of 802.3ad mode requires ETHTOOL " "support in base driver for proper aggregator "
@@ -1440,14 +1441,14 @@ static int bond_enslave(struct net_devic } } -if (USES_PRIMARY (bond_mode) && primary) { +if (USES_PRIMARY (bond->params.mode) && primary) {/* if there is a primary slave, remember it */ if (strcmp (primary, new_slave->dev->name) ==0 ) { bond->primary_slave = new_slave; } } -switch (bond_mode) { +switch (bond->params.mode) {case BOND_MODE_ACTIVEBACKUP :/* if we're in active-backup mode, we need one and only one active * interface. The backup interfaces will have their NOARP flag set
@@ -1637,7 +1638,7 @@ static int bond_release(struct net_devic }/* Inform AD package of unbinding of slave. */ -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {/* must be called before the slave is * detached from the list */
@@ -1666,8 +1667,8 @@ static int bond_release(struct net_devicbond_change_active_slave (bond,NULL ); } -if ((bond_mode ==BOND_MODE_TLB ) || - (bond_mode ==BOND_MODE_ALB )) { +if ((bond->params.mode ==BOND_MODE_TLB ) || + (bond->params.mode ==BOND_MODE_ALB )) {/* Must be called only after the slave has been * detached from the list and the curr_active_slave * has been cleared (if our_slave == old_current),
@@ -1693,7 +1694,7 @@ static int bond_release(struct net_devic* promisc and mc settings if it was the curr_active_slave, but that was * already taken care of above when we detached the slave */ -if (!USES_PRIMARY (bond_mode)) { +if (!USES_PRIMARY (bond->params.mode)) {/* unset promiscuity level from slave */ if (bond_dev->flags &IFF_PROMISC ) {dev_set_promiscuity (slave_dev,-1 );
@@ -1765,15 +1766,15 @@ static int bond_release_all(struct net_d/* Inform AD package of unbinding of slave * before slave is detached from the list. */ -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {bond_3ad_unbind_slave (slave); } slave_dev = slave->dev;bond_detach_slave (bond, slave); -if ((bond_mode ==BOND_MODE_TLB ) || - (bond_mode ==BOND_MODE_ALB )) { +if ((bond->params.mode ==BOND_MODE_TLB ) || + (bond->params.mode ==BOND_MODE_ALB )) {/* must be called only after the slave * has been detached from the list */
@@ -1790,7 +1791,7 @@ static int bond_release_all(struct net_d* promisc and mc settings if it was the curr_active_slave, but that was * already taken care of above when we detached the slave */ -if (!USES_PRIMARY (bond_mode)) { +if (!USES_PRIMARY (bond->params.mode)) {/* unset promiscuity level from slave */ if (bond_dev->flags &IFF_PROMISC ) {dev_set_promiscuity (slave_dev,-1 );
@@ -1864,6 +1865,10 @@ static int bond_ioctl_change_active(strustruct slave *new_active =NULL ;int res =0 ; +if (!USES_PRIMARY (bond->params.mode)) { +return -EINVAL ; + } +/* Verify that master_dev is indeed the master of slave_dev */ if (!(slave_dev->flags &IFF_SLAVE ) || (slave_dev->master != bond_dev)) {
@@ -1952,7 +1957,7 @@ static int bond_info_query(struct net_de {struct bonding *bond = bond_dev->priv; - info->bond_mode = bond_mode; + info->bond_mode = bond->params.mode; info->miimon = miimon;read_lock_bh (&bond->lock);
@@ -2054,7 +2059,7 @@ static void bond_mii_monitor(struct net_"%d ms.\n" , bond_dev->name,IS_UP (slave_dev) - ? ((bond_mode == BOND_MODE_ACTIVEBACKUP) + ? ((bond->params.mode == BOND_MODE_ACTIVEBACKUP) ? ((slave == oldcurrent) ? "active " : "backup ") : "")
@@ -2076,8 +2081,8 @@ static void bond_mii_monitor(struct net_/* in active/backup mode, we must * completely disable this interface */ -if ((bond_mode ==BOND_MODE_ACTIVEBACKUP ) || - (bond_mode ==BOND_MODE_8023AD )) { +if ((bond->params.mode ==BOND_MODE_ACTIVEBACKUP ) || + (bond->params.mode ==BOND_MODE_8023AD )) {bond_set_slave_inactive_flags (slave); }
@@ -2089,12 +2094,12 @@ static void bond_mii_monitor(struct net_ slave_dev->name);/* notify ad that the link status has changed */ -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {bond_3ad_handle_link_change (slave,BOND_LINK_DOWN ); } -if ((bond_mode ==BOND_MODE_TLB ) || - (bond_mode ==BOND_MODE_ALB )) { +if ((bond->params.mode ==BOND_MODE_TLB ) || + (bond->params.mode ==BOND_MODE_ALB )) {bond_alb_handle_link_change (bond, slave,BOND_LINK_DOWN ); }
@@ -2157,10 +2162,10 @@ static void bond_mii_monitor(struct net_ slave->link =BOND_LINK_UP ; slave->jiffies = jiffies; -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {/* prevent it from being the active one */ slave->state =BOND_STATE_BACKUP ; - }else if (bond_mode !=BOND_MODE_ACTIVEBACKUP ) { + }else if (bond->params.mode !=BOND_MODE_ACTIVEBACKUP ) {/* make it immediately active */ slave->state =BOND_STATE_ACTIVE ; }else if (slave != bond->primary_slave) {
@@ -2175,12 +2180,12 @@ static void bond_mii_monitor(struct net_ slave_dev->name);/* notify ad that the link status has changed */ -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {bond_3ad_handle_link_change (slave,BOND_LINK_UP ); } -if ((bond_mode ==BOND_MODE_TLB ) || - (bond_mode ==BOND_MODE_ALB )) { +if ((bond->params.mode ==BOND_MODE_TLB ) || + (bond->params.mode ==BOND_MODE_ALB )) {bond_alb_handle_link_change (bond, slave,BOND_LINK_UP ); }
@@ -2202,7 +2207,7 @@ static void bond_mii_monitor(struct net_bond_update_speed_duplex (slave); -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {if (old_speed != slave->speed) {bond_3ad_adapter_speed_changed (slave); }
@@ -2665,17 +2670,19 @@ static void bond_info_seq_stop(struct seread_unlock (&dev_base_lock); } -static void bond_info_show_master (struct seq_file *seq,struct bonding *bond) +static void bond_info_show_master (struct seq_file *seq) { +struct bonding *bond = seq->private;struct slave *curr;read_lock (&bond->curr_slave_lock); curr = bond->curr_active_slave;read_unlock (&bond->curr_slave_lock); -seq_printf (seq,"Bonding Mode: %s\n" ,bond_mode_name ()); +seq_printf (seq,"Bonding Mode: %s\n" , +bond_mode_name (bond->params.mode)); -if (USES_PRIMARY (bond_mode)) { +if (USES_PRIMARY (bond->params.mode)) {if (curr) { seq_printf(seq, "Currently Active Slave: %s\n",
@@ -2688,7 +2695,7 @@ static void bond_info_show_master(structseq_printf (seq,"Up Delay (ms): %d\n" , updelay * miimon);seq_printf (seq,"Down Delay (ms): %d\n" , downdelay * miimon); -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {struct ad_info ad_info;seq_puts (seq,"\n802.3ad info\n" );
@@ -2720,6 +2727,8 @@ static void bond_info_show_master(structstatic void bond_info_show_slave (struct seq_file *seq,const struct slave *slave) { +struct bonding *bond = seq->private; +seq_printf (seq,"\nSlave Interface: %s\n" , slave->dev->name);seq_printf (seq,"MII Status: %s\n" , (slave->link ==BOND_LINK_UP ) ?"up" :"down" );
@@ -2737,7 +2746,7 @@ static void bond_info_show_slave(struct slave->perm_hwaddr[5]); } -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {const struct aggregator *agg =SLAVE_AD_INFO (slave).port.aggregator;
@@ -2754,7 +2763,7 @@ static int bond_info_seq_show(struct seq {if (v ==SEQ_START_TOKEN ) {seq_printf (seq,"%s\n" , version); -bond_info_show_master (seq, seq->private); +bond_info_show_master (seq); }else {bond_info_show_slave (seq, v); }
@@ -3030,14 +3039,14 @@ static int bond_open(struct net_device * bond->kill_timers =0 ; -if ((bond_mode ==BOND_MODE_TLB ) || - (bond_mode ==BOND_MODE_ALB )) { +if ((bond->params.mode ==BOND_MODE_TLB ) || + (bond->params.mode ==BOND_MODE_ALB )) {struct timer_list *alb_timer = &(BOND_ALB_INFO (bond).alb_timer);/* bond_alb_initialize must be called before the timer * is started. */ -if (bond_alb_initialize (bond, (bond_mode ==BOND_MODE_ALB ))) { +if (bond_alb_initialize (bond, (bond->params.mode ==BOND_MODE_ALB ))) {/* something went wrong - fail the open operation */ return -1 ; }
@@ -3061,7 +3070,7 @@ static int bond_open(struct net_device *init_timer (arp_timer); arp_timer->expires = jiffies +1 ; arp_timer->data = (unsigned long )bond_dev; -if (bond_mode ==BOND_MODE_ACTIVEBACKUP ) { +if (bond->params.mode ==BOND_MODE_ACTIVEBACKUP ) { arp_timer->function = (void *)&bond_activebackup_arp_mon; }else { arp_timer->function = (void *)&bond_loadbalance_arp_mon;
@@ -3069,7 +3078,7 @@ static int bond_open(struct net_device *add_timer (arp_timer); } -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {struct timer_list *ad_timer = &(BOND_AD_INFO (bond).ad_timer);init_timer (ad_timer); ad_timer->expires = jiffies +1 ;
@@ -3092,7 +3101,7 @@ static int bond_close(struct net_devicebond_mc_list_destroy (bond); -if (bond_mode ==BOND_MODE_8023AD ) { +if (bond->params.mode ==BOND_MODE_8023AD ) {/* Unregister the receive of LACPDUs */ bond_unregister_lacpdu (bond); }
@@ -3114,7 +3123,7 @@ static int bond_close(struct net_devicedel_timer_sync (&bond->arp_timer); } -switch (bond_mode) { +switch (bond->params.mode) {case BOND_MODE_8023AD :del_timer_sync (&(BOND_AD_INFO (bond).ad_timer));break ;
@@ -3129,8 +3138,8 @@ static int bond_close(struct net_device/* Release the bonded slaves */ bond_release_all (bond_dev); -if ((bond_mode ==BOND_MODE_TLB ) || - (bond_mode ==BOND_MODE_ALB )) { +if ((bond->params.mode ==BOND_MODE_TLB ) || + (bond->params.mode ==BOND_MODE_ALB )) {/* Must be called only after all * slaves have been released */
@@ -3310,11 +3319,7 @@ static int bond_do_ioctl(struct net_devibreak ;case BOND_CHANGE_ACTIVE_OLD :case SIOCBONDCHANGEACTIVE : -if (USES_PRIMARY (bond_mode)) { - res =bond_ioctl_change_active (bond_dev, slave_dev); - }else { - res = -EINVAL ; - } + res =bond_ioctl_change_active (bond_dev, slave_dev);break ;default : res = -EOPNOTSUPP ;
@@ -3919,7 +3924,7 @@ static int bond_check_params(struct bondif (bond_mode !=BOND_MODE_8023AD ) { printk(KERN_INFO DRV_NAME": lacp_rate param is irrelevant in mode %s\n" , - bond_mode_name()); + bond_mode_name(bond_mode)); }else { lacp_fast =bond_parse_parm (lacp_rate, bond_lacp_tbl);if (lacp_fast ==-1 ) {
@@ -4120,7 +4125,7 @@ static int bond_check_params(struct bond printk(KERN_WARNING DRV_NAME": Warning: %s primary device specified but has no " "effect in %s mode\n" , - primary, bond_mode_name()); + primary, bond_mode_name(bond_mode)); primary =NULL ; }