NFSv4: Ensure we throw out bad delegation stateids on NFS4ERR_BAD_STATEID
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Thu, 9 Feb 2012 20:31:36 +0000 (15:31 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Thu, 9 Feb 2012 20:59:21 +0000 (15:59 -0500)
To ensure that we don't just reuse the bad delegation when we attempt to
recover the nfs4_state that received the bad stateid error.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: stable@vger.kernel.org
fs/nfs/nfs4state.c

index a53f33b4ac3a5cf333afe80b358f27fe4130289f..45392032e7bd60b85b00fb74f86ca99a603e31d4 100644 (file)
@@ -1132,6 +1132,8 @@ void nfs4_schedule_stateid_recovery(const struct nfs_server *server, struct nfs4
 {
        struct nfs_client *clp = server->nfs_client;
 
+       if (test_and_clear_bit(NFS_DELEGATED_STATE, &state->flags))
+               nfs_async_inode_return_delegation(state->inode, &state->stateid);
        nfs4_state_mark_reclaim_nograce(clp, state);
        nfs4_schedule_state_manager(clp);
 }