diff options
author | Eric Dumazet <dada1@cosmosbay.com> | 2008-11-24 03:09:29 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-11-24 03:09:29 -0500 |
commit | 920de804bca61f88643bc9171bcd06f1a56c6258 (patch) | |
tree | fb4c90b4b167a4b7518ea888e99bfd18a7d301fb /net/packet/af_packet.c | |
parent | 1f87e235e6fb92c2968b52b9191de04f1aff8e77 (diff) |
net: Make sure BHs are disabled in sock_prot_inuse_add()
The rule of calling sock_prot_inuse_add() is that BHs must
be disabled. Some new calls were added where this was not
true and this tiggers warnings as reported by Ilpo.
Fix this by adding explicit BH disabling around those call sites,
or moving sock_prot_inuse_add() call inside an existing BH disabled
section.
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/packet/af_packet.c')
-rw-r--r-- | net/packet/af_packet.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index b4870a34c43..5f94db2f3e9 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c | |||
@@ -872,6 +872,7 @@ static int packet_release(struct socket *sock) | |||
872 | 872 | ||
873 | write_lock_bh(&net->packet.sklist_lock); | 873 | write_lock_bh(&net->packet.sklist_lock); |
874 | sk_del_node_init(sk); | 874 | sk_del_node_init(sk); |
875 | sock_prot_inuse_add(net, sk->sk_prot, -1); | ||
875 | write_unlock_bh(&net->packet.sklist_lock); | 876 | write_unlock_bh(&net->packet.sklist_lock); |
876 | 877 | ||
877 | /* | 878 | /* |
@@ -910,7 +911,6 @@ static int packet_release(struct socket *sock) | |||
910 | skb_queue_purge(&sk->sk_receive_queue); | 911 | skb_queue_purge(&sk->sk_receive_queue); |
911 | sk_refcnt_debug_release(sk); | 912 | sk_refcnt_debug_release(sk); |
912 | 913 | ||
913 | sock_prot_inuse_add(net, sk->sk_prot, -1); | ||
914 | sock_put(sk); | 914 | sock_put(sk); |
915 | return 0; | 915 | return 0; |
916 | } | 916 | } |
@@ -1085,8 +1085,8 @@ static int packet_create(struct net *net, struct socket *sock, int protocol) | |||
1085 | 1085 | ||
1086 | write_lock_bh(&net->packet.sklist_lock); | 1086 | write_lock_bh(&net->packet.sklist_lock); |
1087 | sk_add_node(sk, &net->packet.sklist); | 1087 | sk_add_node(sk, &net->packet.sklist); |
1088 | write_unlock_bh(&net->packet.sklist_lock); | ||
1089 | sock_prot_inuse_add(net, &packet_proto, 1); | 1088 | sock_prot_inuse_add(net, &packet_proto, 1); |
1089 | write_unlock_bh(&net->packet.sklist_lock); | ||
1090 | return(0); | 1090 | return(0); |
1091 | out: | 1091 | out: |
1092 | return err; | 1092 | return err; |