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)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 4 Jan 2024 15:47:56 +0000 (10:47 -0500)
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>
fs/nfs/nfs4proc.c

index 8a943ff..23819a7 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;
 
@@ -9691,6 +9693,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: