On Fri, 2010-05-14 at 14:07 -0400, Trond Myklebust wrote: > On Fri, 2010-05-14 at 13:32 -0400, Chuck Lever wrote: > > When mm calls with nr_to_scan set to zero, it doesn't expect a -1 > > return, it just uses the returned value. mm checks for a -1 return only > > when a non-zero scan count argument is passed. > > > > So the check you added here (and in the access cache shrinker) to return > > -1 when the gfp_mask doesn't contain GFP_KERNEL could cause some > > trouble. It would be safer if we return -1 _after_ checking for > > nr_to_scan == 0. > > Oh... You're referring to the change that was added in Patch 6/15 > SUNRPC: Dont run rpcauth_cache_shrinker() when gfp_mask is GFP_NOFS? I > got confused... > > I can perhaps rather add a check for nr_to_scan != 0 in that patch... OK... How about the following? (and ditto for the access cache shrinker) -------------------------------------------------------------------------------------------- >From 8048209c54b95046a23cd994b3d0520757ea5845 Mon Sep 17 00:00:00 2001 From: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> Date: Thu, 13 May 2010 12:51:03 -0400 Subject: [PATCH 06/15] SUNRPC: Dont run rpcauth_cache_shrinker() when gfp_mask is GFP_NOFS Under some circumstances, put_rpccred() can end up allocating memory, so check the gfp_mask to prevent deadlocks. Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> --- net/sunrpc/auth.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c index 95afe79..0667a36 100644 --- a/net/sunrpc/auth.c +++ b/net/sunrpc/auth.c @@ -270,6 +270,8 @@ rpcauth_cache_shrinker(int nr_to_scan, gfp_t gfp_mask) LIST_HEAD(free); int res; + if ((gfp_mask & GFP_KERNEL) != GFP_KERNEL) + return (nr_to_scan == 0) ? 0 : -1; if (list_empty(&cred_unused)) return 0; spin_lock(&rpc_credcache_lock); -- 1.6.6.1 -- 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