diff options
-rw-r--r-- | net/core/dev.c | 17 |
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 | ||
773 | struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type) | 773 | struct 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 | } |
784 | EXPORT_SYMBOL(dev_getfirstbyhwtype); | 787 | EXPORT_SYMBOL(dev_getfirstbyhwtype); |
785 | 788 | ||