]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
NFS: fold nfs_abort_delegation_return into nfs_end_delegation_return
authorChristoph Hellwig <hch@lst.de>
Wed, 28 Jan 2026 04:46:07 +0000 (05:46 +0100)
committerAnna Schumaker <anna.schumaker@oracle.com>
Fri, 30 Jan 2026 21:49:15 +0000 (16:49 -0500)
This will allow to simplify the error handling flow.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
fs/nfs/delegation.c

index 32803963b5d7be7607b560e651814aafdba56c05..cf90aa7f922a0e25efec325997931e771b96ff5e 100644 (file)
@@ -350,21 +350,6 @@ nfs_start_delegation_return(struct nfs_inode *nfsi)
        return delegation;
 }
 
-static void nfs_abort_delegation_return(struct nfs_delegation *delegation,
-                                       struct nfs_server *server, int err)
-{
-       spin_lock(&delegation->lock);
-       clear_bit(NFS_DELEGATION_RETURNING, &delegation->flags);
-       if (err == -EAGAIN) {
-               set_bit(NFS_DELEGATION_RETURN_DELAYED, &delegation->flags);
-               set_bit(NFS4SERV_DELEGRETURN_DELAYED,
-                       &server->delegation_flags);
-               set_bit(NFS4CLNT_DELEGRETURN_DELAYED,
-                       &server->nfs_client->cl_state);
-       }
-       spin_unlock(&delegation->lock);
-}
-
 static bool
 nfs_detach_delegations_locked(struct nfs_inode *nfsi,
                struct nfs_delegation *delegation,
@@ -593,13 +578,23 @@ static int nfs_end_delegation_return(struct inode *inode,
                err = nfs4_wait_clnt_recover(server->nfs_client);
        }
 
-       if (err) {
-               nfs_abort_delegation_return(delegation, server, err);
-               return err;
-       }
+       if (err)
+               goto abort;
 
 out_return:
        return nfs_do_return_delegation(inode, delegation, issync);
+abort:
+       spin_lock(&delegation->lock);
+       clear_bit(NFS_DELEGATION_RETURNING, &delegation->flags);
+       if (err == -EAGAIN) {
+               set_bit(NFS_DELEGATION_RETURN_DELAYED, &delegation->flags);
+               set_bit(NFS4SERV_DELEGRETURN_DELAYED,
+                       &server->delegation_flags);
+               set_bit(NFS4CLNT_DELEGRETURN_DELAYED,
+                       &server->nfs_client->cl_state);
+       }
+       spin_unlock(&delegation->lock);
+       return err;
 }
 
 static int nfs_return_one_delegation(struct nfs_server *server)