Commit 1935299d authored by Gao Feng's avatar Gao Feng Committed by David S. Miller

net: tcp: Refine the __tcp_select_window

1. Move the "window = tp->rcv_wnd;" into the condition block without
tp->rx_opt.rcv_wscale.
Because it is unnecessary when enable wscale;

2. Use the macro ALIGN instead of two statements.
The two statements are used to make window align to 1<<wscale.
Use the ALIGN is more clearer.

3. Use the rounddown to make codes clearer.
Signed-off-by: default avatarGao Feng <fgao@ikuai8.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bae76dd9
...@@ -2561,7 +2561,6 @@ u32 __tcp_select_window(struct sock *sk) ...@@ -2561,7 +2561,6 @@ u32 __tcp_select_window(struct sock *sk)
/* Don't do rounding if we are using window scaling, since the /* Don't do rounding if we are using window scaling, since the
* scaled window will not line up with the MSS boundary anyway. * scaled window will not line up with the MSS boundary anyway.
*/ */
window = tp->rcv_wnd;
if (tp->rx_opt.rcv_wscale) { if (tp->rx_opt.rcv_wscale) {
window = free_space; window = free_space;
...@@ -2569,10 +2568,9 @@ u32 __tcp_select_window(struct sock *sk) ...@@ -2569,10 +2568,9 @@ u32 __tcp_select_window(struct sock *sk)
* Import case: prevent zero window announcement if * Import case: prevent zero window announcement if
* 1<<rcv_wscale > mss. * 1<<rcv_wscale > mss.
*/ */
if (((window >> tp->rx_opt.rcv_wscale) << tp->rx_opt.rcv_wscale) != window) window = ALIGN(window, (1 << tp->rx_opt.rcv_wscale));
window = (((window >> tp->rx_opt.rcv_wscale) + 1)
<< tp->rx_opt.rcv_wscale);
} else { } else {
window = tp->rcv_wnd;
/* Get the largest window that is a nice multiple of mss. /* Get the largest window that is a nice multiple of mss.
* Window clamp already applied above. * Window clamp already applied above.
* If our current window offering is within 1 mss of the * If our current window offering is within 1 mss of the
...@@ -2582,7 +2580,7 @@ u32 __tcp_select_window(struct sock *sk) ...@@ -2582,7 +2580,7 @@ u32 __tcp_select_window(struct sock *sk)
* is too small. * is too small.
*/ */
if (window <= free_space - mss || window > free_space) if (window <= free_space - mss || window > free_space)
window = (free_space / mss) * mss; window = rounddown(free_space, mss);
else if (mss == full_space && else if (mss == full_space &&
free_space > window + (full_space >> 1)) free_space > window + (full_space >> 1))
window = free_space; window = free_space;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment