[NET]: Conditionally use bh_lock_sock_nested in sk_receive_skb
Spotted by Ian McDonald, tentatively fixed by Gerrit Renker: http://www.mail-archive.com/dccp%40vger.kernel.org/msg00599.html Rewritten not to unroll sk_receive_skb, in the common case, i.e. no lock debugging, its optimized away. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
This commit is contained in:
committed by
David S. Miller
parent
e523a1550e
commit
58a5a7b955
@@ -270,7 +270,7 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL(sock_queue_rcv_skb);
|
||||
|
||||
int sk_receive_skb(struct sock *sk, struct sk_buff *skb)
|
||||
int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
|
||||
{
|
||||
int rc = NET_RX_SUCCESS;
|
||||
|
||||
@@ -279,7 +279,10 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb)
|
||||
|
||||
skb->dev = NULL;
|
||||
|
||||
bh_lock_sock(sk);
|
||||
if (nested)
|
||||
bh_lock_sock_nested(sk);
|
||||
else
|
||||
bh_lock_sock(sk);
|
||||
if (!sock_owned_by_user(sk)) {
|
||||
/*
|
||||
* trylock + unlock semantics:
|
||||
|
Reference in New Issue
Block a user