Commit e30bc066 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

bonding: wrap slave state work

transfers slave->state into slave->backup (that it's going to transfer
into bitfield. Introduce wrapper inlines to do the work with it.
Signed-off-by: default avatarJiri Pirko <jpirko@redhat.com>
Reviewed-by: default avatarNicolas de Pesloüan <nicolas.2p.debian@free.fr>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0bd80dad
...@@ -246,7 +246,7 @@ static inline void __enable_port(struct port *port) ...@@ -246,7 +246,7 @@ static inline void __enable_port(struct port *port)
*/ */
static inline int __port_is_enabled(struct port *port) static inline int __port_is_enabled(struct port *port)
{ {
return port->slave->state == BOND_STATE_ACTIVE; return bond_is_active_slave(port->slave);
} }
/** /**
......
...@@ -1863,7 +1863,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) ...@@ -1863,7 +1863,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
break; break;
case BOND_MODE_TLB: case BOND_MODE_TLB:
case BOND_MODE_ALB: case BOND_MODE_ALB:
new_slave->state = BOND_STATE_ACTIVE; bond_set_active_slave(new_slave);
bond_set_slave_inactive_flags(new_slave); bond_set_slave_inactive_flags(new_slave);
bond_select_active_slave(bond); bond_select_active_slave(bond);
break; break;
...@@ -1871,7 +1871,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) ...@@ -1871,7 +1871,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
pr_debug("This slave is always active in trunk mode\n"); pr_debug("This slave is always active in trunk mode\n");
/* always active in trunk mode */ /* always active in trunk mode */
new_slave->state = BOND_STATE_ACTIVE; bond_set_active_slave(new_slave);
/* In trunking mode there is little meaning to curr_active_slave /* In trunking mode there is little meaning to curr_active_slave
* anyway (it holds no special properties of the bond device), * anyway (it holds no special properties of the bond device),
...@@ -1909,7 +1909,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) ...@@ -1909,7 +1909,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
pr_info("%s: enslaving %s as a%s interface with a%s link.\n", pr_info("%s: enslaving %s as a%s interface with a%s link.\n",
bond_dev->name, slave_dev->name, bond_dev->name, slave_dev->name,
new_slave->state == BOND_STATE_ACTIVE ? "n active" : " backup", bond_is_active_slave(new_slave) ? "n active" : " backup",
new_slave->link != BOND_LINK_DOWN ? "n up" : " down"); new_slave->link != BOND_LINK_DOWN ? "n up" : " down");
/* enslave is successful */ /* enslave is successful */
...@@ -2007,7 +2007,7 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev) ...@@ -2007,7 +2007,7 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
pr_info("%s: releasing %s interface %s\n", pr_info("%s: releasing %s interface %s\n",
bond_dev->name, bond_dev->name,
(slave->state == BOND_STATE_ACTIVE) ? "active" : "backup", bond_is_active_slave(slave) ? "active" : "backup",
slave_dev->name); slave_dev->name);
oldcurrent = bond->curr_active_slave; oldcurrent = bond->curr_active_slave;
...@@ -2348,7 +2348,7 @@ static int bond_slave_info_query(struct net_device *bond_dev, struct ifslave *in ...@@ -2348,7 +2348,7 @@ static int bond_slave_info_query(struct net_device *bond_dev, struct ifslave *in
res = 0; res = 0;
strcpy(info->slave_name, slave->dev->name); strcpy(info->slave_name, slave->dev->name);
info->link = slave->link; info->link = slave->link;
info->state = slave->state; info->state = bond_slave_state(slave);
info->link_failure_count = slave->link_failure_count; info->link_failure_count = slave->link_failure_count;
break; break;
} }
...@@ -2387,7 +2387,7 @@ static int bond_miimon_inspect(struct bonding *bond) ...@@ -2387,7 +2387,7 @@ static int bond_miimon_inspect(struct bonding *bond)
bond->dev->name, bond->dev->name,
(bond->params.mode == (bond->params.mode ==
BOND_MODE_ACTIVEBACKUP) ? BOND_MODE_ACTIVEBACKUP) ?
((slave->state == BOND_STATE_ACTIVE) ? (bond_is_active_slave(slave) ?
"active " : "backup ") : "", "active " : "backup ") : "",
slave->dev->name, slave->dev->name,
bond->params.downdelay * bond->params.miimon); bond->params.downdelay * bond->params.miimon);
...@@ -2478,13 +2478,13 @@ static void bond_miimon_commit(struct bonding *bond) ...@@ -2478,13 +2478,13 @@ static void bond_miimon_commit(struct bonding *bond)
if (bond->params.mode == BOND_MODE_8023AD) { if (bond->params.mode == BOND_MODE_8023AD) {
/* prevent it from being the active one */ /* prevent it from being the active one */
slave->state = BOND_STATE_BACKUP; bond_set_backup_slave(slave);
} else if (bond->params.mode != BOND_MODE_ACTIVEBACKUP) { } else if (bond->params.mode != BOND_MODE_ACTIVEBACKUP) {
/* make it immediately active */ /* make it immediately active */
slave->state = BOND_STATE_ACTIVE; bond_set_active_slave(slave);
} else if (slave != bond->primary_slave) { } else if (slave != bond->primary_slave) {
/* prevent it from being the active one */ /* prevent it from being the active one */
slave->state = BOND_STATE_BACKUP; bond_set_backup_slave(slave);
} }
bond_update_speed_duplex(slave); bond_update_speed_duplex(slave);
...@@ -2858,7 +2858,7 @@ static int bond_arp_rcv(struct sk_buff *skb, struct net_device *dev, struct pack ...@@ -2858,7 +2858,7 @@ static int bond_arp_rcv(struct sk_buff *skb, struct net_device *dev, struct pack
memcpy(&tip, arp_ptr, 4); memcpy(&tip, arp_ptr, 4);
pr_debug("bond_arp_rcv: %s %s/%d av %d sv %d sip %pI4 tip %pI4\n", pr_debug("bond_arp_rcv: %s %s/%d av %d sv %d sip %pI4 tip %pI4\n",
bond->dev->name, slave->dev->name, slave->state, bond->dev->name, slave->dev->name, bond_slave_state(slave),
bond->params.arp_validate, slave_do_arp_validate(bond, slave), bond->params.arp_validate, slave_do_arp_validate(bond, slave),
&sip, &tip); &sip, &tip);
...@@ -2870,7 +2870,7 @@ static int bond_arp_rcv(struct sk_buff *skb, struct net_device *dev, struct pack ...@@ -2870,7 +2870,7 @@ static int bond_arp_rcv(struct sk_buff *skb, struct net_device *dev, struct pack
* the active, through one switch, the router, then the other * the active, through one switch, the router, then the other
* switch before reaching the backup. * switch before reaching the backup.
*/ */
if (slave->state == BOND_STATE_ACTIVE) if (bond_is_active_slave(slave))
bond_validate_arp(bond, slave, sip, tip); bond_validate_arp(bond, slave, sip, tip);
else else
bond_validate_arp(bond, slave, tip, sip); bond_validate_arp(bond, slave, tip, sip);
...@@ -2932,7 +2932,7 @@ void bond_loadbalance_arp_mon(struct work_struct *work) ...@@ -2932,7 +2932,7 @@ void bond_loadbalance_arp_mon(struct work_struct *work)
slave->dev->last_rx + delta_in_ticks)) { slave->dev->last_rx + delta_in_ticks)) {
slave->link = BOND_LINK_UP; slave->link = BOND_LINK_UP;
slave->state = BOND_STATE_ACTIVE; bond_set_active_slave(slave);
/* primary_slave has no meaning in round-robin /* primary_slave has no meaning in round-robin
* mode. the window of a slave being up and * mode. the window of a slave being up and
...@@ -2965,7 +2965,7 @@ void bond_loadbalance_arp_mon(struct work_struct *work) ...@@ -2965,7 +2965,7 @@ void bond_loadbalance_arp_mon(struct work_struct *work)
slave->dev->last_rx + 2 * delta_in_ticks)) { slave->dev->last_rx + 2 * delta_in_ticks)) {
slave->link = BOND_LINK_DOWN; slave->link = BOND_LINK_DOWN;
slave->state = BOND_STATE_BACKUP; bond_set_backup_slave(slave);
if (slave->link_failure_count < UINT_MAX) if (slave->link_failure_count < UINT_MAX)
slave->link_failure_count++; slave->link_failure_count++;
...@@ -3059,7 +3059,7 @@ static int bond_ab_arp_inspect(struct bonding *bond, int delta_in_ticks) ...@@ -3059,7 +3059,7 @@ static int bond_ab_arp_inspect(struct bonding *bond, int delta_in_ticks)
* gives each slave a chance to tx/rx traffic * gives each slave a chance to tx/rx traffic
* before being taken out * before being taken out
*/ */
if (slave->state == BOND_STATE_BACKUP && if (!bond_is_active_slave(slave) &&
!bond->current_arp_slave && !bond->current_arp_slave &&
!time_in_range(jiffies, !time_in_range(jiffies,
slave_last_rx(bond, slave) - delta_in_ticks, slave_last_rx(bond, slave) - delta_in_ticks,
...@@ -3076,7 +3076,7 @@ static int bond_ab_arp_inspect(struct bonding *bond, int delta_in_ticks) ...@@ -3076,7 +3076,7 @@ static int bond_ab_arp_inspect(struct bonding *bond, int delta_in_ticks)
* the bond has an IP address) * the bond has an IP address)
*/ */
trans_start = dev_trans_start(slave->dev); trans_start = dev_trans_start(slave->dev);
if ((slave->state == BOND_STATE_ACTIVE) && if (bond_is_active_slave(slave) &&
(!time_in_range(jiffies, (!time_in_range(jiffies,
trans_start - delta_in_ticks, trans_start - delta_in_ticks,
trans_start + 2 * delta_in_ticks) || trans_start + 2 * delta_in_ticks) ||
...@@ -4140,7 +4140,7 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev ...@@ -4140,7 +4140,7 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev
bond_for_each_slave_from(bond, slave, i, start_at) { bond_for_each_slave_from(bond, slave, i, start_at) {
if (IS_UP(slave->dev) && if (IS_UP(slave->dev) &&
(slave->link == BOND_LINK_UP) && (slave->link == BOND_LINK_UP) &&
(slave->state == BOND_STATE_ACTIVE)) { bond_is_active_slave(slave)) {
res = bond_dev_queue_xmit(bond, skb, slave->dev); res = bond_dev_queue_xmit(bond, skb, slave->dev);
break; break;
} }
...@@ -4217,7 +4217,7 @@ static int bond_xmit_xor(struct sk_buff *skb, struct net_device *bond_dev) ...@@ -4217,7 +4217,7 @@ static int bond_xmit_xor(struct sk_buff *skb, struct net_device *bond_dev)
bond_for_each_slave_from(bond, slave, i, start_at) { bond_for_each_slave_from(bond, slave, i, start_at) {
if (IS_UP(slave->dev) && if (IS_UP(slave->dev) &&
(slave->link == BOND_LINK_UP) && (slave->link == BOND_LINK_UP) &&
(slave->state == BOND_STATE_ACTIVE)) { bond_is_active_slave(slave)) {
res = bond_dev_queue_xmit(bond, skb, slave->dev); res = bond_dev_queue_xmit(bond, skb, slave->dev);
break; break;
} }
...@@ -4258,7 +4258,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev) ...@@ -4258,7 +4258,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev)
bond_for_each_slave_from(bond, slave, i, start_at) { bond_for_each_slave_from(bond, slave, i, start_at) {
if (IS_UP(slave->dev) && if (IS_UP(slave->dev) &&
(slave->link == BOND_LINK_UP) && (slave->link == BOND_LINK_UP) &&
(slave->state == BOND_STATE_ACTIVE)) { bond_is_active_slave(slave)) {
if (tx_dev) { if (tx_dev) {
struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
if (!skb2) { if (!skb2) {
......
...@@ -1582,7 +1582,7 @@ static ssize_t bonding_store_slaves_active(struct device *d, ...@@ -1582,7 +1582,7 @@ static ssize_t bonding_store_slaves_active(struct device *d,
} }
bond_for_each_slave(bond, slave, i) { bond_for_each_slave(bond, slave, i) {
if (slave->state == BOND_STATE_BACKUP) { if (!bond_is_active_slave(slave)) {
if (new_value) if (new_value)
slave->dev->priv_flags &= ~IFF_SLAVE_INACTIVE; slave->dev->priv_flags &= ~IFF_SLAVE_INACTIVE;
else else
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
(((slave)->dev->flags & IFF_UP) && \ (((slave)->dev->flags & IFF_UP) && \
netif_running((slave)->dev) && \ netif_running((slave)->dev) && \
((slave)->link == BOND_LINK_UP) && \ ((slave)->link == BOND_LINK_UP) && \
((slave)->state == BOND_STATE_ACTIVE)) bond_is_active_slave(slave))
#define USES_PRIMARY(mode) \ #define USES_PRIMARY(mode) \
...@@ -192,7 +192,8 @@ struct slave { ...@@ -192,7 +192,8 @@ struct slave {
unsigned long last_arp_rx; unsigned long last_arp_rx;
s8 link; /* one of BOND_LINK_XXXX */ s8 link; /* one of BOND_LINK_XXXX */
s8 new_link; s8 new_link;
s8 state; /* one of BOND_STATE_XXXX */ u8 backup; /* indicates backup slave. Value corresponds with
BOND_STATE_ACTIVE and BOND_STATE_BACKUP */
u32 original_mtu; u32 original_mtu;
u32 link_failure_count; u32 link_failure_count;
u8 perm_hwaddr[ETH_ALEN]; u8 perm_hwaddr[ETH_ALEN];
...@@ -304,6 +305,26 @@ static inline bool bond_is_lb(const struct bonding *bond) ...@@ -304,6 +305,26 @@ static inline bool bond_is_lb(const struct bonding *bond)
bond->params.mode == BOND_MODE_ALB); bond->params.mode == BOND_MODE_ALB);
} }
static inline void bond_set_active_slave(struct slave *slave)
{
slave->backup = 0;
}
static inline void bond_set_backup_slave(struct slave *slave)
{
slave->backup = 1;
}
static inline int bond_slave_state(struct slave *slave)
{
return slave->backup;
}
static inline bool bond_is_active_slave(struct slave *slave)
{
return !bond_slave_state(slave);
}
#define BOND_PRI_RESELECT_ALWAYS 0 #define BOND_PRI_RESELECT_ALWAYS 0
#define BOND_PRI_RESELECT_BETTER 1 #define BOND_PRI_RESELECT_BETTER 1
#define BOND_PRI_RESELECT_FAILURE 2 #define BOND_PRI_RESELECT_FAILURE 2
...@@ -321,7 +342,7 @@ static inline bool bond_is_lb(const struct bonding *bond) ...@@ -321,7 +342,7 @@ static inline bool bond_is_lb(const struct bonding *bond)
static inline int slave_do_arp_validate(struct bonding *bond, static inline int slave_do_arp_validate(struct bonding *bond,
struct slave *slave) struct slave *slave)
{ {
return bond->params.arp_validate & (1 << slave->state); return bond->params.arp_validate & (1 << bond_slave_state(slave));
} }
static inline unsigned long slave_last_rx(struct bonding *bond, static inline unsigned long slave_last_rx(struct bonding *bond,
...@@ -353,14 +374,14 @@ static inline void bond_set_slave_inactive_flags(struct slave *slave) ...@@ -353,14 +374,14 @@ static inline void bond_set_slave_inactive_flags(struct slave *slave)
{ {
struct bonding *bond = netdev_priv(slave->dev->master); struct bonding *bond = netdev_priv(slave->dev->master);
if (!bond_is_lb(bond)) if (!bond_is_lb(bond))
slave->state = BOND_STATE_BACKUP; bond_set_backup_slave(slave);
if (!bond->params.all_slaves_active) if (!bond->params.all_slaves_active)
slave->dev->priv_flags |= IFF_SLAVE_INACTIVE; slave->dev->priv_flags |= IFF_SLAVE_INACTIVE;
} }
static inline void bond_set_slave_active_flags(struct slave *slave) static inline void bond_set_slave_active_flags(struct slave *slave)
{ {
slave->state = BOND_STATE_ACTIVE; bond_set_active_slave(slave);
slave->dev->priv_flags &= ~IFF_SLAVE_INACTIVE; slave->dev->priv_flags &= ~IFF_SLAVE_INACTIVE;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment