Index: openafs/src/WINNT/afsd/afsd_init.c
diff -c openafs/src/WINNT/afsd/afsd_init.c:1.40.2.28 openafs/src/WINNT/afsd/afsd_init.c:1.40.2.29
*** openafs/src/WINNT/afsd/afsd_init.c:1.40.2.28	Tue Jan 24 12:16:05 2006
--- openafs/src/WINNT/afsd/afsd_init.c	Wed Feb 15 11:37:40 2006
***************
*** 279,304 ****
                         KEY_READ|KEY_WRITE,
                         &hkMSV10) == ERROR_SUCCESS )
      {
!         if (RegQueryValueEx( hkMSV10, "BackConnectionHostNames", 0, &dwType, NULL, &dwSize) == ERROR_SUCCESS) {
!             pHostNames = malloc(dwSize + strlen(cm_NetbiosName) + 1);
!             RegQueryValueEx( hkMSV10, "BackConnectionHostNames", 0, &dwType, pHostNames, &dwSize);
! 
!             for (pName = pHostNames; *pName ; pName += strlen(pName) + 1)
!             {
!                 if ( !stricmp(pName, cm_NetbiosName) ) {
!                     bNameFound = TRUE;
!                     break;
!                 }   
!             }
!         }
               
          if ( !bNameFound ) {
              int size = strlen(cm_NetbiosName) + 2;
              if ( !pHostNames ) {
                  pHostNames = malloc(size);
!                 dwSize = 1;
              }
-             pName = pHostNames;
              StringCbCopyA(pName, size, cm_NetbiosName);
              pName += size - 1;
              *pName = '\0';  /* add a second nul terminator */
--- 279,307 ----
                         KEY_READ|KEY_WRITE,
                         &hkMSV10) == ERROR_SUCCESS )
      {
! 	if (RegQueryValueEx( hkMSV10, "BackConnectionHostNames", 0, 
! 			     &dwType, NULL, &dwSize) == ERROR_SUCCESS) {
! 	    dwSize += strlen(cm_NetbiosName) + 1;
! 	    pHostNames = malloc(dwSize);
! 	    if (RegQueryValueEx( hkMSV10, "BackConnectionHostNames", 0, &dwType, 
! 				 pHostNames, &dwSize) == ERROR_SUCCESS) {
! 		for (pName = pHostNames; *pName ; pName += strlen(pName) + 1)
! 		{
! 		    if ( !stricmp(pName, cm_NetbiosName) ) {
! 			bNameFound = TRUE;
! 			break;
! 		    }   
! 		}
! 	    }
! 	}
               
          if ( !bNameFound ) {
              int size = strlen(cm_NetbiosName) + 2;
              if ( !pHostNames ) {
                  pHostNames = malloc(size);
!                 dwSize = size;
! 		pName = pHostNames;
              }
              StringCbCopyA(pName, size, cm_NetbiosName);
              pName += size - 1;
              *pName = '\0';  /* add a second nul terminator */
***************
*** 370,377 ****
--- 373,384 ----
          }
          RegCloseKey(hkMSV10);
      }
+ 
+     if (pHostNames)
+ 	free(pHostNames);
  }
  
+ 
  #if !defined(DJGPP)
  static void afsd_InitServerPreferences(void)
  {
Index: openafs/src/WINNT/afsd/cm_server.c
diff -c openafs/src/WINNT/afsd/cm_server.c:1.13.2.8 openafs/src/WINNT/afsd/cm_server.c:1.13.2.9
*** openafs/src/WINNT/afsd/cm_server.c:1.13.2.8	Mon Feb 13 11:29:43 2006
--- openafs/src/WINNT/afsd/cm_server.c	Fri Feb 17 16:44:39 2006
***************
*** 235,241 ****
      tsp->refCount = 1;
      lock_InitializeMutex(&tsp->mx, "cm_server_t mutex");
      tsp->addr = *socketp;
!     tsp->flags = CM_SERVERFLAG_DOWN;	/* assume down; ping will mark up if available */
  
      cm_SetServerPrefs(tsp); 
  
--- 235,241 ----
      tsp->refCount = 1;
      lock_InitializeMutex(&tsp->mx, "cm_server_t mutex");
      tsp->addr = *socketp;
!     tsp->flags = 0;	/* assume up until we attempt to contact it */
  
      cm_SetServerPrefs(tsp); 
  
Index: openafs/src/afs/afs.h
diff -c openafs/src/afs/afs.h:1.48.2.27 openafs/src/afs/afs.h:1.48.2.28
*** openafs/src/afs/afs.h:1.48.2.27	Tue Jan 24 12:41:20 2006
--- openafs/src/afs/afs.h	Fri Feb 17 16:58:33 2006
***************
*** 315,321 ****
  #define	QInit(q)    ((q)->prev = (q)->next = (q))
  #define	QAdd(q,e)   ((e)->next = (q)->next, (e)->prev = (q), \
  			(q)->next->prev = (e), (q)->next = (e))
! #define	QRemove(e)  ((e)->next->prev = (e)->prev, (e)->prev->next = (e)->next)
  #define	QNext(e)    ((e)->next)
  #define QPrev(e)    ((e)->prev)
  #define QEmpty(q)   ((q)->prev == (q))
--- 315,321 ----
  #define	QInit(q)    ((q)->prev = (q)->next = (q))
  #define	QAdd(q,e)   ((e)->next = (q)->next, (e)->prev = (q), \
  			(q)->next->prev = (e), (q)->next = (e))
! #define	QRemove(e)  ((e)->next->prev = (e)->prev, (e)->prev->next = (e)->next, (e)->prev = NULL, (e)->next = NULL)
  #define	QNext(e)    ((e)->next)
  #define QPrev(e)    ((e)->prev)
  #define QEmpty(q)   ((q)->prev == (q))
Index: openafs/src/afs/afs_cbqueue.c
diff -c openafs/src/afs/afs_cbqueue.c:1.9.2.2 openafs/src/afs/afs_cbqueue.c:1.9.2.3
*** openafs/src/afs/afs_cbqueue.c:1.9.2.2	Wed Oct  5 01:58:26 2005
--- openafs/src/afs/afs_cbqueue.c	Fri Feb 17 16:58:33 2006
***************
*** 75,81 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_cbqueue.c,v 1.9.2.2 2005/10/05 05:58:26 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
--- 75,81 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_cbqueue.c,v 1.9.2.3 2006/02/17 21:58:33 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
***************
*** 141,147 ****
      debugvc = avc;
      if (avc->callsort.prev) {
  	QRemove(&(avc->callsort));
- 	avc->callsort.prev = avc->callsort.next = NULL;
      } else;			/* must have got dequeued in a race */
  
      return;
--- 141,146 ----
***************
*** 220,226 ****
  			    /* What about locking xvcache or vrefcount++ or
  			     * write locking tvc? */
  			    QRemove(tq);
