diff options
Diffstat (limited to 'fs/nfs/proc.c')
-rw-r--r-- | fs/nfs/proc.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/nfs/proc.c b/fs/nfs/proc.c index e0c257bd62b9..1ba717bd20c4 100644 --- a/fs/nfs/proc.c +++ b/fs/nfs/proc.c | |||
@@ -490,7 +490,7 @@ nfs_proc_rmdir(struct inode *dir, const struct qstr *name) | |||
490 | * from nfs_readdir by calling the decode_entry function directly. | 490 | * from nfs_readdir by calling the decode_entry function directly. |
491 | */ | 491 | */ |
492 | static int | 492 | static int |
493 | nfs_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, | 493 | nfs_proc_readdir(struct dentry *dentry, const struct cred *cred, |
494 | u64 cookie, struct page **pages, unsigned int count, bool plus) | 494 | u64 cookie, struct page **pages, unsigned int count, bool plus) |
495 | { | 495 | { |
496 | struct inode *dir = d_inode(dentry); | 496 | struct inode *dir = d_inode(dentry); |
@@ -500,18 +500,25 @@ nfs_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, | |||
500 | .count = count, | 500 | .count = count, |
501 | .pages = pages, | 501 | .pages = pages, |
502 | }; | 502 | }; |
503 | struct auth_cred acred = { | ||
504 | .cred = cred, | ||
505 | }; | ||
503 | struct rpc_message msg = { | 506 | struct rpc_message msg = { |
504 | .rpc_proc = &nfs_procedures[NFSPROC_READDIR], | 507 | .rpc_proc = &nfs_procedures[NFSPROC_READDIR], |
505 | .rpc_argp = &arg, | 508 | .rpc_argp = &arg, |
506 | .rpc_cred = cred, | 509 | .rpc_cred = rpc_lookup_generic_cred(&acred, |
510 | 0, GFP_NOFS), | ||
507 | }; | 511 | }; |
508 | int status; | 512 | int status; |
509 | 513 | ||
510 | dprintk("NFS call readdir %d\n", (unsigned int)cookie); | 514 | dprintk("NFS call readdir %d\n", (unsigned int)cookie); |
515 | if (!msg.rpc_cred) | ||
516 | return -ENOMEM; | ||
511 | status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0); | 517 | status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0); |
512 | 518 | ||
513 | nfs_invalidate_atime(dir); | 519 | nfs_invalidate_atime(dir); |
514 | 520 | ||
521 | put_rpccred(msg.rpc_cred); | ||
515 | dprintk("NFS reply readdir: %d\n", status); | 522 | dprintk("NFS reply readdir: %d\n", status); |
516 | return status; | 523 | return status; |
517 | } | 524 | } |