break;
        case BOND_MODE_TLB:
        case BOND_MODE_ALB:
-               new_slave->state = BOND_STATE_ACTIVE;
+               bond_set_active_slave(new_slave);
                bond_set_slave_inactive_flags(new_slave);
                bond_select_active_slave(bond);
                break;
                pr_debug("This slave is always active in trunk mode\n");
 
                /* 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
                 * anyway (it holds no special properties of the bond device),
 
        pr_info("%s: enslaving %s as a%s interface with a%s link.\n",
                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");
 
        /* enslave is successful */
 
        pr_info("%s: releasing %s interface %s\n",
                bond_dev->name,
-               (slave->state == BOND_STATE_ACTIVE) ? "active" : "backup",
+               bond_is_active_slave(slave) ? "active" : "backup",
                slave_dev->name);
 
        oldcurrent = bond->curr_active_slave;
                        res = 0;
                        strcpy(info->slave_name, slave->dev->name);
                        info->link = slave->link;
-                       info->state = slave->state;
+                       info->state = bond_slave_state(slave);
                        info->link_failure_count = slave->link_failure_count;
                        break;
                }
                                        bond->dev->name,
                                        (bond->params.mode ==
                                         BOND_MODE_ACTIVEBACKUP) ?
-                                       ((slave->state == BOND_STATE_ACTIVE) ?
+                                       (bond_is_active_slave(slave) ?
                                         "active " : "backup ") : "",
                                        slave->dev->name,
                                        bond->params.downdelay * bond->params.miimon);
 
                        if (bond->params.mode == BOND_MODE_8023AD) {
                                /* 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) {
                                /* make it immediately active */
-                               slave->state = BOND_STATE_ACTIVE;
+                               bond_set_active_slave(slave);
                        } else if (slave != bond->primary_slave) {
                                /* prevent it from being the active one */
-                               slave->state = BOND_STATE_BACKUP;
+                               bond_set_backup_slave(slave);
                        }
 
                        bond_update_speed_duplex(slave);
        memcpy(&tip, arp_ptr, 4);
 
        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),
                 &sip, &tip);
 
         * the active, through one switch, the router, then the other
         * switch before reaching the backup.
         */
-       if (slave->state == BOND_STATE_ACTIVE)
+       if (bond_is_active_slave(slave))
                bond_validate_arp(bond, slave, sip, tip);
        else
                bond_validate_arp(bond, slave, tip, sip);
                                slave->dev->last_rx + delta_in_ticks)) {
 
                                slave->link  = BOND_LINK_UP;
-                               slave->state = BOND_STATE_ACTIVE;
+                               bond_set_active_slave(slave);
 
                                /* primary_slave has no meaning in round-robin
                                 * mode. the window of a slave being up and
                                slave->dev->last_rx + 2 * delta_in_ticks)) {
 
                                slave->link  = BOND_LINK_DOWN;
-                               slave->state = BOND_STATE_BACKUP;
+                               bond_set_backup_slave(slave);
 
                                if (slave->link_failure_count < UINT_MAX)
                                        slave->link_failure_count++;
                 * gives each slave a chance to tx/rx traffic
                 * before being taken out
                 */
-               if (slave->state == BOND_STATE_BACKUP &&
+               if (!bond_is_active_slave(slave) &&
                    !bond->current_arp_slave &&
                    !time_in_range(jiffies,
                        slave_last_rx(bond, slave) - delta_in_ticks,
                 *    the bond has an IP address)
                 */
                trans_start = dev_trans_start(slave->dev);
-               if ((slave->state == BOND_STATE_ACTIVE) &&
+               if (bond_is_active_slave(slave) &&
                    (!time_in_range(jiffies,
                        trans_start - delta_in_ticks,
                        trans_start + 2 * delta_in_ticks) ||
        bond_for_each_slave_from(bond, slave, i, start_at) {
                if (IS_UP(slave->dev) &&
                    (slave->link == BOND_LINK_UP) &&
-                   (slave->state == BOND_STATE_ACTIVE)) {
+                   bond_is_active_slave(slave)) {
                        res = bond_dev_queue_xmit(bond, skb, slave->dev);
                        break;
                }
        bond_for_each_slave_from(bond, slave, i, start_at) {
                if (IS_UP(slave->dev) &&
                    (slave->link == BOND_LINK_UP) &&
-                   (slave->state == BOND_STATE_ACTIVE)) {
+                   bond_is_active_slave(slave)) {
                        res = bond_dev_queue_xmit(bond, skb, slave->dev);
                        break;
                }
        bond_for_each_slave_from(bond, slave, i, start_at) {
                if (IS_UP(slave->dev) &&
                    (slave->link == BOND_LINK_UP) &&
-                   (slave->state == BOND_STATE_ACTIVE)) {
+                   bond_is_active_slave(slave)) {
                        if (tx_dev) {
                                struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
                                if (!skb2) {
 
                    (((slave)->dev->flags & IFF_UP)  && \
                     netif_running((slave)->dev)     && \
                     ((slave)->link == BOND_LINK_UP) && \
-                    ((slave)->state == BOND_STATE_ACTIVE))
+                    bond_is_active_slave(slave))
 
 
 #define USES_PRIMARY(mode)                             \
        unsigned long last_arp_rx;
        s8     link;    /* one of BOND_LINK_XXXX */
        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    link_failure_count;
        u8     perm_hwaddr[ETH_ALEN];
                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_BETTER       1
 #define BOND_PRI_RESELECT_FAILURE      2
 static inline int slave_do_arp_validate(struct bonding *bond,
                                        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,
 {
        struct bonding *bond = netdev_priv(slave->dev->master);
        if (!bond_is_lb(bond))
-               slave->state = BOND_STATE_BACKUP;
+               bond_set_backup_slave(slave);
        if (!bond->params.all_slaves_active)
                slave->dev->priv_flags |= IFF_SLAVE_INACTIVE;
 }
 
 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;
 }