Re: [PATCH v1 08/13] NFSD return nfs4_stid in nfs4_preprocess_stateid_op

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

 



On Fri, Nov 2, 2018 at 3:06 PM J. Bruce Fields <bfields@xxxxxxxxxxxx> wrote:
>
> On Fri, Oct 19, 2018 at 11:29:00AM -0400, Olga Kornievskaia wrote:
> > Needed for copy to add nfs4_cp_state to the nfs4_stid.
> >
> > Signed-off-by: Andy Adamson <andros@xxxxxxxxxx>
> > Signed-off-by: Olga Kornievskaia <kolga@xxxxxxxxxx>
> > ---
> >  fs/nfsd/nfs4proc.c  | 17 ++++++++++-------
> >  fs/nfsd/nfs4state.c |  8 ++++++--
> >  fs/nfsd/state.h     |  3 ++-
> >  3 files changed, 18 insertions(+), 10 deletions(-)
> >
> > diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
> > index edff074..29686df 100644
> > --- a/fs/nfsd/nfs4proc.c
> > +++ b/fs/nfsd/nfs4proc.c
> > @@ -781,7 +781,8 @@ static __be32 nfsd4_do_lookupp(struct svc_rqst *rqstp, struct svc_fh *fh)
>
> By the way, I wonder why git-diff is doing such a bad job of guessing
> the right function?  Not a big deal, the patches still apply fine, it
> just makes reading them in email a little harder.

Could it be because I worked against Trond's git repo (as that's my
default location)? This is against whatever is in 4.19-rc6. This is
also git from RHEL7.4 (1.8.3.1 version), don't know if that matters.
In the next version, I do the patches against your git repo. Hopefully
it'll be better.

