ipvs: Wrap sysctl_cache_bypass and remove ifdefs in ip_vs_leave
authorEric W. Biederman <ebiederm@xmission.com>
Mon, 21 Sep 2015 18:02:49 +0000 (13:02 -0500)
committerSimon Horman <horms@verge.net.au>
Thu, 24 Sep 2015 00:34:42 +0000 (09:34 +0900)
With sysctl_cache_bypass now a compile time constant the compiler can
figue out that it can elimiate all of the code that depends on
sysctl_cache_bypass being true.

Also remove the duplicate computation of net previously necessitated
by #ifdef CONFIG_SYSCTL

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Acked-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
include/net/ip_vs.h
net/netfilter/ipvs/ip_vs_core.c

index c68c2c8ae48a60db0358c9f0440213e2c47142ff..dacd873e8bb954f9e4c72d6a2bb97b56bb6fb91c 100644 (file)
@@ -1101,6 +1101,11 @@ static inline int sysctl_ignore_tunneled(struct netns_ipvs *ipvs)
        return ipvs->sysctl_ignore_tunneled;
 }
 
+static inline int sysctl_cache_bypass(struct netns_ipvs *ipvs)
+{
+       return ipvs->sysctl_cache_bypass;
+}
+
 #else
 
 static inline int sysctl_sync_threshold(struct netns_ipvs *ipvs)
@@ -1183,6 +1188,11 @@ static inline int sysctl_ignore_tunneled(struct netns_ipvs *ipvs)
        return 0;
 }
 
+static inline int sysctl_cache_bypass(struct netns_ipvs *ipvs)
+{
+       return 0;
+}
+
 #endif
 
 /* IPVS core functions
index 1c9c52349b7c08373a855ee2d9141d4d27197848..7e9ee1dece19f6b01c86da6720579c0829a49499 100644 (file)
@@ -568,17 +568,14 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
                struct ip_vs_proto_data *pd, struct ip_vs_iphdr *iph)
 {
        __be16 _ports[2], *pptr, dport;
-#ifdef CONFIG_SYSCTL
        struct net *net;
        struct netns_ipvs *ipvs;
-#endif
 
        pptr = frag_safe_skb_hp(skb, iph->len, sizeof(_ports), _ports, iph);
        if (!pptr)
                return NF_DROP;
        dport = likely(!ip_vs_iph_inverse(iph)) ? pptr[1] : pptr[0];
 
-#ifdef CONFIG_SYSCTL
        net = skb_net(skb);
 
 
@@ -586,7 +583,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
           and the destination is a non-local unicast, then create
           a cache_bypass connection entry */
        ipvs = net_ipvs(net);
-       if (ipvs->sysctl_cache_bypass && svc->fwmark &&
+       if (sysctl_cache_bypass(ipvs) && svc->fwmark &&
            !(iph->hdr_flags & (IP_VS_HDR_INVERSE | IP_VS_HDR_ICMP)) &&
            ip_vs_addr_is_unicast(net, svc->af, &iph->daddr)) {
                int ret;
@@ -624,7 +621,6 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
                ip_vs_conn_put(cp);
                return ret;
        }
-#endif
 
        /*
         * When the virtual ftp service is presented, packets destined
@@ -647,11 +643,8 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
         */
 #ifdef CONFIG_IP_VS_IPV6
        if (svc->af == AF_INET6) {
-               if (!skb->dev) {
-                       struct net *net_ = dev_net(skb_dst(skb)->dev);
-
-                       skb->dev = net_->loopback_dev;
-               }
+               if (!skb->dev)
+                       skb->dev = net->loopback_dev;
                icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_PORT_UNREACH, 0);
        } else
 #endif
This page took 0.027596 seconds and 5 git commands to generate.