@@ -248,6 +248,7 @@ static ssize_t _nfs42_proc_copy(struct file *src,
size_t count = args->count;
int status;
uint64_t ret_count;
+ bool sync = false;
if (nss) {
args->cp_src = nss;
@@ -272,6 +273,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) {
@@ -199,7 +199,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);
if (args->cp_src == NULL) { /* intra-ssc */
encode_uint32(xdr, 0); /* no src server list */
return;
@@ -1373,6 +1373,7 @@ struct nfs42_copy_args {
u64 count;
/* Support one source server */
struct nl4_servers *cp_src;
+ 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(-)