aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
authorVeaceslav Falico <vfalico@redhat.com>2013-08-28 17:25:06 -0400
committerDavid S. Miller <davem@davemloft.net>2013-08-29 16:19:42 -0400
commit620f3186caa8124e0efaf329751cf51c5d55c731 (patch)
treea40e52506927ff71a52980edf4d237a09446c290 /net/core/dev.c
parent5d261913ca3daf6c2d21d38924235667b3d07c40 (diff)
net: remove search_list from netdev_adjacent
We already don't need it cause we see every upper/lower device in the list already. CC: "David S. Miller" <davem@davemloft.net> CC: Eric Dumazet <edumazet@google.com> CC: Jiri Pirko <jiri@resnulli.us> CC: Alexander Duyck <alexander.h.duyck@intel.com> CC: Cong Wang <amwang@redhat.com> Signed-off-by: Veaceslav Falico <vfalico@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c37
1 files changed, 1 insertions, 36 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 2aa914eee057..749925a040a4 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4381,42 +4381,8 @@ struct netdev_adjacent {
4381 4381
4382 struct list_head list; 4382 struct list_head list;
4383 struct rcu_head rcu; 4383 struct rcu_head rcu;
4384 struct list_head search_list;
4385}; 4384};
4386 4385
4387static void __append_search_uppers(struct list_head *search_list,
4388 struct net_device *dev)
4389{
4390 struct netdev_adjacent *upper;
4391
4392 list_for_each_entry(upper, &dev->upper_dev_list, list) {
4393 /* check if this upper is not already in search list */
4394 if (list_empty(&upper->search_list))
4395 list_add_tail(&upper->search_list, search_list);
4396 }
4397}
4398
4399static bool __netdev_search_upper_dev(struct net_device *dev,
4400 struct net_device *upper_dev)
4401{
4402 LIST_HEAD(search_list);
4403 struct netdev_adjacent *upper;
4404 struct netdev_adjacent *tmp;
4405 bool ret = false;
4406
4407 __append_search_uppers(&search_list, dev);
4408 list_for_each_entry(upper, &search_list, search_list) {
4409 if (upper->dev == upper_dev) {
4410 ret = true;
4411 break;
4412 }
4413 __append_search_uppers(&search_list, upper->dev);
4414 }
4415 list_for_each_entry_safe(upper, tmp, &search_list, search_list)
4416 INIT_LIST_HEAD(&upper->search_list);
4417 return ret;
4418}
4419
4420static struct netdev_adjacent *__netdev_find_adj(struct net_device *dev, 4386static struct netdev_adjacent *__netdev_find_adj(struct net_device *dev,
4421 struct net_device *adj_dev, 4387 struct net_device *adj_dev,
4422 bool upper) 4388 bool upper)
@@ -4544,7 +4510,6 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev,
4544 adj->master = master; 4510 adj->master = master;
4545 adj->neighbour = neighbour; 4511 adj->neighbour = neighbour;
4546 adj->ref_nr = 1; 4512 adj->ref_nr = 1;
4547 INIT_LIST_HEAD(&adj->search_list);
4548 4513
4549 dev_hold(adj_dev); 4514 dev_hold(adj_dev);
4550 pr_debug("dev_hold for %s, because of %s link added from %s to %s\n", 4515 pr_debug("dev_hold for %s, because of %s link added from %s to %s\n",
@@ -4671,7 +4636,7 @@ static int __netdev_upper_dev_link(struct net_device *dev,
4671 return -EBUSY; 4636 return -EBUSY;
4672 4637
4673 /* To prevent loops, check if dev is not upper device to upper_dev. */ 4638 /* To prevent loops, check if dev is not upper device to upper_dev. */
4674 if (__netdev_search_upper_dev(upper_dev, dev)) 4639 if (__netdev_find_upper(upper_dev, dev))
4675 return -EBUSY; 4640 return -EBUSY;
4676 4641
4677 if (__netdev_find_upper(dev, upper_dev)) 4642 if (__netdev_find_upper(dev, upper_dev))