gre: Include route headers in headroom calculation.
authorJesse Gross <jesse@nicira.com>
Sat, 8 May 2010 01:50:23 +0000 (18:50 -0700)
committerJesse Gross <jesse@nicira.com>
Tue, 11 May 2010 00:57:47 +0000 (17:57 -0700)
When calculating the amount of headroom required include the route,
which avoids a copy later when doing transforms like IPsec.

datapath/vport-gre.c

index b7afd8f..654ead0 100644 (file)
@@ -1087,7 +1087,9 @@ gre_send(struct vport *vport, struct sk_buff *skb)
         * the segments.  This is particularly beneficial on Xen where we get
         * lots of GSO pskbs.  Conversely, we delay copying if it is just to
         * get our own writable clone because GSO may do the copy for us. */
-       max_headroom = LL_RESERVED_SPACE(rt->u.dst.dev) + mutable->tunnel_hlen;
+       max_headroom = LL_RESERVED_SPACE(rt->u.dst.dev) + rt->u.dst.header_len
+                       + mutable->tunnel_hlen;
+
        if (skb_headroom(skb) < max_headroom) {
                skb = check_headroom(skb, max_headroom);
                if (unlikely(IS_ERR(skb))) {