- 			    tq->prev = tq->next = NULL;
  			    tvc->states &= ~(CStatd | CMValid | CUnique);
                              if (!(tvc->states & CVInit) &&
                                  (tvc->fid.Fid.Vnode & 1 ||
--- 219,224 ----
***************
*** 238,244 ****
  		 * What about locking xvcache or vrefcount++ or write locking tvc?
  		 */
  		QRemove(tq);
- 		tq->prev = tq->next = NULL;
  		tvc->states &= ~(CStatd | CMValid | CUnique);
                  if (!(tvc->states & CVInit) &&
                      (tvc->fid.Fid.Vnode & 1 || (vType(tvc) == VDIR)))
--- 236,241 ----
***************
*** 311,317 ****
  	    tvc->callback = 0;
  	    tvc->dchint = NULL;	/* invalidate hints */
  	    tvc->states &= ~(CStatd);
! 	    tvc->callsort.prev = tvc->callsort.next = NULL;
  	    if (!(tvc->states & CVInit) &&
                  ((tvc->fid.Fid.Vnode & 1) || (vType(tvc) == VDIR)))
  		osi_dnlc_purgedp(tvc);
--- 308,315 ----
  	    tvc->callback = 0;
  	    tvc->dchint = NULL;	/* invalidate hints */
  	    tvc->states &= ~(CStatd);
! 	    if (QPrev(&(tvc->callsort)))
! 		QRemove(&(tvc->callsort));
  	    if (!(tvc->states & CVInit) &&
                  ((tvc->fid.Fid.Vnode & 1) || (vType(tvc) == VDIR)))
  		osi_dnlc_purgedp(tvc);
Index: openafs/src/afs/afs_osi.c
diff -c openafs/src/afs/afs_osi.c:1.48.2.5 openafs/src/afs/afs_osi.c:1.48.2.6
*** openafs/src/afs/afs_osi.c:1.48.2.5	Wed Oct  5 01:58:27 2005
--- openafs/src/afs/afs_osi.c	Wed Feb 15 15:55:11 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osi.c,v 1.48.2.5 2005/10/05 05:58:27 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osi.c,v 1.48.2.6 2006/02/15 20:55:11 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 581,586 ****
--- 581,587 ----
         afs_osi_ctxtp = NULL;
         afs_osi_ctxtp_initialized = 0;
      }
+     shutdown_osisleep();
  #endif
      if (afs_cold_shutdown) {
  	LOCK_INIT(&afs_ftf, "afs_ftf");
Index: openafs/src/afs/afs_osidnlc.c
diff -c openafs/src/afs/afs_osidnlc.c:1.8.2.4 openafs/src/afs/afs_osidnlc.c:1.8.2.5
*** openafs/src/afs/afs_osidnlc.c:1.8.2.4	Sat Jan 28 13:04:04 2006
--- openafs/src/afs/afs_osidnlc.c	Fri Feb 17 23:09:33 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osidnlc.c,v 1.8.2.4 2006/01/28 18:04:04 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osidnlc.c,v 1.8.2.5 2006/02/18 04:09:33 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
***************
*** 197,202 ****
--- 197,205 ----
      char *ts = aname;
      struct nc *tnc, *tnc1 = 0;
      int safety;
+ #ifdef AFS_DARWIN80_ENV
+     vnode_t tvp;
+ #endif
  
      if (!afs_usednlc)
  	return 0;
***************
*** 249,263 ****
  	VN_HOLD((vnode_t *) tvc);
  #else
  #ifdef AFS_DARWIN80_ENV
!         if (vnode_get(tvc->v)) {
  	    ReleaseReadLock(&afs_xvcache);
  	    dnlcstats.misses++;
!             osi_dnlc_remove(adp, aname, tvc);
!             return 0;
!         }
! #endif
  	osi_vnhold(tvc, 0);
  #endif
  	ReleaseReadLock(&afs_xvcache);
  
  #ifdef	notdef
--- 252,277 ----
  	VN_HOLD((vnode_t *) tvc);
  #else
  #ifdef AFS_DARWIN80_ENV
! 	tvp = AFSTOV(tvc);
! 	if (vnode_get(tvp)) {
  	    ReleaseReadLock(&afs_xvcache);
  	    dnlcstats.misses++;
! 	    osi_dnlc_remove(adp, aname, tvc);
! 	    return 0;
! 	}
! 	if (vnode_ref(tvp)) {
! 	    ReleaseReadLock(&afs_xvcache);
! 	    AFS_GUNLOCK();
! 	    vnode_put(tvp);
! 	    AFS_GLOCK();
! 	    dnlcstats.misses++;
! 	    osi_dnlc_remove(adp, aname, tvc);
! 	    return 0;
! 	}
! #else
  	osi_vnhold(tvc, 0);
  #endif
+ #endif
  	ReleaseReadLock(&afs_xvcache);
  
  #ifdef	notdef
Index: openafs/src/afs/afs_pioctl.c
diff -c openafs/src/afs/afs_pioctl.c:1.81.2.22 openafs/src/afs/afs_pioctl.c:1.81.2.24
*** openafs/src/afs/afs_pioctl.c:1.81.2.22	Thu Jan  5 00:57:55 2006
--- openafs/src/afs/afs_pioctl.c	Fri Feb 17 23:09:33 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.81.2.22 2006/01/05 05:57:55 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #ifdef AFS_OBSD_ENV
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.81.2.24 2006/02/18 04:09:33 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #ifdef AFS_OBSD_ENV
***************
*** 2549,2554 ****
--- 2549,2557 ----
      register struct volume *tv;
      afs_int32 cell, volume;
      struct afs_q *tq, *uq;
+ #ifdef AFS_DARWIN80_ENV
+     vnode_t vp;
+ #endif
  
      AFS_STATCNT(PFlushVolumeData);
      if (!avc)
***************
*** 2567,2573 ****
      ObtainReadLock(&afs_xvcache);
      i = VCHashV(&avc->fid);
      for (tq = afs_vhashTV[i].prev; tq != &afs_vhashTV[i]; tq = uq) {
- 	    uq = QPrev(tq);
  	    tvc = QTOVH(tq);
  	    if (tvc->fid.Fid.Volume == volume && tvc->fid.Cell == cell) {
                  if (tvc->states & CVInit) {
--- 2570,2575 ----
***************
*** 2585,2600 ****
  #if	defined(AFS_SGI_ENV) || defined(AFS_OSF_ENV)  || defined(AFS_SUN5_ENV)  || defined(AFS_HPUX_ENV) || defined(AFS_LINUX20_ENV) 
  		VN_HOLD(AFSTOV(tvc));
  #else
- #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
  #ifdef AFS_DARWIN80_ENV
!                 if (vnode_get(AFSTOV(tvc)))
!                     continue;
! #endif
  		osi_vnhold(tvc, 0);
  #else
  		VREFCOUNT_INC(tvc); /* AIX, apparently */
  #endif
  #endif
  		ReleaseReadLock(&afs_xvcache);
  #ifdef AFS_BOZONLOCK_ENV
  		afs_BozonLock(&tvc->pvnLock, tvc);	/* Since afs_TryToSmush will do a pvn_vptrunc */
--- 2587,2610 ----
  #if	defined(AFS_SGI_ENV) || defined(AFS_OSF_ENV)  || defined(AFS_SUN5_ENV)  || defined(AFS_HPUX_ENV) || defined(AFS_LINUX20_ENV) 
  		VN_HOLD(AFSTOV(tvc));
  #else
  #ifdef AFS_DARWIN80_ENV
! 		vp = AFSTOV(tvc);
! 		if (vnode_get(vp))
! 		    continue;
! 		if (vnode_ref(vp)) {
! 		    AFS_GUNLOCK();
! 		    vnode_put(vp);
! 		    AFS_GLOCK();
! 		    continue;
! 		}
! #else
! #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
  		osi_vnhold(tvc, 0);
  #else
  		VREFCOUNT_INC(tvc); /* AIX, apparently */
  #endif
  #endif
+ #endif
  		ReleaseReadLock(&afs_xvcache);
  #ifdef AFS_BOZONLOCK_ENV
  		afs_BozonLock(&tvc->pvnLock, tvc);	/* Since afs_TryToSmush will do a pvn_vptrunc */
***************
*** 2613,2627 ****
  		afs_BozonUnlock(&tvc->pvnLock, tvc);
  #endif
  #ifdef AFS_DARWIN80_ENV
! 		/* our tvc ptr is still good until now */
!                 vnode_put(AFSTOV(tvc));
! 		AFS_FAST_RELE(tvc);
! 		ObtainReadLock(&afs_xvcache);
! #else
  		ObtainReadLock(&afs_xvcache);
  		/* our tvc ptr is still good until now */
  		AFS_FAST_RELE(tvc);
! #endif
  	    }
  	}
      ReleaseReadLock(&afs_xvcache);
--- 2623,2636 ----
  		afs_BozonUnlock(&tvc->pvnLock, tvc);
  #endif
  #ifdef AFS_DARWIN80_ENV
! 		vnode_put(AFSTOV(tvc));
! #endif
  		ObtainReadLock(&afs_xvcache);
+ 		uq = QPrev(tq);
  		/* our tvc ptr is still good until now */
  		AFS_FAST_RELE(tvc);
! 	    } else {
! 		uq = QPrev(tq);
  	    }
  	}
      ReleaseReadLock(&afs_xvcache);
Index: openafs/src/afs/afs_prototypes.h
diff -c openafs/src/afs/afs_prototypes.h:1.53.2.15 openafs/src/afs/afs_prototypes.h:1.53.2.16
*** openafs/src/afs/afs_prototypes.h:1.53.2.15	Tue Jan 24 23:47:11 2006
--- openafs/src/afs/afs_prototypes.h	Fri Feb 17 23:59:31 2006
***************
*** 822,827 ****
--- 822,828 ----
  extern int afs_norefpanic;
  extern struct vcache *ReclaimedVCList;
  
+ extern void afs_FlushReclaimedVcaches(void);
  void afs_vcacheInit(int astatSize);
  extern struct vcache *afs_FindVCache(struct VenusFid *afid, afs_int32 * retry,
  				     afs_int32 flag);
Index: openafs/src/afs/afs_vcache.c
diff -c openafs/src/afs/afs_vcache.c:1.65.2.41 openafs/src/afs/afs_vcache.c:1.65.2.44
*** openafs/src/afs/afs_vcache.c:1.65.2.41	Sat Jan 28 13:06:37 2006
--- openafs/src/afs/afs_vcache.c	Fri Feb 17 23:54:50 2006
***************
*** 39,45 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_vcache.c,v 1.65.2.41 2006/01/28 18:06:37 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
--- 39,45 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_vcache.c,v 1.65.2.44 2006/02/18 04:54:50 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
***************
*** 163,169 ****
      avc->states |= CVFlushed;
      /* pull the entry out of the lruq and put it on the free list */
      QRemove(&avc->vlruq);
-     avc->vlruq.prev = avc->vlruq.next = (struct afs_q *)0;
  
      /* keep track of # of files that we bulk stat'd, but never used
       * before they got recycled.
--- 163,168 ----
***************
*** 2099,2104 ****
--- 2098,2106 ----
  #ifdef	AFS_OSF_ENV
      int vg;
  #endif
+ #ifdef AFS_DARWIN80_ENV
+     vnode_t tvp;
+ #endif
  
      start = osi_Time();
  
***************
*** 2154,2161 ****
  		afs_osi_Sleep(&tvc->states);
  		goto rootvc_loop;
              }
!             if (vnode_get(AFSTOV(tvc)))       /* this bumps ref count */
!                 continue;
  #endif
  	    break;
  	}
