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 | } |
