aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/core/dev.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 2d01f18f303a..a03aab45e84f 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -772,14 +772,17 @@ EXPORT_SYMBOL(__dev_getfirstbyhwtype);
772 772
773struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type) 773struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type)
774{ 774{
775 struct net_device *dev; 775 struct net_device *dev, *ret = NULL;
776 776
777 rtnl_lock(); 777 rcu_read_lock();
778 dev = __dev_getfirstbyhwtype(net, type); 778 for_each_netdev_rcu(net, dev)
779 if (dev) 779 if (dev->type == type) {
780 dev_hold(dev); 780 dev_hold(dev);
781 rtnl_unlock(); 781 ret = dev;
782 return dev; 782 break;
783 }
784 rcu_read_unlock();
785 return ret;
783} 786}
784EXPORT_SYMBOL(dev_getfirstbyhwtype); 787EXPORT_SYMBOL(dev_getfirstbyhwtype);
785 788