From 6e96dc6f482c2f53ea10d1c745f91e9c2a12baa5 Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Mon, 24 Nov 2008 00:09:29 -0800 Subject: [PATCH] --- yaml --- r: 122112 b: refs/heads/master c: 920de804bca61f88643bc9171bcd06f1a56c6258 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/ipv4/inet_hashtables.c | 2 +- trunk/net/packet/af_packet.c | 4 ++-- trunk/net/unix/af_unix.c | 6 ++++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 8aa1a3a746ee..e6d0eb046d74 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1f87e235e6fb92c2968b52b9191de04f1aff8e77 +refs/heads/master: 920de804bca61f88643bc9171bcd06f1a56c6258 diff --git a/trunk/net/ipv4/inet_hashtables.c b/trunk/net/ipv4/inet_hashtables.c index 11fcb87a1fdd..6a1045da48d2 100644 --- a/trunk/net/ipv4/inet_hashtables.c +++ b/trunk/net/ipv4/inet_hashtables.c @@ -402,9 +402,9 @@ void inet_unhash(struct sock *sk) spin_lock_bh(lock); done =__sk_nulls_del_node_init_rcu(sk); - spin_unlock_bh(lock); if (done) sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); + spin_unlock_bh(lock); } EXPORT_SYMBOL_GPL(inet_unhash); diff --git a/trunk/net/packet/af_packet.c b/trunk/net/packet/af_packet.c index b4870a34c435..5f94db2f3e9e 100644 --- a/trunk/net/packet/af_packet.c +++ b/trunk/net/packet/af_packet.c @@ -872,6 +872,7 @@ static int packet_release(struct socket *sock) write_lock_bh(&net->packet.sklist_lock); sk_del_node_init(sk); + sock_prot_inuse_add(net, sk->sk_prot, -1); write_unlock_bh(&net->packet.sklist_lock); /* @@ -910,7 +911,6 @@ static int packet_release(struct socket *sock) skb_queue_purge(&sk->sk_receive_queue); sk_refcnt_debug_release(sk); - sock_prot_inuse_add(net, sk->sk_prot, -1); sock_put(sk); return 0; } @@ -1085,8 +1085,8 @@ static int packet_create(struct net *net, struct socket *sock, int protocol) write_lock_bh(&net->packet.sklist_lock); sk_add_node(sk, &net->packet.sklist); - write_unlock_bh(&net->packet.sklist_lock); sock_prot_inuse_add(net, &packet_proto, 1); + write_unlock_bh(&net->packet.sklist_lock); return(0); out: return err; diff --git a/trunk/net/unix/af_unix.c b/trunk/net/unix/af_unix.c index a45a9f7369ed..3a35a6e8bf91 100644 --- a/trunk/net/unix/af_unix.c +++ b/trunk/net/unix/af_unix.c @@ -615,9 +615,11 @@ static struct sock *unix_create1(struct net *net, struct socket *sock) out: if (sk == NULL) atomic_dec(&unix_nr_socks); - else + else { + local_bh_disable(); sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1); - + local_bh_enable(); + } return sk; }