--- 2156,2171 ----
  		afs_osi_Sleep(&tvc->states);
  		goto rootvc_loop;
              }
! 	    tvp = AFSTOV(tvc);
! 	    if (vnode_get(tvp))       /* this bumps ref count */
! 	        continue;
! 	    if (vnode_ref(tvp)) {
! 		AFS_GUNLOCK();
! 		/* AFSTOV(tvc) may be NULL */
! 		vnode_put(tvp);
! 		AFS_GLOCK();
! 	        continue;
! 	    }
  #endif
  	    break;
  	}
***************
*** 2173,2178 ****
--- 2183,2189 ----
          if (tvc) {
              AFS_GUNLOCK();
              vnode_put(AFSTOV(tvc));
+             vnode_rele(AFSTOV(tvc));
              AFS_GLOCK();
          }
  #endif
***************
*** 2195,2201 ****
  	if (cached)
  	    *cached = 1;
  	afs_stats_cmperf.vcacheHits++;
! #ifdef	AFS_OSF_ENV
  	/* we already bumped the ref count in the for loop above */
  #else /* AFS_OSF_ENV */
  	osi_vnhold(tvc, 0);
--- 2206,2212 ----
  	if (cached)
  	    *cached = 1;
  	afs_stats_cmperf.vcacheHits++;
