X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=net%2Fcore%2Fdev.c;h=b09ac57f43483244ec42dda29506c6b13b3b2302;hb=e4961b0768852d9eb7383e1a5df178eacb714656;hp=f1fe26f6645883a54126300adc030f1c3a04652d;hpb=878fb5dc96b9dfae1de45be1b85aba40aca3356e;p=cascardo%2Flinux.git diff --git a/net/core/dev.c b/net/core/dev.c index f1fe26f66458..b09ac57f4348 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -5511,10 +5511,14 @@ struct net_device *netdev_all_lower_get_next_rcu(struct net_device *dev, { struct netdev_adjacent *lower; - lower = list_first_or_null_rcu(&dev->all_adj_list.lower, - struct netdev_adjacent, list); + lower = list_entry_rcu((*iter)->next, struct netdev_adjacent, list); + + if (&lower->list == &dev->all_adj_list.lower) + return NULL; + + *iter = &lower->list; - return lower ? lower->dev : NULL; + return lower->dev; } EXPORT_SYMBOL(netdev_all_lower_get_next_rcu);