From 29b7010fcb6dcaac642394d8f55afe21a1eea12a Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Sun, 22 Aug 2004 23:02:41 -0700 Subject: [PATCH] [PATCH] kNFSd: fix race with flushing nfsd cache. To purge an nfsd-authentication cache, we set the flush time to later than last-refresh time in the cache and call cache_flush. The easiest way to find 'later than last-refresh' is 'now+1'. This has two problems. 1/ if the time-of-day clock has gone bacwards, some entries might not be purged 2/ if a new entry is added in the same second as cache_purge ran, it will get ignored. To resolve these issues, we set the flushtime to the maximum possible time before calling cache_flush, and then set it back to the minimum time afterwards. Signed-off-by: Neil Brown Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- net/sunrpc/cache.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c index 1ceeb11591bfb..d508a513d6322 100644 --- a/net/sunrpc/cache.c +++ b/net/sunrpc/cache.c @@ -400,9 +400,10 @@ void cache_flush(void) void cache_purge(struct cache_detail *detail) { - detail->flush_time = get_seconds()+1; + detail->flush_time = LONG_MAX; detail->nextcheck = get_seconds(); cache_flush(); + detail->flush_time = 1; } -- 2.53.0