Move no_route code into helper. Add call to helper at jump sites and
remove goto label.

Signed-off-by: David Ahern <d...@cumulusnetworks.com>
---
 net/ipv4/route.c | 36 +++++++++++++++++++++++-------------
 1 file changed, 23 insertions(+), 13 deletions(-)

diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 340246414545..2709ee6e292e 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1737,6 +1737,22 @@ static int ip_route_local_input(struct sk_buff *skb,
        return err;
 }
 
+static int ip_input_no_route(struct sk_buff *skb,
+                            struct fib_result *res,
+                            struct net *net,
+                            struct in_device *in_dev,
+                            unsigned int flags,
+                            u32 itag, int err)
+{
+       RT_CACHE_STAT_INC(in_no_route);
+
+       res->type = RTN_UNREACHABLE;
+       res->fi = NULL;
+       res->table = NULL;
+
+       return ip_route_local_input(skb, res, net, in_dev, flags, itag, err);
+}
+
 /*
  *     NOTE. We drop all the packets that has local source
  *     addresses, because every properly looped back packet
@@ -1824,7 +1840,10 @@ static int ip_route_input_slow(struct sk_buff *skb, 
__be32 daddr, __be32 saddr,
        if (err != 0) {
                if (!IN_DEV_FORWARD(in_dev))
                        err = -EHOSTUNREACH;
-               goto no_route;
+
+               err = ip_input_no_route(skb, &res, net, in_dev,
+                                       flags, itag, err);
+               goto out;
        }
 
        if (res.type == RTN_BROADCAST)
@@ -1843,8 +1862,9 @@ static int ip_route_input_slow(struct sk_buff *skb, 
__be32 daddr, __be32 saddr,
        }
 
        if (!IN_DEV_FORWARD(in_dev)) {
-               err = -EHOSTUNREACH;
-               goto no_route;
+               err = ip_input_no_route(skb, &res, net, in_dev,
+                                       flags, itag, -EHOSTUNREACH);
+               goto out;
        }
        if (res.type != RTN_UNICAST) {
                err = -EINVAL;
@@ -1875,16 +1895,6 @@ out:     return err;
        err = ip_route_local_input(skb, &res, net, in_dev,
                                   flags, itag, err);
        goto out;
-
-no_route:
-       RT_CACHE_STAT_INC(in_no_route);
-       res.type = RTN_UNREACHABLE;
-       res.fi = NULL;
-       res.table = NULL;
-
-       err = ip_route_local_input(skb, &res, net, in_dev,
-                                  flags, itag, err);
-       goto out;
 }
 
 int ip_route_input_noref(struct sk_buff *skb, __be32 daddr, __be32 saddr,
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to