• Paolo Abeni's avatar
    mptcp: refine MPTCP-level ack scheduling · ea4ca586
    Paolo Abeni authored
    Send timely MPTCP-level ack is somewhat difficult when
    the insertion into the msk receive level is performed
    by the worker.
    
    It needs TCP-level dup-ack to notify the MPTCP-level
    ack_seq increase, as both the TCP-level ack seq and the
    rcv window are unchanged.
    
    We can actually avoid processing incoming data with the
    worker, and let the subflow or recevmsg() send ack as needed.
    
    When recvmsg() moves the skbs inside the msk receive queue,
    the msk space is still unchanged, so tcp_cleanup_rbuf() could
    end-up skipping TCP-level ack generation. Anyway, when
    __mptcp_move_skbs() is invoked, a known amount of bytes is
    going to be consumed soon: we update rcv wnd computation taking
    them in account.
    
    Additionally we need to explicitly trigger tcp_cleanup_rbuf()
    when recvmsg() consumes a significant amount of the receive buffer.
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    ea4ca586
protocol.c 74.6 KB