aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.c
diff options
context:
space:
mode:
authorBenny Halevy <bhalevy@panasas.com>2009-04-01 09:21:59 -0400
committerBenny Halevy <bhalevy@panasas.com>2009-06-17 13:46:25 -0400
commit663c79b3cd8f5fe21fe7d7565fec0072e3234ddc (patch)
tree343fa6b9ae1616d06154cbee88a2278c70e3ded6 /fs/nfs/nfs4proc.c
parentd45b2989a7956ae9e71d584ceac942278c0371c7 (diff)
nfs41: use nfs4_getaclres
In preparation for nfs41 sequence processing. Signed-off-by: Andy Admason <andros@netapp.com> Signed-off-by: Benny Halevy <bhalevy@panasas.com> [nfs41: embed resp_len in nfs_getaclres] Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index aea2e83d3939..20c9acf689fd 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -2755,12 +2755,14 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
2755 .acl_pages = pages, 2755 .acl_pages = pages,
2756 .acl_len = buflen, 2756 .acl_len = buflen,
2757 }; 2757 };
2758 size_t resp_len = buflen; 2758 struct nfs_getaclres res = {
2759 .acl_len = buflen,
2760 };
2759 void *resp_buf; 2761 void *resp_buf;
2760 struct rpc_message msg = { 2762 struct rpc_message msg = {
2761 .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_GETACL], 2763 .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_GETACL],
2762 .rpc_argp = &args, 2764 .rpc_argp = &args,
2763 .rpc_resp = &resp_len, 2765 .rpc_resp = &res,
2764 }; 2766 };
2765 struct page *localpage = NULL; 2767 struct page *localpage = NULL;
2766 int ret; 2768 int ret;
@@ -2774,7 +2776,7 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
2774 return -ENOMEM; 2776 return -ENOMEM;
2775 args.acl_pages[0] = localpage; 2777 args.acl_pages[0] = localpage;
2776 args.acl_pgbase = 0; 2778 args.acl_pgbase = 0;
2777 resp_len = args.acl_len = PAGE_SIZE; 2779 args.acl_len = PAGE_SIZE;
2778 } else { 2780 } else {
2779 resp_buf = buf; 2781 resp_buf = buf;
2780 buf_to_pages(buf, buflen, args.acl_pages, &args.acl_pgbase); 2782 buf_to_pages(buf, buflen, args.acl_pages, &args.acl_pgbase);
@@ -2782,18 +2784,18 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
2782 ret = rpc_call_sync(NFS_CLIENT(inode), &msg, 0); 2784 ret = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
2783 if (ret) 2785 if (ret)
2784 goto out_free; 2786 goto out_free;
2785 if (resp_len > args.acl_len) 2787 if (res.acl_len > args.acl_len)
2786 nfs4_write_cached_acl(inode, NULL, resp_len); 2788 nfs4_write_cached_acl(inode, NULL, res.acl_len);
2787 else 2789 else
2788 nfs4_write_cached_acl(inode, resp_buf, resp_len); 2790 nfs4_write_cached_acl(inode, resp_buf, res.acl_len);
2789 if (buf) { 2791 if (buf) {
2790 ret = -ERANGE; 2792 ret = -ERANGE;
2791 if (resp_len > buflen) 2793 if (res.acl_len > buflen)
2792 goto out_free; 2794 goto out_free;
2793 if (localpage) 2795 if (localpage)
2794 memcpy(buf, resp_buf, resp_len); 2796 memcpy(buf, resp_buf, res.acl_len);
2795 } 2797 }
2796 ret = resp_len; 2798 ret = res.acl_len;
2797out_free: 2799out_free:
2798 if (localpage) 2800 if (localpage)
2799 __free_page(localpage); 2801 __free_page(localpage);