diff options
Diffstat (limited to 'net/dccp/output.c')
-rw-r--r-- | net/dccp/output.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/dccp/output.c b/net/dccp/output.c index 1b3168307586..bfda071559f4 100644 --- a/net/dccp/output.c +++ b/net/dccp/output.c | |||
@@ -305,6 +305,8 @@ void dccp_write_xmit(struct sock *sk, int block) | |||
305 | if (err) | 305 | if (err) |
306 | DCCP_BUG("err=%d after ccid_hc_tx_packet_sent", | 306 | DCCP_BUG("err=%d after ccid_hc_tx_packet_sent", |
307 | err); | 307 | err); |
308 | if (dp->dccps_sync_scheduled) | ||
309 | dccp_send_sync(sk, dp->dccps_gsr, DCCP_PKT_SYNC); | ||
308 | } else { | 310 | } else { |
309 | dccp_pr_debug("packet discarded due to err=%d\n", err); | 311 | dccp_pr_debug("packet discarded due to err=%d\n", err); |
310 | kfree_skb(skb); | 312 | kfree_skb(skb); |
@@ -591,6 +593,12 @@ void dccp_send_sync(struct sock *sk, const u64 ackno, | |||
591 | DCCP_SKB_CB(skb)->dccpd_type = pkt_type; | 593 | DCCP_SKB_CB(skb)->dccpd_type = pkt_type; |
592 | DCCP_SKB_CB(skb)->dccpd_ack_seq = ackno; | 594 | DCCP_SKB_CB(skb)->dccpd_ack_seq = ackno; |
593 | 595 | ||
596 | /* | ||
597 | * Clear the flag in case the Sync was scheduled for out-of-band data, | ||
598 | * such as carrying a long Ack Vector. | ||
599 | */ | ||
600 | dccp_sk(sk)->dccps_sync_scheduled = 0; | ||
601 | |||
594 | dccp_transmit_skb(sk, skb); | 602 | dccp_transmit_skb(sk, skb); |
595 | } | 603 | } |
596 | 604 | ||