]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/netrom/af_netrom.c
netrom: Fix sock_orphan() use in nr_release
[linux-2.6-omap-h63xx.git] / net / netrom / af_netrom.c
index fccc250f95f5e8e111d17b4dca1f0d2570e28507..9f1ea4a27b356e1f93f8a8fdc5dcb125cf488f0c 100644 (file)
@@ -73,6 +73,7 @@ static const struct proto_ops nr_proto_ops;
  * separate class since they always nest.
  */
 static struct lock_class_key nr_netdev_xmit_lock_key;
+static struct lock_class_key nr_netdev_addr_lock_key;
 
 static void nr_set_lockdep_one(struct net_device *dev,
                               struct netdev_queue *txq,
@@ -83,6 +84,7 @@ static void nr_set_lockdep_one(struct net_device *dev,
 
 static void nr_set_lockdep_key(struct net_device *dev)
 {
+       lockdep_set_class(&dev->addr_list_lock, &nr_netdev_addr_lock_key);
        netdev_for_each_tx_queue(dev, nr_set_lockdep_one, NULL);
 }
 
@@ -523,6 +525,7 @@ static int nr_release(struct socket *sock)
        if (sk == NULL) return 0;
 
        sock_hold(sk);
+       sock_orphan(sk);
        lock_sock(sk);
        nr = nr_sk(sk);
 
@@ -546,7 +549,6 @@ static int nr_release(struct socket *sock)
                sk->sk_state    = TCP_CLOSE;
                sk->sk_shutdown |= SEND_SHUTDOWN;
                sk->sk_state_change(sk);
-               sock_orphan(sk);
                sock_set_flag(sk, SOCK_DESTROY);
                break;