centos man page for wq_has_sleeper

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)

NAME
wq_has_sleeper - check if there are any waiting processes
SYNOPSIS
bool wq_has_sleeper(struct socket_wq * wq);
ARGUMENTS
wq struct socket_wq
DESCRIPTION
Returns 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 PATHS
CPU1 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.
COPYRIGHT
Kernel 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