rxrpc: Need to start the resend timer on initial transmission
When a DATA packet has its initial transmission, we may need to start or adjust the resend timer. Without this we end up relying on being sent a NACK to initiate the resend. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -704,6 +704,7 @@ int rxrpc_reject_call(struct rxrpc_sock *);
|
|||||||
/*
|
/*
|
||||||
* call_event.c
|
* call_event.c
|
||||||
*/
|
*/
|
||||||
|
void rxrpc_set_timer(struct rxrpc_call *);
|
||||||
void rxrpc_propose_ACK(struct rxrpc_call *, u8, u16, u32, bool, bool);
|
void rxrpc_propose_ACK(struct rxrpc_call *, u8, u16, u32, bool, bool);
|
||||||
void rxrpc_process_call(struct work_struct *);
|
void rxrpc_process_call(struct work_struct *);
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
/*
|
/*
|
||||||
* Set the timer
|
* Set the timer
|
||||||
*/
|
*/
|
||||||
static void rxrpc_set_timer(struct rxrpc_call *call)
|
void rxrpc_set_timer(struct rxrpc_call *call)
|
||||||
{
|
{
|
||||||
unsigned long t, now = jiffies;
|
unsigned long t, now = jiffies;
|
||||||
|
|
||||||
|
|||||||
@@ -146,6 +146,15 @@ static void rxrpc_queue_packet(struct rxrpc_call *call, struct sk_buff *skb,
|
|||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
_debug("need instant resend %d", ret);
|
_debug("need instant resend %d", ret);
|
||||||
rxrpc_instant_resend(call, ix);
|
rxrpc_instant_resend(call, ix);
|
||||||
|
} else {
|
||||||
|
unsigned long resend_at;
|
||||||
|
|
||||||
|
resend_at = jiffies + msecs_to_jiffies(rxrpc_resend_timeout);
|
||||||
|
|
||||||
|
if (time_before(resend_at, call->resend_at)) {
|
||||||
|
call->resend_at = resend_at;
|
||||||
|
rxrpc_set_timer(call);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rxrpc_free_skb(skb, rxrpc_skb_tx_freed);
|
rxrpc_free_skb(skb, rxrpc_skb_tx_freed);
|
||||||
|
|||||||
Reference in New Issue
Block a user