]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
NFSv4.2: fix handling of COPY ERR_OFFLOAD_NO_REQ
authorOlga Kornievskaia <kolga@netapp.com>
Thu, 24 Aug 2023 20:43:53 +0000 (16:43 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Sep 2023 07:48:25 +0000 (09:48 +0200)
[ Upstream commit 5690eed941ab7e33c3c3d6b850100cabf740f075 ]

If the client sent a synchronous copy and the server replied with
ERR_OFFLOAD_NO_REQ indicating that it wants an asynchronous
copy instead, the client should retry with asynchronous copy.

Fixes: 539f57b3e0fd ("NFS handle COPY ERR_OFFLOAD_NO_REQS")
Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfs/nfs42proc.c

index 5d7e0511f35137c3524dfe08a2c199d2547d6e10..d5ec3d5568da5d08a589d2e1f1fa192f6064bdef 100644 (file)
@@ -471,8 +471,9 @@ ssize_t nfs42_proc_copy(struct file *src, loff_t pos_src,
                                continue;
                        }
                        break;
-               } else if (err == -NFS4ERR_OFFLOAD_NO_REQS && !args.sync) {
-                       args.sync = true;
+               } else if (err == -NFS4ERR_OFFLOAD_NO_REQS &&
+                               args.sync != res.synchronous) {
+                       args.sync = res.synchronous;
                        dst_exception.retry = 1;
                        continue;
                } else if ((err == -ESTALE ||