>
> --b.
>
> >       /* check stateid */
> >       status = nfs4_preprocess_stateid_op(rqstp, cstate, &cstate->current_fh,
> >                                       &read->rd_stateid, RD_STATE,
> > -                                     &read->rd_filp, &read->rd_tmp_file);
> > +                                     &read->rd_filp, &read->rd_tmp_file,
> > +                                     NULL);
> >       if (status) {
> >               dprintk("NFSD: nfsd4_read: couldn't process stateid!\n");
> >               goto out;
> > @@ -954,7 +955,7 @@ static __be32 nfsd4_do_lookupp(struct svc_rqst *rqstp, struct svc_fh *fh)
> >       if (setattr->sa_iattr.ia_valid & ATTR_SIZE) {
> >               status = nfs4_preprocess_stateid_op(rqstp, cstate,
> >                               &cstate->current_fh, &setattr->sa_stateid,
> > -                             WR_STATE, NULL, NULL);
> > +                             WR_STATE, NULL, NULL, NULL);
> >               if (status) {
> >                       dprintk("NFSD: nfsd4_setattr: couldn't process stateid!\n");
> >                       return status;
> > @@ -1005,7 +1006,7 @@ static __be32 nfsd4_do_lookupp(struct svc_rqst *rqstp, struct svc_fh *fh)
> >       trace_nfsd_write_start(rqstp, &cstate->current_fh,
> >                              write->wr_offset, cnt);
> >       status = nfs4_preprocess_stateid_op(rqstp, cstate, &cstate->current_fh,
> > -                                             stateid, WR_STATE, &filp, NULL);
> > +                                     stateid, WR_STATE, &filp, NULL, NULL);
> >       if (status) {
> >               dprintk("NFSD: nfsd4_write: couldn't process stateid!\n");
> >               return status;
> > @@ -1039,14 +1040,16 @@ static __be32 nfsd4_do_lookupp(struct svc_rqst *rqstp, struct svc_fh *fh)
> >       __be32 status;
> >
> >       status = nfs4_preprocess_stateid_op(rqstp, cstate, &cstate->save_fh,
> > -                                         src_stateid, RD_STATE, src, NULL);
> > +                                         src_stateid, RD_STATE, src, NULL,
> > +                                         NULL);
> >       if (status) {
> >               dprintk("NFSD: %s: couldn't process src stateid!\n", __func__);
> >               goto out;
> >       }
> >
> >       status = nfs4_preprocess_stateid_op(rqstp, cstate, &cstate->current_fh,
> > -                                         dst_stateid, WR_STATE, dst, NULL);
> > +                                         dst_stateid, WR_STATE, dst, NULL,
> > +                                         NULL);
> >       if (status) {
> >               dprintk("NFSD: %s: couldn't process dst stateid!\n", __func__);
> >               goto out_put_src;
> > @@ -1350,7 +1353,7 @@ struct nfsd4_copy *
> >
> >       status = nfs4_preprocess_stateid_op(rqstp, cstate, &cstate->current_fh,
> >                                           &fallocate->falloc_stateid,
> > -                                         WR_STATE, &file, NULL);
> > +                                         WR_STATE, &file, NULL, NULL);
> >       if (status != nfs_ok) {
> >               dprintk("NFSD: nfsd4_fallocate: couldn't process stateid!\n");
> >               return status;
> > @@ -1409,7 +1412,7 @@ struct nfsd4_copy *
> >
> >       status = nfs4_preprocess_stateid_op(rqstp, cstate, &cstate->current_fh,
> >                                           &seek->seek_stateid,
> > -                                         RD_STATE, &file, NULL);
> > +                                         RD_STATE, &file, NULL, NULL);
> >       if (status) {
> >               dprintk("NFSD: nfsd4_seek: couldn't process stateid!\n");
> >               return status;
> > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> > index 07a57d0..e263fd0 100644
> > --- a/fs/nfsd/nfs4state.c
> > +++ b/fs/nfsd/nfs4state.c
> > @@ -5159,7 +5159,8 @@ static __be32 nfsd4_validate_stateid(struct nfs4_client *cl, stateid_t *stateid)
> >  __be32
> >  nfs4_preprocess_stateid_op(struct svc_rqst *rqstp,
> >               struct nfsd4_compound_state *cstate, struct svc_fh *fhp,
> > -             stateid_t *stateid, int flags, struct file **filpp, bool *tmp_file)
> > +             stateid_t *stateid, int flags, struct file **filpp,
> > +             bool *tmp_file, struct nfs4_stid **cstid)
> >  {
> >       struct inode *ino = d_inode(fhp->fh_dentry);
> >       struct net *net = SVC_NET(rqstp);
> > @@ -5210,8 +5211,11 @@ static __be32 nfsd4_validate_stateid(struct nfs4_client *cl, stateid_t *stateid)
> >       if (!status && filpp)
> >               status = nfs4_check_file(rqstp, fhp, s, filpp, tmp_file, flags);
> >  out:
> > -     if (s)
> > +     if (s) {
> > +             if (!status && cstid)
> > +                     *cstid = s;
> >               nfs4_put_stid(s);
> > +     }
> >       return status;
> >  }
> >
> > diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h
> > index 6aacb32..304de3b 100644
> > --- a/fs/nfsd/state.h
> > +++ b/fs/nfsd/state.h
> > @@ -606,7 +606,8 @@ struct nfsd4_blocked_lock {
> >
> >  extern __be32 nfs4_preprocess_stateid_op(struct svc_rqst *rqstp,
> >               struct nfsd4_compound_state *cstate, struct svc_fh *fhp,
> > -             stateid_t *stateid, int flags, struct file **filp, bool *tmp_file);
> > +             stateid_t *stateid, int flags, struct file **filp,
> > +             bool *tmp_file, struct nfs4_stid **cstid);
> >  __be32 nfsd4_lookup_stateid(struct nfsd4_compound_state *cstate,
> >                    stateid_t *stateid, unsigned char typemask,
> >                    struct nfs4_stid **s, struct nfsd_net *nn);
> > --
> > 1.8.3.1



[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