diff options
author | David Howells <dhowells@redhat.com> | 2016-09-24 19:05:27 +0200 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2016-09-25 00:49:46 +0200 |
commit | 0d967960d39ee89f9e0289692e9f7232f490e55c (patch) | |
tree | 043b35c0ef2f2367018bb42ebfd2ab5b65c1e7cd /net/rxrpc/call_event.c | |
parent | rxrpc: Generate a summary of the ACK state for later use (diff) | |
download | linux-0d967960d39ee89f9e0289692e9f7232f490e55c.tar.xz linux-0d967960d39ee89f9e0289692e9f7232f490e55c.zip |
rxrpc: Schedule an ACK if the reply to a client call appears overdue
If we've sent all the request data in a client call but haven't seen any
sign of the reply data yet, schedule an ACK to be sent to the server to
find out if the reply data got lost.
If the server hasn't yet hard-ACK'd the request data, we send a PING ACK to
demand a response to find out whether we need to retransmit.
If the server says it has received all of the data, we send an IDLE ACK to
tell the server that we haven't received anything in the receive phase as
yet.
To make this work, a non-immediate PING ACK must carry a delay. I've chosen
the same as the IDLE ACK for the moment.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc/call_event.c')
-rw-r--r-- | net/rxrpc/call_event.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/rxrpc/call_event.c b/net/rxrpc/call_event.c index d5bf9ce7ec6f..05b94d1acf52 100644 --- a/net/rxrpc/call_event.c +++ b/net/rxrpc/call_event.c @@ -100,6 +100,7 @@ static void __rxrpc_propose_ACK(struct rxrpc_call *call, u8 ack_reason, expiry = rxrpc_soft_ack_delay; break; + case RXRPC_ACK_PING: case RXRPC_ACK_IDLE: if (rxrpc_idle_ack_delay < expiry) expiry = rxrpc_idle_ack_delay; |