@@ -1389,24 +1389,20 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
int host_err;
__u32 v_mtime=0, v_atime=0;
- err = nfserr_perm;
- if (!flen)
- goto out;
- err = nfserr_exist;
if (isdotent(fname, flen))
- goto out;
+ return nfserr_exist;
if (!(iap->ia_valid & ATTR_MODE))
iap->ia_mode = 0;
err = fh_verify(rqstp, fhp, S_IFDIR, NFSD_MAY_EXEC);
if (err)
- goto out;
+ return err;
dentry = fhp->fh_dentry;
dirp = d_inode(dentry);
host_err = fh_want_write(fhp);
if (host_err)
- goto out_nfserr;
+ return nfserrno(host_err);
fh_lock_nested(fhp, I_MUTEX_PARENT);
The "out" label invokes fh_unlock() and fh_drop_write(). However, at the top of do_nfsd_create(), we haven't yet invoked fh_want_write() or fh_lock_nested(). The "!flen" check is unnecessary because lookup_one_common() already does that check. See commit 12391d07230e ("nfsd: remove redundant zero-length check from create") Cc: <stable@vger.kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> --- fs/nfsd/vfs.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)