Message ID | 1440069440-27454-8-git-send-email-jeff.layton@primarydata.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Aug 20, 2015 at 07:17:07AM -0400, Jeff Layton wrote: > Note that all callers currently pass in NULL for "file" anyway, so > there was already some dead code in here. Just eliminate that parm > and have it use the file cache instead of dealing directly with a > filp. So this is the first time the cache is actually used, right? (Most of the code introduced by previous patches looks dead until this patch.) --b. > > Signed-off-by: Jeff Layton <jeff.layton@primarydata.com> > --- > fs/nfsd/nfs3proc.c | 2 +- > fs/nfsd/nfsproc.c | 2 +- > fs/nfsd/vfs.c | 33 +++++++++++---------------------- > fs/nfsd/vfs.h | 2 +- > 4 files changed, 14 insertions(+), 25 deletions(-) > > diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c > index 7b755b7f785c..4e46ac511479 100644 > --- a/fs/nfsd/nfs3proc.c > +++ b/fs/nfsd/nfs3proc.c > @@ -192,7 +192,7 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp, > > fh_copy(&resp->fh, &argp->fh); > resp->committed = argp->stable; > - nfserr = nfsd_write(rqstp, &resp->fh, NULL, > + nfserr = nfsd_write(rqstp, &resp->fh, > argp->offset, > rqstp->rq_vec, argp->vlen, > &cnt, > diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c > index 4cd78ef4c95c..9893095cbee1 100644 > --- a/fs/nfsd/nfsproc.c > +++ b/fs/nfsd/nfsproc.c > @@ -213,7 +213,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp, > SVCFH_fmt(&argp->fh), > argp->len, argp->offset); > > - nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), NULL, > + nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), > argp->offset, > rqstp->rq_vec, argp->vlen, > &cnt, > diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c > index b5e077a6e7d4..7c1e7866fec9 100644 > --- a/fs/nfsd/vfs.c > +++ b/fs/nfsd/vfs.c > @@ -42,6 +42,7 @@ > > #include "nfsd.h" > #include "vfs.h" > +#include "filecache.h" > > #define NFSDDBG_FACILITY NFSDDBG_FILEOP > > @@ -1002,30 +1003,18 @@ __be32 nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp, > * N.B. After this call fhp needs an fh_put > */ > __be32 > -nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, > - loff_t offset, struct kvec *vec, int vlen, unsigned long *cnt, > - int *stablep) > +nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset, > + struct kvec *vec, int vlen, unsigned long *cnt, int *stablep) > { > - __be32 err = 0; > - > - if (file) { > - err = nfsd_permission(rqstp, fhp->fh_export, fhp->fh_dentry, > - NFSD_MAY_WRITE|NFSD_MAY_OWNER_OVERRIDE); > - if (err) > - goto out; > - err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen, cnt, > - stablep); > - } else { > - err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_WRITE, &file); > - if (err) > - goto out; > - > - if (cnt) > - err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen, > - cnt, stablep); > - fput(file); > + __be32 err; > + struct nfsd_file *nf; > + > + err = nfsd_file_acquire(rqstp, fhp, NFSD_MAY_WRITE, &nf); > + if (err == nfs_ok) { > + err = nfsd_vfs_write(rqstp, fhp, nf->nf_file, offset, vec, > + vlen, cnt, stablep); > + nfsd_file_put(nf); > } > -out: > return err; > } > > diff --git a/fs/nfsd/vfs.h b/fs/nfsd/vfs.h > index 5be875e3e638..78b5527cba93 100644 > --- a/fs/nfsd/vfs.h > +++ b/fs/nfsd/vfs.h > @@ -78,7 +78,7 @@ __be32 nfsd_readv(struct file *, loff_t, struct kvec *, int, > unsigned long *); > __be32 nfsd_read(struct svc_rqst *, struct svc_fh *, > loff_t, struct kvec *, int, unsigned long *); > -__be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *, > +__be32 nfsd_write(struct svc_rqst *, struct svc_fh *, > loff_t, struct kvec *,int, unsigned long *, int *); > __be32 nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, > struct file *file, loff_t offset, > -- > 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, 26 Aug 2015 15:53:37 -0400 "J. Bruce Fields" <bfields@fieldses.org> wrote: > On Thu, Aug 20, 2015 at 07:17:07AM -0400, Jeff Layton wrote: > > Note that all callers currently pass in NULL for "file" anyway, so > > there was already some dead code in here. Just eliminate that parm > > and have it use the file cache instead of dealing directly with a > > filp. > > So this is the first time the cache is actually used, right? (Most of > the code introduced by previous patches looks dead until this patch.) > Yes! I should have made that clear in the patch descriptions. I'll do that for the next respin. Thanks, Jeff > --b. > > > > > Signed-off-by: Jeff Layton <jeff.layton@primarydata.com> > > --- > > fs/nfsd/nfs3proc.c | 2 +- > > fs/nfsd/nfsproc.c | 2 +- > > fs/nfsd/vfs.c | 33 +++++++++++---------------------- > > fs/nfsd/vfs.h | 2 +- > > 4 files changed, 14 insertions(+), 25 deletions(-) > > > > diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c > > index 7b755b7f785c..4e46ac511479 100644 > > --- a/fs/nfsd/nfs3proc.c > > +++ b/fs/nfsd/nfs3proc.c > > @@ -192,7 +192,7 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct > > nfsd3_writeargs *argp, > > fh_copy(&resp->fh, &argp->fh); > > resp->committed = argp->stable; > > - nfserr = nfsd_write(rqstp, &resp->fh, NULL, > > + nfserr = nfsd_write(rqstp, &resp->fh, > > argp->offset, > > rqstp->rq_vec, argp->vlen, > > &cnt, > > diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c > > index 4cd78ef4c95c..9893095cbee1 100644 > > --- a/fs/nfsd/nfsproc.c > > +++ b/fs/nfsd/nfsproc.c > > @@ -213,7 +213,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct > > nfsd_writeargs *argp, SVCFH_fmt(&argp->fh), > > argp->len, argp->offset); > > > > - nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), > > NULL, > > + nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), > > argp->offset, > > rqstp->rq_vec, argp->vlen, > > &cnt, > > diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c > > index b5e077a6e7d4..7c1e7866fec9 100644 > > --- a/fs/nfsd/vfs.c > > +++ b/fs/nfsd/vfs.c > > @@ -42,6 +42,7 @@ > > > > #include "nfsd.h" > > #include "vfs.h" > > +#include "filecache.h" > > > > #define NFSDDBG_FACILITY NFSDDBG_FILEOP > > > > @@ -1002,30 +1003,18 @@ __be32 nfsd_read(struct svc_rqst *rqstp, > > struct svc_fh *fhp, > > * N.B. After this call fhp needs an fh_put > > */ > > __be32 > > -nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file > > *file, > > - loff_t offset, struct kvec *vec, int vlen, > > unsigned long *cnt, > > - int *stablep) > > +nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t > > offset, > > + struct kvec *vec, int vlen, unsigned long *cnt, int > > *stablep) { > > - __be32 err = 0; > > - > > - if (file) { > > - err = nfsd_permission(rqstp, fhp->fh_export, > > fhp->fh_dentry, > > - > > NFSD_MAY_WRITE|NFSD_MAY_OWNER_OVERRIDE); > > - if (err) > > - goto out; > > - err = nfsd_vfs_write(rqstp, fhp, file, offset, > > vec, vlen, cnt, > > - stablep); > > - } else { > > - err = nfsd_open(rqstp, fhp, S_IFREG, > > NFSD_MAY_WRITE, &file); > > - if (err) > > - goto out; > > - > > - if (cnt) > > - err = nfsd_vfs_write(rqstp, fhp, file, > > offset, vec, vlen, > > - cnt, stablep); > > - fput(file); > > + __be32 err; > > + struct nfsd_file *nf; > > + > > + err = nfsd_file_acquire(rqstp, fhp, NFSD_MAY_WRITE, &nf); > > + if (err == nfs_ok) { > > + err = nfsd_vfs_write(rqstp, fhp, nf->nf_file, > > offset, vec, > > + vlen, cnt, stablep); > > + nfsd_file_put(nf); > > } > > -out: > > return err; > > } > > > > diff --git a/fs/nfsd/vfs.h b/fs/nfsd/vfs.h > > index 5be875e3e638..78b5527cba93 100644 > > --- a/fs/nfsd/vfs.h > > +++ b/fs/nfsd/vfs.h > > @@ -78,7 +78,7 @@ __be32 nfsd_readv(struct file *, > > loff_t, struct kvec *, int, unsigned long *); > > __be32 nfsd_read(struct svc_rqst *, struct svc_fh > > *, loff_t, struct kvec *, int, unsigned long *); > > -__be32 nfsd_write(struct svc_rqst *, struct svc_fh > > *,struct file *, +__be32 nfsd_write(struct svc_rqst > > *, struct svc_fh *, loff_t, struct kvec *,int, unsigned long *, int > > *); __be32 nfsd_vfs_write(struct svc_rqst *rqstp, > > struct svc_fh *fhp, struct file *file, loff_t offset, > > -- > > 2.4.3
diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c index 7b755b7f785c..4e46ac511479 100644 --- a/fs/nfsd/nfs3proc.c +++ b/fs/nfsd/nfs3proc.c @@ -192,7 +192,7 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp, fh_copy(&resp->fh, &argp->fh); resp->committed = argp->stable; - nfserr = nfsd_write(rqstp, &resp->fh, NULL, + nfserr = nfsd_write(rqstp, &resp->fh, argp->offset, rqstp->rq_vec, argp->vlen, &cnt, diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c index 4cd78ef4c95c..9893095cbee1 100644 --- a/fs/nfsd/nfsproc.c +++ b/fs/nfsd/nfsproc.c @@ -213,7 +213,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp, SVCFH_fmt(&argp->fh), argp->len, argp->offset); - nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), NULL, + nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), argp->offset, rqstp->rq_vec, argp->vlen, &cnt, diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index b5e077a6e7d4..7c1e7866fec9 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -42,6 +42,7 @@ #include "nfsd.h" #include "vfs.h" +#include "filecache.h" #define NFSDDBG_FACILITY NFSDDBG_FILEOP @@ -1002,30 +1003,18 @@ __be32 nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp, * N.B. After this call fhp needs an fh_put */ __be32 -nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, - loff_t offset, struct kvec *vec, int vlen, unsigned long *cnt, - int *stablep) +nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset, + struct kvec *vec, int vlen, unsigned long *cnt, int *stablep) { - __be32 err = 0; - - if (file) { - err = nfsd_permission(rqstp, fhp->fh_export, fhp->fh_dentry, - NFSD_MAY_WRITE|NFSD_MAY_OWNER_OVERRIDE); - if (err) - goto out; - err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen, cnt, - stablep); - } else { - err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_WRITE, &file); - if (err) - goto out; - - if (cnt) - err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen, - cnt, stablep); - fput(file); + __be32 err; + struct nfsd_file *nf; + + err = nfsd_file_acquire(rqstp, fhp, NFSD_MAY_WRITE, &nf); + if (err == nfs_ok) { + err = nfsd_vfs_write(rqstp, fhp, nf->nf_file, offset, vec, + vlen, cnt, stablep); + nfsd_file_put(nf); } -out: return err; } diff --git a/fs/nfsd/vfs.h b/fs/nfsd/vfs.h index 5be875e3e638..78b5527cba93 100644 --- a/fs/nfsd/vfs.h +++ b/fs/nfsd/vfs.h @@ -78,7 +78,7 @@ __be32 nfsd_readv(struct file *, loff_t, struct kvec *, int, unsigned long *); __be32 nfsd_read(struct svc_rqst *, struct svc_fh *, loff_t, struct kvec *, int, unsigned long *); -__be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *, +__be32 nfsd_write(struct svc_rqst *, struct svc_fh *, loff_t, struct kvec *,int, unsigned long *, int *); __be32 nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, loff_t offset,
Note that all callers currently pass in NULL for "file" anyway, so there was already some dead code in here. Just eliminate that parm and have it use the file cache instead of dealing directly with a filp. Signed-off-by: Jeff Layton <jeff.layton@primarydata.com> --- fs/nfsd/nfs3proc.c | 2 +- fs/nfsd/nfsproc.c | 2 +- fs/nfsd/vfs.c | 33 +++++++++++---------------------- fs/nfsd/vfs.h | 2 +- 4 files changed, 14 insertions(+), 25 deletions(-)