datapath: Hold rcu_read_lock where we claim to.
[openvswitch] / datapath / vport-gre.c
index b7afd8f7778f19607fa319cf6467dfbf9fa9be9c..bd6d4a3c283e8d8ac54f8ff3a789c152445f23a0 100644 (file)
@@ -735,7 +735,7 @@ handle_csum_offload(struct sk_buff *skb)
        }
 }
 
-/* Called with rcu_read_lock and bottom-halves disabled. */
+/* Called with rcu_read_lock. */
 static void
 gre_err(struct sk_buff *skb, u32 info)
 {
@@ -847,7 +847,7 @@ out:
        skb->protocol = htons(ETH_P_IP);
 }
 
-/* Called with rcu_read_lock and bottom-halves disabled. */
+/* Called with rcu_read_lock. */
 static int
 gre_rcv(struct sk_buff *skb)
 {
@@ -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))) {