- 论坛徽章:
- 0
|
bh_lock_sock_nested(sk);
ret = 0;
if (!sock_owned_by_user(sk)) {
#ifdef CONFIG_NET_DMA
struct tcp_sock *tp = tcp_sk(sk);
if (!tp->ucopy.dma_chan && tp->ucopy.pinned_list)
tp->ucopy.dma_chan = get_softnet_dma();
if (tp->ucopy.dma_chan)
ret = tcp_v4_do_rcv(sk, skb);
else
#endif
{
if (!tcp_prequeue(sk, skb))
ret = tcp_v4_do_rcv(sk, skb);
}
} else
sk_add_backlog(sk, skb);
bh_unlock_sock(sk);
上面是tcp_v4_rcv函数里面的代码,我把bh_lock_sock_nested(sk)和bh_unlock_sock(sk)注销掉后,就不会出现问题,现在不清楚在local_out钩子处,这个sock的锁怎么给锁了 |
|