Commit 663c79b3 authored by Benny Halevy's avatar Benny Halevy

nfs41: use nfs4_getaclres

In preparation for nfs41 sequence processing.
Signed-off-by: default avatarAndy Admason <andros@netapp.com>
Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
[nfs41: embed resp_len in nfs_getaclres]
Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent d45b2989
...@@ -2755,12 +2755,14 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu ...@@ -2755,12 +2755,14 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
.acl_pages = pages, .acl_pages = pages,
.acl_len = buflen, .acl_len = buflen,
}; };
size_t resp_len = buflen; struct nfs_getaclres res = {
.acl_len = buflen,
};
void *resp_buf; void *resp_buf;
struct rpc_message msg = { struct rpc_message msg = {
.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_GETACL], .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_GETACL],
.rpc_argp = &args, .rpc_argp = &args,
.rpc_resp = &resp_len, .rpc_resp = &res,
}; };
struct page *localpage = NULL; struct page *localpage = NULL;
int ret; int ret;
...@@ -2774,7 +2776,7 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu ...@@ -2774,7 +2776,7 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
return -ENOMEM; return -ENOMEM;
args.acl_pages[0] = localpage; args.acl_pages[0] = localpage;
args.acl_pgbase = 0; args.acl_pgbase = 0;
resp_len = args.acl_len = PAGE_SIZE; args.acl_len = PAGE_SIZE;
} else { } else {
resp_buf = buf; resp_buf = buf;
buf_to_pages(buf, buflen, args.acl_pages, &args.acl_pgbase); 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,18 +2784,18 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
ret = rpc_call_sync(NFS_CLIENT(inode), &msg, 0); ret = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
if (ret) if (ret)
goto out_free; goto out_free;
if (resp_len > args.acl_len) if (res.acl_len > args.acl_len)
nfs4_write_cached_acl(inode, NULL, resp_len); nfs4_write_cached_acl(inode, NULL, res.acl_len);
else else
nfs4_write_cached_acl(inode, resp_buf, resp_len); nfs4_write_cached_acl(inode, resp_buf, res.acl_len);
if (buf) { if (buf) {
ret = -ERANGE; ret = -ERANGE;
if (resp_len > buflen) if (res.acl_len > buflen)
goto out_free; goto out_free;
if (localpage) if (localpage)
memcpy(buf, resp_buf, resp_len); memcpy(buf, resp_buf, res.acl_len);
} }
ret = resp_len; ret = res.acl_len;
out_free: out_free:
if (localpage) if (localpage)
__free_page(localpage); __free_page(localpage);
......
...@@ -4018,7 +4018,8 @@ nfs4_xdr_dec_setacl(struct rpc_rqst *rqstp, __be32 *p, void *res) ...@@ -4018,7 +4018,8 @@ nfs4_xdr_dec_setacl(struct rpc_rqst *rqstp, __be32 *p, void *res)
* Decode GETACL response * Decode GETACL response
*/ */
static int static int
nfs4_xdr_dec_getacl(struct rpc_rqst *rqstp, __be32 *p, size_t *acl_len) nfs4_xdr_dec_getacl(struct rpc_rqst *rqstp, __be32 *p,
struct nfs_getaclres *res)
{ {
struct xdr_stream xdr; struct xdr_stream xdr;
struct compound_hdr hdr; struct compound_hdr hdr;
...@@ -4031,7 +4032,7 @@ nfs4_xdr_dec_getacl(struct rpc_rqst *rqstp, __be32 *p, size_t *acl_len) ...@@ -4031,7 +4032,7 @@ nfs4_xdr_dec_getacl(struct rpc_rqst *rqstp, __be32 *p, size_t *acl_len)
status = decode_putfh(&xdr); status = decode_putfh(&xdr);
if (status) if (status)
goto out; goto out;
status = decode_getacl(&xdr, rqstp, acl_len); status = decode_getacl(&xdr, rqstp, &res->acl_len);
out: out:
return status; return status;
......
...@@ -444,6 +444,11 @@ struct nfs_getaclargs { ...@@ -444,6 +444,11 @@ struct nfs_getaclargs {
struct nfs4_sequence_args seq_args; struct nfs4_sequence_args seq_args;
}; };
struct nfs_getaclres {
size_t acl_len;
struct nfs4_sequence_res seq_res;
};
struct nfs_setattrres { struct nfs_setattrres {
struct nfs_fattr * fattr; struct nfs_fattr * fattr;
const struct nfs_server * server; const struct nfs_server * server;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment