diff options
author | Veaceslav Falico <vfalico@redhat.com> | 2013-08-28 17:25:06 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-29 16:19:42 -0400 |
commit | 620f3186caa8124e0efaf329751cf51c5d55c731 (patch) | |
tree | a40e52506927ff71a52980edf4d237a09446c290 /net/core/dev.c | |
parent | 5d261913ca3daf6c2d21d38924235667b3d07c40 (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.c | 37 |
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 | ||
4387 | static 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 | |||
4399 | static 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 | |||
4420 | static struct netdev_adjacent *__netdev_find_adj(struct net_device *dev, | 4386 | static 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)) |