LVS
lvs-devel
Google
 
Web LinuxVirtualServer.org

Re: [PATCH 4/5] IPVS: Allow compilation with CONFIG_SYSCTL disabled

To: "Simon Horman" <horms@xxxxxxxxxxxx>
Subject: Re: [PATCH 4/5] IPVS: Allow compilation with CONFIG_SYSCTL disabled
Cc: netdev@xxxxxxxxxxxxxxx, linux-next@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, lvs-devel@xxxxxxxxxxxxxxx, "Randy Dunlap" <randy.dunlap@xxxxxxxxxx>, "Stephen Rothwell" <sfr@xxxxxxxxxxxxxxxx>, "Patrick McHardy" <kaber@xxxxxxxxx>
From: "Hans Schillstrom" <hans@xxxxxxxxxxxxxxx>
Date: Tue, 1 Feb 2011 18:11:55 +0100 (CET)
>---- Original Message ----
>From: Simon Horman <horms@xxxxxxxxxxxx>
>To: netdev@xxxxxxxxxxxxxxx, linux-next@xxxxxxxxxxxxxxx, 
>linux-kernel@xxxxxxxxxxxxxxx, lvs-devel@xxxxxxxxxxxxxxx
>Cc: "Randy Dunlap" <randy.dunlap@xxxxxxxxxx>, "Stephen Rothwell" 
><sfr@xxxxxxxxxxxxxxxx>, "Hans Schillstrom" <hans@xxxxxxxxxxxxxxx>, "Patrick 
>McHardy" <kaber@xxxxxxxxx>, "Simon Horman" <horms@xxxxxxxxxxxx>
>Sent: Tue, Feb 1, 2011, 11:11 AM
>Subject: [PATCH 4/5] IPVS: Allow compilation with CONFIG_SYSCTL disabled
>
>This is a rather naieve approach to allowing PVS to compile with
>CONFIG_SYSCTL disabled.  I am working on a more comprehensive patch which
>will remove compilation of all sysctl-related IPVS code when CONFIG_SYSCTL
>is disabled.
>
>Cc: Hans Schillstrom <hans@xxxxxxxxxxxxxxx>
>Reported-by: Randy Dunlap <randy.dunlap@xxxxxxxxxx>
>Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>

Signed-off-by: Hans Schillstrom <hans@xxxxxxxxxxxxxxx>
Tested-by: Hans Schillstrom <hans@xxxxxxxxxxxxxxx>

