From 2d8ab55cdd957c8ba9a24ec405c796794a7dd784 Mon Sep 17 00:00:00 2001 From: "Denis V. Lunev" Date: Sat, 5 Jul 2008 19:02:06 -0700 Subject: [PATCH] --- yaml --- r: 103221 b: refs/heads/master c: 639e104facec20f64f2eb940851ae45e5f255e6b h: refs/heads/master i: 103219: fb19a8b4e2b90b19d2092a11674e3f11a1b4c61f v: v3 --- [refs] | 2 +- trunk/net/ipv4/route.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 605d41a64f06..41b4d9ce07e9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ae299fc051aa68ca6ef1807c37bb92d9b6ff817c +refs/heads/master: 639e104facec20f64f2eb940851ae45e5f255e6b diff --git a/trunk/net/ipv4/route.c b/trunk/net/ipv4/route.c index cedc366505bd..790de32cd7d4 100644 --- a/trunk/net/ipv4/route.c +++ b/trunk/net/ipv4/route.c @@ -2829,14 +2829,20 @@ void ip_rt_multicast_event(struct in_device *in_dev) } #ifdef CONFIG_SYSCTL -static int flush_delay; - static int ipv4_sysctl_rtcache_flush(ctl_table *ctl, int write, struct file *filp, void __user *buffer, size_t *lenp, loff_t *ppos) { if (write) { + int flush_delay; + static DEFINE_MUTEX(flush_mutex); + + mutex_lock(&flush_mutex); + ctl->data = &flush_delay; proc_dointvec(ctl, write, filp, buffer, lenp, ppos); + ctl->data = NULL; + mutex_unlock(&flush_mutex); + rt_cache_flush(&init_net, flush_delay); return 0; } @@ -2865,7 +2871,6 @@ ctl_table ipv4_route_table[] = { { .ctl_name = NET_IPV4_ROUTE_FLUSH, .procname = "flush", - .data = &flush_delay, .maxlen = sizeof(int), .mode = 0200, .proc_handler = &ipv4_sysctl_rtcache_flush,