summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_lookup.c
diff options
context:
space:
mode:
authormjg <mjg@FreeBSD.org>2016-12-31 12:06:27 +0000
committermjg <mjg@FreeBSD.org>2016-12-31 12:06:27 +0000
commit1af6bcb527e97aaddea67934bd4fcbd6cb8a1d01 (patch)
tree6bcdec0ca237f2d33a315bfad1b0af77fdadd516 /sys/kern/vfs_lookup.c
parentf83e24b3d82a425ec8bd4bb259f6c75ce6786280 (diff)
downloadFreeBSD-src-1af6bcb527e97aaddea67934bd4fcbd6cb8a1d01.zip
FreeBSD-src-1af6bcb527e97aaddea67934bd4fcbd6cb8a1d01.tar.gz
MFC r309893,r309929:
vfs: add vrefact, to be used when the vnode has to be already active This allows blind increment of relevant counters which under contention is cheaper than inc-not-zero loops at least on amd64. Use it in some of the places which are guaranteed to see already active vnodes. == vfs: use vrefact in getcwd and fchdir
Diffstat (limited to 'sys/kern/vfs_lookup.c')
-rw-r--r--sys/kern/vfs_lookup.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index 85c625f..c1ad31e 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -200,7 +200,7 @@ namei_handle_root(struct nameidata *ndp, struct vnode **dpp)
ndp->ni_pathlen--;
}
*dpp = ndp->ni_rootdir;
- VREF(*dpp);
+ vrefact(*dpp);
return (0);
}
@@ -321,7 +321,7 @@ namei(struct nameidata *ndp)
*/
FILEDESC_SLOCK(fdp);
ndp->ni_rootdir = fdp->fd_rdir;
- VREF(ndp->ni_rootdir);
+ vrefact(ndp->ni_rootdir);
ndp->ni_topdir = fdp->fd_jdir;
/*
@@ -343,7 +343,7 @@ namei(struct nameidata *ndp)
startdir_used = 1;
} else if (ndp->ni_dirfd == AT_FDCWD) {
dp = fdp->fd_cdir;
- VREF(dp);
+ vrefact(dp);
} else {
rights = ndp->ni_rightsneeded;
cap_rights_set(&rights, CAP_LOOKUP);
@@ -910,7 +910,7 @@ good:
vput(ndp->ni_dvp);
else
vrele(ndp->ni_dvp);
- vref(vp_crossmp);
+ vrefact(vp_crossmp);
ndp->ni_dvp = vp_crossmp;
error = VFS_ROOT(mp, compute_cn_lkflags(mp, cnp->cn_lkflags,
cnp->cn_flags), &tdp);
OpenPOWER on IntegriCloud