Convert bond_vlan_used() to traverse the upper device list to see if we
have any vlans above us. It's protected by rcu, and in case we are holding
rtnl_lock we should call vlan_uses_dev() instead - it's faster.
CC: Jay Vosburgh <fubar@us.ibm.com>
CC: Andy Gospodarek <andy@greyhouse.net>
Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
 #endif /* CONFIG_DEBUG_FS */
 };
 
+/* if we hold rtnl_lock() - call vlan_uses_dev() */
 static inline bool bond_vlan_used(struct bonding *bond)
 {
-       return !list_empty(&bond->vlan_list);
+       struct net_device *upper;
+       struct list_head *iter;
+
+       rcu_read_lock();
+       netdev_for_each_upper_dev_rcu(bond->dev, upper, iter) {
+               if (upper->priv_flags & IFF_802_1Q_VLAN) {
+                       rcu_read_unlock();
+                       return true;
+               }
+       }
+       rcu_read_unlock();
+
+       return false;
 }
 
 #define bond_slave_get_rcu(dev) \