forked from Minki/linux
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>
This commit is contained in:
parent
1f87e235e6
commit
920de804bc
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user