]> Pileus Git - ~andy/linux/blobdiff - net/ipv4/tcp.c
tcp: avoid frag allocation for small frames
[~andy/linux] / net / ipv4 / tcp.c
index ecbc89a0436b8d25ff3d3cb75e20c21baa701ed3..45156be3abfd59989f33763c56bace0324e30122 100644 (file)
@@ -897,9 +897,12 @@ static inline int select_size(const struct sock *sk, bool sg)
        int tmp = tp->mss_cache;
 
        if (sg) {
-               if (sk_can_gso(sk))
-                       tmp = 0;
-               else {
+               if (sk_can_gso(sk)) {
+                       /* Small frames wont use a full page:
+                        * Payload will immediately follow tcp header.
+                        */
+                       tmp = SKB_WITH_OVERHEAD(2048 - MAX_TCP_HEADER);
+               } else {
                        int pgbreak = SKB_MAX_HEAD(MAX_TCP_HEADER);
 
                        if (tmp >= pgbreak &&