[pnfs] [PATCH 2/2] Update stateid generation number handling per latest draft
William A. (Andy) Adamson
andros at citi.umich.edu
Tue Sep 18 13:22:17 EDT 2007
Thanks Mike - sheese, it's right above the section I refered...
OK! the patch is in
-->Andy
On 9/18/07, Sager, Mike <Mike.Sager at netapp.com> wrote:
>
> Hi Andy,
>
> My interpretation of this case comes from the start of the last paragraph
> in 8.2.2:
>
> "When stateids are sent to the server by the client, it has two choices
> with regard to the seqid sent. It may set the seqid to zero to indicate to
> the server that it wishes the most up-to-date seqid for that stateid's
> "other" field to be used. This would be the common choice in the case of
> stateid sent with a READ or WRITE operation."
>
> Mike
>
>
>
> -----Original Message-----
> *From:* William A. (Andy) Adamson [mailto:andros at citi.umich.edu]
> *Sent:* Tuesday, September 18, 2007 7:01 AM
> *To:* Sager, Mike
> *Cc:* pnfs at linux-nfs.org
> *Subject:* Fwd: [pnfs] [PATCH 2/2] Update stateid generation number
> handling per latest draft
>
> Hi
>
> I'm still not clear on parts of this patch.
>
> >From my understanding on the discussion of this issue at the Austin
> bakeathon, the 4.1 server is supposed to treat the 32 bit stateid seqid
> just like the 4.0 server, to provide the 4.1 client an ordering of server
> execution when the client "sprays" OPENs (or LOCK) across sessions on a
> single clientid.
>
> This patch allows 4.1 server to skip stateid seqid checks when the stateid
> seqid is zero. Where does the draft say this? I can find a discription of
> three other cases (other and seqid zero, other and seqid all ones, other
> zero and seqid non-zero) but not a description of other non-zero and seqid
> zero.
>
> I'm probably just not finding it.
>
> -->Andy
>
> draft 13 section 8.2.3. Special Stateids
> .......
> The following combinations of "other" and "seqid" are defined in
> NFSv4.1:
>
> o When "other" and "seqid" are both zero, the stateid is treated as
> a special anonymous stateid, which can be used in READ, WRITE, and
> SETATTR requests to indicate the absence of any open state
> associated with the request. When an anonymous stateid value is
> used, and an existing open denies the form of access requested,
> then access will be denied to the request. This stateid MUST NOT
> be used on operations to data servers (Section 14.7), nor may it
> be used as the argument to the WANT_DELEGATTION (Section 18.49)
> operation.
>
> o When "other" and "seqid" are both all ones, the stateid is a
> special read bypass stateid. When this value is used in WRITE or
> SETATTR, it is treated like the anonymous value. When used in
> READ, the server MAY grant access, even if access would normally
> be denied to READ requests. This stateid MUST NOT be used on
> operations to data servers, nor may it be used as the argument to
>
>
>
> Shepler, et al. Expires January 2, 2008 [Page 145]
> ^L
> Internet-Draft NFSv4 Minor Version 1 July 2007
>
>
> the WANT_DELEGATION operation.
>
> o When "other" is zero and "seqid" is one, the stateid represents
> the current stateid, which is whatever value is the last stateid
> returned by an operation within the COMPOUND. In the case of an
> OPEN, the stateid returned for the open file, and not the
> delegation is used. The stateid passed to the operation in place
> of the special value has its "seqid" value set to zero, except
> when the current stateid is used by the operation CLOSE or
> OPEN_DOWNGRADE. If there is no operation in the COMPOUND which
> has returned a stateid value, the server MUST return the error
> NFS4ERR_BAD_STATEID.
>
>
>
>
> ---------- Forwarded message ----------
> From: Sager, Mike <Mike.Sager at netapp.com>
> Date: Sep 12, 2007 3:33 PM
> Subject: [pnfs] [PATCH 2/2] Update stateid generation number handling per
> latest draft
> To: pnfs at linux-nfs.org
>
> If the generation number is 0, use the current generation number. Also,
> reinstate generation number checking for bad or old stateids.
>
> Signed-off-by: Mike Sager < sager at netapp.com>
> ---
> fs/nfsd/nfs4state.c | 27 +++++++++++++++++----------
> 1 files changed, 17 insertions(+), 10 deletions(-)
>
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index b364707..be3600b 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -2762,15 +2762,22 @@ nfs4_preprocess_stateid_op(struct svc_fh
> *current_fh, stateid_t *stateid, int fl
> goto out;
> stidp = &stp->st_stateid;
> }
> - if (flags & NFS_4_1 && stateid->si_generation !=0 )
> - goto out;
> - if (!(flags & NFS_4_1) && stateid->si_generation >
> stidp->si_generation)
> + /*
> + * In 4.1, if the stateid's generation number is 0, use the
> + * current generation
> + */
> + if ((flags & NFS_4_1) && stateid->si_generation == 0)
> + goto checkmode;
> +
> + if (stateid->si_generation > stidp->si_generation)
> goto out;
>
> /* OLD STATEID */
> status = nfserr_old_stateid;
> - if (!(flags & NFS_4_1) && stateid->si_generation <
> stidp->si_generation)
> + if (stateid->si_generation < stidp->si_generation)
> goto out;
> +
> +checkmode:
> if (stp) {
> if ((status =
> nfs4_check_openmode(stp->st_access_bmap,flags)))
> goto out;
> @@ -2894,12 +2901,12 @@ nfs4_preprocess_seqid_op(struct svc_fh
> *current_fh, u32 seqid, stateid_t *statei
> return nfserr_bad_stateid;
> }
>
> - if (sop->so_minorversion == 1) {
> - if (stateid->si_generation != 0)
> - return nfserr_bad_stateid;
> - else
> - goto renew; /* skip v4.0 generation number checks
> */
> - }
> + /*
> + * In 4.1, if the stateid's generation number is 0, use the
> + * current generation
> + */
> + if (sop->so_minorversion == 1 && stateid->si_generation == 0)
> + goto renew;
>
> if (stateid->si_generation > stp->st_stateid.si_generation) {
> printk("NFSD: preprocess_seqid_op: future stateid?!\n");
> --
> 1.5.2.1
>
>
>
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://linux-nfs.org/pipermail/pnfs/attachments/20070918/801ba1f0/attachment-0001.htm
More information about the pNFS
mailing list