aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDenis V. Lunev <den@openvz.org>2008-07-05 22:02:06 -0400
committerDavid S. Miller <davem@davemloft.net>2008-07-05 22:02:06 -0400
commit639e104facec20f64f2eb940851ae45e5f255e6b (patch)
tree54e035641e7640b1b1d49fd2fc94d503540274c5 /net
parentae299fc051aa68ca6ef1807c37bb92d9b6ff817c (diff)
ipv4: remove static flush_delay variable
flush delay is used as an external storage for net.ipv4.route.flush sysctl entry. It is write-only. The ctl_table->data for this entry is used once. Fix this case to point to the stack to remove global variable. Do this to avoid additional variable on struct net in the next patch. Possible race (as it was before) accessing this local variable is removed using flush_mutex. Signed-off-by: Denis V. Lunev <den@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/ipv4/route.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index cedc366505bd..790de32cd7d4 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -2829,14 +2829,20 @@ void ip_rt_multicast_event(struct in_device *in_dev)
2829} 2829}
2830 2830
2831#ifdef CONFIG_SYSCTL 2831#ifdef CONFIG_SYSCTL
2832static int flush_delay;
2833
2834static int ipv4_sysctl_rtcache_flush(ctl_table *ctl, int write, 2832static int ipv4_sysctl_rtcache_flush(ctl_table *ctl, int write,
2835 struct file *filp, void __user *buffer, 2833 struct file *filp, void __user *buffer,
2836 size_t *lenp, loff_t *ppos) 2834 size_t *lenp, loff_t *ppos)
2837{ 2835{
2838 if (write) { 2836 if (write) {
2837 int flush_delay;
2838 static DEFINE_MUTEX(flush_mutex);
2839
2840 mutex_lock(&flush_mutex);
2841 ctl->data = &flush_delay;
2839 proc_dointvec(ctl, write, filp, buffer, lenp, ppos); 2842 proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
2843 ctl->data = NULL;
2844 mutex_unlock(&flush_mutex);
2845
2840 rt_cache_flush(&init_net, flush_delay); 2846 rt_cache_flush(&init_net, flush_delay);
2841 return 0; 2847 return 0;
2842 } 2848 }
@@ -2865,7 +2871,6 @@ ctl_table ipv4_route_table[] = {
2865 { 2871 {
2866 .ctl_name = NET_IPV4_ROUTE_FLUSH, 2872 .ctl_name = NET_IPV4_ROUTE_FLUSH,
2867 .procname = "flush", 2873 .procname = "flush",
2868 .data = &flush_delay,
2869 .maxlen = sizeof(int), 2874 .maxlen = sizeof(int),
2870 .mode = 0200, 2875 .mode = 0200,
2871 .proc_handler = &ipv4_sysctl_rtcache_flush, 2876 .proc_handler = &ipv4_sysctl_rtcache_flush,