diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/dccp/ccids/ccid2.c | 22 | ||||
| -rw-r--r-- | net/dccp/ccids/ccid2.h | 2 |
2 files changed, 8 insertions, 16 deletions
diff --git a/net/dccp/ccids/ccid2.c b/net/dccp/ccids/ccid2.c index a3c42cd00b00..747fa1c4e42e 100644 --- a/net/dccp/ccids/ccid2.c +++ b/net/dccp/ccids/ccid2.c | |||
| @@ -165,12 +165,6 @@ static void ccid2_change_l_ack_ratio(struct sock *sk, u32 val) | |||
| 165 | dp->dccps_l_ack_ratio = val; | 165 | dp->dccps_l_ack_ratio = val; |
| 166 | } | 166 | } |
| 167 | 167 | ||
| 168 | static void ccid2_change_cwnd(struct ccid2_hc_tx_sock *hctx, u32 val) | ||
| 169 | { | ||
| 170 | hctx->ccid2hctx_cwnd = val? : 1; | ||
| 171 | ccid2_pr_debug("changed cwnd to %u\n", hctx->ccid2hctx_cwnd); | ||
| 172 | } | ||
| 173 | |||
| 174 | static void ccid2_change_srtt(struct ccid2_hc_tx_sock *hctx, long val) | 168 | static void ccid2_change_srtt(struct ccid2_hc_tx_sock *hctx, long val) |
| 175 | { | 169 | { |
| 176 | ccid2_pr_debug("change SRTT to %ld\n", val); | 170 | ccid2_pr_debug("change SRTT to %ld\n", val); |
| @@ -212,10 +206,10 @@ static void ccid2_hc_tx_rto_expire(unsigned long data) | |||
| 212 | 206 | ||
| 213 | /* adjust pipe, cwnd etc */ | 207 | /* adjust pipe, cwnd etc */ |
| 214 | ccid2_change_pipe(hctx, 0); | 208 | ccid2_change_pipe(hctx, 0); |
| 215 | hctx->ccid2hctx_ssthresh = hctx->ccid2hctx_cwnd >> 1; | 209 | hctx->ccid2hctx_ssthresh = hctx->ccid2hctx_cwnd / 2; |
| 216 | if (hctx->ccid2hctx_ssthresh < 2) | 210 | if (hctx->ccid2hctx_ssthresh < 2) |
| 217 | hctx->ccid2hctx_ssthresh = 2; | 211 | hctx->ccid2hctx_ssthresh = 2; |
| 218 | ccid2_change_cwnd(hctx, 1); | 212 | hctx->ccid2hctx_cwnd = 1; |
| 219 | 213 | ||
| 220 | /* clear state about stuff we sent */ | 214 | /* clear state about stuff we sent */ |
| 221 | hctx->ccid2hctx_seqt = hctx->ccid2hctx_seqh; | 215 | hctx->ccid2hctx_seqt = hctx->ccid2hctx_seqh; |
| @@ -440,7 +434,7 @@ static inline void ccid2_new_ack(struct sock *sk, | |||
| 440 | /* increase every 2 acks */ | 434 | /* increase every 2 acks */ |
| 441 | hctx->ccid2hctx_ssacks++; | 435 | hctx->ccid2hctx_ssacks++; |
| 442 | if (hctx->ccid2hctx_ssacks == 2) { | 436 | if (hctx->ccid2hctx_ssacks == 2) { |
| 443 | ccid2_change_cwnd(hctx, hctx->ccid2hctx_cwnd+1); | 437 | hctx->ccid2hctx_cwnd++; |
| 444 | hctx->ccid2hctx_ssacks = 0; | 438 | hctx->ccid2hctx_ssacks = 0; |
| 445 | *maxincr = *maxincr - 1; | 439 | *maxincr = *maxincr - 1; |
| 446 | } | 440 | } |
| @@ -453,7 +447,7 @@ static inline void ccid2_new_ack(struct sock *sk, | |||
| 453 | hctx->ccid2hctx_acks++; | 447 | hctx->ccid2hctx_acks++; |
| 454 | 448 | ||
| 455 | if (hctx->ccid2hctx_acks >= hctx->ccid2hctx_cwnd) { | 449 | if (hctx->ccid2hctx_acks >= hctx->ccid2hctx_cwnd) { |
| 456 | ccid2_change_cwnd(hctx, hctx->ccid2hctx_cwnd + 1); | 450 | hctx->ccid2hctx_cwnd++; |
| 457 | hctx->ccid2hctx_acks = 0; | 451 | hctx->ccid2hctx_acks = 0; |
| 458 | } | 452 | } |
| 459 | } | 453 | } |
| @@ -543,10 +537,8 @@ static void ccid2_congestion_event(struct sock *sk, struct ccid2_seq *seqp) | |||
| 543 | 537 | ||
| 544 | hctx->ccid2hctx_last_cong = jiffies; | 538 | hctx->ccid2hctx_last_cong = jiffies; |
| 545 | 539 | ||
| 546 | ccid2_change_cwnd(hctx, hctx->ccid2hctx_cwnd >> 1); | 540 | hctx->ccid2hctx_cwnd = hctx->ccid2hctx_cwnd / 2 ? : 1U; |
| 547 | hctx->ccid2hctx_ssthresh = hctx->ccid2hctx_cwnd; | 541 | hctx->ccid2hctx_ssthresh = max(hctx->ccid2hctx_cwnd, 2U); |
| 548 | if (hctx->ccid2hctx_ssthresh < 2) | ||
| 549 | hctx->ccid2hctx_ssthresh = 2; | ||
| 550 | 542 | ||
| 551 | /* Avoid spurious timeouts resulting from Ack Ratio > cwnd */ | 543 | /* Avoid spurious timeouts resulting from Ack Ratio > cwnd */ |
| 552 | if (dccp_sk(sk)->dccps_l_ack_ratio > hctx->ccid2hctx_cwnd) | 544 | if (dccp_sk(sk)->dccps_l_ack_ratio > hctx->ccid2hctx_cwnd) |
| @@ -759,7 +751,7 @@ static int ccid2_hc_tx_init(struct ccid *ccid, struct sock *sk) | |||
| 759 | u32 max_ratio; | 751 | u32 max_ratio; |
| 760 | 752 | ||
| 761 | /* RFC 4341, 5: initialise ssthresh to arbitrarily high (max) value */ | 753 | /* RFC 4341, 5: initialise ssthresh to arbitrarily high (max) value */ |
| 762 | hctx->ccid2hctx_ssthresh = ~0; | 754 | hctx->ccid2hctx_ssthresh = ~0U; |
| 763 | 755 | ||
| 764 | /* | 756 | /* |
| 765 | * RFC 4341, 5: "The cwnd parameter is initialized to at most four | 757 | * RFC 4341, 5: "The cwnd parameter is initialized to at most four |
diff --git a/net/dccp/ccids/ccid2.h b/net/dccp/ccids/ccid2.h index 443f08a667a2..b72e9556a155 100644 --- a/net/dccp/ccids/ccid2.h +++ b/net/dccp/ccids/ccid2.h | |||
| @@ -50,9 +50,9 @@ struct ccid2_seq { | |||
| 50 | */ | 50 | */ |
| 51 | struct ccid2_hc_tx_sock { | 51 | struct ccid2_hc_tx_sock { |
| 52 | u32 ccid2hctx_cwnd; | 52 | u32 ccid2hctx_cwnd; |
| 53 | u32 ccid2hctx_ssthresh; | ||
| 53 | int ccid2hctx_ssacks; | 54 | int ccid2hctx_ssacks; |
| 54 | int ccid2hctx_acks; | 55 | int ccid2hctx_acks; |
| 55 | unsigned int ccid2hctx_ssthresh; | ||
| 56 | int ccid2hctx_pipe; | 56 | int ccid2hctx_pipe; |
| 57 | struct ccid2_seq *ccid2hctx_seqbuf[CCID2_SEQBUF_MAX]; | 57 | struct ccid2_seq *ccid2hctx_seqbuf[CCID2_SEQBUF_MAX]; |
| 58 | int ccid2hctx_seqbufc; | 58 | int ccid2hctx_seqbufc; |
