ieee802154: add locking for seq numbers
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Thu, 10 Sep 2009 14:02:30 +0000 (18:02 +0400)
committerDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Tue, 15 Sep 2009 14:25:16 +0000 (18:25 +0400)
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
net/ieee802154/netlink.c

index 2106ecbf0308eb3101291d6f6f8f807567952413..ca767bde17a455a2f426e57dc1e2dc1db471c4a4 100644 (file)
@@ -35,6 +35,7 @@
 #include <net/ieee802154_netdev.h>
 
 static unsigned int ieee802154_seq_num;
+static DEFINE_SPINLOCK(ieee802154_seq_lock);
 
 static struct genl_family ieee802154_coordinator_family = {
        .id             = GENL_ID_GENERATE,
@@ -57,12 +58,15 @@ static struct sk_buff *ieee802154_nl_create(int flags, u8 req)
 {
        void *hdr;
        struct sk_buff *msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
+       unsigned long f;
 
        if (!msg)
                return NULL;
 
+       spin_lock_irqsave(&ieee802154_seq_lock, f);
        hdr = genlmsg_put(msg, 0, ieee802154_seq_num++,
                        &ieee802154_coordinator_family, flags, req);
+       spin_unlock_irqrestore(&ieee802154_seq_lock, f);
        if (!hdr) {
                nlmsg_free(msg);
                return NULL;