NFS: struct nfs_open_dir_context: convert rpc_cred pointer to cred.
[sfrench/cifs-2.6.git] / fs / nfs / nfs3proc.c
index 71bc16225b9817ece6719a687c2c7c18d4ca81ef..a2e9e09c37723e83a7ef6610c93e643f2bec0eed 100644 (file)
@@ -195,15 +195,20 @@ static int nfs3_proc_access(struct inode *inode, struct nfs_access_entry *entry)
                .access         = entry->mask,
        };
        struct nfs3_accessres   res;
+       struct auth_cred acred = {
+               .cred           = entry->cred,
+       };
        struct rpc_message msg = {
                .rpc_proc       = &nfs3_procedures[NFS3PROC_ACCESS],
                .rpc_argp       = &arg,
                .rpc_resp       = &res,
-               .rpc_cred       = entry->cred,
+               .rpc_cred       = rpc_lookup_generic_cred(&acred, 0, GFP_NOFS),
        };
        int status = -ENOMEM;
 
        dprintk("NFS call  access\n");
+       if (!msg.rpc_cred)
+               goto out;
        res.fattr = nfs_alloc_fattr();
        if (res.fattr == NULL)
                goto out;
@@ -214,6 +219,8 @@ static int nfs3_proc_access(struct inode *inode, struct nfs_access_entry *entry)
                nfs_access_set_mask(entry, res.access);
        nfs_free_fattr(res.fattr);
 out:
+       if (msg.rpc_cred)
+               put_rpccred(msg.rpc_cred);
        dprintk("NFS reply access: %d\n", status);
        return status;
 }
@@ -607,7 +614,7 @@ out:
  * readdirplus.
  */
 static int
-nfs3_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
+nfs3_proc_readdir(struct dentry *dentry, const struct cred *cred,
                  u64 cookie, struct page **pages, unsigned int count, bool plus)
 {
        struct inode            *dir = d_inode(dentry);
@@ -624,11 +631,15 @@ nfs3_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
                .verf           = verf,
                .plus           = plus
        };
+       struct auth_cred acred = {
+               .cred           = cred,
+       };
        struct rpc_message      msg = {
                .rpc_proc       = &nfs3_procedures[NFS3PROC_READDIR],
                .rpc_argp       = &arg,
                .rpc_resp       = &res,
-               .rpc_cred       = cred
+               .rpc_cred       = rpc_lookup_generic_cred(&acred,
+                                                         0, GFP_NOFS),
        };
        int status = -ENOMEM;
 
@@ -638,6 +649,8 @@ nfs3_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
        dprintk("NFS call  readdir%s %d\n",
                        plus? "plus" : "", (unsigned int) cookie);
 
+       if (!msg.rpc_cred)
+               return -ENOMEM;
        res.dir_attr = nfs_alloc_fattr();
        if (res.dir_attr == NULL)
                goto out;
@@ -649,6 +662,7 @@ nfs3_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
 
        nfs_free_fattr(res.dir_attr);
 out:
+       put_rpccred(msg.rpc_cred);
        dprintk("NFS reply readdir%s: %d\n",
                        plus? "plus" : "", status);
        return status;