Message ID | 20190502173108.8796-1-smayhew@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | NFSv4: don't mark all open state for recovery when handling recallable state revoked flag | expand |
Hi Scott, On Thu, 2019-05-02 at 13:31 -0400, Scott Mayhew wrote: > Only delegations and layouts can be recalled, so it shouldn't be > necessary to recover all opens when handling the status bit > SEQ4_STATUS_RECALLABLE_STATE_REVOKED. We'll still wind up calling > nfs41_open_expired() when a TEST_STATEID returns > NFS4ERR_DELEG_REVOKED. > > Signed-off-by: Scott Mayhew <smayhew@redhat.com> > --- > fs/nfs/nfs4state.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c > index 3de36479ed7a..4db9bcf93fad 100644 > --- a/fs/nfs/nfs4state.c > +++ b/fs/nfs/nfs4state.c > @@ -2346,8 +2346,8 @@ static void > nfs41_handle_recallable_state_revoked(struct nfs_client *clp) > { > /* FIXME: For now, we destroy all layouts. */ > pnfs_destroy_all_layouts(clp); > - /* FIXME: For now, we test all delegations+open state+locks. */ > - nfs41_handle_some_state_revoked(clp); > + nfs_mark_test_expired_all_delegations(clp); > + nfs4_schedule_state_manager(clp); > dprintk("%s: Recallable state revoked on server %s!\n", > __func__, > clp->cl_hostname); > } Can we please package the above two lines into a helper function in fs/nfs/delegation.c? I suggest just calling it nfs_test_expired_all_delegations(). Thanks! Trond
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 3de36479ed7a..4db9bcf93fad 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -2346,8 +2346,8 @@ static void nfs41_handle_recallable_state_revoked(struct nfs_client *clp) { /* FIXME: For now, we destroy all layouts. */ pnfs_destroy_all_layouts(clp); - /* FIXME: For now, we test all delegations+open state+locks. */ - nfs41_handle_some_state_revoked(clp); + nfs_mark_test_expired_all_delegations(clp); + nfs4_schedule_state_manager(clp); dprintk("%s: Recallable state revoked on server %s!\n", __func__, clp->cl_hostname); }
Only delegations and layouts can be recalled, so it shouldn't be necessary to recover all opens when handling the status bit SEQ4_STATUS_RECALLABLE_STATE_REVOKED. We'll still wind up calling nfs41_open_expired() when a TEST_STATEID returns NFS4ERR_DELEG_REVOKED. Signed-off-by: Scott Mayhew <smayhew@redhat.com> --- fs/nfs/nfs4state.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)