sock: dedup sock_def_write_space wmem_alloc checks
authorPavel Begunkov <asml.silence@gmail.com>
Thu, 28 Apr 2022 10:58:17 +0000 (11:58 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 1 May 2022 11:19:01 +0000 (12:19 +0100)
Except for minor rounding differences the first ->sk_wmem_alloc test in
sock_def_write_space() is a hand coded version of sock_writeable().
Replace it with the helper, and also kill the following if duplicating
the check.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/sock.c

index b164618..6ad22fc 100644 (file)
@@ -3191,15 +3191,14 @@ static void sock_def_write_space(struct sock *sk)
        /* Do not wake up a writer until he can make "significant"
         * progress.  --DaveM
         */
-       if ((refcount_read(&sk->sk_wmem_alloc) << 1) <= READ_ONCE(sk->sk_sndbuf)) {
+       if (sock_writeable(sk)) {
                wq = rcu_dereference(sk->sk_wq);
                if (skwq_has_sleeper(wq))
                        wake_up_interruptible_sync_poll(&wq->wait, EPOLLOUT |
                                                EPOLLWRNORM | EPOLLWRBAND);
 
                /* Should agree with poll, otherwise some programs break */
-               if (sock_writeable(sk))
-                       sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
+               sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
        }
 
        rcu_read_unlock();