• David Howells's avatar
    rxrpc: Reduce unnecessary ack transmission · 5a2c5a5b
    David Howells authored
    rxrpc_recvmsg_data() schedules an ACK to be transmitted every time at least
    two packets have been consumed and any time it runs out of data and would
    return -EAGAIN to the caller.  Both events may occur within a single loop,
    however, and if the I/O thread is quick enough it may send duplicate ACKs.
    
    The ACKs are sent to inform the peer that more space has been made in the
    local Rx window, but the I/O thread is going to send an ACK every couple of
    DATA packets anyway, so we end up sending a lot more ACKs than we really
    need to.
    
    So reduce the rate at which recvmsg() schedules ACKs, such that if the I/O
    thread sends ACKs at its normal faster rate, recvmsg() won't actually
    schedule ACKs until the Rx flow stops (call->rx_consumed is cleared any
    time we transmit an ACK for that call, resetting the counter used by
    recvmsg).
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: linux-afs@lists.infradead.org
    5a2c5a5b
recvmsg.c 13.4 KB