NFSv4.1: Always send a RECLAIM_COMPLETE after establishing lease
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 13 Mar 2023 22:45:53 +0000 (18:45 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 May 2023 14:03:34 +0000 (23:03 +0900)
[ Upstream commit 40882deb83c29d8df4470d4e5e7f137b6acf7ad1 ]

The spec requires that we always at least send a RECLAIM_COMPLETE when
we're done establishing the lease and recovering any state.

Fixes: fce5c838e133 ("nfs41: RECLAIM_COMPLETE functionality")
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/nfs4state.c

index 03087ef..5b49e53 100644 (file)
@@ -67,6 +67,8 @@
 
 #define OPENOWNER_POOL_SIZE    8
 
+static void nfs4_state_start_reclaim_reboot(struct nfs_client *clp);
+
 const nfs4_stateid zero_stateid = {
        { .data = { 0 } },
        .type = NFS4_SPECIAL_STATEID_TYPE,
@@ -330,6 +332,8 @@ do_confirm:
        status = nfs4_proc_create_session(clp, cred);
        if (status != 0)
                goto out;
+       if (!(clp->cl_exchange_flags & EXCHGID4_FLAG_CONFIRMED_R))
+               nfs4_state_start_reclaim_reboot(clp);
        nfs41_finish_session_reset(clp);
        nfs_mark_client_ready(clp, NFS_CS_READY);
 out: