:: RootR ::  Hosting Order Map Login   Secure Inter-Network Operations  
 
skwq_has_sleeper(9) - phpMan

Command: man perldoc info search(apropos)  


SKWQ_HAS_SLEEPER(9)                      Linux Networking                     SKWQ_HAS_SLEEPER(9)



NAME
       skwq_has_sleeper - check if there are any waiting processes

SYNOPSIS
       bool skwq_has_sleeper(struct socket_wq * wq);

ARGUMENTS
       wq
           struct socket_wq

DESCRIPTION
       Returns true if socket_wq has waiting processes

       The purpose of the skwq_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 4.8.                 January 2017                       SKWQ_HAS_SLEEPER(9)


/man
rootr.net - man pages