Commit eeeadbb9 authored by J. Bruce Fields's avatar J. Bruce Fields
Browse files

nfsd: move some commit_metadata()s outside the inode lock



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: default avatarJ. Bruce Fields <bfields@redhat.com>
parent e5d74a2d
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1613,9 +1613,9 @@ nfsd_symlink(struct svc_rqst *rqstp, struct svc_fh *fhp,

	host_err = vfs_symlink(&init_user_ns, 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);

@@ -1680,6 +1680,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, &init_user_ns, dirp, dnew, NULL);
	fh_unlock(ffhp);
	if (!host_err) {
		err = nfserrno(commit_metadata(ffhp));
		if (!err)
@@ -1902,10 +1903,10 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
		host_err = vfs_rmdir(&init_user_ns, 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: