ipvs: Pass ipvs not net into ip_vs_app_net_init and ip_vs_app_net_cleanup
[deliverable/linux.git] / net / netfilter / ipvs / ip_vs_core.c
index 1fa12edccbcc6481be3407fcb2e872d8c0183f29..01398eb757fa0ff7ec0a37ec573141f56f34f657 100644 (file)
@@ -179,7 +179,7 @@ ip_vs_out_stats(struct ip_vs_conn *cp, struct sk_buff *skb)
 static inline void
 ip_vs_conn_stats(struct ip_vs_conn *cp, struct ip_vs_service *svc)
 {
-       struct netns_ipvs *ipvs = net_ipvs(svc->net);
+       struct netns_ipvs *ipvs = svc->ipvs;
        struct ip_vs_cpu_stats *s;
 
        s = this_cpu_ptr(cp->dest->stats.cpustats);
@@ -215,7 +215,7 @@ ip_vs_conn_fill_param_persist(const struct ip_vs_service *svc,
                              const union nf_inet_addr *vaddr, __be16 vport,
                              struct ip_vs_conn_param *p)
 {
-       ip_vs_conn_fill_param(svc->net, svc->af, protocol, caddr, cport, vaddr,
+       ip_vs_conn_fill_param(svc->ipvs, svc->af, protocol, caddr, cport, vaddr,
                              vport, p);
        p->pe = rcu_dereference(svc->pe);
        if (p->pe && p->pe->fill_param)
@@ -376,7 +376,7 @@ ip_vs_sched_persist(struct ip_vs_service *svc,
        /*
         *    Create a new connection according to the template
         */
-       ip_vs_conn_fill_param(svc->net, svc->af, iph->protocol, src_addr,
+       ip_vs_conn_fill_param(svc->ipvs, svc->af, iph->protocol, src_addr,
                              src_port, dst_addr, dst_port, &param);
 
        cp = ip_vs_conn_new(&param, dest->af, &dest->addr, dport, flags, dest,
@@ -524,7 +524,7 @@ ip_vs_schedule(struct ip_vs_service *svc, struct sk_buff *skb,
        {
                struct ip_vs_conn_param p;
 
-               ip_vs_conn_fill_param(svc->net, svc->af, iph->protocol,
+               ip_vs_conn_fill_param(svc->ipvs, svc->af, iph->protocol,
                                      caddr, cport, vaddr, vport, &p);
                cp = ip_vs_conn_new(&p, dest->af, &dest->addr,
                                    dest->port ? dest->port : vport,
@@ -600,7 +600,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
                IP_VS_DBG(6, "%s(): create a cache_bypass entry\n", __func__);
                {
                        struct ip_vs_conn_param p;
-                       ip_vs_conn_fill_param(svc->net, svc->af, iph->protocol,
+                       ip_vs_conn_fill_param(svc->ipvs, svc->af, iph->protocol,
                                              &iph->saddr, pptr[0],
                                              &iph->daddr, pptr[1], &p);
                        cp = ip_vs_conn_new(&p, svc->af, &daddr, 0,
@@ -1186,6 +1186,7 @@ static unsigned int
 ip_vs_out(unsigned int hooknum, struct sk_buff *skb, int af)
 {
        struct net *net = NULL;
+       struct netns_ipvs *ipvs;
        struct ip_vs_iphdr iph;
        struct ip_vs_protocol *pp;
        struct ip_vs_proto_data *pd;
@@ -1211,7 +1212,8 @@ ip_vs_out(unsigned int hooknum, struct sk_buff *skb, int af)
                return NF_ACCEPT;
 
        net = skb_net(skb);
-       if (!net_ipvs(net)->enable)
+       ipvs = net_ipvs(net);
+       if (!ipvs->enable)
                return NF_ACCEPT;
 
        ip_vs_fill_iph_skb(af, skb, false, &iph);
@@ -1235,7 +1237,7 @@ ip_vs_out(unsigned int hooknum, struct sk_buff *skb, int af)
                                return verdict;
                }
 
-       pd = ip_vs_proto_data_get(net, iph.protocol);
+       pd = ip_vs_proto_data_get(ipvs, iph.protocol);
        if (unlikely(!pd))
                return NF_ACCEPT;
        pp = pd->pp;
@@ -1269,7 +1271,7 @@ ip_vs_out(unsigned int hooknum, struct sk_buff *skb, int af)
                                         sizeof(_ports), _ports, &iph);
                if (pptr == NULL)
                        return NF_ACCEPT;       /* Not for me */
-               if (ip_vs_has_real_service(net, af, iph.protocol, &iph.saddr,
+               if (ip_vs_has_real_service(ipvs, af, iph.protocol, &iph.saddr,
                                           pptr[0])) {
                        /*
                         * Notify the real server: there is no
@@ -1401,6 +1403,7 @@ static int
 ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum)
 {
        struct net *net = NULL;
+       struct netns_ipvs *ipvs;
        struct iphdr *iph;
        struct icmphdr  _icmph, *ic;
        struct iphdr    _ciph, *cih;    /* The ip header contained within the ICMP */
@@ -1450,6 +1453,7 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum)
                return NF_ACCEPT; /* The packet looks wrong, ignore */
 
        net = skb_net(skb);
+       ipvs = net_ipvs(net);
 
        /* Special case for errors for IPIP packets */
        ipip = false;
@@ -1466,7 +1470,7 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum)
                ipip = true;
        }
 
-       pd = ip_vs_proto_data_get(net, cih->protocol);
+       pd = ip_vs_proto_data_get(ipvs, cih->protocol);
        if (!pd)
                return NF_ACCEPT;
        pp = pd->pp;
@@ -1491,7 +1495,7 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum)
        if (!cp) {
                int v;
 
-               if (!sysctl_schedule_icmp(net_ipvs(net)))
+               if (!sysctl_schedule_icmp(ipvs))
                        return NF_ACCEPT;
 
                if (!ip_vs_try_to_schedule(AF_INET, skb, pd, &v, &cp, &ciph))
@@ -1587,6 +1591,7 @@ static int ip_vs_in_icmp_v6(struct sk_buff *skb, int *related,
                            unsigned int hooknum, struct ip_vs_iphdr *iph)
 {
        struct net *net = NULL;
+       struct netns_ipvs *ipvs;
        struct icmp6hdr _icmph, *ic;
        struct ip_vs_iphdr ciph = {.flags = 0, .fragoffs = 0};/*Contained IP */
        struct ip_vs_conn *cp;
@@ -1627,7 +1632,8 @@ static int ip_vs_in_icmp_v6(struct sk_buff *skb, int *related,
                return NF_ACCEPT;
 
        net = skb_net(skb);
-       pd = ip_vs_proto_data_get(net, ciph.protocol);
+       ipvs = net_ipvs(net);
+       pd = ip_vs_proto_data_get(ipvs, ciph.protocol);
        if (!pd)
                return NF_ACCEPT;
        pp = pd->pp;
@@ -1647,7 +1653,7 @@ static int ip_vs_in_icmp_v6(struct sk_buff *skb, int *related,
        if (!cp) {
                int v;
 
-               if (!sysctl_schedule_icmp(net_ipvs(net)))
+               if (!sysctl_schedule_icmp(ipvs))
                        return NF_ACCEPT;
 
                if (!ip_vs_try_to_schedule(AF_INET6, skb, pd, &v, &cp, &ciph))
@@ -1759,7 +1765,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
                }
 
        /* Protocol supported? */
-       pd = ip_vs_proto_data_get(net, iph.protocol);
+       pd = ip_vs_proto_data_get(ipvs, iph.protocol);
        if (unlikely(!pd)) {
                /* The only way we'll see this packet again is if it's
                 * encapsulated, so mark it with ipvs_property=1 so we
@@ -1836,7 +1842,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
                pkts = atomic_add_return(1, &cp->in_pkts);
 
        if (ipvs->sync_state & IP_VS_STATE_MASTER)
-               ip_vs_sync_conn(net, cp, pkts);
+               ip_vs_sync_conn(ipvs, cp, pkts);
 
        ip_vs_conn_put(cp);
        return ret;
@@ -1905,15 +1911,13 @@ ip_vs_forward_icmp(void *priv, struct sk_buff *skb,
                   const struct nf_hook_state *state)
 {
        int r;
-       struct net *net;
        struct netns_ipvs *ipvs;
 
        if (ip_hdr(skb)->protocol != IPPROTO_ICMP)
                return NF_ACCEPT;
 
        /* ipvs enabled in this netns ? */
-       net = skb_net(skb);
-       ipvs = net_ipvs(net);
+       ipvs = net_ipvs(state->net);
        if (unlikely(sysctl_backup_only(ipvs) || !ipvs->enable))
                return NF_ACCEPT;
 
@@ -1926,7 +1930,6 @@ ip_vs_forward_icmp_v6(void *priv, struct sk_buff *skb,
                      const struct nf_hook_state *state)
 {
        int r;
-       struct net *net;
        struct netns_ipvs *ipvs;
        struct ip_vs_iphdr iphdr;
 
@@ -1935,8 +1938,7 @@ ip_vs_forward_icmp_v6(void *priv, struct sk_buff *skb,
                return NF_ACCEPT;
 
        /* ipvs enabled in this netns ? */
-       net = skb_net(skb);
-       ipvs = net_ipvs(net);
+       ipvs = net_ipvs(state->net);
        if (unlikely(sysctl_backup_only(ipvs) || !ipvs->enable))
                return NF_ACCEPT;
 
@@ -2070,22 +2072,22 @@ static int __net_init __ip_vs_init(struct net *net)
        atomic_inc(&ipvs_netns_cnt);
        net->ipvs = ipvs;
 
-       if (ip_vs_estimator_net_init(net) < 0)
+       if (ip_vs_estimator_net_init(ipvs) < 0)
                goto estimator_fail;
 
-       if (ip_vs_control_net_init(net) < 0)
+       if (ip_vs_control_net_init(ipvs) < 0)
                goto control_fail;
 
        if (ip_vs_protocol_net_init(net) < 0)
                goto protocol_fail;
 
-       if (ip_vs_app_net_init(net) < 0)
+       if (ip_vs_app_net_init(ipvs) < 0)
                goto app_fail;
 
        if (ip_vs_conn_net_init(net) < 0)
                goto conn_fail;
 
-       if (ip_vs_sync_net_init(net) < 0)
+       if (ip_vs_sync_net_init(ipvs) < 0)
                goto sync_fail;
 
        printk(KERN_INFO "IPVS: Creating netns size=%zu id=%d\n",
@@ -2098,13 +2100,13 @@ static int __net_init __ip_vs_init(struct net *net)
 sync_fail:
        ip_vs_conn_net_cleanup(net);
 conn_fail:
-       ip_vs_app_net_cleanup(net);
+       ip_vs_app_net_cleanup(ipvs);
 app_fail:
        ip_vs_protocol_net_cleanup(net);
 protocol_fail:
-       ip_vs_control_net_cleanup(net);
+       ip_vs_control_net_cleanup(ipvs);
 control_fail:
-       ip_vs_estimator_net_cleanup(net);
+       ip_vs_estimator_net_cleanup(ipvs);
 estimator_fail:
        net->ipvs = NULL;
        return -ENOMEM;
@@ -2112,22 +2114,25 @@ estimator_fail:
 
 static void __net_exit __ip_vs_cleanup(struct net *net)
 {
-       ip_vs_service_net_cleanup(net); /* ip_vs_flush() with locks */
+       struct netns_ipvs *ipvs = net_ipvs(net);
+
+       ip_vs_service_net_cleanup(ipvs);        /* ip_vs_flush() with locks */
        ip_vs_conn_net_cleanup(net);
-       ip_vs_app_net_cleanup(net);
+       ip_vs_app_net_cleanup(ipvs);
        ip_vs_protocol_net_cleanup(net);
-       ip_vs_control_net_cleanup(net);
-       ip_vs_estimator_net_cleanup(net);
-       IP_VS_DBG(2, "ipvs netns %d released\n", net_ipvs(net)->gen);
+       ip_vs_control_net_cleanup(ipvs);
+       ip_vs_estimator_net_cleanup(ipvs);
+       IP_VS_DBG(2, "ipvs netns %d released\n", ipvs->gen);
        net->ipvs = NULL;
 }
 
 static void __net_exit __ip_vs_dev_cleanup(struct net *net)
 {
+       struct netns_ipvs *ipvs = net_ipvs(net);
        EnterFunction(2);
-       net_ipvs(net)->enable = 0;      /* Disable packet reception */
+       ipvs->enable = 0;       /* Disable packet reception */
        smp_wmb();
-       ip_vs_sync_net_cleanup(net);
+       ip_vs_sync_net_cleanup(ipvs);
        LeaveFunction(2);
 }
 
This page took 0.030027 seconds and 5 git commands to generate.