From: J. Bruce Fields Date: Fri, 12 Apr 2019 20:26:30 +0000 (-0400) Subject: nfsd: fh_drop_write in nfsd_unlink X-Git-Tag: v5.2-rc1~53^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0ca0c9d7edcf4996da3ebf07947c4484d1e3de16;p=thirdparty%2Flinux.git nfsd: fh_drop_write in nfsd_unlink fh_want_write() can now be called twice, but I'm also fixing up the callers not to do that. Other cases include setattr and create. Signed-off-by: J. Bruce Fields --- diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 7dc98e14655df..fc24ee47eab51 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1786,12 +1786,12 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, rdentry = lookup_one_len(fname, dentry, flen); host_err = PTR_ERR(rdentry); if (IS_ERR(rdentry)) - goto out_nfserr; + goto out_drop_write; if (d_really_is_negative(rdentry)) { dput(rdentry); - err = nfserr_noent; - goto out; + host_err = -ENOENT; + goto out_drop_write; } if (!type) @@ -1805,6 +1805,8 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, host_err = commit_metadata(fhp); dput(rdentry); +out_drop_write: + fh_drop_write(fhp); out_nfserr: err = nfserrno(host_err); out: