Skip to content

Commit

Permalink
NFS: for "inter" copy treat ESTALE as ENOTSUPP
Browse files Browse the repository at this point in the history
If the client sends an "inter" copy to the destination server but
it only supports "intra" copy, it can return ESTALE (since it
doesn't know anything about the file handle from the other server
and does not recognize the special case of "inter" copy). Translate
this error as ENOTSUPP and also send OFFLOAD_CANCEL to the source
server so that it can clean up state.

Signed-off-by: Olga Kornievskaia <[email protected]>
  • Loading branch information
olgakorn1 authored and Olga Kornievskaia committed Oct 9, 2019
1 parent 0b9018b commit 7e35019
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions fs/nfs/nfs42proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,11 @@ ssize_t nfs42_proc_copy(struct file *src, loff_t pos_src,
args.sync = true;
dst_exception.retry = 1;
continue;
} else if (err == -ESTALE &&
!nfs42_files_from_same_server(src, dst)) {
nfs42_do_offload_cancel_async(src, &args.src_stateid);
err = -EOPNOTSUPP;
break;
}

err2 = nfs4_handle_exception(server, err, &src_exception);
Expand Down

0 comments on commit 7e35019

Please sign in to comment.