]> err.no Git - linux-2.6/blobdiff - net/ipv4/ip_gre.c
[MAC80211]: remove turbo modes
[linux-2.6] / net / ipv4 / ip_gre.c
index 63282934725e0971672bc146491c5aa178816b3e..3106225c5e50a858cbc52729e34db09149479e91 100644 (file)
@@ -262,7 +262,7 @@ static struct ip_tunnel * ipgre_tunnel_locate(struct ip_tunnel_parm *parms, int
                int i;
                for (i=1; i<100; i++) {
                        sprintf(name, "gre%d", i);
-                       if (__dev_get_by_name(name) == NULL)
+                       if (__dev_get_by_name(&init_net, name) == NULL)
                                break;
                }
                if (i==100)
@@ -809,7 +809,8 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
 
        max_headroom = LL_RESERVED_SPACE(tdev) + gre_hlen;
 
-       if (skb_headroom(skb) < max_headroom || skb_cloned(skb) || skb_shared(skb)) {
+       if (skb_headroom(skb) < max_headroom || skb_shared(skb)||
+           (skb_cloned(skb) && !skb_clone_writable(skb, 0))) {
                struct sk_buff *new_skb = skb_realloc_headroom(skb, max_headroom);
                if (!new_skb) {
                        ip_rt_put(rt);
@@ -1195,7 +1196,7 @@ static int ipgre_tunnel_init(struct net_device *dev)
        }
 
        if (!tdev && tunnel->parms.link)
-               tdev = __dev_get_by_index(tunnel->parms.link);
+               tdev = __dev_get_by_index(&init_net, tunnel->parms.link);
 
        if (tdev) {
                hlen = tdev->hard_header_len;