@@ -204,6 +204,7 @@ static ssize_t _nfs42_proc_copy(struct file *src,
size_t count = args->count;
int status;
uint64_t ret_count;
+ bool sync = false;
status = nfs4_set_rw_stateid(&args->src_stateid, src_lock->open_context,
src_lock, FMODE_READ);
@@ -224,6 +225,7 @@ static ssize_t _nfs42_proc_copy(struct file *src,
if (status)
return status;
+ args->sync = sync;
status = nfs4_call_sync(server->client, server, &msg,
&args->seq_args, &res->seq_res, 0);
switch (status) {
@@ -158,7 +158,7 @@ static void encode_copy(struct xdr_stream *xdr,
encode_uint64(xdr, args->count);
encode_uint32(xdr, 1); /* consecutive = true */
- encode_uint32(xdr, 0); /* synchronous = false */
+ encode_uint32(xdr, args->sync);
encode_uint32(xdr, 0); /* src server list */
}
@@ -1371,6 +1371,7 @@ struct nfs42_copy_args {
u64 dst_pos;
u64 count;
+ bool sync;
};
struct nfs42_write_res {
Instead of hardcoding always sending async copy, make it configurable. In case, we get ERR_OFFLOAD_NO_REQS and we need to resend the operation as synchronous. Signed-off-by: Olga Kornievskaia <kolga@netapp.com> --- fs/nfs/nfs42proc.c | 2 ++ fs/nfs/nfs42xdr.c | 2 +- include/linux/nfs_xdr.h | 1 + 3 files changed, 4 insertions(+), 1 deletion(-)