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 | 40 ++++++++++++++++++++++++++--------------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 454c38bd23a8..e486a3fb3081 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1738,6 +1738,23 @@ 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_device *loopback_dev,
+                            unsigned int flags,
+                            u32 itag, int err,
+                            bool nopolicy)
+{
+       RT_CACHE_STAT_INC(in_no_route);
+
+       res->type = RTN_UNREACHABLE;
+       res->fi = NULL;
+       res->table = NULL;
+
+       return ip_route_local_input(skb, res, loopback_dev,
+                                   flags, itag, err, nopolicy);
+}
+
 /*
  *     NOTE. We drop all the packets that has local source
  *     addresses, because every properly looped back packet
@@ -1825,7 +1842,11 @@ 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->loopback_dev,
+                                       flags, itag, err,
+                                       IN_DEV_CONF_GET(in_dev, NOPOLICY));
+               goto out;
        }
 
        if (res.type == RTN_BROADCAST)
@@ -1846,8 +1867,10 @@ 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->loopback_dev,
+                                       flags, itag, -EHOSTUNREACH,
+                                       IN_DEV_CONF_GET(in_dev, NOPOLICY));
+               goto out;
        }
        if (res.type != RTN_UNICAST) {
                err = -EINVAL;
@@ -1879,17 +1902,6 @@ out:     return err;
                                   flags, itag, err,
                                   IN_DEV_CONF_GET(in_dev, NOPOLICY));
        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->loopback_dev,
-                                  flags, itag, err,
-                                  IN_DEV_CONF_GET(in_dev, NOPOLICY));
-       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