Re: [PATCH v2] nfs4: reset states to use open_stateid when returning delegation voluntarily

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 2, 2015 at 1:14 PM, Jeff Layton <jlayton@xxxxxxxxxxxxxxx> wrote:
> When the client goes to return a delegation, it should always update any
> nfs4_state currently set up to use that delegation stateid to instead
> use the open stateid. It already does do this in some cases,
> particularly in the state recovery code, but not currently when the
> delegation is voluntarily returned (e.g. in advance of a RENAME).  This
> causes the client to try to continue using the delegation stateid after
> the DELEGRETURN, e.g. in LAYOUTGET.
>
> Set the nfs4_state back to using the open stateid in
> nfs4_open_delegation_recall, just before clearing the
> NFS_DELEGATED_STATE bit.
>
> Signed-off-by: Jeff Layton <jeff.layton@xxxxxxxxxxxxxxx>
> ---
>  fs/nfs/nfs4proc.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> index f93b9cdb4934..246753e1d19d 100644
> --- a/fs/nfs/nfs4proc.c
> +++ b/fs/nfs/nfs4proc.c
> @@ -1771,6 +1771,9 @@ int nfs4_open_delegation_recall(struct nfs_open_context *ctx,
>         if (IS_ERR(opendata))
>                 return PTR_ERR(opendata);
>         nfs4_stateid_copy(&opendata->o_arg.u.delegation, stateid);
> +       write_seqlock(&state->seqlock);
> +       nfs4_stateid_copy(&state->stateid, &state->open_stateid);
> +       write_sequnlock(&state->seqlock);
>         clear_bit(NFS_DELEGATED_STATE, &state->flags);
>         switch (type & (FMODE_READ|FMODE_WRITE)) {
>         case FMODE_READ|FMODE_WRITE:
> --

Looks good. Thanks!
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux