static int
 nfs_xdr_readargs(struct rpc_rqst *req, __be32 *p, struct nfs_readargs *args)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
        u32 offset = (u32)args->offset;
        u32 count = args->count;
 nfs_xdr_readdirargs(struct rpc_rqst *req, __be32 *p, struct nfs_readdirargs *args)
 {
        struct rpc_task *task = req->rq_task;
-       struct rpc_auth *auth = task->tk_auth;
+       struct rpc_auth *auth = task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
        u32 count = args->count;
 
 static int
 nfs_xdr_readlinkargs(struct rpc_rqst *req, __be32 *p, struct nfs_readlinkargs *args)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
 
        p = xdr_encode_fhandle(p, args->fh);
 
 static int
 nfs3_xdr_readargs(struct rpc_rqst *req, __be32 *p, struct nfs_readargs *args)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
        u32 count = args->count;
 
 static int
 nfs3_xdr_readdirargs(struct rpc_rqst *req, __be32 *p, struct nfs3_readdirargs *args)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
        u32 count = args->count;
 
 nfs3_xdr_getaclargs(struct rpc_rqst *req, __be32 *p,
                    struct nfs3_getaclargs *args)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
 
        p = xdr_encode_fhandle(p, args->fh);
 static int
 nfs3_xdr_readlinkargs(struct rpc_rqst *req, __be32 *p, struct nfs3_readlinkargs *args)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
 
        p = xdr_encode_fhandle(p, args->fh);
 
 
 static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg *readdir, struct rpc_rqst *req)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        uint32_t attrs[2] = {
                FATTR4_WORD0_RDATTR_ERROR|FATTR4_WORD0_FILEID,
                FATTR4_WORD1_MOUNTED_ON_FILEID,
 
 static int encode_readlink(struct xdr_stream *xdr, const struct nfs4_readlink *readlink, struct rpc_rqst *req)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
        __be32 *p;
 
  */
 static int nfs4_xdr_enc_read(struct rpc_rqst *req, __be32 *p, struct nfs_readargs *args)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        struct xdr_stream xdr;
        struct compound_hdr hdr = {
                .nops = 2,
                struct nfs_getaclargs *args)
 {
        struct xdr_stream xdr;
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        struct compound_hdr hdr = {
                .nops   = 2,
        };
        struct compound_hdr hdr = {
                .nops = 3,
        };
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        int replen;
        int status;
 
 
        unsigned short          tk_pid;         /* debugging aid */
 #endif
 };
-#define tk_auth                        tk_client->cl_auth
 #define tk_xprt                        tk_client->cl_xprt
 
 /* support walking a list of tasks on a wait queue */
 
 struct rpc_cred *
 rpcauth_bindcred(struct rpc_task *task)
 {
-       struct rpc_auth *auth = task->tk_auth;
+       struct rpc_auth *auth = task->tk_client->cl_auth;
        struct auth_cred acred = {
                .uid = current->fsuid,
                .gid = current->fsgid,
        int flags = 0;
 
        dprintk("RPC: %5u looking up %s cred\n",
-               task->tk_pid, task->tk_auth->au_ops->au_name);
+               task->tk_pid, task->tk_client->cl_auth->au_ops->au_name);
        get_group_info(acred.group_info);
        if (task->tk_flags & RPC_TASK_ROOTCREDS)
                flags |= RPCAUTH_LOOKUP_ROOTCREDS;
 void
 rpcauth_holdcred(struct rpc_task *task)
 {
-       dprintk("RPC: %5u holding %s cred %p\n",
-               task->tk_pid, task->tk_auth->au_ops->au_name,
-               task->tk_msg.rpc_cred);
-       if (task->tk_msg.rpc_cred)
-               get_rpccred(task->tk_msg.rpc_cred);
+       struct rpc_cred *cred = task->tk_msg.rpc_cred;
+       if (cred != NULL) {
+               get_rpccred(cred);
+               dprintk("RPC: %5u holding %s cred %p\n", task->tk_pid,
+                               cred->cr_auth->au_ops->au_name, cred);
+       }
 }
 
 void
        struct rpc_cred *cred = task->tk_msg.rpc_cred;
 
        dprintk("RPC: %5u releasing %s cred %p\n",
-               task->tk_pid, task->tk_auth->au_ops->au_name, cred);
+               task->tk_pid, cred->cr_auth->au_ops->au_name, cred);
 
        put_rpccred(cred);
        task->tk_msg.rpc_cred = NULL;
        struct rpc_cred *cred = task->tk_msg.rpc_cred;
 
        dprintk("RPC: %5u marshaling %s cred %p\n",
-               task->tk_pid, task->tk_auth->au_ops->au_name, cred);
+               task->tk_pid, cred->cr_auth->au_ops->au_name, cred);
 
        return cred->cr_ops->crmarshal(task, p);
 }
        struct rpc_cred *cred = task->tk_msg.rpc_cred;
 
        dprintk("RPC: %5u validating %s cred %p\n",
-               task->tk_pid, task->tk_auth->au_ops->au_name, cred);
+               task->tk_pid, cred->cr_auth->au_ops->au_name, cred);
 
        return cred->cr_ops->crvalidate(task, p);
 }
        int err;
 
        dprintk("RPC: %5u refreshing %s cred %p\n",
-               task->tk_pid, task->tk_auth->au_ops->au_name, cred);
+               task->tk_pid, cred->cr_auth->au_ops->au_name, cred);
 
        err = cred->cr_ops->crrefresh(task);
        if (err < 0)
        struct rpc_cred *cred = task->tk_msg.rpc_cred;
 
        dprintk("RPC: %5u invalidating %s cred %p\n",
-               task->tk_pid, task->tk_auth->au_ops->au_name, cred);
+               task->tk_pid, cred->cr_auth->au_ops->au_name, cred);
        if (cred)
                clear_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags);
 }
 
                goto out_bad;
        /* We leave it to unwrap to calculate au_rslack. For now we just
         * calculate the length of the verifier: */
-       task->tk_auth->au_verfsize = XDR_QUADLEN(len) + 2;
+       cred->cr_auth->au_verfsize = XDR_QUADLEN(len) + 2;
        gss_put_ctx(ctx);
        dprintk("RPC: %5u gss_validate: gss_verify_mic succeeded.\n",
                        task->tk_pid);
                        break;
        }
        /* take into account extra slack for integrity and privacy cases: */
-       task->tk_auth->au_rslack = task->tk_auth->au_verfsize + (p - savedp)
+       cred->cr_auth->au_rslack = cred->cr_auth->au_verfsize + (p - savedp)
                                                + (savedlen - head->iov_len);
 out_decode:
        status = decode(rqstp, p, obj);
 
                printk("RPC: giant verf size: %u\n", size);
                return NULL;
        }
-       task->tk_auth->au_rslack = (size >> 2) + 2;
+       task->tk_msg.rpc_cred->cr_auth->au_rslack = (size >> 2) + 2;
        p += (size >> 2);
 
        return p;
 
 static void
 call_allocate(struct rpc_task *task)
 {
-       unsigned int slack = task->tk_auth->au_cslack;
+       unsigned int slack = task->tk_msg.rpc_cred->cr_auth->au_cslack;
        struct rpc_rqst *req = task->tk_rqstp;
        struct rpc_xprt *xprt = task->tk_xprt;
        struct rpc_procinfo *proc = task->tk_msg.rpc_proc;