Skip to content

Commit

Permalink
net: Make sure BHs are disabled in sock_prot_inuse_add()
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Eric Dumazet authored and davem330 committed Nov 24, 2008
1 parent 1f87e23 commit 920de80
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 5 deletions.
2 changes: 1 addition & 1 deletion net/ipv4/inet_hashtables.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
4 changes: 2 additions & 2 deletions net/packet/af_packet.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

/*
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
Expand Down
6 changes: 4 additions & 2 deletions net/unix/af_unix.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit 920de80

Please sign in to comment.