diff --git a/src/afs/NBSD/osi_machdep.h b/src/afs/NBSD/osi_machdep.h index d80ef35..8ce1de7 100644 --- a/src/afs/NBSD/osi_machdep.h +++ b/src/afs/NBSD/osi_machdep.h @@ -52,9 +52,9 @@ typedef char * caddr_t; #define v_vfsp v_mount /* vnode */ -#define VN_HOLD(vp) (vget(vp, 0)) +#define VN_HOLD(vp) (vref(vp)) #define VN_RELE(vp) (vrele(vp)) -#define osi_vnhold(avc, r) (VN_HOLD(AFSTOV(avc))) +#define osi_vnhold(avc, r) does not work #define va_nodeid va_fileid diff --git a/src/afs/afs_osidnlc.c b/src/afs/afs_osidnlc.c index 9d267e4..b18130f 100644 --- a/src/afs/afs_osidnlc.c +++ b/src/afs/afs_osidnlc.c @@ -200,6 +200,11 @@ osi_dnlc_lookup(struct vcache *adp, char *aname, int locktype) #ifdef AFS_DARWIN80_ENV vnode_t tvp; #endif +#ifdef AFS_NETBSD_ENV + struct vnode *vp; + int error; +#endif + if (!afs_usednlc) return 0; @@ -212,6 +217,9 @@ osi_dnlc_lookup(struct vcache *adp, char *aname, int locktype) TRACE(osi_dnlc_lookupT, skey); dnlcstats.lookups++; +#ifdef AFS_NETBSD_ENV +retry: +#endif ObtainReadLock(&afs_xvcache); ObtainReadLock(&afs_xdnlc); @@ -267,6 +275,17 @@ osi_dnlc_lookup(struct vcache *adp, char *aname, int locktype) osi_dnlc_remove(adp, aname, tvc); return 0; } +#elif defined(AFS_NETBSD_ENV) + vp = AFSTOV(tvc); + mutex_enter(vp->v_interlock); + ReleaseReadLock(&afs_xvcache); + error = vget(vp, 0); + if (error) { + if (error == ENOENT) + goto retry; + return 0; + } + return tvc; #else osi_vnhold(tvc, 0); #endif