! #if	defined(AFS_OSF_ENV) || defined(AFS_DARWIN80_ENV)
  	/* we already bumped the ref count in the for loop above */
  #else /* AFS_OSF_ENV */
  	osi_vnhold(tvc, 0);
***************
*** 2629,2634 ****
--- 2640,2648 ----
  #if defined( AFS_OSF_ENV)
      int vg;
  #endif
+ #ifdef AFS_DARWIN80_ENV
+     vnode_t tvp;
+ #endif
  
      AFS_STATCNT(afs_FindVCache);
  
***************
*** 2653,2660 ****
                  findvc_sleep(tvc, flag);
  		goto findloop;
              }
!             if (vnode_get(AFSTOV(tvc)))
!                 continue;
  #endif
  	    break;
  	}
--- 2667,2682 ----
                  findvc_sleep(tvc, flag);
  		goto findloop;
              }
! 	    tvp = AFSTOV(tvc);
! 	    if (vnode_get(tvp))
! 		continue;
! 	    if (vnode_ref(tvp)) {
! 		AFS_GUNLOCK();
! 		/* AFSTOV(tvc) may be NULL */
! 		vnode_put(tvp);
! 		AFS_GLOCK();
! 		continue;
! 	    }
  #endif
  	    break;
  	}
***************
*** 2664,2670 ****
      if (tvc) {
  	if (retry)
  	    *retry = 0;
! #if !defined(AFS_OSF_ENV)
  	osi_vnhold(tvc, retry);	/* already held, above */
  	if (retry && *retry)
  	    return 0;
--- 2686,2692 ----
      if (tvc) {
  	if (retry)
  	    *retry = 0;
! #if !defined(AFS_OSF_ENV) && !defined(AFS_DARWIN80_ENV)
  	osi_vnhold(tvc, retry);	/* already held, above */
  	if (retry && *retry)
  	    return 0;
***************
*** 2758,2763 ****
--- 2780,2788 ----
  #ifdef  AFS_OSF_ENV
      int vg;
  #endif
+ #ifdef AFS_DARWIN80_ENV
+     vnode_t tvp;
+ #endif
  
      AFS_STATCNT(afs_FindVCache);
  
***************
*** 2794,2803 ****
  		afs_osi_Sleep(&tvc->states);
  		goto loop;
              }
!             if (vnode_get(AFSTOV(tvc))) {
!                 /* This vnode no longer exists. */
!                 continue;
!             }
  #endif /* AFS_DARWIN80_ENV */
  	    count++;
  	    if (found_tvc) {
--- 2819,2837 ----
  		afs_osi_Sleep(&tvc->states);
  		goto loop;
              }
! 	    tvp = AFSTOV(tvc);
! 	    if (vnode_get(tvp)) {
! 		/* This vnode no longer exists. */
! 		continue;
! 	    }
! 	    if (vnode_ref(tvp)) {
! 		/* This vnode no longer exists. */
! 		AFS_GUNLOCK();
! 		/* AFSTOV(tvc) may be NULL */
! 		vnode_put(tvp);
! 		AFS_GLOCK();
! 		continue;
! 	    }
  #endif /* AFS_DARWIN80_ENV */
  	    count++;
  	    if (found_tvc) {
Index: openafs/src/afs/afs_volume.c
diff -c openafs/src/afs/afs_volume.c:1.26.2.4 openafs/src/afs/afs_volume.c:1.26.2.5
*** openafs/src/afs/afs_volume.c:1.26.2.4	Tue Jan 10 23:26:44 2006
--- openafs/src/afs/afs_volume.c	Fri Feb 17 23:09:34 2006
***************
*** 19,25 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_volume.c,v 1.26.2.4 2006/01/11 04:26:44 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
--- 19,25 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_volume.c,v 1.26.2.5 2006/02/18 04:09:34 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
***************
*** 238,243 ****
--- 238,246 ----
      unsigned int now;
      struct vcache *tvc;
      afs_int32 *volumeID, *cellID, vsize, nvols;
+ #ifdef AFS_DARWIN80_ENV
+     vnode_t tvp;
+ #endif
      AFS_STATCNT(afs_CheckVolumeNames);
  
      nvols = 0;
***************
*** 318,327 ****
  			afs_osi_Sleep(&tvc->states);
                          goto loop;
                      }
!                     if (vnode_get(AFSTOV(tvc)))
!                         continue;
! #endif
  		    AFS_FAST_HOLD(tvc);
  		    ReleaseReadLock(&afs_xvcache);
  
  		    ObtainWriteLock(&afs_xcbhash, 485);
--- 321,339 ----
  			afs_osi_Sleep(&tvc->states);
                          goto loop;
                      }
! 		    tvp = AFSTOV(tvc);
! 		    if (vnode_get(tvp))
! 			continue;
! 		    if (vnode_ref(tvp)) {
! 			AFS_GUNLOCK();
! 			/* AFSTOV(tvc) may be NULL */
! 			vnode_put(tvp);
! 			AFS_GLOCK();
! 			continue;
! 		    }
! #else
  		    AFS_FAST_HOLD(tvc);
+ #endif
  		    ReleaseReadLock(&afs_xvcache);
  
  		    ObtainWriteLock(&afs_xcbhash, 485);
Index: openafs/src/afs/DARWIN/osi_sleep.c
diff -c openafs/src/afs/DARWIN/osi_sleep.c:1.10.2.2 openafs/src/afs/DARWIN/osi_sleep.c:1.10.2.3
*** openafs/src/afs/DARWIN/osi_sleep.c:1.10.2.2	Mon Feb 13 13:19:49 2006
--- openafs/src/afs/DARWIN/osi_sleep.c	Fri Feb 17 10:29:47 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/DARWIN/osi_sleep.c,v 1.10.2.2 2006/02/13 18:19:49 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/DARWIN/osi_sleep.c,v 1.10.2.3 2006/02/17 15:29:47 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 113,119 ****
  #else
  #define EVTLOCK_INIT(e)
  #define EVTLOCK_LOCK(e)
! #define EVTLCK_UNLOCK(e)
  #define EVTLOCK_DESTROY(e)
  #endif
  #define HASHSIZE 128
--- 113,119 ----
  #else
  #define EVTLOCK_INIT(e)
  #define EVTLOCK_LOCK(e)
! #define EVTLOCK_UNLOCK(e)
  #define EVTLOCK_DESTROY(e)
  #endif
  #define HASHSIZE 128
Index: openafs/src/afs/DARWIN/osi_vnodeops.c
diff -c openafs/src/afs/DARWIN/osi_vnodeops.c:1.18.2.16 openafs/src/afs/DARWIN/osi_vnodeops.c:1.18.2.18
*** openafs/src/afs/DARWIN/osi_vnodeops.c:1.18.2.16	Sun Feb  5 13:26:48 2006
--- openafs/src/afs/DARWIN/osi_vnodeops.c	Fri Feb 17 23:09:35 2006
***************
*** 5,11 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/DARWIN/osi_vnodeops.c,v 1.18.2.16 2006/02/05 18:26:48 shadow Exp $");
  
  #include <afs/sysincludes.h>	/* Standard vendor system headers */
  #include <afsincludes.h>	/* Afs-based standard headers */
--- 5,11 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/DARWIN/osi_vnodeops.c,v 1.18.2.18 2006/02/18 04:09:35 shadow Exp $");
  
  #include <afs/sysincludes.h>	/* Standard vendor system headers */
  #include <afsincludes.h>	/* Afs-based standard headers */
***************
*** 240,248 ****
      tvc->states |= CUBCinit;
  #endif
  #ifdef AFS_DARWIN80_ENV
      if (tvc->states & CDeadVnode)
         osi_Assert(!vnode_isinuse(vp, 1));
-      osi_Assert((tvc->states & CVInit) == 0);
  #endif
      if (haveGlock) AFS_GUNLOCK(); 
  
--- 240,248 ----
      tvc->states |= CUBCinit;
  #endif
  #ifdef AFS_DARWIN80_ENV
+     osi_Assert((tvc->states & CVInit) == 0);
      if (tvc->states & CDeadVnode)
         osi_Assert(!vnode_isinuse(vp, 1));
  #endif
      if (haveGlock) AFS_GUNLOCK(); 
  
***************
*** 257,263 ****
             return;
  #endif
          }
! 	vnode_ref(vp);
  	vnode_put(vp);
  #else
      /* vget needed for 0 ref'd vnode in GetVCache to not panic in vref.
--- 257,271 ----
             return;
  #endif
          }
! 	if (vnode_ref(vp)) {
! #if 1
! 	    panic("vn_hold on terminating vnode");
! #else           
! 	    vnode_put(vp);
! 	    if (haveGlock) AFS_GLOCK(); 
! 	    return;
! #endif
! 	}
  	vnode_put(vp);
  #else
      /* vget needed for 0 ref'd vnode in GetVCache to not panic in vref.
***************
*** 1430,1437 ****
--- 1438,1447 ----
      error = afs_mkdir(VTOAFS(dvp), name, vap, &vcp, vop_cn_cred);
      AFS_GUNLOCK();
      if (error) {
+ #ifndef AFS_DARWIN80_ENV
  	VOP_ABORTOP(dvp, cnp);
  	vput(dvp);
+ #endif
  	DROPNAME();
  	return (error);
      }
Index: openafs/src/afs/HPUX/osi_inode.c
diff -c openafs/src/afs/HPUX/osi_inode.c:1.8.2.1 openafs/src/afs/HPUX/osi_inode.c:1.8.2.2
*** openafs/src/afs/HPUX/osi_inode.c:1.8.2.1	Mon Nov  7 18:43:32 2005
--- openafs/src/afs/HPUX/osi_inode.c	Fri Feb 17 12:35:33 2006
***************
*** 17,23 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/HPUX/osi_inode.c,v 1.8.2.1 2005/11/07 23:43:32 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 17,23 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/HPUX/osi_inode.c,v 1.8.2.2 2006/02/17 17:35:33 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 145,153 ****
  	iput(ip);
  	goto out;
      }
- #ifdef AFS_HPUX1111_ENV
      fd = u.u_r.r_val1;
- #endif
      iunlock(ip);
  
      fp->f_ops = &vnodefops;
--- 145,151 ----
***************
*** 179,187 ****
       * called by falloc(), which is called above.
       */
      if (is_multithreaded(u.u_procp)) {
- #ifndef AFS_HPUX1111_ENV
- 	fd = (int)u.u_r.r_val1;
- #endif
  	putf(fd);
      }
  
--- 177,182 ----
Index: openafs/src/afs/LINUX/osi_file.c
diff -c openafs/src/afs/LINUX/osi_file.c:1.19.2.8 openafs/src/afs/LINUX/osi_file.c:1.19.2.9
*** openafs/src/afs/LINUX/osi_file.c:1.19.2.8	Mon Jul 11 15:29:56 2005
--- openafs/src/afs/LINUX/osi_file.c	Wed Feb 15 16:03:38 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_file.c,v 1.19.2.8 2005/07/11 19:29:56 shadow Exp $");
  
  #ifdef AFS_LINUX24_ENV
  #include "h/module.h" /* early to avoid printf->printk mapping */
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_file.c,v 1.19.2.9 2006/02/15 21:03:38 shadow Exp $");
  
  #ifdef AFS_LINUX24_ENV
  #include "h/module.h" /* early to avoid printf->printk mapping */
***************
*** 204,210 ****
--- 204,214 ----
  #ifdef STRUCT_INODE_HAS_I_ALLOC_SEM
      down_write(&inode->i_alloc_sem);
  #endif
+ #ifdef STRUCT_INODE_HAS_I_MUTEX
+     mutex_lock(&inode->i_mutex);
+ #else
      down(&inode->i_sem);
+ #endif
      newattrs.ia_size = asize;
      newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
  #if defined(AFS_LINUX24_ENV)
***************
*** 234,240 ****
--- 238,248 ----
      }
  #endif
      code = -code;
+ #ifdef STRUCT_INODE_HAS_I_MUTEX
+     mutex_unlock(&inode->i_mutex);
+ #else
      up(&inode->i_sem);
+ #endif
  #ifdef STRUCT_INODE_HAS_I_ALLOC_SEM
      up_write(&inode->i_alloc_sem);
  #endif
Index: openafs/src/afs/VNOPS/afs_vnop_lookup.c
diff -c openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.50.2.17 openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.50.2.18
*** openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.50.2.17	Tue Feb 14 15:33:48 2006
--- openafs/src/afs/VNOPS/afs_vnop_lookup.c	Fri Feb 17 23:09:36 2006
***************
*** 18,24 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.50.2.17 2006/02/14 20:33:48 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 18,24 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.50.2.18 2006/02/18 04:09:36 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 900,908 ****
      ReleaseReadLock(&afs_xvcache);	/* could be read lock */
      if (retry)
  	goto reskip;
- #ifdef AFS_DARWIN80_ENV
-     vnode_get(AFSTOV(lruvcp));
- #endif
  
      /* otherwise, merge in the info.  We have to be quite careful here,
       * since we need to ensure that we don't merge old info over newer
--- 900,905 ----
Index: openafs/src/config/NTMakefile.amd64_w2k
diff -c openafs/src/config/NTMakefile.amd64_w2k:1.1.2.28 openafs/src/config/NTMakefile.amd64_w2k:1.1.2.29
*** openafs/src/config/NTMakefile.amd64_w2k:1.1.2.28	Sun Feb  5 23:12:34 2006
--- openafs/src/config/NTMakefile.amd64_w2k	Fri Feb 17 10:27:44 2006
***************
*** 80,86 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=4
! AFSPRODUCT_VER_PATCH=0097
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
--- 80,86 ----
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=4
! AFSPRODUCT_VER_PATCH=0098
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
Index: openafs/src/config/NTMakefile.i386_nt40
diff -c openafs/src/config/NTMakefile.i386_nt40:1.46.2.43 openafs/src/config/NTMakefile.i386_nt40:1.46.2.44
*** openafs/src/config/NTMakefile.i386_nt40:1.46.2.43	Sun Feb  5 23:12:34 2006
--- openafs/src/config/NTMakefile.i386_nt40	Fri Feb 17 10:27:44 2006
***************
*** 80,86 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=4
! AFSPRODUCT_VER_PATCH=0097
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
--- 80,86 ----
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=4
! AFSPRODUCT_VER_PATCH=0098
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
Index: openafs/src/config/NTMakefile.i386_w2k
diff -c openafs/src/config/NTMakefile.i386_w2k:1.1.2.30 openafs/src/config/NTMakefile.i386_w2k:1.1.2.31
*** openafs/src/config/NTMakefile.i386_w2k:1.1.2.30	Sun Feb  5 23:12:34 2006
--- openafs/src/config/NTMakefile.i386_w2k	Fri Feb 17 10:27:44 2006
***************
*** 80,86 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=4
! AFSPRODUCT_VER_PATCH=0097
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
--- 80,86 ----
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=4
! AFSPRODUCT_VER_PATCH=0098
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
Index: openafs/src/lwp/process.i386.s
diff -c openafs/src/lwp/process.i386.s:1.5.2.2 openafs/src/lwp/process.i386.s:1.5.2.3
*** openafs/src/lwp/process.i386.s:1.5.2.2	Fri Oct 21 00:48:51 2005
--- openafs/src/lwp/process.i386.s	Fri Feb 17 12:27:54 2006
***************
*** 59,70 ****
  L1:
  	jmp	*f(%ebp)			/* ebx = &f */
  
