net: tcp: Refine the __tcp_select_window
authorGao Feng <fgao@ikuai8.com>
Wed, 29 Mar 2017 22:49:19 +0000 (06:49 +0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 30 Mar 2017 22:41:32 +0000 (15:41 -0700)
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: Gao Feng <fgao@ikuai8.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_output.c

index 22548b5..1397194 100644 (file)
@@ -2561,7 +2561,6 @@ u32 __tcp_select_window(struct sock *sk)
        /* Don't do rounding if we are using window scaling, since the
         * scaled window will not line up with the MSS boundary anyway.
         */
-       window = tp->rcv_wnd;
        if (tp->rx_opt.rcv_wscale) {
                window = free_space;
 
@@ -2569,10 +2568,9 @@ u32 __tcp_select_window(struct sock *sk)
                 * Import case: prevent zero window announcement if
                 * 1<<rcv_wscale > mss.
                 */
-               if (((window >> tp->rx_opt.rcv_wscale) << tp->rx_opt.rcv_wscale) != window)
-                       window = (((window >> tp->rx_opt.rcv_wscale) + 1)
-                                 << tp->rx_opt.rcv_wscale);
+               window = ALIGN(window, (1 << tp->rx_opt.rcv_wscale));
        } else {
+               window = tp->rcv_wnd;
                /* Get the largest window that is a nice multiple of mss.
                 * Window clamp already applied above.
                 * If our current window offering is within 1 mss of the
@@ -2582,7 +2580,7 @@ u32 __tcp_select_window(struct sock *sk)
                 * is too small.
                 */
                if (window <= free_space - mss || window > free_space)
-                       window = (free_space / mss) * mss;
+                       window = rounddown(free_space, mss);
                else if (mss == full_space &&
                         free_space > window + (full_space >> 1))
                        window = free_space;