[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