|
@@ -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)
|
|
|
|
- nfs4_write_cached_acl(inode, NULL, resp_len);
|
|
|
|
|
|
+ if (res.acl_len > args.acl_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);
|