Skip to content

Commit

Permalink
nfsd4: release openowners on free in >=4.1 case
Browse files Browse the repository at this point in the history
We don't need to keep openowners around in the >=4.1 case, because they
aren't needed to handle CLOSE replays any more (that's a problem for
sessions).  And doing so causes unexpected failures on a subsequent
destroy_clientid to fail.

We probably also need something comparable for lock owners on last
unlock.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
  • Loading branch information
J. Bruce Fields committed Jul 10, 2012
1 parent 2930d38 commit 74dbafa
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions fs/nfsd/nfs4state.c
Original file line number Diff line number Diff line change
Expand Up @@ -3763,12 +3763,19 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
nfsd4_close_open_stateid(stp);
oo->oo_last_closed_stid = stp;

/* place unused nfs4_stateowners on so_close_lru list to be
* released by the laundromat service after the lease period
* to enable us to handle CLOSE replay
*/
if (list_empty(&oo->oo_owner.so_stateids))
move_to_close_lru(oo);
if (list_empty(&oo->oo_owner.so_stateids)) {
if (cstate->minorversion) {
release_openowner(oo);
cstate->replay_owner = NULL;
} else {
/*
* In the 4.0 case we need to keep the owners around a
* little while to handle CLOSE replay.
*/
if (list_empty(&oo->oo_owner.so_stateids))
move_to_close_lru(oo);
}
}
out:
if (!cstate->replay_owner)
nfs4_unlock_state();
Expand Down

0 comments on commit 74dbafa

Please sign in to comment.