rxrpc: Fix life check
The life-checking function, which is used by kAFS to make sure that a call is still live in the event of a pending signal, only samples the received packet serial number counter; it doesn't actually provoke a change in the counter, rather relying on the server to happen to give us a packet in the time window. Fix this by adding a function to force a ping to be transmitted. kAFS then keeps track of whether there's been a stall, and if so, uses the new function to ping the server, resetting the timeout to allow the reply to come back. If there's a stall, a ping and the call is *still* stalled in the same place after another period, then the call will be aborted. Fixes:bc5e3a546d
("rxrpc: Use MSG_WAITALL to tell sendmsg() to temporarily ignore signals") Fixes:f4d15fb6f9
("rxrpc: Provide functions for allowing cleaner handling of signals") Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
ebcd210e93
commit
7150ceaacb
@@ -181,6 +181,7 @@ enum rxrpc_timer_trace {
|
||||
enum rxrpc_propose_ack_trace {
|
||||
rxrpc_propose_ack_client_tx_end,
|
||||
rxrpc_propose_ack_input_data,
|
||||
rxrpc_propose_ack_ping_for_check_life,
|
||||
rxrpc_propose_ack_ping_for_keepalive,
|
||||
rxrpc_propose_ack_ping_for_lost_ack,
|
||||
rxrpc_propose_ack_ping_for_lost_reply,
|
||||
@@ -380,6 +381,7 @@ enum rxrpc_tx_point {
|
||||
#define rxrpc_propose_ack_traces \
|
||||
EM(rxrpc_propose_ack_client_tx_end, "ClTxEnd") \
|
||||
EM(rxrpc_propose_ack_input_data, "DataIn ") \
|
||||
EM(rxrpc_propose_ack_ping_for_check_life, "ChkLife") \
|
||||
EM(rxrpc_propose_ack_ping_for_keepalive, "KeepAlv") \
|
||||
EM(rxrpc_propose_ack_ping_for_lost_ack, "LostAck") \
|
||||
EM(rxrpc_propose_ack_ping_for_lost_reply, "LostRpl") \
|
||||
|
Reference in New Issue
Block a user