diff options
| author | David S. Miller <davem@davemloft.net> | 2018-08-02 13:55:32 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2018-08-02 13:55:32 -0400 |
| commit | 89b1698c93a9dee043154f33d96bca9964e705f1 (patch) | |
| tree | dd9dcb1965baae8edcf0b496aaa6a70609b6fc11 /drivers/net/bonding | |
| parent | ffd7ce3cd9c294f1ff49ec02cdbd1bc7cb913db6 (diff) | |
| parent | e30cb13c5a09ff5f043a6570c32e49b063bea6a1 (diff) | |
Merge ra.kernel.org:/pub/scm/linux/kernel/git/davem/net
The BTF conflicts were simple overlapping changes.
The virtio_net conflict was an overlap of a fix of statistics counter,
happening alongisde a move over to a bonafide statistics structure
rather than counting value on the stack.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding')
| -rw-r--r-- | drivers/net/bonding/bond_main.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 9a2ea3c1f949..a764a83f99da 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
| @@ -1717,6 +1717,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev, | |||
| 1717 | goto err_upper_unlink; | 1717 | goto err_upper_unlink; |
| 1718 | } | 1718 | } |
| 1719 | 1719 | ||
| 1720 | bond->nest_level = dev_get_nest_level(bond_dev) + 1; | ||
| 1721 | |||
| 1720 | /* If the mode uses primary, then the following is handled by | 1722 | /* If the mode uses primary, then the following is handled by |
| 1721 | * bond_change_active_slave(). | 1723 | * bond_change_active_slave(). |
| 1722 | */ | 1724 | */ |
| @@ -1764,7 +1766,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev, | |||
| 1764 | if (bond_mode_can_use_xmit_hash(bond)) | 1766 | if (bond_mode_can_use_xmit_hash(bond)) |
| 1765 | bond_update_slave_arr(bond, NULL); | 1767 | bond_update_slave_arr(bond, NULL); |
| 1766 | 1768 | ||
| 1767 | bond->nest_level = dev_get_nest_level(bond_dev); | ||
| 1768 | 1769 | ||
| 1769 | netdev_info(bond_dev, "Enslaving %s as %s interface with %s link\n", | 1770 | netdev_info(bond_dev, "Enslaving %s as %s interface with %s link\n", |
| 1770 | slave_dev->name, | 1771 | slave_dev->name, |
| @@ -3415,6 +3416,13 @@ static void bond_fold_stats(struct rtnl_link_stats64 *_res, | |||
| 3415 | } | 3416 | } |
| 3416 | } | 3417 | } |
| 3417 | 3418 | ||
| 3419 | static int bond_get_nest_level(struct net_device *bond_dev) | ||
| 3420 | { | ||
| 3421 | struct bonding *bond = netdev_priv(bond_dev); | ||
| 3422 | |||
| 3423 | return bond->nest_level; | ||
| 3424 | } | ||
| 3425 | |||
| 3418 | static void bond_get_stats(struct net_device *bond_dev, | 3426 | static void bond_get_stats(struct net_device *bond_dev, |
| 3419 | struct rtnl_link_stats64 *stats) | 3427 | struct rtnl_link_stats64 *stats) |
| 3420 | { | 3428 | { |
| @@ -3423,7 +3431,7 @@ static void bond_get_stats(struct net_device *bond_dev, | |||
| 3423 | struct list_head *iter; | 3431 | struct list_head *iter; |
| 3424 | struct slave *slave; | 3432 | struct slave *slave; |
| 3425 | 3433 | ||
| 3426 | spin_lock(&bond->stats_lock); | 3434 | spin_lock_nested(&bond->stats_lock, bond_get_nest_level(bond_dev)); |
| 3427 | memcpy(stats, &bond->bond_stats, sizeof(*stats)); | 3435 | memcpy(stats, &bond->bond_stats, sizeof(*stats)); |
| 3428 | 3436 | ||
| 3429 | rcu_read_lock(); | 3437 | rcu_read_lock(); |
| @@ -4228,6 +4236,7 @@ static const struct net_device_ops bond_netdev_ops = { | |||
| 4228 | .ndo_neigh_setup = bond_neigh_setup, | 4236 | .ndo_neigh_setup = bond_neigh_setup, |
| 4229 | .ndo_vlan_rx_add_vid = bond_vlan_rx_add_vid, | 4237 | .ndo_vlan_rx_add_vid = bond_vlan_rx_add_vid, |
| 4230 | .ndo_vlan_rx_kill_vid = bond_vlan_rx_kill_vid, | 4238 | .ndo_vlan_rx_kill_vid = bond_vlan_rx_kill_vid, |
| 4239 | .ndo_get_lock_subclass = bond_get_nest_level, | ||
| 4231 | #ifdef CONFIG_NET_POLL_CONTROLLER | 4240 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| 4232 | .ndo_netpoll_setup = bond_netpoll_setup, | 4241 | .ndo_netpoll_setup = bond_netpoll_setup, |
| 4233 | .ndo_netpoll_cleanup = bond_netpoll_cleanup, | 4242 | .ndo_netpoll_cleanup = bond_netpoll_cleanup, |
| @@ -4726,6 +4735,7 @@ static int bond_init(struct net_device *bond_dev) | |||
| 4726 | if (!bond->wq) | 4735 | if (!bond->wq) |
| 4727 | return -ENOMEM; | 4736 | return -ENOMEM; |
| 4728 | 4737 | ||
| 4738 | bond->nest_level = SINGLE_DEPTH_NESTING; | ||
| 4729 | netdev_lockdep_set_classes(bond_dev); | 4739 | netdev_lockdep_set_classes(bond_dev); |
| 4730 | 4740 | ||
| 4731 | list_add_tail(&bond->bond_list, &bn->dev_list); | 4741 | list_add_tail(&bond->bond_list, &bn->dev_list); |
