From: NeilBrown 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 --- 25-akpm/net/sunrpc/cache.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) diff -puN net/sunrpc/cache.c~knfsd-fix-race-with-flushing-nfsd-cache net/sunrpc/cache.c --- 25/net/sunrpc/cache.c~knfsd-fix-race-with-flushing-nfsd-cache 2004-08-20 00:01:02.230338168 -0700 +++ 25-akpm/net/sunrpc/cache.c 2004-08-20 00:01:02.233337712 -0700 @@ -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; } _