From c065b635516aa6b5a227b7919da255088169b713 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Tue, 3 Mar 2020 20:06:12 -0800 Subject: [PATCH] kernel - Rename spinlock counter trick API * Rename the access side of the API from spin_update_*() to spin_access_*() to avoid confusion. --- sys/kern/vfs_cache.c | 6 +++--- sys/kern/vfs_vnops.c | 3 +++ sys/sys/spinlock2.h | 14 +++++++------- sys/vfs/hammer2/hammer2_vnops.c | 12 ++++++------ 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c index 6c2df13168..784ce79976 100644 --- a/sys/kern/vfs_cache.c +++ b/sys/kern/vfs_cache.c @@ -1994,11 +1994,11 @@ again: * the update-counter mechanism, and VRECLAIMED is found to * not be set after that, we should be good. */ - v = spin_update_start_only(&vp->v_spin); - if (__predict_true(spin_update_check_inprog(v) == 0)) { + v = spin_access_start_only(&vp->v_spin); + if (__predict_true(spin_access_check_inprog(v) == 0)) { vref_special(vp); if (__predict_false( - spin_update_end_only(&vp->v_spin, v))) { + spin_access_end_only(&vp->v_spin, v))) { vrele(vp); kprintf("CACHE_VREF: RACED %p\n", vp); continue; diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index ec66fb8aa0..558ebeb0de 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -797,6 +797,9 @@ vn_stat(struct vnode *vp, struct stat *sb, struct ucred *cred) u_short mode; cdev_t dev; + /* + * vp already has a ref and is validated, can call unlocked. + */ vap = &vattr; error = VOP_GETATTR(vp, vap); if (error) diff --git a/sys/sys/spinlock2.h b/sys/sys/spinlock2.h index 01d91fb0d8..8e13cccec4 100644 --- a/sys/sys/spinlock2.h +++ b/sys/sys/spinlock2.h @@ -316,11 +316,11 @@ spin_uninit(struct spinlock *spin) * be accessed and retried without dirtying the cache line. Retries if * modified, gains shared spin-lock if modification is underway. * - * The returned value from spin_update_start() must be passed into - * spin_update_end(). + * The returned value from spin_access_start() must be passed into + * spin_access_end(). */ static __inline int -spin_update_start(struct spinlock *spin) +spin_access_start(struct spinlock *spin) { int v; @@ -332,7 +332,7 @@ spin_update_start(struct spinlock *spin) } static __inline int -spin_update_end(struct spinlock *spin, int v) +spin_access_end(struct spinlock *spin, int v) { if (__predict_false(v & 1)) { spin_unlock_shared(spin); @@ -364,7 +364,7 @@ spin_unlock_update(struct spinlock *spin) * API that doesn't integrate the acquisition of the spin-lock */ static __inline int -spin_update_start_only(struct spinlock *spin) +spin_access_start_only(struct spinlock *spin) { int v; @@ -375,13 +375,13 @@ spin_update_start_only(struct spinlock *spin) } static __inline int -spin_update_check_inprog(int v) +spin_access_check_inprog(int v) { return (v & 1); } static __inline int -spin_update_end_only(struct spinlock *spin, int v) +spin_access_end_only(struct spinlock *spin, int v) { cpu_lfence(); return(*(volatile int *)&spin->update != v); diff --git a/sys/vfs/hammer2/hammer2_vnops.c b/sys/vfs/hammer2/hammer2_vnops.c index 184cfee3ff..0fd7c0e52d 100644 --- a/sys/vfs/hammer2/hammer2_vnops.c +++ b/sys/vfs/hammer2/hammer2_vnops.c @@ -285,7 +285,7 @@ hammer2_vop_access(struct vop_access_args *ap) int update; retry: - update = spin_update_start(&ip->cluster_spin); + update = spin_access_start(&ip->cluster_spin); /*hammer2_inode_lock(ip, HAMMER2_RESOLVE_SHARED);*/ uid = hammer2_to_unix_xid(&ip->meta.uid); @@ -294,7 +294,7 @@ retry: uflags = ip->meta.uflags; /*hammer2_inode_unlock(ip);*/ - if (__predict_false(spin_update_end(&ip->cluster_spin, update))) + if (__predict_false(spin_access_end(&ip->cluster_spin, update))) goto retry; error = vop_helper_access(ap, uid, gid, mode, uflags); @@ -321,7 +321,7 @@ hammer2_vop_getattr(struct vop_getattr_args *ap) pmp = ip->pmp; retry: - update = spin_update_start(&ip->cluster_spin); + update = spin_access_start(&ip->cluster_spin); vap->va_fsid = pmp->mp->mnt_stat.f_fsid.val[0]; vap->va_fileid = ip->meta.inum; @@ -363,7 +363,7 @@ retry: vap->va_vaflags = VA_UID_UUID_VALID | VA_GID_UUID_VALID | VA_FSID_UUID_VALID; - if (__predict_false(spin_update_end(&ip->cluster_spin, update))) + if (__predict_false(spin_access_end(&ip->cluster_spin, update))) goto retry; return (0); @@ -386,7 +386,7 @@ hammer2_vop_getattr_quick(struct vop_getattr_args *ap) pmp = ip->pmp; retry: - update = spin_update_start(&ip->cluster_spin); + update = spin_access_start(&ip->cluster_spin); vap->va_fsid = pmp->mp->mnt_stat.f_fsid.val[0]; vap->va_fileid = ip->meta.inum; @@ -406,7 +406,7 @@ retry: vap->va_vaflags = VA_UID_UUID_VALID | VA_GID_UUID_VALID | VA_FSID_UUID_VALID; - if (__predict_false(spin_update_end(&ip->cluster_spin, update))) + if (__predict_false(spin_access_end(&ip->cluster_spin, update))) goto retry; return (0); -- 2.11.4.GIT