diff options
author | Benny Halevy <bhalevy@panasas.com> | 2009-04-01 09:21:59 -0400 |
---|---|---|
committer | Benny Halevy <bhalevy@panasas.com> | 2009-06-17 13:46:25 -0400 |
commit | 663c79b3cd8f5fe21fe7d7565fec0072e3234ddc (patch) | |
tree | 343fa6b9ae1616d06154cbee88a2278c70e3ded6 /fs/nfs/nfs4proc.c | |
parent | d45b2989a7956ae9e71d584ceac942278c0371c7 (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.c | 20 |
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; |
2797 | out_free: | 2799 | out_free: |
2798 | if (localpage) | 2800 | if (localpage) |
2799 | __free_page(localpage); | 2801 | __free_page(localpage); |