svn commit: r285135 - head/sys/kern
Mateusz Guzik
mjg at FreeBSD.org
Sat Jul 4 15:46:40 UTC 2015
Author: mjg
Date: Sat Jul 4 15:46:39 2015
New Revision: 285135
URL: https://svnweb.freebsd.org/changeset/base/285135
Log:
vfs: use shared vnode locking when looking up ".." in vop_stdvptocnp
Briefly discussed with: kib
Modified:
head/sys/kern/vfs_default.c
Modified: head/sys/kern/vfs_default.c
==============================================================================
--- head/sys/kern/vfs_default.c Sat Jul 4 15:42:03 2015 (r285134)
+++ head/sys/kern/vfs_default.c Sat Jul 4 15:46:39 2015 (r285135)
@@ -810,7 +810,7 @@ vop_stdvptocnp(struct vop_vptocnp_args *
VREF(vp);
locked = VOP_ISLOCKED(vp);
VOP_UNLOCK(vp, 0);
- NDINIT_ATVP(&nd, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE,
+ NDINIT_ATVP(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF, UIO_SYSSPACE,
"..", vp, td);
flags = FREAD;
error = vn_open_cred(&nd, &flags, 0, VN_OPEN_NOAUDIT, cred, NULL);
@@ -830,7 +830,7 @@ vop_stdvptocnp(struct vop_vptocnp_args *
VOP_UNLOCK(mvp, 0);
vn_close(mvp, FREAD, cred, td);
VREF(*dvp);
- vn_lock(*dvp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(*dvp, LK_SHARED | LK_RETRY);
covered = 1;
}
@@ -859,15 +859,15 @@ vop_stdvptocnp(struct vop_vptocnp_args *
(dp->d_fileno == fileno)) {
if (covered) {
VOP_UNLOCK(*dvp, 0);
- vn_lock(mvp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(mvp, LK_SHARED | LK_RETRY);
if (dirent_exists(mvp, dp->d_name, td)) {
error = ENOENT;
VOP_UNLOCK(mvp, 0);
- vn_lock(*dvp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(*dvp, LK_SHARED | LK_RETRY);
goto out;
}
VOP_UNLOCK(mvp, 0);
- vn_lock(*dvp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(*dvp, LK_SHARED | LK_RETRY);
}
i -= dp->d_namlen;
More information about the svn-src-all
mailing list