diff options
author | J. Bruce Fields <bfields@redhat.com> | 2019-04-12 22:26:30 +0200 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2019-04-24 15:46:35 +0200 |
commit | 0ca0c9d7edcf4996da3ebf07947c4484d1e3de16 (patch) | |
tree | 3275d3344964de32a9d37d4c97bb41035a763465 /fs/nfsd/vfs.c | |
parent | nfsd: allow fh_want_write to be called twice (diff) | |
download | linux-0ca0c9d7edcf4996da3ebf07947c4484d1e3de16.tar.xz linux-0ca0c9d7edcf4996da3ebf07947c4484d1e3de16.zip |
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 <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/vfs.c')
-rw-r--r-- | fs/nfsd/vfs.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 7dc98e14655d..fc24ee47eab5 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: |