summaryrefslogtreecommitdiffstats
path: root/drivers/net/wan/hdlc.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-05-23 00:05:14 -0700
committerDavid S. Miller <davem@davemloft.net>2008-05-23 00:05:14 -0700
commit7bece8155be133cd67c41eed2b31c60a310609de (patch)
tree906a62dcf10c1f2e6c1188a2b6e386668fcd9fe3 /drivers/net/wan/hdlc.c
parentb9a2f2e450b0f770bb4347ae8d48eb2dea701e24 (diff)
parentbdefff1f54cb76a19700663f211350de2f65cc91 (diff)
downloadkernel-crypto-7bece8155be133cd67c41eed2b31c60a310609de.tar.gz
kernel-crypto-7bece8155be133cd67c41eed2b31c60a310609de.tar.xz
kernel-crypto-7bece8155be133cd67c41eed2b31c60a310609de.zip
Merge branch 'upstream-davem' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
Diffstat (limited to 'drivers/net/wan/hdlc.c')
-rw-r--r--drivers/net/wan/hdlc.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/net/wan/hdlc.c b/drivers/net/wan/hdlc.c
index 9a83c9d5b8c..7f984895b0d 100644
--- a/drivers/net/wan/hdlc.c
+++ b/drivers/net/wan/hdlc.c
@@ -43,8 +43,7 @@ static const char* version = "HDLC support module revision 1.22";
#undef DEBUG_LINK
-static struct hdlc_proto *first_proto = NULL;
-
+static struct hdlc_proto *first_proto;
static int hdlc_change_mtu(struct net_device *dev, int new_mtu)
{
@@ -314,21 +313,25 @@ void detach_hdlc_protocol(struct net_device *dev)
void register_hdlc_protocol(struct hdlc_proto *proto)
{
+ rtnl_lock();
proto->next = first_proto;
first_proto = proto;
+ rtnl_unlock();
}
void unregister_hdlc_protocol(struct hdlc_proto *proto)
{
- struct hdlc_proto **p = &first_proto;
- while (*p) {
- if (*p == proto) {
- *p = proto->next;
- return;
- }
+ struct hdlc_proto **p;
+
+ rtnl_lock();
+ p = &first_proto;
+ while (*p != proto) {
+ BUG_ON(!*p);
p = &((*p)->next);
}
+ *p = proto->next;
+ rtnl_unlock();
}