OSDN Git Service

SUNRPC: Fix unx_lookup_cred() allocation
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 21 Mar 2022 21:46:30 +0000 (17:46 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Tue, 22 Mar 2022 19:52:55 +0000 (15:52 -0400)
Default to the same mempool allocation strategy as for rpc_malloc().

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
net/sunrpc/auth_unix.c

index c629d36..1e091d3 100644 (file)
@@ -40,17 +40,19 @@ unx_destroy(struct rpc_auth *auth)
 /*
  * Lookup AUTH_UNIX creds for current process
  */
-static struct rpc_cred *
-unx_lookup_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
+static struct rpc_cred *unx_lookup_cred(struct rpc_auth *auth,
+                                       struct auth_cred *acred, int flags)
 {
-       gfp_t gfp = GFP_KERNEL;
        struct rpc_cred *ret;
 
-       if (flags & RPCAUTH_LOOKUP_ASYNC)
-               gfp = GFP_NOWAIT | __GFP_NOWARN;
-       ret = mempool_alloc(unix_pool, gfp);
-       if (!ret)
-               return ERR_PTR(-ENOMEM);
+       ret = kmalloc(sizeof(*ret), rpc_task_gfp_mask());
+       if (!ret) {
+               if (!(flags & RPCAUTH_LOOKUP_ASYNC))
+                       return ERR_PTR(-ENOMEM);
+               ret = mempool_alloc(unix_pool, GFP_NOWAIT);
+               if (!ret)
+                       return ERR_PTR(-ENOMEM);
+       }
        rpcauth_init_cred(ret, acred, auth, &unix_credops);
        ret->cr_flags = 1UL << RPCAUTH_CRED_UPTODATE;
        return ret;