]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
NFSv4.1/pnfs: Ensure we handle the error NFS4ERR_RETURNCONFLICT
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 15 Nov 2023 18:55:29 +0000 (13:55 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jan 2024 22:52:36 +0000 (14:52 -0800)
[ Upstream commit 037e56a22ff37f9a9c2330b66cff55d3d1ff9b90 ]

Once the client has processed the CB_LAYOUTRECALL, but has not yet
successfully returned the layout, the server is supposed to switch to
returning NFS4ERR_RETURNCONFLICT. This patch ensures that we handle
that return value correctly.

Fixes: 183d9e7b112a ("pnfs: rework LAYOUTGET retry handling")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfs/nfs4proc.c

index d65af9a60c35ce2c5fb0509865668512881243a0..a865b384f0fc0a132ba31068f358e8249007e781 100644 (file)
@@ -173,6 +173,7 @@ static int nfs4_map_errors(int err)
        case -NFS4ERR_RESOURCE:
        case -NFS4ERR_LAYOUTTRYLATER:
        case -NFS4ERR_RECALLCONFLICT:
+       case -NFS4ERR_RETURNCONFLICT:
                return -EREMOTEIO;
        case -NFS4ERR_WRONGSEC:
        case -NFS4ERR_WRONG_CRED:
@@ -560,6 +561,7 @@ static int nfs4_do_handle_exception(struct nfs_server *server,
                case -NFS4ERR_GRACE:
                case -NFS4ERR_LAYOUTTRYLATER:
                case -NFS4ERR_RECALLCONFLICT:
+               case -NFS4ERR_RETURNCONFLICT:
                        exception->delay = 1;
                        return 0;
 
@@ -9588,6 +9590,7 @@ nfs4_layoutget_handle_exception(struct rpc_task *task,
                status = -EBUSY;
                break;
        case -NFS4ERR_RECALLCONFLICT:
+       case -NFS4ERR_RETURNCONFLICT:
                status = -ERECALLCONFLICT;
                break;
        case -NFS4ERR_DELEG_REVOKED: