#define afs_bufferpages v.v_bufhw
-#define osi_vnhold(avc, r) do { (avc)->vrefCount++; } while (0)
+#define osi_vnhold(avc, r) do { VN_HOLD(AFSTOV(avc)); } while (0)
#undef gop_lookupname
#define gop_lookupname(fnamep,segflg,followlink,compvpp) \
}
}
if (tvp) {
- VN_HOLD(AFSTOV(tvp));
+ AFS_FAST_HOLD(tvp);
mutex_enter(&AFSTOV(tvp)->v_lock);
AFSTOV(tvp)->v_flag |= VROOT;
mutex_exit(&AFSTOV(tvp)->v_lock);
addr[0] = (long)avc;
#ifndef AFS_AIX41_ENV
/* No post processing, so don't hold ref count. */
- VN_HOLD(AFSTOV(avc));
+ AFS_FAST_HOLD(avc);
#endif
}
#if defined(AFS_AIX_ENV) || defined(AFS_SUN54_ENV)
#if defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN80_ENV)
VREF(AFSTOV(avc));
#else
- VN_HOLD(AFSTOV(avc));
+ AFS_FAST_HOLD(avc);
#endif
/* We'll only try this once. If it fails, just release the vnode.
avc->f.states |= CCore; /* causes close to be called later */ \
\
/* The cred and vnode holds will be released in afs_FlushActiveVcaches */ \
- VN_HOLD(AFSTOV(avc)); /* So it won't disappear */ \
+ AFS_FAST_HOLD(avc); /* So it won't disappear */ \
CRKEEP(avc, acred); /* Should use a better place for the creds */ \
} \
else { \
goto loop1;
}
#if defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_HPUX_ENV) || defined(AFS_LINUX20_ENV)
- VN_HOLD(AFSTOV(tvc));
+ AFS_FAST_HOLD(tvc);
#else
#ifdef AFS_DARWIN80_ENV
if (tvc->f.states & CDeadVnode) {
goto loop2;
}
#if defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_HPUX_ENV) || defined(AFS_LINUX20_ENV)
- VN_HOLD(AFSTOV(tvc));
+ AFS_FAST_HOLD(tvc);
#else
#ifdef AFS_DARWIN80_ENV
if (tvc->f.states & CDeadVnode) {
tb->cred = acred;
crhold(tb->cred);
if (avc) {
- VN_HOLD(AFSTOV(avc));
+ AFS_FAST_HOLD(avc);
}
tb->refCount = ause + 1;
tb->size_parm[0] = asparm0;
* (Also, of course, the vnode is assumed to be one of ours. Can't use this
* macro for V-file vnodes.)
*/
-#if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
-/* Bare refcount manipulation would probably work on this platform, but just
- calling VREF does not */
-#define AFS_FAST_HOLD(vp) osi_vnhold((vp),0)
-#elif defined(AFS_AIX_ENV)
-#define AFS_FAST_HOLD(vp) VREFCOUNT_INC(vp)
-#else
-#define AFS_FAST_HOLD(vp) VN_HOLD(AFSTOV(vp))
-#endif
+/* osi_vnhold is defined in PLATFORM/osi_machdep.h */
+#define AFS_FAST_HOLD(vp) osi_vnhold((vp), 0)
+
#ifdef AFS_AIX_ENV
#define AFS_FAST_RELE(vp) VREFCOUNT_DEC(vp)
#else
}
#endif
#if defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_HPUX_ENV) || defined(AFS_LINUX20_ENV)
- VN_HOLD(AFSTOV(tvc));
+ AFS_FAST_HOLD(tvc);
#elif defined(AFS_DARWIN80_ENV)
vp = AFSTOV(tvc);
if (vnode_get(vp))
#if defined(AFS_LINUX22_ENV)
/* Hold it for the LRU (should make count 2) */
- VN_HOLD(AFSTOV(tvc));
+ AFS_FAST_HOLD(tvc);
#elif !(defined (AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV))
VREFCOUNT_SET(tvc, 1); /* us */
#endif