From ab51beeb98fb29b0d8194b19fc11ac1e106d241b Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Mon, 19 Dec 2011 15:56:07 -0500 Subject: [PATCH] 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 --- daemon/nfs41_compound.c | 17 ++++------------- daemon/recovery.c | 22 ++++++++++++++++++++++ daemon/recovery.h | 5 +++++ 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/daemon/nfs41_compound.c b/daemon/nfs41_compound.c index 89fbac7..a57129d 100644 --- a/daemon/nfs41_compound.c +++ b/daemon/nfs41_compound.c @@ -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); } } diff --git a/daemon/recovery.c b/daemon/recovery.c index 7e3b77a..1b8f343 100644 --- a/daemon/recovery.c +++ b/daemon/recovery.c @@ -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, diff --git a/daemon/recovery.h b/daemon/recovery.h index d695912..583fb47 100644 --- a/daemon/recovery.h +++ b/daemon/recovery.h @@ -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);