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>
This commit is contained in:
parent
0b8f62625d
commit
0ca0c9d7ed
@ -1786,12 +1786,12 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
|
|||||||
rdentry = lookup_one_len(fname, dentry, flen);
|
rdentry = lookup_one_len(fname, dentry, flen);
|
||||||
host_err = PTR_ERR(rdentry);
|
host_err = PTR_ERR(rdentry);
|
||||||
if (IS_ERR(rdentry))
|
if (IS_ERR(rdentry))
|
||||||
goto out_nfserr;
|
goto out_drop_write;
|
||||||
|
|
||||||
if (d_really_is_negative(rdentry)) {
|
if (d_really_is_negative(rdentry)) {
|
||||||
dput(rdentry);
|
dput(rdentry);
|
||||||
err = nfserr_noent;
|
host_err = -ENOENT;
|
||||||
goto out;
|
goto out_drop_write;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!type)
|
if (!type)
|
||||||
@ -1805,6 +1805,8 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
|
|||||||
host_err = commit_metadata(fhp);
|
host_err = commit_metadata(fhp);
|
||||||
dput(rdentry);
|
dput(rdentry);
|
||||||
|
|
||||||
|
out_drop_write:
|
||||||
|
fh_drop_write(fhp);
|
||||||
out_nfserr:
|
out_nfserr:
|
||||||
err = nfserrno(host_err);
|
err = nfserrno(host_err);
|
||||||
out:
|
out:
|
||||||
|
Loading…
Reference in New Issue
Block a user