tcp: make urg+gso work for real this time
[safe/jmp/linux-2.6] / net / ipv4 / xfrm4_policy.c
index 656345f..c63de0a 100644 (file)
@@ -36,7 +36,7 @@ static struct dst_entry *xfrm4_dst_lookup(int tos, xfrm_address_t *saddr,
        if (saddr)
                fl.fl4_src = saddr->a4;
 
-       err = __ip_route_output_key(&rt, &fl);
+       err = __ip_route_output_key(&init_net, &rt, &fl);
        dst = &rt->u.dst;
        if (err)
                dst = ERR_PTR(err);
@@ -185,7 +185,7 @@ _decode_session4(struct sk_buff *skb, struct flowi *fl, int reverse)
        fl->fl4_tos = iph->tos;
 }
 
-static inline int xfrm4_garbage_collect(void)
+static inline int xfrm4_garbage_collect(struct dst_ops *ops)
 {
        xfrm4_policy_afinfo.garbage_collect();
        return (atomic_read(&xfrm4_dst_ops.entries) > xfrm4_dst_ops.gc_thresh*2);
@@ -221,7 +221,7 @@ static void xfrm4_dst_ifdown(struct dst_entry *dst, struct net_device *dev,
        xdst = (struct xfrm_dst *)dst;
        if (xdst->u.rt.idev->dev == dev) {
                struct in_device *loopback_idev =
-                       in_dev_get(dev->nd_net->loopback_dev);
+                       in_dev_get(dev_net(dev)->loopback_dev);
                BUG_ON(!loopback_idev);
 
                do {
@@ -247,6 +247,7 @@ static struct dst_ops xfrm4_dst_ops = {
        .local_out =            __ip_local_out,
        .gc_thresh =            1024,
        .entry_size =           sizeof(struct xfrm_dst),
+       .entries =              ATOMIC_INIT(0),
 };
 
 static struct xfrm_policy_afinfo xfrm4_policy_afinfo = {