Query: wq_has_sleeper
OS: centos
Section: 9
Format: Original Unix Latex Style Formatted with HTML and a Horizontal Scroll Bar
WQ_HAS_SLEEPER(9) Linux Networking WQ_HAS_SLEEPER(9)NAMEwq_has_sleeper - check if there are any waiting processesSYNOPSISbool wq_has_sleeper(struct socket_wq * wq);ARGUMENTSwq struct socket_wqDESCRIPTIONReturns true if socket_wq has waiting processes The purpose of the wq_has_sleeper and sock_poll_wait is to wrap the memory barrier call. They were added due to the race found within the tcp code.CONSIDER FOLLOWING TCP CODE PATHSCPU1 CPU2 sys_select receive packet ... ... __add_wait_queue update tp->rcv_nxt ... ... tp->rcv_nxt check sock_def_readable ... { schedule rcu_read_lock; wq = rcu_dereference(sk->sk_wq); if (wq && waitqueue_active(wq->wait)) wake_up_interruptible(wq->wait) ... } The race for tcp fires when the __add_wait_queue changes done by CPU1 stay in its cache, and so does the tp->rcv_nxt update on CPU2 side. The CPU1 could then endup calling schedule and sleep forever if there are no more data on the socket.COPYRIGHTKernel Hackers Manual 3.10 June 2014 WQ_HAS_SLEEPER(9)
Related Man Pages |
---|
__skb_recv_datagram(9) - centos |
struct_sock(9) - centos |
pmqtest(8) - debian |
tcp-env(1) - redhat |
tcp-env(1) - ultrix |
Similar Topics in the Unix Linux Community |
---|
Set hard block limit for user using quota |
CentOS7 restoring file capabilities |
Docker learning Phase-I |
CentOS 6 ran out of space, need to reclaim it |
[TIP] Processing YAML files with yq |