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 23:35:18 +0000 (15:35 -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 0ff913b..e8b52e3 100644 (file)
@@ -170,6 +170,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:
@@ -558,6 +559,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;
 
@@ -9662,6 +9664,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: