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>
This commit is contained in:
@@ -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
|
|||||||
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
|
|||||||
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 @@ out:
|
|||||||
* 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)
|
|||||||
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 {
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user