- #if !defined(AFS_DARWIN_ENV)
- /* Shouldn't be here....*/
- 
- 	call	_C_LABEL(abort)
- #endif
- 
  /*
   * returnto(area2)
   *	struct savearea *area2;
--- 59,64 ----
***************
*** 85,92 ****
  	popl	%ebp
  	ret
  
- #if !defined(AFS_DARWIN_ENV)
- /* I see, said the blind man, as he picked up his hammer and saw! */
- 	pushl	$1234
- 	call	_C_LABEL(abort)
- #endif
--- 79,81 ----
Index: openafs/src/packaging/MacOS/OpenAFS.info
diff -c openafs/src/packaging/MacOS/OpenAFS.info:1.1.4.27 openafs/src/packaging/MacOS/OpenAFS.info:1.1.4.28
*** openafs/src/packaging/MacOS/OpenAFS.info:1.1.4.27	Tue Feb 14 19:52:45 2006
--- openafs/src/packaging/MacOS/OpenAFS.info	Fri Feb 17 23:31:57 2006
***************
*** 1,5 ****
  Title OpenAFS
! Version 1.4.1-rc7
  Description The OpenAFS distributed filesystem. This package installs an almost-ready-to-run client for OpenAFS. see http://www.openafs.org for more information.
  DefaultLocation /
  Diskname (null)
--- 1,5 ----
  Title OpenAFS
! Version 1.4.1-rc8
  Description The OpenAFS distributed filesystem. This package installs an almost-ready-to-run client for OpenAFS. see http://www.openafs.org for more information.
  DefaultLocation /
  Diskname (null)
Index: openafs/src/rx/rx_xmit_nt.c
diff -c openafs/src/rx/rx_xmit_nt.c:1.7.2.2 openafs/src/rx/rx_xmit_nt.c:1.7.2.3
*** openafs/src/rx/rx_xmit_nt.c:1.7.2.2	Thu Sep 15 22:28:50 2005
--- openafs/src/rx/rx_xmit_nt.c	Thu Feb 16 16:49:34 2006
***************
*** 18,24 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_xmit_nt.c,v 1.7.2.2 2005/09/16 02:28:50 jaltman Exp $");
  
  #if defined(AFS_NT40_ENV) || defined(AFS_DJGPP_ENV)
  
--- 18,24 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_xmit_nt.c,v 1.7.2.3 2006/02/16 21:49:34 jaltman Exp $");
  
  #if defined(AFS_NT40_ENV) || defined(AFS_DJGPP_ENV)
  
***************
*** 81,87 ****
  #ifdef AFS_NT40_ENV
  	if (code == SOCKET_ERROR)
  	    code = WSAGetLastError();
! 	if (code == WSAEWOULDBLOCK)
  	    errno = WSAEWOULDBLOCK;
  	else
  	    errno = EIO;
--- 81,87 ----
  #ifdef AFS_NT40_ENV
  	if (code == SOCKET_ERROR)
  	    code = WSAGetLastError();
! 	if (code == WSAEWOULDBLOCK || code == WSAECONNRESET)
  	    errno = WSAEWOULDBLOCK;
  	else
  	    errno = EIO;
***************
*** 137,142 ****
--- 137,143 ----
  	    errno = 0;
  	    break;
  	case WSAEWOULDBLOCK:
+ 	case WSAECONNRESET:
  	    errno = WSAEWOULDBLOCK;
  	    break;
  	case WSAEHOSTUNREACH:
Index: openafs/src/viced/afsfileprocs.c
diff -c openafs/src/viced/afsfileprocs.c:1.81.2.17 openafs/src/viced/afsfileprocs.c:1.81.2.18
*** openafs/src/viced/afsfileprocs.c:1.81.2.17	Mon Feb 13 12:10:15 2006
--- openafs/src/viced/afsfileprocs.c	Fri Feb 17 09:48:58 2006
***************
*** 29,35 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.81.2.17 2006/02/13 17:10:15 jaltman Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>
--- 29,35 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.81.2.18 2006/02/17 14:48:58 jaltman Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>
***************
*** 597,602 ****
--- 597,603 ----
      ObtainReadLock(&client->lock);
      if (client->CPS.prlist_len > 0 && !client->deleted && 
  	client->host &&	!(client->host->hostFlags & HOSTDELETED))
+ 	code = acl_IsAMember(id, &client->CPS);
      ReleaseReadLock(&client->lock);
      return code;
  }
