[pnfs] [PATCH] save client flags for exchange id
William A. (Andy) Adamson
andros at citi.umich.edu
Tue Jun 5 13:45:34 EDT 2007
ok. pushed to master branch.
-->Andy
On 6/5/07, Marc Eshel <eshel at almaden.ibm.com> wrote:
>
>
> Sure, that looks like it should also work.
> Marc.
>
> androsadamson at gmail.com wrote on 06/05/2007 10:08:49 AM:
>
> >
>
> > On 6/5/07, Marc Eshel <eshel at almaden.ibm.com> wrote:
> >
> > Hi Andy.
> > I think that we need to talk about it some more maybe in out status
> > meeting. For now we need a working server and I see nothing wrong
> > with taking the client indication (flag) that it is trying to
> > exchange id with an MDS or DS.
> >
> >
> > ok.
> >
> > Can you please push "fix recall layout for fsid" patch.
> >
> >
> > how about this patch? (also attached). it sets the input MDS and/or
> > DS flags, or both if non are set.
> >
> >
> > -->Andy
> >
> > fs/nfsd/nfs4state.c | 8 ++++++++
> > include/linux/nfs4.h | 1 +
> > 2 files changed, 9 insertions(+), 0 deletions(-)
> >
> > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> > index a5e4dc7..bb24562 100644
> > --- a/fs/nfsd/nfs4state.c
> > +++ b/fs/nfsd/nfs4state.c
> > @@ -1106,6 +1106,7 @@ void nfsd4_setup_callback_channel(void)
> > void
> > nfsd4_set_ex_flags(struct nfs4_client *new, struct nfsd4_exchange_id
> *clid)
> > {
> > + int mds_ds = 0;
> > /* if sessions only, ignore the wire_flags from client */
> >
> > /* Referrals are supported, Migration is not. */
> > @@ -1114,6 +1115,13 @@ nfsd4_set_ex_flags(struct nfs4_client *new,
> > struct nfsd4_exchange_id *clid)
> > /* pNFS is not supported */
> > new->cl_exchange_flags |= EXCHGID4_FLAG_USE_NON_PNFS;
> >
> > + /* Save the client's MDS or DS flags, or set both */
> > + mds_ds = clid->flags & EXCHGID4_MFS_DS_FLAG_MASK;
> > + if (mds_ds)
> > + new->cl_exchange_flags |= mds_ds;
> > + else
> > + new->cl_exchange_flags |= EXCHGID4_MFS_DS_FLAG_MASK;
> > +
> > /* set the wire flags to return to client. */
> > clid->flags = new->cl_exchange_flags;
> > }
> > diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h
> > index 8fad35e..c1748c6 100644
> > --- a/include/linux/nfs4.h
> > +++ b/include/linux/nfs4.h
> > @@ -98,6 +98,7 @@
> > #define EXCHGID4_FLAG_USE_NON_PNFS 0x00010000
> > #define EXCHGID4_FLAG_USE_PNFS_MDS 0x00020000
> > #define EXCHGID4_FLAG_USE_PNFS_DS 0x00040000
> > +#define EXCHGID4_MFS_DS_FLAG_MASK 0x00060000
> > #define EXCHGID4_INVAL_FLAG_MASK 0x77707774
> >
> > #define NFS4_LENGTH_EOF (~(u64)0)
> >
> >
> >
> >
> > Thanks, Marc.
> >
> > androsadamson at gmail.com wrote on 06/05/2007 08:55:08 AM:
> >
> >
> > > Hi Marc
> > >
> > > For the 4.1-sessions branch, nfsd4_set_ex_flags() returns the
> > > correct flags - we don't care what the client sends, and should not
> > > save the eia_flags.
> > >
> > > For the master branch, here is what I think we need to do.
> > >
> > > As in the 4.1-sessions case, Return support for referrals, no
> > > support for migration.
> >
> > > EXCHGID4_FLAG_SUPP_MOVED_REFER yes
> > > EXCHGID4_FLAG_SUPP_MOVED_MIGR no
> > >
> > > As for the pNFS flags:
> > >
> > > Just like the 4.1-sessions branch, we always set this, because we
> > > support sessions w/o pNFS.
> > > EXCHGID4_FLAG_USE_NON_PNFS yes
> > > Now we have the chicken-or-egg problem. We currently can only tell
> > > if we support pNFS via the export operations functions such as
> > > export_ops->layout_type(). But the server doesn't know about any of
> > > it's exports until the first filehandle show up, and an upcall is
> > > made to get the export struct, and the first filehandle for an
> > > export won't appear until after the session is setup.
> > >
> > > If the server is acting as an MDS, we can't tell at EXCHANGE_ID time.
> > > If the server is acting only as a DS, we can't tell at EXCHANGE_ID
> time.
> > > If the server is acting as an MDS and as a DS, we currently can't
> > > tell the difference between a 2nd MDS session or the first DS
> > > session at EXCHANGE_ID time.
> > >
> > > We may need to push configuration information down to the NFSv4.1
> > > pNFS MDS/DS server, probably via adding to the existing proc
> > > interface; or possibly query the file system with a new export_op
> > > when we get the first filehandle (PUTROOTFH), because draft-ietf-
> > > nfsv4-minorversion1-10 has the following MUST (line 23843):
> >
> > > 23825 The response to the SEQUENCE operation contains a wordof
> status
> > > 23826 flags (sr_status_flags) that that can provide to the
> client
> > > 23827 information related to the status of the client's
> lockstate and
> > >
> > > 23828 communications paths. Note that any status bits
> > relating to lock
> > > 23829 state are MAY reset when lock state is lost due to a
> > > server reboot or
> > > 23830 the establishment of a new client instance. Note that
> > > if the client
> > >
> > > 23831 ID implied by sa_sessionid was established with
> > > 23832
> > > 23833 (
> > > 23834 eir_flags
> > > 23835 & (
> > > 23836 EXCHGID4_FLAG_USE_PNFS_DS
> > > 23837 | EXCHGID4_FLAG_USE_PNFS_MDS
> > >
> > > 23838 | EXCHGID4_FLAG_USE_NON_PNFS
> > > 23839 )
> > > 23840 ) == EXCHGID4_FLAG_USE_PNFS_DS)
> > > 23841
> > > 23842 in the EXCHANGE_ID results (i.e the client ID is only for
> data
> > > 23843 servers), then sr_status_flags MUST always be zero.
> >
> > >
> > > Until then, the master branch should simply set these flags as
> follows:
> >
> > > EXCHGID4_FLAG_USE_PNFS_MDS yes
> > > EXCHGID4_FLAG_USE_PNFS_DS yes
> > > I don't see any reason to pay attention to what the client sends.
> > > In any event, I want to do this inside nfsd4_set_ex_flags(), not
> > > copy the input flags prior to the call.
> > >
> > > If we are in agreement, I'll provide the patch...
> > >
> > > -->Andy
> >
> > > On 6/4/07, Marc Eshel <eshel at almaden.ibm.com> wrote:
> > > From: Marc Eshel <eshel at almaden.ibm.com>
> > >
> > >
> > > ---
> > >
> > > fs/nfsd/nfs4state.c | 1 +
> > > 1 files changed, 1 insertions(+), 0 deletions(-)
> > >
> > > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> > > index a5e4dc7..2fe5414 100644
> > > --- a/fs/nfsd/nfs4state.c
> > > +++ b/fs/nfsd/nfs4state.c
> > > @@ -1202,6 +1202,7 @@ out_copy:
> > > clid->clientid.cl_id = new->cl_clientid.cl_id;
> > >
> > > new->cl_seqid = clid->seqid = 1;
> > > + new->cl_exchange_flags = clid->flags;
> > > nfsd4_set_ex_flags(new, clid);
> > >
> > > dprintk("nfsd4_exchange_id seqid %d flags %x\n",
>
> > [attachment "0001-Set-the-EXCHANGE_ID-EXCHGID4_FLAG_USE_PNFS_MDS-
> > and-E.patch" deleted by Marc Eshel/Almaden/IBM]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://linux-nfs.org/pipermail/pnfs/attachments/20070605/618b7ec0/attachment-0001.htm
More information about the pNFS
mailing list