cosmetic: move sequence status recovery to separate function

new function nfs41_recover_sequence_flags() in recovery.c takes care of checking status flags, entering recovery mode, and reclaiming state

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
This commit is contained in:
Casey Bodley 2011-12-19 15:56:07 -05:00 committed by unknown
parent aacff9d721
commit ab51beeb98
3 changed files with 31 additions and 13 deletions

View file

@ -191,19 +191,10 @@ retry:
if (status)
goto out_free_slot;
if (try_recovery) {
/* check status flags for state revocation */
uint32_t revoked = seq->sr_resok4.sr_status_flags &
(SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED
| SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED
| SEQ4_STATUS_ADMIN_STATE_REVOKED);
if (revoked && nfs41_recovery_start_or_wait(session->client)) {
/* free stateids and attempt to recover them */
nfs41_client_state_revoked(session, session->client, revoked);
nfs41_recovery_finish(session->client);
}
}
/* check sequence status flags for state revocation */
if (try_recovery && seq->sr_resok4.sr_status_flags)
nfs41_recover_sequence_flags(session,
seq->sr_resok4.sr_status_flags);
}
}

View file

@ -70,6 +70,28 @@ void nfs41_recovery_finish(
}
void nfs41_recover_sequence_flags(
IN nfs41_session *session,
IN uint32_t flags)
{
const uint32_t revoked = flags &
(SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED
| SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED
| SEQ4_STATUS_ADMIN_STATE_REVOKED);
/* no state recovery needed */
if (revoked == 0)
return;
if (!nfs41_recovery_start_or_wait(session->client))
return;
/* free stateids and attempt to recover them */
nfs41_client_state_revoked(session, session->client, revoked);
nfs41_recovery_finish(session->client);
}
/* client state recovery for server reboot or lease expiration */
static int recover_open_grace(
IN nfs41_session *session,

View file

@ -38,6 +38,11 @@ bool_t nfs41_recovery_start_or_wait(
void nfs41_recovery_finish(
IN nfs41_client *client);
void nfs41_recover_sequence_flags(
IN nfs41_session *session,
IN uint32_t flags);
int nfs41_recover_client_state(
IN nfs41_session *session,
IN nfs41_client *client);