diff options
Diffstat (limited to 'net/dccp/ccids/ccid2.c')
| -rw-r--r-- | net/dccp/ccids/ccid2.c | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/net/dccp/ccids/ccid2.c b/net/dccp/ccids/ccid2.c index 28499e030f33..f7f5069b1e84 100644 --- a/net/dccp/ccids/ccid2.c +++ b/net/dccp/ccids/ccid2.c | |||
| @@ -413,23 +413,6 @@ static inline void ccid2_new_ack(struct sock *sk, | |||
| 413 | hc->tx_srtt, hc->tx_rttvar, | 413 | hc->tx_srtt, hc->tx_rttvar, |
| 414 | hc->tx_rto, HZ, r); | 414 | hc->tx_rto, HZ, r); |
| 415 | } | 415 | } |
| 416 | |||
| 417 | /* we got a new ack, so re-start RTO timer */ | ||
| 418 | ccid2_hc_tx_kill_rto_timer(sk); | ||
| 419 | ccid2_start_rto_timer(sk); | ||
| 420 | } | ||
| 421 | |||
| 422 | static void ccid2_hc_tx_dec_pipe(struct sock *sk) | ||
| 423 | { | ||
| 424 | struct ccid2_hc_tx_sock *hc = ccid2_hc_tx_sk(sk); | ||
| 425 | |||
| 426 | if (hc->tx_pipe == 0) | ||
| 427 | DCCP_BUG("pipe == 0"); | ||
| 428 | else | ||
| 429 | hc->tx_pipe--; | ||
| 430 | |||
| 431 | if (hc->tx_pipe == 0) | ||
| 432 | ccid2_hc_tx_kill_rto_timer(sk); | ||
| 433 | } | 416 | } |
| 434 | 417 | ||
| 435 | static void ccid2_congestion_event(struct sock *sk, struct ccid2_seq *seqp) | 418 | static void ccid2_congestion_event(struct sock *sk, struct ccid2_seq *seqp) |
| @@ -572,7 +555,7 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
| 572 | seqp->ccid2s_acked = 1; | 555 | seqp->ccid2s_acked = 1; |
| 573 | ccid2_pr_debug("Got ack for %llu\n", | 556 | ccid2_pr_debug("Got ack for %llu\n", |
| 574 | (unsigned long long)seqp->ccid2s_seq); | 557 | (unsigned long long)seqp->ccid2s_seq); |
| 575 | ccid2_hc_tx_dec_pipe(sk); | 558 | hc->tx_pipe--; |
| 576 | } | 559 | } |
| 577 | if (seqp == hc->tx_seqt) { | 560 | if (seqp == hc->tx_seqt) { |
| 578 | done = 1; | 561 | done = 1; |
| @@ -629,7 +612,7 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
| 629 | * one ack vector. | 612 | * one ack vector. |
| 630 | */ | 613 | */ |
| 631 | ccid2_congestion_event(sk, seqp); | 614 | ccid2_congestion_event(sk, seqp); |
| 632 | ccid2_hc_tx_dec_pipe(sk); | 615 | hc->tx_pipe--; |
| 633 | } | 616 | } |
| 634 | if (seqp == hc->tx_seqt) | 617 | if (seqp == hc->tx_seqt) |
| 635 | break; | 618 | break; |
| @@ -646,6 +629,12 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
| 646 | 629 | ||
| 647 | hc->tx_seqt = hc->tx_seqt->ccid2s_next; | 630 | hc->tx_seqt = hc->tx_seqt->ccid2s_next; |
| 648 | } | 631 | } |
| 632 | |||
| 633 | /* restart RTO timer if not all outstanding data has been acked */ | ||
| 634 | if (hc->tx_pipe == 0) | ||
| 635 | sk_stop_timer(sk, &hc->tx_rtotimer); | ||
| 636 | else | ||
| 637 | sk_reset_timer(sk, &hc->tx_rtotimer, jiffies + hc->tx_rto); | ||
| 649 | } | 638 | } |
| 650 | 639 | ||
| 651 | static int ccid2_hc_tx_init(struct ccid *ccid, struct sock *sk) | 640 | static int ccid2_hc_tx_init(struct ccid *ccid, struct sock *sk) |