>---
> net/netfilter/ipvs/ip_vs_ctl.c   |   14 +++++++++-----
> net/netfilter/ipvs/ip_vs_lblc.c  |   20 ++++++++++----------
> net/netfilter/ipvs/ip_vs_lblcr.c |   20 ++++++++++----------
> 3 files changed, 29 insertions(+), 25 deletions(-)
>
>diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
>index d7c2fa8..c73b0c8 100644
>--- a/net/netfilter/ipvs/ip_vs_ctl.c
>+++ b/net/netfilter/ipvs/ip_vs_ctl.c
>@@ -3552,10 +3552,15 @@ int __net_init __ip_vs_control_init(struct net *net)
>       tbl[idx++].data = &ipvs->sysctl_nat_icmp_send;
> 
> 
>+#ifdef CONFIG_SYSCTL
>       ipvs->sysctl_hdr = register_net_sysctl_table(net, net_vs_ctl_path,
>                                                    tbl);
>-      if (ipvs->sysctl_hdr == NULL)
>-              goto err_reg;
>+      if (ipvs->sysctl_hdr == NULL) {
>+              if (!net_eq(net, &init_net))
>+                      kfree(tbl);
>+              goto err_dup;
>+      }
>+#endif
>       ip_vs_new_estimator(net, ipvs->tot_stats);
>       ipvs->sysctl_tbl = tbl;
>       /* Schedule defense work */
>@@ -3563,9 +3568,6 @@ int __net_init __ip_vs_control_init(struct net *net)
>       schedule_delayed_work(&ipvs->defense_work, DEFENSE_TIMER_PERIOD);
>       return 0;
> 
>-err_reg:
>-      if (!net_eq(net, &init_net))
>-              kfree(tbl);
> err_dup:
>       free_percpu(ipvs->cpustats);
> err_alloc:
>@@ -3581,7 +3583,9 @@ static void __net_exit __ip_vs_control_cleanup(struct 
>net *net)
>       ip_vs_kill_estimator(net, ipvs->tot_stats);
>       cancel_delayed_work_sync(&ipvs->defense_work);
>       cancel_work_sync(&ipvs->defense_work.work);
>+#ifdef CONFIG_SYSCTL
>       unregister_net_sysctl_table(ipvs->sysctl_hdr);
>+#endif
>       proc_net_remove(net, "ip_vs_stats_percpu");
>       proc_net_remove(net, "ip_vs_stats");
>       proc_net_remove(net, "ip_vs");
>diff --git a/net/netfilter/ipvs/ip_vs_lblc.c b/net/netfilter/ipvs/ip_vs_lblc.c
>index d5bec33..00b5ffa 100644
>--- a/net/netfilter/ipvs/ip_vs_lblc.c
>+++ b/net/netfilter/ipvs/ip_vs_lblc.c
>@@ -554,33 +554,33 @@ static int __net_init __ip_vs_lblc_init(struct net *net)
>                                               sizeof(vs_vars_table),
>                                               GFP_KERNEL);
>               if (ipvs->lblc_ctl_table == NULL)
>-                      goto err_dup;
>+                      return -ENOMEM;
>       } else
>               ipvs->lblc_ctl_table = vs_vars_table;
>       ipvs->sysctl_lblc_expiration = 24*60*60*HZ;
>       ipvs->lblc_ctl_table[0].data = &ipvs->sysctl_lblc_expiration;
> 
>+#ifdef CONFIG_SYSCTL
>       ipvs->lblc_ctl_header =
>               register_net_sysctl_table(net, net_vs_ctl_path,
>                                         ipvs->lblc_ctl_table);
>-      if (!ipvs->lblc_ctl_header)
>-              goto err_reg;
>+      if (!ipvs->lblc_ctl_header) {
>+              if (!net_eq(net, &init_net))
>+                      kfree(ipvs->lblc_ctl_table);
>+              return -ENOMEM;
>+      }
>+#endif
> 
>       return 0;
>-
>-err_reg:
>-      if (!net_eq(net, &init_net))
>-              kfree(ipvs->lblc_ctl_table);
>-
>-err_dup:
>-      return -ENOMEM;
> }
> 
> static void __net_exit __ip_vs_lblc_exit(struct net *net)
> {
>       struct netns_ipvs *ipvs = net_ipvs(net);
> 
>+#ifdef CONFIG_SYSCTL
>       unregister_net_sysctl_table(ipvs->lblc_ctl_header);
>+#endif
> 
>       if (!net_eq(net, &init_net))
>               kfree(ipvs->lblc_ctl_table);
>diff --git a/net/netfilter/ipvs/ip_vs_lblcr.c 
>b/net/netfilter/ipvs/ip_vs_lblcr.c
>index 61ae8cf..bfa25f1 100644
>--- a/net/netfilter/ipvs/ip_vs_lblcr.c
>+++ b/net/netfilter/ipvs/ip_vs_lblcr.c
>@@ -754,33 +754,33 @@ static int __net_init __ip_vs_lblcr_init(struct net *net)
>                                               sizeof(vs_vars_table),
>                                               GFP_KERNEL);
>               if (ipvs->lblcr_ctl_table == NULL)
>-                      goto err_dup;
>+                      return -ENOMEM;
>       } else
>               ipvs->lblcr_ctl_table = vs_vars_table;
>       ipvs->sysctl_lblcr_expiration = 24*60*60*HZ;
>       ipvs->lblcr_ctl_table[0].data = &ipvs->sysctl_lblcr_expiration;
> 
>+#ifdef CONFIG_SYSCTL
>       ipvs->lblcr_ctl_header =
>               register_net_sysctl_table(net, net_vs_ctl_path,
>                                         ipvs->lblcr_ctl_table);
>-      if (!ipvs->lblcr_ctl_header)
>-              goto err_reg;
>+      if (!ipvs->lblcr_ctl_header) {
>+              if (!net_eq(net, &init_net))
>+                      kfree(ipvs->lblcr_ctl_table);
>+              return -ENOMEM;
>+      }
>+#endif
> 
>       return 0;
>-
>-err_reg:
>-      if (!net_eq(net, &init_net))
>-              kfree(ipvs->lblcr_ctl_table);
>-
>-err_dup:
>-      return -ENOMEM;
> }
> 
> static void __net_exit __ip_vs_lblcr_exit(struct net *net)
> {
>       struct netns_ipvs *ipvs = net_ipvs(net);
> 
>+#ifdef CONFIG_SYSCTL
>       unregister_net_sysctl_table(ipvs->lblcr_ctl_header);
>+#endif
> 
>       if (!net_eq(net, &init_net))
>               kfree(ipvs->lblcr_ctl_table);
>-- 
>1.7.2.3
>
>--
>To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
>the body of a message to majordomo@xxxxxxxxxxxxxxx
>More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

<Prev in Thread] Current Thread [Next in Thread>