]> err.no Git - linux-2.6/blobdiff - net/ipv6/icmp.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx
[linux-2.6] / net / ipv6 / icmp.c
index 195086114e63e894365c2be8794e583d9e67fab2..abedf95fdf2dd0ca5f8cfa25cdfe0f6504395592 100644 (file)
@@ -5,8 +5,6 @@
  *     Authors:
  *     Pedro Roque             <roque@di.fc.ul.pt>
  *
- *     $Id: icmp.c,v 1.38 2002/02/08 03:57:19 davem Exp $
- *
  *     Based on net/ipv4/icmp.c
  *
  *     RFC 1885
@@ -441,24 +439,26 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info,
        }
 
        if (xfrm_decode_session_reverse(skb, &fl2, AF_INET6))
-               goto out_dst_release;
+               goto relookup_failed;
 
        if (ip6_dst_lookup(sk, &dst2, &fl))
-               goto out_dst_release;
+               goto relookup_failed;
 
        err = xfrm_lookup(&dst2, &fl, sk, XFRM_LOOKUP_ICMP);
-       if (err == -ENOENT) {
+       switch (err) {
+       case 0:
+               dst_release(dst);
+               dst = dst2;
+               break;
+       case -EPERM:
+               goto out_dst_release;
+       default:
+relookup_failed:
                if (!dst)
                        goto out;
-               goto route_done;
+               break;
        }
 
-       dst_release(dst);
-       dst = dst2;
-
-       if (err)
-               goto out;
-
 route_done:
        if (ipv6_addr_is_multicast(&fl.fl6_dst))
                hlimit = np->mcast_hops;
@@ -954,7 +954,8 @@ ctl_table ipv6_icmp_table_template[] = {
                .data           = &init_net.ipv6.sysctl.icmpv6_time,
                .maxlen         = sizeof(int),
                .mode           = 0644,
-               .proc_handler   = &proc_dointvec
+               .proc_handler   = &proc_dointvec_ms_jiffies,
+               .strategy       = &sysctl_ms_jiffies
        },
        { .ctl_name = 0 },
 };