/* More than one full frame received... */
        if (((tp->rcv_nxt - tp->rcv_wup) > inet_csk(sk)->icsk_ack.rcv_mss &&
             /* ... and right edge of window advances far enough.
-             * (tcp_recvmsg() will send ACK otherwise). Or...
+             * (tcp_recvmsg() will send ACK otherwise).
+             * If application uses SO_RCVLOWAT, we want send ack now if
+             * we have not received enough bytes to satisfy the condition.
              */
-            __tcp_select_window(sk) >= tp->rcv_wnd) ||
+           (tp->rcv_nxt - tp->copied_seq < sk->sk_rcvlowat ||
+            __tcp_select_window(sk) >= tp->rcv_wnd)) ||
            /* We ACK each frame or... */
            tcp_in_quickack_mode(sk) ||
            /* We have out of order data. */