2019-05-02 17:31:30

by Scott Mayhew

[permalink] [raw]
Subject: [PATCH] NFSv4: don't mark all open state for recovery when handling recallable state revoked flag

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 <[email protected]>
---
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);
}
--
2.17.2


2019-05-06 13:11:25

by Trond Myklebust

[permalink] [raw]
Subject: Re: [PATCH] NFSv4: don't mark all open state for recovery when handling recallable state revoked flag

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 <[email protected]>
> ---
> 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

--
Trond Myklebust
Linux NFS client maintainer, Hammerspace
[email protected]