diff options
author | Patrick McHardy <kaber@trash.net> | 2007-05-03 06:28:13 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-05-03 06:28:13 -0400 |
commit | 4e9cac2ba437fcb093c7417b1cd91a77ebd1756a (patch) | |
tree | bbcf898f720eb19d9d6fbc196902ec93d0748f84 | |
parent | 5b35fad9d4fc2fcaf5c23887c1de1bc3eb28ab8c (diff) |
[NET]: Add __dev_getfirstbyhwtype
Add __dev_getfirstbyhwtype for callers that don't want a reference but
some data from the device and thus need to take the rtnl anyway.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/linux/netdevice.h | 1 | ||||
-rw-r--r-- | net/core/dev.c | 21 |
2 files changed, 17 insertions, 5 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index ac0c92b1e002..4428f1c3c13c 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -582,6 +582,7 @@ extern int netdev_boot_setup_check(struct net_device *dev); | |||
582 | extern unsigned long netdev_boot_base(const char *prefix, int unit); | 582 | extern unsigned long netdev_boot_base(const char *prefix, int unit); |
583 | extern struct net_device *dev_getbyhwaddr(unsigned short type, char *hwaddr); | 583 | extern struct net_device *dev_getbyhwaddr(unsigned short type, char *hwaddr); |
584 | extern struct net_device *dev_getfirstbyhwtype(unsigned short type); | 584 | extern struct net_device *dev_getfirstbyhwtype(unsigned short type); |
585 | extern struct net_device *__dev_getfirstbyhwtype(unsigned short type); | ||
585 | extern void dev_add_pack(struct packet_type *pt); | 586 | extern void dev_add_pack(struct packet_type *pt); |
586 | extern void dev_remove_pack(struct packet_type *pt); | 587 | extern void dev_remove_pack(struct packet_type *pt); |
587 | extern void __dev_remove_pack(struct packet_type *pt); | 588 | extern void __dev_remove_pack(struct packet_type *pt); |
diff --git a/net/core/dev.c b/net/core/dev.c index eb999003bbb7..c305819b7266 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -576,17 +576,28 @@ struct net_device *dev_getbyhwaddr(unsigned short type, char *ha) | |||
576 | 576 | ||
577 | EXPORT_SYMBOL(dev_getbyhwaddr); | 577 | EXPORT_SYMBOL(dev_getbyhwaddr); |
578 | 578 | ||
579 | struct net_device *dev_getfirstbyhwtype(unsigned short type) | 579 | struct net_device *__dev_getfirstbyhwtype(unsigned short type) |
580 | { | 580 | { |
581 | struct net_device *dev; | 581 | struct net_device *dev; |
582 | 582 | ||
583 | rtnl_lock(); | 583 | ASSERT_RTNL(); |
584 | for (dev = dev_base; dev; dev = dev->next) { | 584 | for (dev = dev_base; dev; dev = dev->next) { |
585 | if (dev->type == type) { | 585 | if (dev->type == type) |
586 | dev_hold(dev); | ||
587 | break; | 586 | break; |
588 | } | ||
589 | } | 587 | } |
588 | return dev; | ||
589 | } | ||
590 | |||
591 | EXPORT_SYMBOL(__dev_getfirstbyhwtype); | ||
592 | |||
593 | struct net_device *dev_getfirstbyhwtype(unsigned short type) | ||
594 | { | ||
595 | struct net_device *dev; | ||
596 | |||
597 | rtnl_lock(); | ||
598 | dev = __dev_getfirstbyhwtype(type); | ||
599 | if (dev) | ||
600 | dev_hold(dev); | ||
590 | rtnl_unlock(); | 601 | rtnl_unlock(); |
591 | return dev; | 602 | return dev; |
592 | } | 603 | } |