aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-11-23 20:34:03 -0500
committerDavid S. Miller <davem@davemloft.net>2008-11-23 20:34:03 -0500
commit6f756a8c36bf54d0afb1d457082b3e3033d951a7 (patch)
tree33efc99e3df9edf1d777a00913852d24d19b930b
parentbe77e5930725c3e77bcc0fb1def28e016080d0a1 (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. Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/netlink/af_netlink.c3
-rw-r--r--net/sctp/socket.c4
-rw-r--r--net/unix/af_unix.c2
3 files changed, 9 insertions, 0 deletions
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index a2071dcfe9e8..c7d76579bf3c 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -452,7 +452,10 @@ static int netlink_create(struct net *net, struct socket *sock, int protocol)
452 if (err < 0) 452 if (err < 0)
453 goto out_module; 453 goto out_module;
454 454
455 local_bh_disable();
455 sock_prot_inuse_add(net, &netlink_proto, 1); 456 sock_prot_inuse_add(net, &netlink_proto, 1);
457 local_bh_enable();
458
456 nlk = nlk_sk(sock->sk); 459 nlk = nlk_sk(sock->sk);
457 nlk->module = module; 460 nlk->module = module;
458out: 461out:
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 0c70eff0b757..f03af84edf63 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -3614,7 +3614,11 @@ SCTP_STATIC int sctp_init_sock(struct sock *sk)
3614 3614
3615 SCTP_DBG_OBJCNT_INC(sock); 3615 SCTP_DBG_OBJCNT_INC(sock);
3616 atomic_inc(&sctp_sockets_allocated); 3616 atomic_inc(&sctp_sockets_allocated);
3617
3618 local_bh_disable();
3617 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1); 3619 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
3620 local_bh_enable();
3621
3618 return 0; 3622 return 0;
3619} 3623}
3620 3624
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index e1ca8f744ca5..a45a9f7369ed 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -361,7 +361,9 @@ static void unix_sock_destructor(struct sock *sk)
361 unix_release_addr(u->addr); 361 unix_release_addr(u->addr);
362 362
363 atomic_dec(&unix_nr_socks); 363 atomic_dec(&unix_nr_socks);
364 local_bh_disable();
364 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); 365 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
366 local_bh_enable();
365#ifdef UNIX_REFCNT_DEBUG 367#ifdef UNIX_REFCNT_DEBUG
366 printk(KERN_DEBUG "UNIX %p is destroyed, %d are still alive.\n", sk, 368 printk(KERN_DEBUG "UNIX %p is destroyed, %d are still alive.\n", sk,
367 atomic_read(&unix_nr_socks)); 369 atomic_read(&unix_nr_socks));