diff options
author | mjg <mjg@FreeBSD.org> | 2016-12-31 12:06:27 +0000 |
---|---|---|
committer | mjg <mjg@FreeBSD.org> | 2016-12-31 12:06:27 +0000 |
commit | 1af6bcb527e97aaddea67934bd4fcbd6cb8a1d01 (patch) | |
tree | 6bcdec0ca237f2d33a315bfad1b0af77fdadd516 /sys/kern/vfs_lookup.c | |
parent | f83e24b3d82a425ec8bd4bb259f6c75ce6786280 (diff) | |
download | FreeBSD-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.c | 8 |
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); |