ipv4: Kill early demux method return value.
[deliverable/linux.git] / net / ipv4 / ip_input.c
index 2a39204de5bc0236933da71c4ed530292d71f086..b27d4440f523d0d500cbb83a97ed4b6e46d125b6 100644 (file)
@@ -320,33 +320,29 @@ static int ip_rcv_finish(struct sk_buff *skb)
        const struct iphdr *iph = ip_hdr(skb);
        struct rtable *rt;
 
+       if (sysctl_ip_early_demux && !skb_dst(skb)) {
+               const struct net_protocol *ipprot;
+               int protocol = iph->protocol;
+
+               rcu_read_lock();
+               ipprot = rcu_dereference(inet_protos[protocol]);
+               if (ipprot && ipprot->early_demux)
+                       ipprot->early_demux(skb);
+               rcu_read_unlock();
+       }
+
        /*
         *      Initialise the virtual path cache for the packet. It describes
         *      how the packet travels inside Linux networking.
         */
-       if (skb_dst(skb) == NULL) {
-               int err = -ENOENT;
-
-               if (sysctl_ip_early_demux) {
-                       const struct net_protocol *ipprot;
-                       int protocol = iph->protocol;
-
-                       rcu_read_lock();
-                       ipprot = rcu_dereference(inet_protos[protocol]);
-                       if (ipprot && ipprot->early_demux)
-                               err = ipprot->early_demux(skb);
-                       rcu_read_unlock();
-               }
-
-               if (err) {
-                       err = ip_route_input_noref(skb, iph->daddr, iph->saddr,
-                                                  iph->tos, skb->dev);
-                       if (unlikely(err)) {
-                               if (err == -EXDEV)
-                                       NET_INC_STATS_BH(dev_net(skb->dev),
-                                                        LINUX_MIB_IPRPFILTER);
-                               goto drop;
-                       }
+       if (!skb_dst(skb)) {
+               int err = ip_route_input_noref(skb, iph->daddr, iph->saddr,
+                                              iph->tos, skb->dev);
+               if (unlikely(err)) {
+                       if (err == -EXDEV)
+                               NET_INC_STATS_BH(dev_net(skb->dev),
+                                                LINUX_MIB_IPRPFILTER);
+                       goto drop;
                }
        }
 
This page took 0.040227 seconds and 5 git commands to generate.