]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/bonding/bond_main.c
net: rename bond_queue_mapping to slave_dev_queue_mapping
[karo-tx-linux.git] / drivers / net / bonding / bond_main.c
index f5a40b925f5e4969d8594752d928771e64cb1a6e..6fae5f3ec7f6d646e4efc79aac1a0449ca5bde21 100644 (file)
@@ -395,8 +395,8 @@ int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb,
        skb->dev = slave_dev;
 
        BUILD_BUG_ON(sizeof(skb->queue_mapping) !=
-                    sizeof(qdisc_skb_cb(skb)->bond_queue_mapping));
-       skb->queue_mapping = qdisc_skb_cb(skb)->bond_queue_mapping;
+                    sizeof(qdisc_skb_cb(skb)->slave_dev_queue_mapping));
+       skb->queue_mapping = qdisc_skb_cb(skb)->slave_dev_queue_mapping;
 
        if (unlikely(netpoll_tx_running(slave_dev)))
                bond_netpoll_send_skb(bond_get_slave_by_dev(bond, slave_dev), skb);
@@ -1240,9 +1240,7 @@ static inline int slave_enable_netpoll(struct slave *slave)
        if (!np)
                goto out;
 
-       np->dev = slave->dev;
-       strlcpy(np->dev_name, slave->dev->name, IFNAMSIZ);
-       err = __netpoll_setup(np);
+       err = __netpoll_setup(np, slave->dev);
        if (err) {
                kfree(np);
                goto out;
@@ -1384,6 +1382,7 @@ static void bond_compute_features(struct bonding *bond)
        netdev_features_t vlan_features = BOND_VLAN_FEATURES;
        unsigned short max_hard_header_len = ETH_HLEN;
        int i;
+       unsigned int flags, dst_release_flag = IFF_XMIT_DST_RELEASE;
 
        read_lock(&bond->lock);
 
@@ -1394,6 +1393,7 @@ static void bond_compute_features(struct bonding *bond)
                vlan_features = netdev_increment_features(vlan_features,
                        slave->dev->vlan_features, BOND_VLAN_FEATURES);
 
+               dst_release_flag &= slave->dev->priv_flags;
                if (slave->dev->hard_header_len > max_hard_header_len)
                        max_hard_header_len = slave->dev->hard_header_len;
        }
@@ -1402,6 +1402,9 @@ done:
        bond_dev->vlan_features = vlan_features;
        bond_dev->hard_header_len = max_hard_header_len;
 
+       flags = bond_dev->priv_flags & ~IFF_XMIT_DST_RELEASE;
+       bond_dev->priv_flags = flags | dst_release_flag;
+
        read_unlock(&bond->lock);
 
        netdev_change_features(bond_dev);
@@ -3230,6 +3233,12 @@ static int bond_master_netdev_event(unsigned long event,
        switch (event) {
        case NETDEV_CHANGENAME:
                return bond_event_changename(event_bond);
+       case NETDEV_UNREGISTER:
+               bond_remove_proc_entry(event_bond);
+               break;
+       case NETDEV_REGISTER:
+               bond_create_proc_entry(event_bond);
+               break;
        default:
                break;
        }
@@ -4175,7 +4184,7 @@ static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb)
        /*
         * Save the original txq to restore before passing to the driver
         */
-       qdisc_skb_cb(skb)->bond_queue_mapping = skb->queue_mapping;
+       qdisc_skb_cb(skb)->slave_dev_queue_mapping = skb->queue_mapping;
 
        if (unlikely(txq >= dev->real_num_tx_queues)) {
                do {
@@ -4414,8 +4423,6 @@ static void bond_uninit(struct net_device *bond_dev)
 
        bond_work_cancel_all(bond);
 
-       bond_remove_proc_entry(bond);
-
        bond_debug_unregister(bond);
 
        __hw_addr_flush(&bond->mc_list);
@@ -4817,7 +4824,6 @@ static int bond_init(struct net_device *bond_dev)
 
        bond_set_lockdep_class(bond_dev);
 
-       bond_create_proc_entry(bond);
        list_add_tail(&bond->bond_list, &bn->dev_list);
 
        bond_prepare_sysfs_group(bond);
@@ -4839,17 +4845,19 @@ static int bond_validate(struct nlattr *tb[], struct nlattr *data[])
        return 0;
 }
 
-static int bond_get_tx_queues(struct net *net, struct nlattr *tb[])
+static unsigned int bond_get_num_tx_queues(void)
 {
        return tx_queues;
 }
 
 static struct rtnl_link_ops bond_link_ops __read_mostly = {
-       .kind           = "bond",
-       .priv_size      = sizeof(struct bonding),
-       .setup          = bond_setup,
-       .validate       = bond_validate,
-       .get_tx_queues  = bond_get_tx_queues,
+       .kind                   = "bond",
+       .priv_size              = sizeof(struct bonding),
+       .setup                  = bond_setup,
+       .validate               = bond_validate,
+       .get_num_tx_queues      = bond_get_num_tx_queues,
+       .get_num_rx_queues      = bond_get_num_tx_queues, /* Use the same number
+                                                            as for TX queues */
 };
 
 /* Create a new bond based on the specified name and bonding parameters.