summaryrefslogtreecommitdiffstats
path: root/net/rxrpc/recvmsg.c
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2016-10-06 08:11:49 +0100
committerDavid Howells <dhowells@redhat.com>2016-10-06 08:11:49 +0100
commita5af7e1fc69a46f29b977fd4b570e0ac414c2338 (patch)
treed3ecc4df97f90a40d3f3aa6827bfe4201eba71e7 /net/rxrpc/recvmsg.c
parent26cb02aa6d3efeb543805ed9ad599dae24f7c6d4 (diff)
downloadlinux-a5af7e1fc69a46f29b977fd4b570e0ac414c2338.tar.gz
linux-a5af7e1fc69a46f29b977fd4b570e0ac414c2338.tar.bz2
linux-a5af7e1fc69a46f29b977fd4b570e0ac414c2338.zip
rxrpc: Fix loss of PING RESPONSE ACK production due to PING ACKs
Separate the output of PING ACKs from the output of other sorts of ACK so that if we receive a PING ACK and schedule transmission of a PING RESPONSE ACK, the response doesn't get cancelled by a PING ACK we happen to be scheduling transmission of at the same time. If a PING RESPONSE gets lost, the other side might just sit there waiting for it and refuse to proceed otherwise. Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc/recvmsg.c')
-rw-r--r--net/rxrpc/recvmsg.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/rxrpc/recvmsg.c b/net/rxrpc/recvmsg.c
index 11723bc1c783..3fa7771c2a9d 100644
--- a/net/rxrpc/recvmsg.c
+++ b/net/rxrpc/recvmsg.c
@@ -143,7 +143,7 @@ static void rxrpc_end_rx_phase(struct rxrpc_call *call, rxrpc_serial_t serial)
if (call->state == RXRPC_CALL_CLIENT_RECV_REPLY) {
rxrpc_propose_ACK(call, RXRPC_ACK_IDLE, 0, serial, true, false,
rxrpc_propose_ack_terminal_ack);
- rxrpc_send_ack_packet(call);
+ rxrpc_send_ack_packet(call, false);
}
write_lock_bh(&call->state_lock);
@@ -212,7 +212,7 @@ static void rxrpc_rotate_rx_window(struct rxrpc_call *call)
true, false,
rxrpc_propose_ack_rotate_rx);
if (call->ackr_reason)
- rxrpc_send_ack_packet(call);
+ rxrpc_send_ack_packet(call, false);
}
}