lkml.org 
[lkml]   [2012]   [Aug]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[patch net-next v2 11/15] vlan: remove usage of dev->master in __vlan_find_dev_deep()
    Date
    Also, since all users call __vlan_find_dev_deep() with rcu_read_lock,
    make no possibility to call this with rtnl mutex held only.

    Signed-off-by: Jiri Pirko <jiri@resnulli.us>
    ---
    net/8021q/vlan_core.c | 18 +++++++++++-------
    1 file changed, 11 insertions(+), 7 deletions(-)

    diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
    index 8ca533c..d4babc6 100644
    --- a/net/8021q/vlan_core.c
    +++ b/net/8021q/vlan_core.c
    @@ -66,21 +66,25 @@ bool vlan_do_receive(struct sk_buff **skbp, bool last_handler)
    return true;
    }

    -/* Must be invoked with rcu_read_lock or with RTNL. */
    -struct net_device *__vlan_find_dev_deep(struct net_device *real_dev,
    +/* Must be invoked with rcu_read_lock. */
    +struct net_device *__vlan_find_dev_deep(struct net_device *dev,
    u16 vlan_id)
    {
    - struct vlan_info *vlan_info = rcu_dereference_rtnl(real_dev->vlan_info);
    + struct vlan_info *vlan_info = rcu_dereference(dev->vlan_info);

    if (vlan_info) {
    return vlan_group_get_device(&vlan_info->grp, vlan_id);
    } else {
    /*
    - * Bonding slaves do not have grp assigned to themselves.
    - * Grp is assigned to bonding master instead.
    + * Lower devices of master uppers (bonding, team) do not have
    + * grp assigned to themselves. Grp is assigned to upper device
    + * instead.
    */
    - if (netif_is_bond_slave(real_dev))
    - return __vlan_find_dev_deep(real_dev->master, vlan_id);
    + struct net_device *upper_dev;
    +
    + upper_dev = netdev_master_upper_dev_get_rcu(dev);
    + if (upper_dev)
    + return __vlan_find_dev_deep(upper_dev, vlan_id);
    }

    return NULL;
    --
    1.7.10.4


    \
     
     \ /
      Last update: 2012-08-14 20:42    [W:0.106 / U:0.316 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site