aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/output.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/dccp/output.c')
-rw-r--r--net/dccp/output.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/dccp/output.c b/net/dccp/output.c
index 992caedd7725..08ee5547a2f2 100644
--- a/net/dccp/output.c
+++ b/net/dccp/output.c
@@ -332,6 +332,8 @@ struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
332 skb->dst = dst_clone(dst); 332 skb->dst = dst_clone(dst);
333 333
334 dreq = dccp_rsk(req); 334 dreq = dccp_rsk(req);
335 if (inet_rsk(req)->acked) /* increase ISS upon retransmission */
336 dccp_inc_seqno(&dreq->dreq_iss);
335 DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_RESPONSE; 337 DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_RESPONSE;
336 DCCP_SKB_CB(skb)->dccpd_seq = dreq->dreq_iss; 338 DCCP_SKB_CB(skb)->dccpd_seq = dreq->dreq_iss;
337 339
@@ -354,6 +356,8 @@ struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
354 356
355 dccp_csum_outgoing(skb); 357 dccp_csum_outgoing(skb);
356 358
359 /* We use `acked' to remember that a Response was already sent. */
360 inet_rsk(req)->acked = 1;
357 DCCP_INC_STATS(DCCP_MIB_OUTSEGS); 361 DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
358 return skb; 362 return skb;
359} 363}