diff options
author | Florin Coras <fcoras@cisco.com> | 2020-03-13 20:39:43 +0000 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2020-03-19 14:48:15 +0000 |
commit | 6080e0d15e152e38811b01306eef6719a682c007 (patch) | |
tree | 4a3c344b1c9283d97908be78e4164bcbefeb2e1d /src/vnet/tcp/tcp_input.c | |
parent | 70f879d2852dfc042ad0911a4a6e4a1714c0eb83 (diff) |
tcp: force deschedule if no send space available
Type: improvement
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Iae9f118f710153b6c0e390265039db7434e67ed8
Diffstat (limited to 'src/vnet/tcp/tcp_input.c')
-rwxr-xr-x | src/vnet/tcp/tcp_input.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c index 4f31d21c3c1..bac41473cfa 100755 --- a/src/vnet/tcp/tcp_input.c +++ b/src/vnet/tcp/tcp_input.c @@ -700,6 +700,9 @@ tcp_handle_postponed_dequeues (tcp_worker_ctx_t * wrk) tc->flags &= ~TCP_CONN_PSH_PENDING; } + if (tcp_is_descheduled (tc)) + tcp_reschedule (tc); + /* If everything has been acked, stop retransmit timer * otherwise update. */ tcp_retransmit_timer_update (tc); @@ -1315,6 +1318,9 @@ tcp_update_snd_wnd (tcp_connection_t * tc, u32 seq, u32 ack, u32 snd_wnd) if (PREDICT_FALSE (tcp_timer_is_active (tc, TCP_TIMER_PERSIST))) tcp_persist_timer_reset (tc); + if (PREDICT_FALSE (tcp_is_descheduled (tc))) + tcp_reschedule (tc); + if (PREDICT_FALSE (!tcp_in_recovery (tc) && tc->rto_boff > 0)) { tc->rto_boff = 0; @@ -1465,6 +1471,7 @@ tcp_cc_recover (tcp_connection_t * tc) ASSERT (tc->rto_boff == 0); ASSERT (!tcp_in_cong_recovery (tc)); ASSERT (tcp_scoreboard_is_sane_post_recovery (tc)); + return is_spurious; } |