Thanks! Applying for 3.6--b. On Thu, Jul 12, 2012 at 10:37:34AM +1000, NeilBrown wrote: > > Entries that are in a sunrpc cache but are not valid should be reported > with a leading '#' so they look like a comment. > Commit d202cce8963d9 (sunrpc: never return expired entries in sunrpc_cache_lookup) > broke this for expired entries. > > This particularly applies to entries that have been replaced by newer entries. > sunrpc_cache_update sets the expiry of the replaced entry to '0', but it > remains in the cache until the next 'cache_clean'. > The result is that if you > > echo 0 2000000000 1 0 > /proc/net/rpc/auth.unix.gid/channel > > several times, then > > cat /proc/net/rpc/auth.unix.gid/content > > It will display multiple entries for the one uid, which is at least confusing: > > #uid cnt: gids... > 0 1: 0 > 0 1: 0 > 0 1: 0 > > With this patch, expired entries are marked as comments so you get > > #uid cnt: gids... > 0 1: 0 > # 0 1: 0 > # 0 1: 0 > > These expired entries will never be seen by cache_check() as they are always > *after* a non-expired entry with the same key - so the extra check is only > needed in c_show() > > Signed-off-by: NeilBrown <neilb@xxxxxxx> > > -- > It's not a big problem, but it had me confused for a while, so it could > well confuse others. > Thanks, > NeilBrown > > > > diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c > index 47ad266..2afd2a8 100644 > --- a/net/sunrpc/cache.c > +++ b/net/sunrpc/cache.c > @@ -1349,8 +1349,11 @@ static int c_show(struct seq_file *m, void *p) > if (cache_check(cd, cp, NULL)) > /* cache_check does a cache_put on failure */ > seq_printf(m, "# "); > - else > + else { > + if (cache_is_expired(cd, cp)) > + seq_printf(m, "# "); > cache_put(cp, cd); > + } > > return cd->cache_show(m, cd, cp); > } -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html