nfsd4: release openowners on free in >=4.1 case
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>
This commit is contained in:
Родитель
2930d381d2
Коммит
74dbafaf5d
|
@ -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();
|
||||
|
|
Загрузка…
Ссылка в новой задаче