vserver 1.9.3
[linux-2.6.git] / net / ipv4 / ipip.c
index 98ba224..1c1c2e1 100644 (file)
@@ -246,7 +246,6 @@ static struct ip_tunnel * ipip_tunnel_locate(struct ip_tunnel_parm *parms, int c
        nt = dev->priv;
        SET_MODULE_OWNER(dev);
        dev->init = ipip_tunnel_init;
-       dev->destructor = free_netdev;
        nt->parms = *parms;
 
        if (register_netdevice(dev) < 0) {
@@ -461,8 +460,7 @@ static inline void ipip_ecn_decapsulate(struct iphdr *outer_iph, struct sk_buff
 {
        struct iphdr *inner_iph = skb->nh.iph;
 
-       if (INET_ECN_is_ce(outer_iph->tos) &&
-           INET_ECN_is_not_ce(inner_iph->tos))
+       if (INET_ECN_is_ce(outer_iph->tos))
                IP_ECN_set_ce(inner_iph);
 }
 
@@ -785,6 +783,7 @@ static void ipip_tunnel_setup(struct net_device *dev)
        dev->get_stats          = ipip_tunnel_get_stats;
        dev->do_ioctl           = ipip_tunnel_ioctl;
        dev->change_mtu         = ipip_tunnel_change_mtu;
+       dev->destructor         = free_netdev;
 
        dev->type               = ARPHRD_TUNNEL;
        dev->hard_header_len    = LL_MAX_HEADER + sizeof(struct iphdr);
@@ -877,18 +876,19 @@ static int __init ipip_init(void)
                                           ipip_tunnel_setup);
        if (!ipip_fb_tunnel_dev) {
                err = -ENOMEM;
-               goto fail;
+               goto err1;
        }
 
        ipip_fb_tunnel_dev->init = ipip_fb_tunnel_init;
 
        if ((err = register_netdev(ipip_fb_tunnel_dev)))
-           goto fail;
+               goto err2;
  out:
        return err;
- fail:
-       xfrm4_tunnel_deregister(&ipip_handler);
+ err2:
        free_netdev(ipip_fb_tunnel_dev);
+ err1:
+       xfrm4_tunnel_deregister(&ipip_handler);
        goto out;
 }