net: remove unnecessary variables and callback
This patch removes variables and callback these are related to the nested device structure. devices that can be nested have their own nest_level variable that represents the depth of nested devices. In the previous patch, new {lower/upper}_level variables are added and they replace old private nest_level variable. So, this patch removes all 'nest_level' variables. In order to avoid lockdep warning, ->ndo_get_lock_subclass() was added to get lockdep subclass value, which is actually lower nested depth value. But now, they use the dynamic lockdep key to avoid lockdep warning instead of the subclass. So, this patch removes ->ndo_get_lock_subclass() callback. Signed-off-by: Taehee Yoo <ap420073@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0ce1822c2a
commit
f3b0a18bb6
|
@ -952,7 +952,7 @@ static int alb_upper_dev_walk(struct net_device *upper, void *_data)
|
||||||
struct bond_vlan_tag *tags;
|
struct bond_vlan_tag *tags;
|
||||||
|
|
||||||
if (is_vlan_dev(upper) &&
|
if (is_vlan_dev(upper) &&
|
||||||
bond->nest_level == vlan_get_encap_level(upper) - 1) {
|
bond->dev->lower_level == upper->lower_level - 1) {
|
||||||
if (upper->addr_assign_type == NET_ADDR_STOLEN) {
|
if (upper->addr_assign_type == NET_ADDR_STOLEN) {
|
||||||
alb_send_lp_vid(slave, mac_addr,
|
alb_send_lp_vid(slave, mac_addr,
|
||||||
vlan_dev_vlan_proto(upper),
|
vlan_dev_vlan_proto(upper),
|
||||||
|
|
|
@ -1733,8 +1733,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
|
||||||
goto err_upper_unlink;
|
goto err_upper_unlink;
|
||||||
}
|
}
|
||||||
|
|
||||||
bond->nest_level = dev_get_nest_level(bond_dev) + 1;
|
|
||||||
|
|
||||||
/* 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().
|
* bond_change_active_slave().
|
||||||
*/
|
*/
|
||||||
|
@ -1957,9 +1955,6 @@ static int __bond_release_one(struct net_device *bond_dev,
|
||||||
if (!bond_has_slaves(bond)) {
|
if (!bond_has_slaves(bond)) {
|
||||||
bond_set_carrier(bond);
|
bond_set_carrier(bond);
|
||||||
eth_hw_addr_random(bond_dev);
|
eth_hw_addr_random(bond_dev);
|
||||||
bond->nest_level = SINGLE_DEPTH_NESTING;
|
|
||||||
} else {
|
|
||||||
bond->nest_level = dev_get_nest_level(bond_dev) + 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unblock_netpoll_tx();
|
unblock_netpoll_tx();
|
||||||
|
@ -3444,13 +3439,6 @@ static void bond_fold_stats(struct rtnl_link_stats64 *_res,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bond_get_nest_level(struct net_device *bond_dev)
|
|
||||||
{
|
|
||||||
struct bonding *bond = netdev_priv(bond_dev);
|
|
||||||
|
|
||||||
return bond->nest_level;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void bond_get_stats(struct net_device *bond_dev,
|
static void bond_get_stats(struct net_device *bond_dev,
|
||||||
struct rtnl_link_stats64 *stats)
|
struct rtnl_link_stats64 *stats)
|
||||||
{
|
{
|
||||||
|
@ -4270,7 +4258,6 @@ static const struct net_device_ops bond_netdev_ops = {
|
||||||
.ndo_neigh_setup = bond_neigh_setup,
|
.ndo_neigh_setup = bond_neigh_setup,
|
||||||
.ndo_vlan_rx_add_vid = bond_vlan_rx_add_vid,
|
.ndo_vlan_rx_add_vid = bond_vlan_rx_add_vid,
|
||||||
.ndo_vlan_rx_kill_vid = bond_vlan_rx_kill_vid,
|
.ndo_vlan_rx_kill_vid = bond_vlan_rx_kill_vid,
|
||||||
.ndo_get_lock_subclass = bond_get_nest_level,
|
|
||||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||||
.ndo_netpoll_setup = bond_netpoll_setup,
|
.ndo_netpoll_setup = bond_netpoll_setup,
|
||||||
.ndo_netpoll_cleanup = bond_netpoll_cleanup,
|
.ndo_netpoll_cleanup = bond_netpoll_cleanup,
|
||||||
|
@ -4769,8 +4756,6 @@ static int bond_init(struct net_device *bond_dev)
|
||||||
if (!bond->wq)
|
if (!bond->wq)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
bond->nest_level = SINGLE_DEPTH_NESTING;
|
|
||||||
|
|
||||||
spin_lock_init(&bond->mode_lock);
|
spin_lock_init(&bond->mode_lock);
|
||||||
spin_lock_init(&bond->stats_lock);
|
spin_lock_init(&bond->stats_lock);
|
||||||
lockdep_register_key(&bond->stats_lock_key);
|
lockdep_register_key(&bond->stats_lock_key);
|
||||||
|
|
|
@ -3160,7 +3160,7 @@ static int add_vlan_pop_action(struct mlx5e_priv *priv,
|
||||||
struct mlx5_esw_flow_attr *attr,
|
struct mlx5_esw_flow_attr *attr,
|
||||||
u32 *action)
|
u32 *action)
|
||||||
{
|
{
|
||||||
int nest_level = vlan_get_encap_level(attr->parse_attr->filter_dev);
|
int nest_level = attr->parse_attr->filter_dev->lower_level;
|
||||||
struct flow_action_entry vlan_act = {
|
struct flow_action_entry vlan_act = {
|
||||||
.id = FLOW_ACTION_VLAN_POP,
|
.id = FLOW_ACTION_VLAN_POP,
|
||||||
};
|
};
|
||||||
|
|
|
@ -267,7 +267,6 @@ struct macsec_dev {
|
||||||
struct pcpu_secy_stats __percpu *stats;
|
struct pcpu_secy_stats __percpu *stats;
|
||||||
struct list_head secys;
|
struct list_head secys;
|
||||||
struct gro_cells gro_cells;
|
struct gro_cells gro_cells;
|
||||||
unsigned int nest_level;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2957,11 +2956,6 @@ static int macsec_get_iflink(const struct net_device *dev)
|
||||||
return macsec_priv(dev)->real_dev->ifindex;
|
return macsec_priv(dev)->real_dev->ifindex;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int macsec_get_nest_level(struct net_device *dev)
|
|
||||||
{
|
|
||||||
return macsec_priv(dev)->nest_level;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct net_device_ops macsec_netdev_ops = {
|
static const struct net_device_ops macsec_netdev_ops = {
|
||||||
.ndo_init = macsec_dev_init,
|
.ndo_init = macsec_dev_init,
|
||||||
.ndo_uninit = macsec_dev_uninit,
|
.ndo_uninit = macsec_dev_uninit,
|
||||||
|
@ -2975,7 +2969,6 @@ static const struct net_device_ops macsec_netdev_ops = {
|
||||||
.ndo_start_xmit = macsec_start_xmit,
|
.ndo_start_xmit = macsec_start_xmit,
|
||||||
.ndo_get_stats64 = macsec_get_stats64,
|
.ndo_get_stats64 = macsec_get_stats64,
|
||||||
.ndo_get_iflink = macsec_get_iflink,
|
.ndo_get_iflink = macsec_get_iflink,
|
||||||
.ndo_get_lock_subclass = macsec_get_nest_level,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct device_type macsec_type = {
|
static const struct device_type macsec_type = {
|
||||||
|
@ -3258,8 +3251,6 @@ static int macsec_newlink(struct net *net, struct net_device *dev,
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
macsec->nest_level = dev_get_nest_level(real_dev) + 1;
|
|
||||||
|
|
||||||
err = netdev_upper_dev_link(real_dev, dev, extack);
|
err = netdev_upper_dev_link(real_dev, dev, extack);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto unregister;
|
goto unregister;
|
||||||
|
|
|
@ -867,11 +867,6 @@ static int macvlan_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||||
#define MACVLAN_STATE_MASK \
|
#define MACVLAN_STATE_MASK \
|
||||||
((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))
|
((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))
|
||||||
|
|
||||||
static int macvlan_get_nest_level(struct net_device *dev)
|
|
||||||
{
|
|
||||||
return ((struct macvlan_dev *)netdev_priv(dev))->nest_level;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int macvlan_init(struct net_device *dev)
|
static int macvlan_init(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct macvlan_dev *vlan = netdev_priv(dev);
|
struct macvlan_dev *vlan = netdev_priv(dev);
|
||||||
|
@ -1149,7 +1144,6 @@ static const struct net_device_ops macvlan_netdev_ops = {
|
||||||
.ndo_fdb_add = macvlan_fdb_add,
|
.ndo_fdb_add = macvlan_fdb_add,
|
||||||
.ndo_fdb_del = macvlan_fdb_del,
|
.ndo_fdb_del = macvlan_fdb_del,
|
||||||
.ndo_fdb_dump = ndo_dflt_fdb_dump,
|
.ndo_fdb_dump = ndo_dflt_fdb_dump,
|
||||||
.ndo_get_lock_subclass = macvlan_get_nest_level,
|
|
||||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||||
.ndo_poll_controller = macvlan_dev_poll_controller,
|
.ndo_poll_controller = macvlan_dev_poll_controller,
|
||||||
.ndo_netpoll_setup = macvlan_dev_netpoll_setup,
|
.ndo_netpoll_setup = macvlan_dev_netpoll_setup,
|
||||||
|
@ -1433,7 +1427,6 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
|
||||||
vlan->dev = dev;
|
vlan->dev = dev;
|
||||||
vlan->port = port;
|
vlan->port = port;
|
||||||
vlan->set_features = MACVLAN_FEATURES;
|
vlan->set_features = MACVLAN_FEATURES;
|
||||||
vlan->nest_level = dev_get_nest_level(lowerdev) + 1;
|
|
||||||
|
|
||||||
vlan->mode = MACVLAN_MODE_VEPA;
|
vlan->mode = MACVLAN_MODE_VEPA;
|
||||||
if (data && data[IFLA_MACVLAN_MODE])
|
if (data && data[IFLA_MACVLAN_MODE])
|
||||||
|
|
|
@ -29,7 +29,6 @@ struct macvlan_dev {
|
||||||
netdev_features_t set_features;
|
netdev_features_t set_features;
|
||||||
enum macvlan_mode mode;
|
enum macvlan_mode mode;
|
||||||
u16 flags;
|
u16 flags;
|
||||||
int nest_level;
|
|
||||||
unsigned int macaddr_count;
|
unsigned int macaddr_count;
|
||||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||||
struct netpoll *netpoll;
|
struct netpoll *netpoll;
|
||||||
|
|
|
@ -182,7 +182,6 @@ struct vlan_dev_priv {
|
||||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||||
struct netpoll *netpoll;
|
struct netpoll *netpoll;
|
||||||
#endif
|
#endif
|
||||||
unsigned int nest_level;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct vlan_dev_priv *vlan_dev_priv(const struct net_device *dev)
|
static inline struct vlan_dev_priv *vlan_dev_priv(const struct net_device *dev)
|
||||||
|
@ -221,11 +220,6 @@ extern void vlan_vids_del_by_dev(struct net_device *dev,
|
||||||
|
|
||||||
extern bool vlan_uses_dev(const struct net_device *dev);
|
extern bool vlan_uses_dev(const struct net_device *dev);
|
||||||
|
|
||||||
static inline int vlan_get_encap_level(struct net_device *dev)
|
|
||||||
{
|
|
||||||
BUG_ON(!is_vlan_dev(dev));
|
|
||||||
return vlan_dev_priv(dev)->nest_level;
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
static inline struct net_device *
|
static inline struct net_device *
|
||||||
__vlan_find_dev_deep_rcu(struct net_device *real_dev,
|
__vlan_find_dev_deep_rcu(struct net_device *real_dev,
|
||||||
|
@ -295,11 +289,6 @@ static inline bool vlan_uses_dev(const struct net_device *dev)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
static inline int vlan_get_encap_level(struct net_device *dev)
|
|
||||||
{
|
|
||||||
BUG();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1422,7 +1422,6 @@ struct net_device_ops {
|
||||||
void (*ndo_dfwd_del_station)(struct net_device *pdev,
|
void (*ndo_dfwd_del_station)(struct net_device *pdev,
|
||||||
void *priv);
|
void *priv);
|
||||||
|
|
||||||
int (*ndo_get_lock_subclass)(struct net_device *dev);
|
|
||||||
int (*ndo_set_tx_maxrate)(struct net_device *dev,
|
int (*ndo_set_tx_maxrate)(struct net_device *dev,
|
||||||
int queue_index,
|
int queue_index,
|
||||||
u32 maxrate);
|
u32 maxrate);
|
||||||
|
@ -4051,16 +4050,6 @@ static inline void netif_addr_lock(struct net_device *dev)
|
||||||
spin_lock(&dev->addr_list_lock);
|
spin_lock(&dev->addr_list_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void netif_addr_lock_nested(struct net_device *dev)
|
|
||||||
{
|
|
||||||
int subclass = SINGLE_DEPTH_NESTING;
|
|
||||||
|
|
||||||
if (dev->netdev_ops->ndo_get_lock_subclass)
|
|
||||||
subclass = dev->netdev_ops->ndo_get_lock_subclass(dev);
|
|
||||||
|
|
||||||
spin_lock_nested(&dev->addr_list_lock, subclass);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void netif_addr_lock_bh(struct net_device *dev)
|
static inline void netif_addr_lock_bh(struct net_device *dev)
|
||||||
{
|
{
|
||||||
spin_lock_bh(&dev->addr_list_lock);
|
spin_lock_bh(&dev->addr_list_lock);
|
||||||
|
@ -4345,7 +4334,6 @@ void netdev_lower_state_changed(struct net_device *lower_dev,
|
||||||
extern u8 netdev_rss_key[NETDEV_RSS_KEY_LEN] __read_mostly;
|
extern u8 netdev_rss_key[NETDEV_RSS_KEY_LEN] __read_mostly;
|
||||||
void netdev_rss_key_fill(void *buffer, size_t len);
|
void netdev_rss_key_fill(void *buffer, size_t len);
|
||||||
|
|
||||||
int dev_get_nest_level(struct net_device *dev);
|
|
||||||
int skb_checksum_help(struct sk_buff *skb);
|
int skb_checksum_help(struct sk_buff *skb);
|
||||||
int skb_crc32c_csum_help(struct sk_buff *skb);
|
int skb_crc32c_csum_help(struct sk_buff *skb);
|
||||||
int skb_csum_hwoffload_help(struct sk_buff *skb,
|
int skb_csum_hwoffload_help(struct sk_buff *skb,
|
||||||
|
|
|
@ -203,7 +203,6 @@ struct bonding {
|
||||||
struct slave __rcu *primary_slave;
|
struct slave __rcu *primary_slave;
|
||||||
struct bond_up_slave __rcu *slave_arr; /* Array of usable slaves */
|
struct bond_up_slave __rcu *slave_arr; /* Array of usable slaves */
|
||||||
bool force_primary;
|
bool force_primary;
|
||||||
u32 nest_level;
|
|
||||||
s32 slave_cnt; /* never change this value outside the attach/detach wrappers */
|
s32 slave_cnt; /* never change this value outside the attach/detach wrappers */
|
||||||
int (*recv_probe)(const struct sk_buff *, struct bonding *,
|
int (*recv_probe)(const struct sk_buff *, struct bonding *,
|
||||||
struct slave *);
|
struct slave *);
|
||||||
|
|
|
@ -172,7 +172,6 @@ int register_vlan_dev(struct net_device *dev, struct netlink_ext_ack *extack)
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out_uninit_mvrp;
|
goto out_uninit_mvrp;
|
||||||
|
|
||||||
vlan->nest_level = dev_get_nest_level(real_dev) + 1;
|
|
||||||
err = register_netdevice(dev);
|
err = register_netdevice(dev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out_uninit_mvrp;
|
goto out_uninit_mvrp;
|
||||||
|
|
|
@ -489,11 +489,6 @@ static void vlan_dev_set_rx_mode(struct net_device *vlan_dev)
|
||||||
dev_uc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
|
dev_uc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vlan_dev_get_lock_subclass(struct net_device *dev)
|
|
||||||
{
|
|
||||||
return vlan_dev_priv(dev)->nest_level;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct header_ops vlan_header_ops = {
|
static const struct header_ops vlan_header_ops = {
|
||||||
.create = vlan_dev_hard_header,
|
.create = vlan_dev_hard_header,
|
||||||
.parse = eth_header_parse,
|
.parse = eth_header_parse,
|
||||||
|
@ -785,7 +780,6 @@ static const struct net_device_ops vlan_netdev_ops = {
|
||||||
.ndo_netpoll_cleanup = vlan_dev_netpoll_cleanup,
|
.ndo_netpoll_cleanup = vlan_dev_netpoll_cleanup,
|
||||||
#endif
|
#endif
|
||||||
.ndo_fix_features = vlan_dev_fix_features,
|
.ndo_fix_features = vlan_dev_fix_features,
|
||||||
.ndo_get_lock_subclass = vlan_dev_get_lock_subclass,
|
|
||||||
.ndo_get_iflink = vlan_dev_get_iflink,
|
.ndo_get_iflink = vlan_dev_get_iflink,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7615,25 +7615,6 @@ void *netdev_lower_dev_get_private(struct net_device *dev,
|
||||||
EXPORT_SYMBOL(netdev_lower_dev_get_private);
|
EXPORT_SYMBOL(netdev_lower_dev_get_private);
|
||||||
|
|
||||||
|
|
||||||
int dev_get_nest_level(struct net_device *dev)
|
|
||||||
{
|
|
||||||
struct net_device *lower = NULL;
|
|
||||||
struct list_head *iter;
|
|
||||||
int max_nest = -1;
|
|
||||||
int nest;
|
|
||||||
|
|
||||||
ASSERT_RTNL();
|
|
||||||
|
|
||||||
netdev_for_each_lower_dev(dev, lower, iter) {
|
|
||||||
nest = dev_get_nest_level(lower);
|
|
||||||
if (max_nest < nest)
|
|
||||||
max_nest = nest;
|
|
||||||
}
|
|
||||||
|
|
||||||
return max_nest + 1;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(dev_get_nest_level);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* netdev_lower_change - Dispatch event about lower device state change
|
* netdev_lower_change - Dispatch event about lower device state change
|
||||||
* @lower_dev: device
|
* @lower_dev: device
|
||||||
|
|
|
@ -637,7 +637,7 @@ int dev_uc_sync(struct net_device *to, struct net_device *from)
|
||||||
if (to->addr_len != from->addr_len)
|
if (to->addr_len != from->addr_len)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
netif_addr_lock_nested(to);
|
netif_addr_lock(to);
|
||||||
err = __hw_addr_sync(&to->uc, &from->uc, to->addr_len);
|
err = __hw_addr_sync(&to->uc, &from->uc, to->addr_len);
|
||||||
if (!err)
|
if (!err)
|
||||||
__dev_set_rx_mode(to);
|
__dev_set_rx_mode(to);
|
||||||
|
@ -667,7 +667,7 @@ int dev_uc_sync_multiple(struct net_device *to, struct net_device *from)
|
||||||
if (to->addr_len != from->addr_len)
|
if (to->addr_len != from->addr_len)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
netif_addr_lock_nested(to);
|
netif_addr_lock(to);
|
||||||
err = __hw_addr_sync_multiple(&to->uc, &from->uc, to->addr_len);
|
err = __hw_addr_sync_multiple(&to->uc, &from->uc, to->addr_len);
|
||||||
if (!err)
|
if (!err)
|
||||||
__dev_set_rx_mode(to);
|
__dev_set_rx_mode(to);
|
||||||
|
@ -691,7 +691,7 @@ void dev_uc_unsync(struct net_device *to, struct net_device *from)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
netif_addr_lock_bh(from);
|
netif_addr_lock_bh(from);
|
||||||
netif_addr_lock_nested(to);
|
netif_addr_lock(to);
|
||||||
__hw_addr_unsync(&to->uc, &from->uc, to->addr_len);
|
__hw_addr_unsync(&to->uc, &from->uc, to->addr_len);
|
||||||
__dev_set_rx_mode(to);
|
__dev_set_rx_mode(to);
|
||||||
netif_addr_unlock(to);
|
netif_addr_unlock(to);
|
||||||
|
@ -858,7 +858,7 @@ int dev_mc_sync(struct net_device *to, struct net_device *from)
|
||||||
if (to->addr_len != from->addr_len)
|
if (to->addr_len != from->addr_len)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
netif_addr_lock_nested(to);
|
netif_addr_lock(to);
|
||||||
err = __hw_addr_sync(&to->mc, &from->mc, to->addr_len);
|
err = __hw_addr_sync(&to->mc, &from->mc, to->addr_len);
|
||||||
if (!err)
|
if (!err)
|
||||||
__dev_set_rx_mode(to);
|
__dev_set_rx_mode(to);
|
||||||
|
@ -888,7 +888,7 @@ int dev_mc_sync_multiple(struct net_device *to, struct net_device *from)
|
||||||
if (to->addr_len != from->addr_len)
|
if (to->addr_len != from->addr_len)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
netif_addr_lock_nested(to);
|
netif_addr_lock(to);
|
||||||
err = __hw_addr_sync_multiple(&to->mc, &from->mc, to->addr_len);
|
err = __hw_addr_sync_multiple(&to->mc, &from->mc, to->addr_len);
|
||||||
if (!err)
|
if (!err)
|
||||||
__dev_set_rx_mode(to);
|
__dev_set_rx_mode(to);
|
||||||
|
@ -912,7 +912,7 @@ void dev_mc_unsync(struct net_device *to, struct net_device *from)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
netif_addr_lock_bh(from);
|
netif_addr_lock_bh(from);
|
||||||
netif_addr_lock_nested(to);
|
netif_addr_lock(to);
|
||||||
__hw_addr_unsync(&to->mc, &from->mc, to->addr_len);
|
__hw_addr_unsync(&to->mc, &from->mc, to->addr_len);
|
||||||
__dev_set_rx_mode(to);
|
__dev_set_rx_mode(to);
|
||||||
netif_addr_unlock(to);
|
netif_addr_unlock(to);
|
||||||
|
|
|
@ -561,7 +561,7 @@ int smc_vlan_by_tcpsk(struct socket *clcsock, struct smc_init_info *ini)
|
||||||
}
|
}
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
nest_lvl = dev_get_nest_level(ndev);
|
nest_lvl = ndev->lower_level;
|
||||||
for (i = 0; i < nest_lvl; i++) {
|
for (i = 0; i < nest_lvl; i++) {
|
||||||
struct list_head *lower = &ndev->adj_list.lower;
|
struct list_head *lower = &ndev->adj_list.lower;
|
||||||
|
|
||||||
|
|
|
@ -718,7 +718,7 @@ static struct net_device *pnet_find_base_ndev(struct net_device *ndev)
|
||||||
int i, nest_lvl;
|
int i, nest_lvl;
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
nest_lvl = dev_get_nest_level(ndev);
|
nest_lvl = ndev->lower_level;
|
||||||
for (i = 0; i < nest_lvl; i++) {
|
for (i = 0; i < nest_lvl; i++) {
|
||||||
struct list_head *lower = &ndev->adj_list.lower;
|
struct list_head *lower = &ndev->adj_list.lower;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue