Re: [PATCH v2 09/14] nfsd: reduce range of directory lock in nfsd4_create_file()
Jeff Layton <[email protected]>
| Newsgroups | gmane.linux.nfs |
|---|---|
| Message-ID | <[email protected]> |
On Mon, 2026-07-06 at 08:19 +1000, NeilBrown wrote: > From: NeilBrown <neil-+NVA1uvv1dVBDLzU/[email protected]> > > We only need to hold the lock taken by start_creating() until the create > has been attempted. Holding for longer can serve no purpose. > > The lock is currently held across the setattr call. This might be the > intent but it serves no purpose. Holding the lock prevents the name > from being removed or renamed, but it doesn't prevent a GETATTR or a > racing SETATTR or an OPEN. > > Calling end_creating() puts the reference to 'child', but we can still > use the reference that was stored in open->op_filp. > > Signed-off-by: NeilBrown <neil-+NVA1uvv1dVBDLzU/[email protected]> > --- > fs/nfsd/nfs4proc.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c > index 244d5f3975b7..973beda7f161 100644 > --- a/fs/nfsd/nfs4proc.c > +++ b/fs/nfsd/nfs4proc.c > @@ -367,9 +367,12 @@ nfsd4_create_file(struct svc_rqst *rqstp, struct svc_fh *fhp, > if (status == nfs_ok) > open->op_created = open->op_filp->f_mode & FMODE_CREATED; > } > + end_creating(child); > if (status != nfs_ok) > goto out; > > + child = open->op_filp->f_path.dentry; > + > status = fh_compose(resfhp, fhp->fh_export, child, fhp); > if (status != nfs_ok) > goto out; > @@ -419,7 +422,6 @@ nfsd4_create_file(struct svc_rqst *rqstp, struct svc_fh *fhp, > if (attrs.na_paclerr) > open->op_bmval[2] &= ~FATTR4_WORD2_POSIX_ACCESS_ACL; > out: > - end_creating(child); > fh_drop_write(fhp); > out_free: > nfsd_attrs_free(&attrs); Reviewed-by: Jeff Layton <[email protected]>