nfsd: move some commit_metadata()s outside the inode lock
[ Upstream commit eeeadbb9bd5652c47bb9b31aa9ad8b4f1b4aa8b3 ] The commit may be time-consuming and there's no need to hold the lock for it. More of these are possible, these were just some easy ones. Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
02f6e67810
commit
190791ed65
1 changed files with 3 additions and 2 deletions
|
@ -1626,9 +1626,9 @@ nfsd_symlink(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
|||
|
||||
host_err = vfs_symlink(d_inode(dentry), dnew, path);
|
||||
err = nfserrno(host_err);
|
||||
fh_unlock(fhp);
|
||||
if (!err)
|
||||
err = nfserrno(commit_metadata(fhp));
|
||||
fh_unlock(fhp);
|
||||
|
||||
fh_drop_write(fhp);
|
||||
|
||||
|
@ -1693,6 +1693,7 @@ nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp,
|
|||
if (d_really_is_negative(dold))
|
||||
goto out_dput;
|
||||
host_err = vfs_link(dold, dirp, dnew, NULL);
|
||||
fh_unlock(ffhp);
|
||||
if (!host_err) {
|
||||
err = nfserrno(commit_metadata(ffhp));
|
||||
if (!err)
|
||||
|
@ -1913,10 +1914,10 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
|
|||
host_err = vfs_rmdir(dirp, rdentry);
|
||||
}
|
||||
|
||||
fh_unlock(fhp);
|
||||
if (!host_err)
|
||||
host_err = commit_metadata(fhp);
|
||||
dput(rdentry);
|
||||
fh_unlock(fhp);
|
||||
iput(rinode); /* truncate the inode here */
|
||||
|
||||
out_drop_write:
|
||||
|
|
Loading…
Add table
Reference in a new issue