recovery: fix for nfs41_delegation_to_open()

emc server uses STALE_STATEID error after server reboot, while linux server uses BAD_STATEID

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
This commit is contained in:
Casey Bodley 2011-08-03 11:40:24 -04:00 committed by unknown
parent 8e5ab92b2b
commit 284c273999
2 changed files with 3 additions and 2 deletions

View file

@ -448,7 +448,8 @@ int nfs41_delegation_to_open(
/* save the new open stateid */
memcpy(&open->stateid, &open_stateid, sizeof(stateid4));
open->do_close = 1;
} else if (status == NFS4ERR_BAD_STATEID && open->do_close) {
} else if (open->do_close && (status == NFS4ERR_BAD_STATEID ||
status == NFS4ERR_STALE_STATEID || status == NFS4ERR_EXPIRED)) {
/* something triggered client state recovery, and the open stateid
* has already been reclaimed; see recover_stateid_delegation() */
status = NFS4_OK;

View file

@ -521,7 +521,7 @@ static bool_t recover_stateid_delegation(
AcquireSRWLockShared(&stateid->open->lock);
if (argop->op == OP_OPEN && stateid->open->do_close) {
/* for nfs41_delegation_to_open(); if we've already reclaimed
* an open stateid, just fail this OPEN with BAD_STATEID */
* an open stateid, just fail this OPEN with BAD_STATEID */
} else if (stateid->open->delegation.state) {
nfs41_delegation_state *deleg = stateid->open->delegation.state;
stateid4 *source = &deleg->state.stateid;