bonding: simple macro cleanup
Subsystems (3)
v3 cover bonding: simple macro cleanup
Hi,
Trivial patchset that converts most of the bonding's macros into inline functions. It introduces only one macro, BOND_MODE(), which is just bond->params.mode, better to write/understand/remember.
The only real change is the removal of IFF_UP verification, which always came in pair with && netif_running(), and is though useless, as it's always IFF_UP when LINK_STATE_RUNNING.
v2->v3: fix 3/9 to actually invert bond_mode_uses_arp() and add
bond_uses_arp() alongside bond_mode_uses_arp()v1->v2: use inlined functions instead of macros.
--- drivers/net/bonding/bond_3ad.c | 6 +- drivers/net/bonding/bond_alb.c | 18 ++--- drivers/net/bonding/bond_debugfs.c | 2 +- drivers/net/bonding/bond_main.c | 143 ++++++++++++++++----------------- drivers/net/bonding/bond_netlink.c | 6 +- drivers/net/bonding/bond_options.c | 10 +-- drivers/net/bonding/bond_procfs.c | 14 ++-- drivers/net/bonding/bond_sysfs.c | 14 ++-- drivers/net/bonding/bond_sysfs_slave.c | 2 +- drivers/net/bonding/bonding.h | 89 ++++++++++---------- 10 files changed, 150 insertions(+), 154 deletions(-)
PATCH v3 1/9 bonding: remove BOND_MODE_IS_LB macro
It's used only in an inline function and is useless.
--- drivers/net/bonding/bonding.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
drivers/net/bonding/bonding.h +2 -5
@@ -69,10 +69,6 @@ (((mode) ==BOND_MODE_ACTIVEBACKUP ) || \ ((mode) == BOND_MODE_ROUNDROBIN)) -#define BOND_MODE_IS_LB (mode) \ - (((mode) == BOND_MODE_TLB) || \ - ((mode) == BOND_MODE_ALB)) -#define IS_IP_TARGET_UNUSABLE_ADDRESS (a) \ ((htonl(INADDR_BROADCAST) == a) || \ ipv4_is_zeronet(a))
@@ -290,7 +286,8 @@ static inline struct bonding *bond_get_bond_by_slave(struct slave *slave)static inline bool bond_is_lb (const struct bonding *bond) { -return BOND_MODE_IS_LB (bond->params.mode); +return bond->params.mode ==BOND_MODE_TLB || + bond->params.mode ==BOND_MODE_ALB ; }static inline void bond_set_active_slave (struct slave *slave)
Signature · 1 line
1.8.4
PATCH v3 2/9 bonding: make TX_QUEUE_OVERRIDE() macro an inline function
In reply to Veaceslav FalicoAlso, make it accept bonding as a parameter and change the name a bit to better reflect its scope.
--- drivers/net/bonding/bond_main.c | 7 +++---- drivers/net/bonding/bonding.h | 10 ++++++---- 2 files changed, 9 insertions(+), 8 deletions(-)
drivers/net/bonding/bond_main.c +3 -4
@@ -3788,10 +3788,9 @@ static netdev_tx_t __bond_start_xmit(struct sk_buff *skb, struct net_device *dev {struct bonding *bond =netdev_priv (dev); -if (TX_QUEUE_OVERRIDE (bond->params.mode)) { -if (!bond_slave_override (bond, skb)) -return NETDEV_TX_OK ; - } +if (bond_should_override_tx_queue (bond) && + !bond_slave_override (bond, skb)) +return NETDEV_TX_OK ;switch (bond->params.mode) {case BOND_MODE_ROUNDROBIN :
drivers/net/bonding/bonding.h +6 -4
@@ -65,10 +65,6 @@ ((mode) == BOND_MODE_TLB) || \ ((mode) == BOND_MODE_ALB)) -#define TX_QUEUE_OVERRIDE (mode) \ - (((mode) == BOND_MODE_ACTIVEBACKUP) || \ - ((mode) == BOND_MODE_ROUNDROBIN)) -#define IS_IP_TARGET_UNUSABLE_ADDRESS (a) \ ((htonl(INADDR_BROADCAST) == a) || \ ipv4_is_zeronet(a))
@@ -284,6 +280,12 @@ static inline struct bonding *bond_get_bond_by_slave(struct slave *slave)return slave->bond; } +static inline bool bond_should_override_tx_queue (struct bonding *bond) +{ +return bond->params.mode ==BOND_MODE_ACTIVEBACKUP || + bond->params.mode ==BOND_MODE_ROUNDROBIN ; +} +static inline bool bond_is_lb (const struct bonding *bond) { return bond->params.mode == BOND_MODE_TLB ||
Signature · 1 line
1.8.4
PATCH v3 3/9 bonding: make BOND_NO_USES_ARP an inline function
In reply to Veaceslav FalicoAlso, change its name to better reflect its scope, and skip the "no" part.
--- drivers/net/bonding/bond_main.c | 2 +- drivers/net/bonding/bond_options.c | 2 +- drivers/net/bonding/bonding.h | 11 ++++++----- 3 files changed, 8 insertions(+), 7 deletions(-)
drivers/net/bonding/bond_main.c +1 -1
@@ -4113,7 +4113,7 @@ static int bond_check_params(struct bond_params *params) }/* reset values for 802.3ad/TLB/ALB */ -if (BOND_NO_USES_ARP (bond_mode)) { +if (!bond_mode_uses_arp (bond_mode)) {if (!miimon) {pr_warn ("Warning: miimon must be specified, otherwise bonding will not detect link failure, speed and duplex which are essential for 802.3ad operation\n" );pr_warn ("Forcing miimon to 100msec\n" );
drivers/net/bonding/bond_options.c +1 -1
@@ -672,7 +672,7 @@ const struct bond_option *bond_opt_get(unsigned int option)int bond_option_mode_set (struct bonding *bond,const struct bond_opt_value *newval) { -if (BOND_NO_USES_ARP (newval->value) && bond->params.arp_interval) { +if (!bond_mode_uses_arp (newval->value) && bond->params.arp_interval) {pr_info ("%s: %s mode is incompatible with arp monitoring, start mii monitoring\n" , bond->dev->name, newval->string);/* disable arp monitoring */
drivers/net/bonding/bonding.h +6 -5
@@ -60,11 +60,6 @@ ((mode) == BOND_MODE_TLB) || \ ((mode) == BOND_MODE_ALB)) -#define BOND_NO_USES_ARP (mode) \ - (((mode) == BOND_MODE_8023AD) || \ - ((mode) == BOND_MODE_TLB) || \ - ((mode) == BOND_MODE_ALB)) -#define IS_IP_TARGET_UNUSABLE_ADDRESS (a) \ ((htonl(INADDR_BROADCAST) == a) || \ ipv4_is_zeronet(a))
@@ -292,6 +287,12 @@ static inline bool bond_is_lb(const struct bonding *bond) bond->params.mode ==BOND_MODE_ALB ; } +static inline bool bond_mode_uses_arp (int mode) +{ +return mode !=BOND_MODE_8023AD && mode !=BOND_MODE_TLB && + mode !=BOND_MODE_ALB ; +} +static inline void bond_set_active_slave (struct slave *slave) {if (slave->backup) {
Signature · 1 line
1.8.4
PATCH v3 4/9 bonding: make USES_PRIMARY inline functions
In reply to Veaceslav FalicoChange the name a bit to better reflect its scope, and update some comments. Two functions added - one which takes bond as a param and the other which takes the mode.
--- drivers/net/bonding/bond_main.c | 38 +++++++++++++++++++------------------- drivers/net/bonding/bond_options.c | 2 +- drivers/net/bonding/bond_procfs.c | 2 +- drivers/net/bonding/bonding.h | 17 +++++++++++------ 4 files changed, 32 insertions(+), 27 deletions(-)
drivers/net/bonding/bond_main.c +19 -19
@@ -497,7 +497,7 @@ static int bond_set_promiscuity(struct bonding *bond, int inc)struct list_head *iter;int err =0 ; -if (USES_PRIMARY (bond->params.mode)) { +if (bond_uses_primary (bond)) {/* write lock already acquired */ if (bond->curr_active_slave) { err = dev_set_promiscuity(bond->curr_active_slave->dev,
@@ -523,7 +523,7 @@ static int bond_set_allmulti(struct bonding *bond, int inc)struct list_head *iter;int err =0 ; -if (USES_PRIMARY (bond->params.mode)) { +if (bond_uses_primary (bond)) {/* write lock already acquired */ if (bond->curr_active_slave) { err = dev_set_allmulti(bond->curr_active_slave->dev,
@@ -585,8 +585,8 @@ static void bond_hw_addr_flush(struct net_device *bond_dev,/*--------------------------- Active slave change ---------------------------*/ /* Update the hardware address list and promisc/allmulti for the new and -* old active slaves (if any). Modes that are !USES_PRIMARY keep all -* slaves up date at all times; only the USES_PRIMARY modes need to call +* old active slaves (if any). Modes that are not using primary keep all +* slaves up date at all times; only the modes that use primary need to call * this function to swap these settings during a failover. */ static void bond_hw_addr_swap(struct bonding *bond, struct slave *new_active,
@@ -801,7 +801,7 @@ void bond_change_active_slave(struct bonding *bond, struct slave *new_active) new_active->last_link_up = jiffies;if (new_active->link ==BOND_LINK_BACK ) { -if (USES_PRIMARY (bond->params.mode)) { +if (bond_uses_primary (bond)) {pr_info ("%s: making interface %s the new active one %d ms earlier\n" , bond->dev->name, new_active->dev->name, (bond->params.updelay - new_active->delay) * bond->params.miimon);
@@ -816,14 +816,14 @@ void bond_change_active_slave(struct bonding *bond, struct slave *new_active)if (bond_is_lb (bond))bond_alb_handle_link_change (bond, new_active,BOND_LINK_UP ); }else { -if (USES_PRIMARY (bond->params.mode)) { +if (bond_uses_primary (bond)) {pr_info ("%s: making interface %s the new active one\n" , bond->dev->name, new_active->dev->name); } } } -if (USES_PRIMARY (bond->params.mode)) +if (bond_uses_primary (bond))bond_hw_addr_swap (bond, new_active, old_active);if (bond_is_lb (bond)) {
@@ -876,7 +876,7 @@ void bond_change_active_slave(struct bonding *bond, struct slave *new_active)* resend only if bond is brought up with the affected * bonding modes and the retransmission is enabled */ if (netif_running (bond->dev) && (bond->params.resend_igmp >0 ) && - ((USES_PRIMARY (bond->params.mode) && new_active) || + ((bond_uses_primary (bond) && new_active) || bond->params.mode ==BOND_MODE_ROUNDROBIN )) { bond->igmp_retrans = bond->params.resend_igmp;queue_delayed_work (bond->wq, &bond->mcast_work,1 );
@@ -1381,10 +1381,10 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) goto err_close; } -/* If the mode USES_PRIMARY, then the following is handled by +/* If the mode uses primary, then the following is handled by * bond_change_active_slave(). */ -if (!USES_PRIMARY (bond->params.mode)) { +if (!bond_uses_primary (bond)) {/* set promiscuity level to new slave */ if (bond_dev->flags &IFF_PROMISC ) { res =dev_set_promiscuity (slave_dev,1 );
@@ -1480,7 +1480,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) new_slave->link ==BOND_LINK_DOWN ?"DOWN" : (new_slave->link == BOND_LINK_UP ? "UP" : "BACK")); -if (USES_PRIMARY (bond->params.mode) && bond->params.primary[0 ]) { +if (bond_uses_primary (bond) && bond->params.primary[0 ]) {/* if there is a primary slave, remember it */ if (strcmp (bond->params.primary, new_slave->dev->name) ==0 ) { bond->primary_slave = new_slave;
@@ -1569,7 +1569,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)bond_compute_features (bond);bond_set_carrier (bond); -if (USES_PRIMARY (bond->params.mode)) { +if (bond_uses_primary (bond)) {block_netpoll_tx ();write_lock_bh (&bond->curr_slave_lock);bond_select_active_slave (bond);
@@ -1593,7 +1593,7 @@ err_unregister:netdev_rx_handler_unregister (slave_dev); err_detach: -if (!USES_PRIMARY (bond->params.mode)) +if (!bond_uses_primary (bond))bond_hw_addr_flush (bond_dev, slave_dev);vlan_vids_del_by_dev (slave_dev, bond_dev);
@@ -1778,10 +1778,10 @@ static int __bond_release_one(struct net_device *bond_dev,/* must do this from outside any spinlocks */ vlan_vids_del_by_dev (slave_dev, bond_dev); -/* If the mode USES_PRIMARY, then this cases was handled above by +/* If the mode uses primary, then this cases was handled above by * bond_change_active_slave(..., NULL) */ -if (!USES_PRIMARY (bond->params.mode)) { +if (!bond_uses_primary (bond)) {/* unset promiscuity level from slave * NOTE: The NETDEV_CHANGEADDR call above may change the value * of the IFF_PROMISC flag in the bond_dev, but we need the
@@ -2915,7 +2915,7 @@ static int bond_slave_netdev_event(unsigned long event,break ;case NETDEV_CHANGENAME :/* we don't care if we don't have primary set */ -if (!USES_PRIMARY (bond->params.mode) || +if (!bond_uses_primary (bond) || !bond->params.primary[0 ])break ;
@@ -3105,7 +3105,7 @@ static int bond_open(struct net_device *bond_dev)if (bond_has_slaves (bond)) {read_lock (&bond->curr_slave_lock);bond_for_each_slave (bond, slave, iter) { -if (USES_PRIMARY (bond->params.mode) +if (bond_uses_primary (bond) && (slave != bond->curr_active_slave)) {bond_set_slave_inactive_flags (slave,BOND_SLAVE_NOTIFY_NOW );
@@ -3343,7 +3343,7 @@ static void bond_set_rx_mode(struct net_device *bond_dev)rcu_read_lock (); -if (USES_PRIMARY (bond->params.mode)) { +if (bond_uses_primary (bond)) { slave =rcu_dereference (bond->curr_active_slave);if (slave) {dev_uc_sync (slave->dev, bond_dev);
@@ -4268,7 +4268,7 @@ static int bond_check_params(struct bond_params *params)pr_debug ("Warning: either miimon or arp_interval and arp_ip_target module parameters must be specified, otherwise bonding will not detect link failures! see bonding.txt for details\n" ); } -if (primary && !USES_PRIMARY (bond_mode)) { +if (primary && !bond_mode_uses_primary (bond_mode)) {/* currently, using a primary only makes sense * in active backup, TLB or ALB modes */
drivers/net/bonding/bond_options.c +1 -1
@@ -693,7 +693,7 @@ int bond_option_mode_set(struct bonding *bond, const struct bond_opt_value *newvstatic struct net_device *__bond_option_active_slave_get (struct bonding *bond,struct slave *slave) { -return USES_PRIMARY (bond->params.mode) && slave ? slave->dev :NULL ; +return bond_uses_primary (bond) && slave ? slave->dev :NULL ; }struct net_device *bond_option_active_slave_get_rcu (struct bonding *bond)
drivers/net/bonding/bond_procfs.c +1 -1
@@ -91,7 +91,7 @@ static void bond_info_show_master(struct seq_file *seq) optval->string, bond->params.xmit_policy); } -if (USES_PRIMARY (bond->params.mode)) { +if (bond_uses_primary (bond)) {seq_printf (seq,"Primary Slave: %s" , (bond->primary_slave) ? bond->primary_slave->dev->name :"None" );
drivers/net/bonding/bonding.h +11 -6
@@ -54,12 +54,6 @@ ((slave)->link == BOND_LINK_UP) && \ bond_is_active_slave(slave)) - -#define USES_PRIMARY (mode) \ - (((mode) == BOND_MODE_ACTIVEBACKUP) || \ - ((mode) == BOND_MODE_TLB) || \ - ((mode) == BOND_MODE_ALB)) -#define IS_IP_TARGET_UNUSABLE_ADDRESS (a) \ ((htonl(INADDR_BROADCAST) == a) || \ ipv4_is_zeronet(a))
@@ -293,6 +287,17 @@ static inline bool bond_mode_uses_arp(int mode) mode !=BOND_MODE_ALB ; } +static inline bool bond_mode_uses_primary (int mode) +{ +return mode ==BOND_MODE_ACTIVEBACKUP || mode ==BOND_MODE_TLB || + mode ==BOND_MODE_ALB ; +} + +static inline bool bond_uses_primary (struct bonding *bond) +{ +return bond_mode_uses_primary (bond->params.mode); +} +static inline void bond_set_active_slave (struct slave *slave) {if (slave->backup) {
Signature · 1 line
1.8.4
PATCH v3 5/9 bonding: create a macro for bond mode and use it
In reply to Veaceslav Falico--- drivers/net/bonding/bond_alb.c | 4 +-- drivers/net/bonding/bond_debugfs.c | 2 +- drivers/net/bonding/bond_main.c | 66 +++++++++++++++++----------------- drivers/net/bonding/bond_netlink.c | 6 ++-- drivers/net/bonding/bond_procfs.c | 12 +++---- drivers/net/bonding/bond_sysfs.c | 14 ++++---- drivers/net/bonding/bond_sysfs_slave.c | 2 +- drivers/net/bonding/bonding.h | 12 ++++--- 8 files changed, 60 insertions(+), 58 deletions(-)
drivers/net/bonding/bond_alb.c +2 -2
@@ -1057,7 +1057,7 @@ static int alb_set_slave_mac_addr(struct slave *slave, u8 addr[])struct net_device *dev = slave->dev;struct sockaddr s_addr; -if (slave->bond->params.mode ==BOND_MODE_TLB ) { +if (BOND_MODE (slave->bond) ==BOND_MODE_TLB ) {memcpy (dev->dev_addr, addr, dev->addr_len);return 0 ; }
@@ -1745,7 +1745,7 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave/* in TLB mode, the slave might flip down/up with the old dev_addr, * and thus filter bond->dev_addr's packets, so force bond's mac */ -if (bond->params.mode ==BOND_MODE_TLB ) { +if (BOND_MODE (bond) ==BOND_MODE_TLB ) {struct sockaddr sa;u8 tmp_addr[ETH_ALEN ];
drivers/net/bonding/bond_debugfs.c +1 -1
@@ -23,7 +23,7 @@ static int bond_debug_rlb_hash_show(struct seq_file *m, void *v)struct rlb_client_info *client_info;u32 hash_index; -if (bond->params.mode !=BOND_MODE_ALB ) +if (BOND_MODE (bond) !=BOND_MODE_ALB )return 0 ; seq_printf(m, "SourceIP DestinationIP "
drivers/net/bonding/bond_main.c +33 -33
254 lines not on this page · raw message
drivers/net/bonding/bond_netlink.c +3 -3
@@ -56,7 +56,7 @@ static int bond_fill_slave_info(struct sk_buff *skb,if (nla_put_u16 (skb,IFLA_BOND_SLAVE_QUEUE_ID , slave->queue_id)) goto nla_put_failure; -if (slave->bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (slave->bond) ==BOND_MODE_8023AD ) {const struct aggregator *agg; agg =SLAVE_AD_INFO (slave)->port.aggregator;
@@ -407,7 +407,7 @@ static int bond_fill_info(struct sk_buff *skb,unsigned int packets_per_slave;int i, targets_added; -if (nla_put_u8 (skb,IFLA_BOND_MODE , bond->params.mode)) +if (nla_put_u8 (skb,IFLA_BOND_MODE ,BOND_MODE (bond))) goto nla_put_failure; if (slave_dev &&
@@ -505,7 +505,7 @@ static int bond_fill_info(struct sk_buff *skb, bond->params.ad_select)) goto nla_put_failure; -if (bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (bond) ==BOND_MODE_8023AD ) {struct ad_info info;if (!bond_3ad_get_active_agg_info (bond, &info)) {
drivers/net/bonding/bond_procfs.c +6 -6
@@ -72,9 +72,9 @@ static void bond_info_show_master(struct seq_file *seq) curr =rcu_dereference (bond->curr_active_slave);seq_printf (seq,"Bonding Mode: %s" , -bond_mode_name (bond->params.mode)); +bond_mode_name (BOND_MODE (bond))); -if (bond->params.mode ==BOND_MODE_ACTIVEBACKUP && +if (BOND_MODE (bond) ==BOND_MODE_ACTIVEBACKUP && bond->params.fail_over_mac) { optval =bond_opt_get_val (BOND_OPT_FAIL_OVER_MAC , bond->params.fail_over_mac);
@@ -83,8 +83,8 @@ static void bond_info_show_master(struct seq_file *seq)seq_printf (seq,"\n" ); -if (bond->params.mode ==BOND_MODE_XOR || - bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (bond) ==BOND_MODE_XOR || +BOND_MODE (bond) ==BOND_MODE_8023AD ) { optval =bond_opt_get_val (BOND_OPT_XMIT_HASH , bond->params.xmit_policy); seq_printf(seq, "Transmit Hash Policy: %s (%d)\n",
@@ -134,7 +134,7 @@ static void bond_info_show_master(struct seq_file *seq)seq_printf (seq,"\n" ); } -if (bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (bond) ==BOND_MODE_8023AD ) {struct ad_info ad_info;seq_puts (seq,"\n802.3ad info\n" );
@@ -188,7 +188,7 @@ static void bond_info_show_slave(struct seq_file *seq,seq_printf (seq,"Permanent HW addr: %pM\n" , slave->perm_hwaddr); -if (bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (bond) ==BOND_MODE_8023AD ) {const struct aggregator *agg =SLAVE_AD_INFO (slave)->port.aggregator;
drivers/net/bonding/bond_sysfs.c +7 -7
@@ -214,9 +214,9 @@ static ssize_t bonding_show_mode(struct device *d,struct bonding *bond =to_bond (d);const struct bond_opt_value *val; - val =bond_opt_get_val (BOND_OPT_MODE , bond->params.mode); + val =bond_opt_get_val (BOND_OPT_MODE ,BOND_MODE (bond)); -return sprintf (buf,"%s %d\n" , val->string, bond->params.mode); +return sprintf (buf,"%s %d\n" , val->string,BOND_MODE (bond)); } static DEVICE_ATTR(mode, S_IRUGO | S_IWUSR, bonding_show_mode, bonding_sysfs_store_option);
@@ -505,7 +505,7 @@ static ssize_t bonding_show_ad_aggregator(struct device *d,int count =0 ;struct bonding *bond =to_bond (d); -if (bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (bond) ==BOND_MODE_8023AD ) {struct ad_info ad_info; count =sprintf (buf,"%d\n" , bond_3ad_get_active_agg_info(bond, &ad_info)
@@ -525,7 +525,7 @@ static ssize_t bonding_show_ad_num_ports(struct device *d,int count =0 ;struct bonding *bond =to_bond (d); -if (bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (bond) ==BOND_MODE_8023AD ) {struct ad_info ad_info; count =sprintf (buf,"%d\n" , bond_3ad_get_active_agg_info(bond, &ad_info)
@@ -545,7 +545,7 @@ static ssize_t bonding_show_ad_actor_key(struct device *d,int count =0 ;struct bonding *bond =to_bond (d); -if (bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (bond) ==BOND_MODE_8023AD ) {struct ad_info ad_info; count =sprintf (buf,"%d\n" , bond_3ad_get_active_agg_info(bond, &ad_info)
@@ -565,7 +565,7 @@ static ssize_t bonding_show_ad_partner_key(struct device *d,int count =0 ;struct bonding *bond =to_bond (d); -if (bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (bond) ==BOND_MODE_8023AD ) {struct ad_info ad_info; count =sprintf (buf,"%d\n" , bond_3ad_get_active_agg_info(bond, &ad_info)
@@ -585,7 +585,7 @@ static ssize_t bonding_show_ad_partner_mac(struct device *d,int count =0 ;struct bonding *bond =to_bond (d); -if (bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (bond) ==BOND_MODE_8023AD ) {struct ad_info ad_info;if (!bond_3ad_get_active_agg_info (bond, &ad_info)) count =sprintf (buf,"%pM\n" , ad_info.partner_system);
drivers/net/bonding/bond_sysfs_slave.c +1 -1
@@ -69,7 +69,7 @@ static ssize_t ad_aggregator_id_show(struct slave *slave, char *buf) {const struct aggregator *agg; -if (slave->bond->params.mode ==BOND_MODE_8023AD ) { +if (BOND_MODE (slave->bond) ==BOND_MODE_8023AD ) { agg =SLAVE_AD_INFO (slave)->port.aggregator;if (agg) return sprintf(buf, "%d\n",
drivers/net/bonding/bonding.h +7 -5
@@ -70,6 +70,8 @@set_fs (fs); \ res; }) +#define BOND_MODE (bond) ((bond)->params.mode) +/* slave list primitives */ #define bond_slave_list (bond) (&(bond)->dev->adj_list.lower)
@@ -271,14 +273,14 @@ static inline struct bonding *bond_get_bond_by_slave(struct slave *slave)static inline bool bond_should_override_tx_queue (struct bonding *bond) { -return bond->params.mode ==BOND_MODE_ACTIVEBACKUP || - bond->params.mode ==BOND_MODE_ROUNDROBIN ; +return BOND_MODE (bond) ==BOND_MODE_ACTIVEBACKUP || +BOND_MODE (bond) ==BOND_MODE_ROUNDROBIN ; }static inline bool bond_is_lb (const struct bonding *bond) { -return bond->params.mode ==BOND_MODE_TLB || - bond->params.mode ==BOND_MODE_ALB ; +return BOND_MODE (bond) ==BOND_MODE_TLB || +BOND_MODE (bond) ==BOND_MODE_ALB ; }static inline bool bond_mode_uses_arp (int mode)
@@ -295,7 +297,7 @@ static inline bool bond_mode_uses_primary(int mode)static inline bool bond_uses_primary (struct bonding *bond) { -return bond_mode_uses_primary (bond->params.mode); +return bond_mode_uses_primary (BOND_MODE (bond)); }static inline void bond_set_active_slave (struct slave *slave)
Signature · 1 line
1.8.4
PATCH v3 6/9 bonding: make IS_IP_TARGET_UNUSABLE_ADDRESS an inline function
In reply to Veaceslav FalicoAlso, use standard IP primitives to check the address.
--- drivers/net/bonding/bond_main.c | 2 +- drivers/net/bonding/bond_options.c | 4 ++-- drivers/net/bonding/bonding.h | 8 +++++--- 3 files changed, 8 insertions(+), 6 deletions(-)
drivers/net/bonding/bond_main.c +1 -1
@@ -4195,7 +4195,7 @@ static int bond_check_params(struct bond_params *params)catch mistakes */ __be32 ip;if (!in4_pton (arp_ip_target[i],-1 , (u8 *)&ip,-1 ,NULL ) || -IS_IP_TARGET_UNUSABLE_ADDRESS (ip)) { + !bond_is_ip_target_ok (ip)) {pr_warn ("Warning: bad arp_ip_target module parameter (%s), ARP monitoring will not be performed\n" , arp_ip_target[i]); arp_interval =0 ;
drivers/net/bonding/bond_options.c +2 -2
@@ -942,7 +942,7 @@ static int _bond_option_arp_ip_target_add(struct bonding *bond, __be32 target)__be32 *targets = bond->params.arp_targets;int ind; -if (IS_IP_TARGET_UNUSABLE_ADDRESS (target)) { +if (!bond_is_ip_target_ok (target)) {pr_err ("%s: invalid ARP target %pI4 specified for addition\n" , bond->dev->name, &target);return -EINVAL ;
@@ -987,7 +987,7 @@ static int bond_option_arp_ip_target_rem(struct bonding *bond, __be32 target)unsigned long *targets_rx;int ind, i; -if (IS_IP_TARGET_UNUSABLE_ADDRESS (target)) { +if (!bond_is_ip_target_ok (target)) {pr_err ("%s: invalid ARP target %pI4 specified for removal\n" , bond->dev->name, &target);return -EINVAL ;
drivers/net/bonding/bonding.h +5 -3
@@ -54,9 +54,6 @@ ((slave)->link ==BOND_LINK_UP ) && \ bond_is_active_slave(slave)) -#define IS_IP_TARGET_UNUSABLE_ADDRESS (a) \ - ((htonl(INADDR_BROADCAST) == a) || \ - ipv4_is_zeronet(a))/* * Less bad way to call ioctl from within the kernel; this needs to be * done some other way to get the call out of interrupt context.
@@ -406,6 +403,11 @@ static inline int slave_do_arp_validate_only(struct bonding *bond)return bond->params.arp_validate &BOND_ARP_FILTER ; } +static inline int bond_is_ip_target_ok (__be32 addr) +{ +return !ipv4_is_lbcast (addr) && !ipv4_is_zeronet (addr); +} +/* Get the oldest arp which we've received on this slave for bond's * arp_targets. */
Signature · 1 line
1.8.4
PATCH v3 7/9 bonding: convert IS_UP(slave->dev) to inline function
In reply to Veaceslav FalicoAlso, remove the IFF_UP verification cause we can't be netif_running() with being also IFF_UP.
--- drivers/net/bonding/bond_3ad.c | 2 +- drivers/net/bonding/bond_main.c | 16 ++++++++-------- drivers/net/bonding/bond_options.c | 2 +- drivers/net/bonding/bonding.h | 12 ++++++------ 4 files changed, 16 insertions(+), 16 deletions(-)
drivers/net/bonding/bond_3ad.c +1 -1
@@ -192,7 +192,7 @@ static inline void __enable_port(struct port *port) {struct slave *slave = port->slave; -if ((slave->link ==BOND_LINK_UP ) &&IS_UP (slave->dev)) +if ((slave->link ==BOND_LINK_UP ) &&bond_slave_is_up (slave))bond_set_slave_active_flags (slave,BOND_SLAVE_NOTIFY_LATER ); }
drivers/net/bonding/bond_main.c +8 -8
@@ -747,7 +747,7 @@ static struct slave *bond_find_best_slave(struct bonding *bond)bond_for_each_slave (bond, slave, iter) {if (slave->link ==BOND_LINK_UP )return slave; -if (slave->link ==BOND_LINK_BACK &&IS_UP (slave->dev) && +if (slave->link ==BOND_LINK_BACK &&bond_slave_is_up (slave) && slave->delay < mintime) { mintime = slave->delay; bestslave = slave;
@@ -958,7 +958,7 @@ static void bond_netpoll_cleanup(struct net_device *bond_dev)struct slave *slave;bond_for_each_slave (bond, slave, iter) -if (IS_UP (slave->dev)) +if (bond_slave_is_up (slave))slave_disable_netpoll (slave); }
@@ -2490,7 +2490,7 @@ static void bond_loadbalance_arp_mon(struct work_struct *work)* do - all replies will be rx'ed on same link causing slaves * to be unstable during low/no traffic periods */ -if (IS_UP (slave->dev)) +if (bond_slave_is_up (slave))bond_arp_send_all (bond, slave); }
@@ -2712,10 +2712,10 @@ static bool bond_ab_arp_probe(struct bonding *bond)bond_set_slave_inactive_flags (curr_arp_slave,BOND_SLAVE_NOTIFY_LATER );bond_for_each_slave_rcu (bond, slave, iter) { -if (!found && !before &&IS_UP (slave->dev)) +if (!found && !before &&bond_slave_is_up (slave)) before = slave; -if (found && !new_slave &&IS_UP (slave->dev)) +if (found && !new_slave &&bond_slave_is_up (slave)) new_slave = slave;/* if the link state is up at this point, we * mark it down - this can happen if we have
@@ -2724,7 +2724,7 @@ static bool bond_ab_arp_probe(struct bonding *bond)* one the current slave so it is still marked * up when it is actually down */ -if (!IS_UP (slave->dev) && slave->link ==BOND_LINK_UP ) { +if (!bond_slave_is_up (slave) && slave->link ==BOND_LINK_UP ) { slave->link =BOND_LINK_DOWN ;if (slave->link_failure_count <UINT_MAX ) slave->link_failure_count++;
@@ -3710,7 +3710,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev)bond_for_each_slave_rcu (bond, slave, iter) {if (bond_is_last_slave (bond, slave))break ; -if (IS_UP (slave->dev) && slave->link ==BOND_LINK_UP ) { +if (bond_slave_is_up (slave) && slave->link ==BOND_LINK_UP ) {struct sk_buff *skb2 =skb_clone (skb,GFP_ATOMIC );if (!skb2) {
@@ -3722,7 +3722,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev)bond_dev_queue_xmit (bond, skb2, slave->dev); } } -if (slave &&IS_UP (slave->dev) && slave->link ==BOND_LINK_UP ) +if (slave &&bond_slave_is_up (slave) && slave->link ==BOND_LINK_UP )bond_dev_queue_xmit (bond, skb, slave->dev);else dev_kfree_skb_any (skb);
drivers/net/bonding/bond_options.c +1 -1
@@ -758,7 +758,7 @@ static int bond_option_active_slave_set(struct bonding *bond, bond->dev->name, new_active->dev->name); }else {if (old_active && (new_active->link ==BOND_LINK_UP ) && -IS_UP (new_active->dev)) { +bond_slave_is_up (new_active)) {pr_info ("%s: Setting %s as active slave\n" , bond->dev->name, new_active->dev->name);bond_change_active_slave (bond, new_active);
drivers/net/bonding/bonding.h +6 -6
@@ -40,11 +40,6 @@#define BOND_DEFAULT_MIIMON 100 -#define IS_UP (dev) \ - ((((dev)->flags & IFF_UP) == IFF_UP) && \ - netif_running(dev) && \ - netif_carrier_ok(dev)) -/* * Checks whether slave is ready for transmit. */
@@ -297,6 +292,11 @@ static inline bool bond_uses_primary(struct bonding *bond)return bond_mode_uses_primary (BOND_MODE (bond)); } +static inline bool bond_slave_is_up (struct slave *slave) +{ +return netif_running (slave->dev) &&netif_carrier_ok (slave->dev); +} +static inline void bond_set_active_slave (struct slave *slave) {if (slave->backup) {
@@ -487,7 +487,7 @@ static inline __be32 bond_confirm_addr(struct net_device *dev, __be32 dst, __be3static inline bool slave_can_tx (struct slave *slave) { -if (IS_UP (slave->dev) && slave->link ==BOND_LINK_UP && +if (bond_slave_is_up (slave) && slave->link ==BOND_LINK_UP &&bond_is_active_slave (slave))return true;else
Signature · 1 line
1.8.4
PATCH v3 8/9 bonding: rename {,bond_}slave_can_tx and clean it up
In reply to Veaceslav Falico--- drivers/net/bonding/bond_main.c | 8 ++++---- drivers/net/bonding/bonding.h | 15 ++++++--------- 2 files changed, 10 insertions(+), 13 deletions(-)
drivers/net/bonding/bond_main.c +4 -4
@@ -3588,7 +3588,7 @@ static void bond_xmit_slave_id(struct bonding *bond, struct sk_buff *skb, int sl/* Here we start from the slave with slave_id */ bond_for_each_slave_rcu (bond, slave, iter) {if (--i <0 ) { -if (slave_can_tx (slave)) { +if (bond_slave_can_tx (slave)) {bond_dev_queue_xmit (bond, skb, slave->dev);return ; }
@@ -3600,7 +3600,7 @@ static void bond_xmit_slave_id(struct bonding *bond, struct sk_buff *skb, int slbond_for_each_slave_rcu (bond, slave, iter) {if (--i <0 )break ; -if (slave_can_tx (slave)) { +if (bond_slave_can_tx (slave)) {bond_dev_queue_xmit (bond, skb, slave->dev);return ; }
@@ -3657,7 +3657,7 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev*/ if (iph->protocol ==IPPROTO_IGMP && skb->protocol ==htons (ETH_P_IP )) { slave =rcu_dereference (bond->curr_active_slave); -if (slave &&slave_can_tx (slave)) +if (slave &&bond_slave_can_tx (slave))bond_dev_queue_xmit (bond, skb, slave->dev);else bond_xmit_slave_id (bond, skb,0 );
@@ -3747,7 +3747,7 @@ static inline int bond_slave_override(struct bonding *bond,/* Find out if any slaves have the same mapping as this skb. */ bond_for_each_slave_rcu (bond, slave, iter) {if (slave->queue_id == skb->queue_mapping) { -if (slave_can_tx (slave)) { +if (bond_slave_can_tx (slave)) {bond_dev_queue_xmit (bond, skb, slave->dev);return 0 ; }
drivers/net/bonding/bonding.h +6 -9
@@ -367,6 +367,12 @@ static inline bool bond_is_active_slave(struct slave *slave)return !bond_slave_state (slave); } +static inline bool bond_slave_can_tx (struct slave *slave) +{ +return bond_slave_is_up (slave) && slave->link ==BOND_LINK_UP && +bond_is_active_slave (slave); +} +#define BOND_PRI_RESELECT_ALWAYS 0#define BOND_PRI_RESELECT_BETTER 1#define BOND_PRI_RESELECT_FAILURE 2
@@ -485,15 +491,6 @@ static inline __be32 bond_confirm_addr(struct net_device *dev, __be32 dst, __be3return addr; } -static inline bool slave_can_tx (struct slave *slave) -{ -if (bond_slave_is_up (slave) && slave->link ==BOND_LINK_UP && -bond_is_active_slave (slave)) -return true; -else -return false; -} -struct bond_net {struct net *net;/* Associated network namespace */ struct list_head dev_list;
Signature · 1 line
1.8.4
PATCH v3 9/9 bonding: replace SLAVE_IS_OK() with bond_slave_can_tx()
In reply to Veaceslav FalicoThey're verifying the same thing (except of IFF_UP, which is implied for netif_running(), which is also a prerequisite).
--- drivers/net/bonding/bond_3ad.c | 4 ++-- drivers/net/bonding/bond_alb.c | 14 +++++++------- drivers/net/bonding/bond_main.c | 4 ++-- drivers/net/bonding/bonding.h | 9 --------- 4 files changed, 11 insertions(+), 20 deletions(-)
drivers/net/bonding/bond_3ad.c +2 -2
@@ -2449,13 +2449,13 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)continue ;if (slave_agg_no >=0 ) { -if (!first_ok_slave &&SLAVE_IS_OK (slave)) +if (!first_ok_slave &&bond_slave_can_tx (slave)) first_ok_slave = slave; slave_agg_no--;continue ; } -if (SLAVE_IS_OK (slave)) { +if (bond_slave_can_tx (slave)) {bond_dev_queue_xmit (bond, skb, slave->dev); goto out; }
drivers/net/bonding/bond_alb.c +7 -7
@@ -228,7 +228,7 @@ static struct slave *tlb_get_least_loaded_slave(struct bonding *bond)/* Find the slave with the largest gap */ bond_for_each_slave_rcu (bond, slave, iter) { -if (SLAVE_IS_OK (slave)) { +if (bond_slave_can_tx (slave)) {long long gap =compute_gap (slave);if (max_gap < gap) {
@@ -383,7 +383,7 @@ static struct slave *rlb_next_rx_slave(struct bonding *bond)bool found = false;bond_for_each_slave (bond, slave, iter) { -if (!SLAVE_IS_OK (slave)) +if (!bond_slave_can_tx (slave))continue ;if (!found) {if (!before || before->speed < slave->speed)
@@ -416,7 +416,7 @@ static struct slave *__rlb_next_rx_slave(struct bonding *bond)bool found = false;bond_for_each_slave_rcu (bond, slave, iter) { -if (!SLAVE_IS_OK (slave)) +if (!bond_slave_can_tx (slave))continue ;if (!found) {if (!before || before->speed < slave->speed)
@@ -1100,13 +1100,13 @@ static void alb_swap_mac_addr(struct slave *slave1, struct slave *slave2)static void alb_fasten_mac_swap (struct bonding *bond,struct slave *slave1,struct slave *slave2) { -int slaves_state_differ = (SLAVE_IS_OK (slave1) !=SLAVE_IS_OK (slave2)); +int slaves_state_differ = (bond_slave_can_tx (slave1) !=bond_slave_can_tx (slave2));struct slave *disabled_slave =NULL ;ASSERT_RTNL ();/* fasten the change in the switch */ -if (SLAVE_IS_OK (slave1)) { +if (bond_slave_can_tx (slave1)) {alb_send_learning_packets (slave1, slave1->dev->dev_addr);if (bond->alb_info.rlb_enabled) {/* inform the clients that the mac address
@@ -1118,7 +1118,7 @@ static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1, disabled_slave = slave1; } -if (SLAVE_IS_OK (slave2)) { +if (bond_slave_can_tx (slave2)) {alb_send_learning_packets (slave2, slave2->dev->dev_addr);if (bond->alb_info.rlb_enabled) {/* inform the clients that the mac address
@@ -1360,7 +1360,7 @@ static int bond_do_alb_xmit(struct sk_buff *skb, struct bonding *bond, bond_info->unbalanced_load += skb->len; } -if (tx_slave &&SLAVE_IS_OK (tx_slave)) { +if (tx_slave &&bond_slave_can_tx (tx_slave)) {if (tx_slave !=rcu_dereference (bond->curr_active_slave)) {ether_addr_copy (eth_data->h_source, tx_slave->dev->dev_addr);
drivers/net/bonding/bond_main.c +2 -2
@@ -3850,14 +3850,14 @@ static int bond_ethtool_get_settings(struct net_device *bond_dev, ecmd->duplex =DUPLEX_UNKNOWN ; ecmd->port =PORT_OTHER ; -/* Since SLAVE_IS_OK returns false for all inactive or down slaves, we +/* Since bond_slave_can_tx returns false for all inactive or down slaves, we * do not need to check mode. Though link speed might not represent * the true receive or transmit bandwidth (not all modes are symmetric) * this is an accurate maximum. */ read_lock (&bond->lock);bond_for_each_slave (bond, slave, iter) { -if (SLAVE_IS_OK (slave)) { +if (bond_slave_can_tx (slave)) {if (slave->speed !=SPEED_UNKNOWN ) speed += slave->speed; if (ecmd->duplex == DUPLEX_UNKNOWN &&
drivers/net/bonding/bonding.h +0 -9
@@ -41,15 +41,6 @@#define BOND_DEFAULT_MIIMON 100/* -* Checks whether slave is ready for transmit. -*/ -#define SLAVE_IS_OK (slave) \ - (((slave)->dev->flags & IFF_UP) && \ - netif_running((slave)->dev) && \ - ((slave)->link == BOND_LINK_UP) && \ - bond_is_active_slave(slave)) - -/* * Less bad way to call ioctl from within the kernel; this needs to be * done some other way to get the call out of interrupt context. * Needs "ioctl" variable to be supplied by calling context.
Signature · 1 line
1.8.4
David Miller
maintainerFrom: Veaceslav Falico <[email protected]>
Date: Thu, 15 May 2014 21:39:50 +0200
Quoted 11 lines
Trivial patchset that converts most of the bonding's macros into inline functions. It introduces only one macro,
BOND_MODE(), which is justbond->params.mode, better to write/understand/remember.The only real change is the removal of
IFF_UPverification, which always came in pair with &&netif_running(), and is though useless, as it's alwaysIFF_UPwhenLINK_STATE_RUNNING.
v2->v3: fix 3/9 to actually invertbond_mode_uses_arp()and add
bond_uses_arp()alongsidebond_mode_uses_arp()v1->v2: use inlined functions instead of macros.
Series applied, thank you.