mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-04 01:24:12 +08:00
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:
parent
98dafac569
commit
dfc3da4404
@ -704,6 +704,7 @@ int rxrpc_reject_call(struct rxrpc_sock *);
|
||||
/*
|
||||
* call_event.c
|
||||
*/
|
||||
void rxrpc_set_timer(struct rxrpc_call *);
|
||||
void rxrpc_propose_ACK(struct rxrpc_call *, u8, u16, u32, bool, bool);
|
||||
void rxrpc_process_call(struct work_struct *);
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
|
@ -146,6 +146,15 @@ static void rxrpc_queue_packet(struct rxrpc_call *call, struct sk_buff *skb,
|
||||
if (ret < 0) {
|
||||
_debug("need instant resend %d", ret);
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user