Index: openafs/src/WINNT/afsd/afsd_init.c
diff -c openafs/src/WINNT/afsd/afsd_init.c:1.79.2.7 openafs/src/WINNT/afsd/afsd_init.c:1.79.2.8
*** openafs/src/WINNT/afsd/afsd_init.c:1.79.2.7	Sun Oct  8 21:52:20 2006
--- openafs/src/WINNT/afsd/afsd_init.c	Sat Oct 21 16:47:48 2006
***************
*** 1207,1213 ****
                code, cm_freelanceEnabled, (code ? "<none>" : rootCellName));
      if (code != 0 && !cm_freelanceEnabled) 
      {
!         *reasonP = "can't find root cell name in afsd.ini";
          return -1;
      }   
      else if (cm_freelanceEnabled)
--- 1207,1213 ----
                code, cm_freelanceEnabled, (code ? "<none>" : rootCellName));
      if (code != 0 && !cm_freelanceEnabled) 
      {
!         *reasonP = "can't find root cell name in CellServDB";
          return -1;
      }   
      else if (cm_freelanceEnabled)
***************
*** 1522,1527 ****
--- 1522,1530 ----
  void 
  GenerateMiniDump(PEXCEPTION_POINTERS ep)
  {
+ 	if (IsDebuggerPresent())
+ 		return;
+ 
      if (ep == NULL) 
      {
          // Generate exception to get proper context in dump
Index: openafs/src/WINNT/afsd/afsd_service.c
diff -c openafs/src/WINNT/afsd/afsd_service.c:1.52.4.6 openafs/src/WINNT/afsd/afsd_service.c:1.52.4.7
*** openafs/src/WINNT/afsd/afsd_service.c:1.52.4.6	Sun Oct  8 16:31:36 2006
--- openafs/src/WINNT/afsd/afsd_service.c	Sat Oct 21 16:47:48 2006
***************
*** 9,14 ****
--- 9,15 ----
  #include <setjmp.h>
  #include "afsd.h"
  #include "afsd_init.h"
+ #include "lanahelper.h"
  #include <stdio.h>
  #include <stdlib.h>
  #include <winsock2.h>
***************
*** 83,89 ****
      afsi_log("--- end   dump ---");
      
  #ifdef DEBUG
!     DebugBreak();	
  #endif
  
      SetEvent(WaitToTerminate);
--- 84,91 ----
      afsi_log("--- end   dump ---");
      
  #ifdef DEBUG
! 	if (IsDebuggerPresent())
! 		DebugBreak();	
  #endif
  
      SetEvent(WaitToTerminate);
***************
*** 174,180 ****
              afsi_log("SERVICE_CONTROL_SHUTDOWN");
  
          /* Write all dirty buffers back to server */
!         buf_CleanAndReset();
  
          /* Force trace if requested */
          code = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
--- 176,183 ----
              afsi_log("SERVICE_CONTROL_SHUTDOWN");
  
          /* Write all dirty buffers back to server */
! 	if ( !lana_OnlyLoopback() )
! 	    buf_CleanAndReset();
  
          /* Force trace if requested */
          code = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
***************
*** 242,248 ****
          SetServiceStatus(StatusHandle, &ServiceStatus);
  
          /* Write all dirty buffers back to server */
!         buf_CleanAndReset();
  
          /* Force trace if requested */
          code = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
--- 245,252 ----
          SetServiceStatus(StatusHandle, &ServiceStatus);
  
          /* Write all dirty buffers back to server */
! 	if ( !lana_OnlyLoopback() )
! 	    buf_CleanAndReset();
  
          /* Force trace if requested */
          code = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
***************
*** 298,310 ****
                  case PBT_APMQUERYSUSPEND:       
                      afsi_log("SERVICE_CONTROL_APMQUERYSUSPEND"); 
                      /* Write all dirty buffers back to server */
!                     buf_CleanAndReset();
                      dwRet = NO_ERROR;                       
                      break;                                  
                  case PBT_APMQUERYSTANDBY:                                                         
                      afsi_log("SERVICE_CONTROL_APMQUERYSTANDBY"); 
                      /* Write all dirty buffers back to server */
!                     buf_CleanAndReset();
                      dwRet = NO_ERROR;                                                             
                      break;                                                                        
  							                                                                  
--- 302,318 ----
                  case PBT_APMQUERYSUSPEND:       
                      afsi_log("SERVICE_CONTROL_APMQUERYSUSPEND"); 
                      /* Write all dirty buffers back to server */
! 		    if ( !lana_OnlyLoopback() )
! 			buf_CleanAndReset();
!                     afsi_log("SERVICE_CONTROL_APMQUERYSUSPEND buf_CleanAndReset complete"); 
                      dwRet = NO_ERROR;                       
                      break;                                  
                  case PBT_APMQUERYSTANDBY:                                                         
                      afsi_log("SERVICE_CONTROL_APMQUERYSTANDBY"); 
                      /* Write all dirty buffers back to server */
! 		    if ( !lana_OnlyLoopback() ) 
! 			buf_CleanAndReset();
!                     afsi_log("SERVICE_CONTROL_APMQUERYSTANDBY buf_CleanAndReset complete"); 
                      dwRet = NO_ERROR;                                                             
                      break;                                                                        
  							                                                                  
Index: openafs/src/WINNT/afsd/cm_buf.c
diff -c openafs/src/WINNT/afsd/cm_buf.c:1.31.2.7 openafs/src/WINNT/afsd/cm_buf.c:1.31.2.8
*** openafs/src/WINNT/afsd/cm_buf.c:1.31.2.7	Tue Oct 10 11:57:44 2006
--- openafs/src/WINNT/afsd/cm_buf.c	Sat Oct 21 16:47:48 2006
***************
*** 175,183 ****
               * a log page at any given instant.
               */
              cm_InitReq(&req);
- #ifdef NO_BKG_RETRIES
              req.flags |= CM_REQ_NORETRY;
- #endif
  	    wasDirty |= buf_CleanAsync(bp, &req);
  
              /* now advance to the next buffer; the allp chain never changes,
--- 175,181 ----
***************
*** 581,587 ****
   * at any given time, and also ensures that the log is forced sufficiently far,
   * if this buffer contains logged data.
   *
!  * Returns one if the buffer was dirty.
   */
  long buf_CleanAsyncLocked(cm_buf_t *bp, cm_req_t *reqp)
  {
--- 579,585 ----
   * at any given time, and also ensures that the log is forced sufficiently far,
   * if this buffer contains logged data.
   *
!  * Returns non-zero if the buffer was dirty.
   */
  long buf_CleanAsyncLocked(cm_buf_t *bp, cm_req_t *reqp)
  {
***************
*** 628,633 ****
--- 626,638 ----
          /* write buffer to disk cache (synchronous for now) */
          diskcache_Update(bp->dcp, bp->datap, cm_data.buf_blockSize, bp->dataVersion);
  #endif /* DISKCACHE95 */
+ 
+ 	/* if we get here and retries are not permitted 
+ 	 * then we need to exit this loop regardless of 
+ 	 * whether or not we were able to clear the dirty bit
+ 	 */
+ 	if (reqp->flags & CM_REQ_NORETRY)
+ 	    break;
      };
  
      /* do logging after call to GetLastError, or else */
***************
*** 1202,1207 ****
--- 1207,1214 ----
  
                  /* now no locks are held; clean buffer and go on */
                  cm_InitReq(&req);
+ 		req.flags |= CM_REQ_NORETRY;
+ 
  		buf_CleanAsync(bp, &req);
  		buf_CleanWait(NULL, bp);
  
Index: openafs/src/WINNT/afsd/cm_cell.c
diff -c openafs/src/WINNT/afsd/cm_cell.c:1.23 openafs/src/WINNT/afsd/cm_cell.c:1.23.2.1
*** openafs/src/WINNT/afsd/cm_cell.c:1.23	Sun Feb 12 01:25:37 2006
--- openafs/src/WINNT/afsd/cm_cell.c	Sat Oct 21 16:47:48 2006
***************
*** 208,214 ****
      return cp;
  }
  
! cm_cell_t *cm_FindCellByID(long cellID)
  {
      cm_cell_t *cp;
  
--- 208,214 ----
      return cp;
  }
  
! cm_cell_t *cm_FindCellByID(afs_int32 cellID)
  {
      cm_cell_t *cp;
  
Index: openafs/src/WINNT/afsd/cm_cell.h
diff -c openafs/src/WINNT/afsd/cm_cell.h:1.7 openafs/src/WINNT/afsd/cm_cell.h:1.7.6.1
*** openafs/src/WINNT/afsd/cm_cell.h:1.7	Fri Mar 11 00:33:21 2005
--- openafs/src/WINNT/afsd/cm_cell.h	Sat Oct 21 16:47:48 2006
***************
*** 19,25 ****
  /* a cell structure */
  typedef struct cm_cell {        
      afs_uint32  magic;
!     long cellID;		        /* cell ID */
      struct cm_cell *nextp;	        /* locked by cm_cellLock */
      char name[CELL_MAXNAMELEN];         /* cell name; never changes */
      cm_serverRef_t *vlServersp;         /* locked by cm_serverLock */
--- 19,25 ----
  /* a cell structure */
  typedef struct cm_cell {        
      afs_uint32  magic;
!     afs_int32 cellID;		        /* cell ID */
      struct cm_cell *nextp;	        /* locked by cm_cellLock */
      char name[CELL_MAXNAMELEN];         /* cell name; never changes */
      cm_serverRef_t *vlServersp;         /* locked by cm_serverLock */
***************
*** 44,50 ****
  
  extern cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags);
  
! extern cm_cell_t *cm_FindCellByID(long cellID);
  
  extern void cm_ChangeRankCellVLServer(cm_server_t       *tsp);
  
--- 44,50 ----
  
  extern cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags);
  
! extern cm_cell_t *cm_FindCellByID(afs_int32 cellID);
  
  extern void cm_ChangeRankCellVLServer(cm_server_t       *tsp);
  
Index: openafs/src/WINNT/afsd/cm_conn.h
diff -c openafs/src/WINNT/afsd/cm_conn.h:1.13.4.3 openafs/src/WINNT/afsd/cm_conn.h:1.13.4.4
*** openafs/src/WINNT/afsd/cm_conn.h:1.13.4.3	Tue Aug  8 12:39:17 2006
--- openafs/src/WINNT/afsd/cm_conn.h	Sat Oct 21 16:47:48 2006
***************
*** 24,30 ****
          struct rx_connection *callp;	/* locked by mx */
          struct cm_user *userp;		/* locked by mx; a held reference */
          osi_mutex_t mx;			/* mutex for some of these fields */
!         unsigned long refCount;			/* locked by cm_connLock */
  	int ucgen;			/* ucellp's generation number */
          long flags;			/* locked by mx */
  	int cryptlevel;			/* encrytion status */
--- 24,30 ----
          struct rx_connection *callp;	/* locked by mx */
          struct cm_user *userp;		/* locked by mx; a held reference */
          osi_mutex_t mx;			/* mutex for some of these fields */
!         unsigned long refCount;		/* locked by cm_connLock */
  	int ucgen;			/* ucellp's generation number */
          long flags;			/* locked by mx */
  	int cryptlevel;			/* encrytion status */
Index: openafs/src/WINNT/afsd/cm_ioctl.c
diff -c openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.7 openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.8
*** openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.7	Thu Oct 12 01:59:25 2006
--- openafs/src/WINNT/afsd/cm_ioctl.c	Mon Oct 16 20:21:36 2006
***************
*** 284,289 ****
--- 284,290 ----
  
              code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                               userp, NULL, reqp, scpp);
+ 	    cm_ReleaseSCache(substRootp);
              if (code) {
  		osi_Log1(afsd_logp,"cm_ParseIoctlPath [2] code 0x%x", code);
                  return code;
***************
*** 413,419 ****
      long code;
      char tbuffer[1024];
      char *tp, *jp;
!     cm_scache_t *substRootp;
  
      StringCbCopyA(tbuffer, sizeof(tbuffer), ioctlp->inDatap);
      tp = strrchr(tbuffer, '\\');
--- 414,420 ----
      long code;
      char tbuffer[1024];
      char *tp, *jp;
!     cm_scache_t *substRootp = NULL;
  
      StringCbCopyA(tbuffer, sizeof(tbuffer), ioctlp->inDatap);
      tp = strrchr(tbuffer, '\\');
***************
*** 468,473 ****
--- 469,475 ----
  
              code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                               userp, NULL, reqp, scpp);
+ 	    cm_ReleaseSCache(substRootp);
              if (code) return code;
          } else {
              /* otherwise, treat the name as a cellname mounted off the afs root.
***************
*** 493,498 ****
--- 495,501 ----
  
              code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                              userp, NULL, reqp, scpp);
+ 	    cm_ReleaseSCache(substRootp);
              if (code) return code;
          }
      } else {
***************
*** 503,508 ****
--- 506,512 ----
  
          code = cm_NameI(substRootp, tbuffer, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                          userp, NULL, reqp, scpp);
+ 	cm_ReleaseSCache(substRootp);
          if (code) return code;
      }
  
***************
*** 1685,1690 ****
--- 1689,1695 ----
          osi_Log0(afsd_logp,"IoctlCreateMountPoint within Freelance root dir");
          code = cm_FreelanceAddMount(leaf, fullCell, volume, 
                                      *ioctlp->inDatap == '%', NULL);
+ 	cm_ReleaseSCache(dscp);
          return code;
      }
  #endif
***************
*** 1743,1748 ****
--- 1748,1754 ----
          }
          osi_Log0(afsd_logp,"IoctlCreateSymlink within Freelance root dir");
          code = cm_FreelanceAddSymlink(leaf, cp, NULL);
+ 	cm_ReleaseSCache(dscp);
          return code;
      }
  #endif
***************
*** 1876,1881 ****
--- 1882,1888 ----
           * the freelance code to do the add. */
          osi_Log0(afsd_logp,"IoctlDeletelink from Freelance root dir");
          code = cm_FreelanceRemoveSymlink(cp);
+ 	cm_ReleaseSCache(dscp);
          return code;
      }
  #endif
***************
*** 1883,1914 ****
      code = cm_Lookup(dscp, cp, CM_FLAG_NOMOUNTCHASE, userp, &req, &scp);
          
      /* if something went wrong, bail out now */
!     if (code) {
!         goto done2;
!     }
          
      lock_ObtainMutex(&scp->mx);
      code = cm_SyncOp(scp, NULL, userp, &req, 0,
                        CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
!     if (code) {     
!         lock_ReleaseMutex(&scp->mx);
!         cm_ReleaseSCache(scp);
          goto done2;
-     }
  	
      /* now check that this is a real symlink */
      if (scp->fileType != CM_SCACHETYPE_SYMLINK &&
          scp->fileType != CM_SCACHETYPE_DFSLINK &&
          scp->fileType != CM_SCACHETYPE_INVALID) {
-         lock_ReleaseMutex(&scp->mx);
-         cm_ReleaseSCache(scp);
          code = CM_ERROR_INVAL;
          goto done1;
      }
  	
      /* time to make the RPC, so drop the lock */
      lock_ReleaseMutex(&scp->mx);
-     cm_ReleaseSCache(scp);
          
      /* easier to do it this way */
      code = cm_Unlink(dscp, cp, userp, &req);
--- 1890,1914 ----
      code = cm_Lookup(dscp, cp, CM_FLAG_NOMOUNTCHASE, userp, &req, &scp);
          
      /* if something went wrong, bail out now */
!     if (code)
!         goto done3;
          
      lock_ObtainMutex(&scp->mx);
      code = cm_SyncOp(scp, NULL, userp, &req, 0,
                        CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
!     if (code)
          goto done2;
  	
      /* now check that this is a real symlink */
      if (scp->fileType != CM_SCACHETYPE_SYMLINK &&
          scp->fileType != CM_SCACHETYPE_DFSLINK &&
          scp->fileType != CM_SCACHETYPE_INVALID) {
          code = CM_ERROR_INVAL;
          goto done1;
      }
  	
      /* time to make the RPC, so drop the lock */
      lock_ReleaseMutex(&scp->mx);
          
      /* easier to do it this way */
      code = cm_Unlink(dscp, cp, userp, &req);
***************
*** 1918,1929 ****
                            | FILE_NOTIFY_CHANGE_DIR_NAME,
                            dscp, cp, NULL, TRUE);
  
-   done1:
      lock_ObtainMutex(&scp->mx);
      cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
-     lock_ReleaseMutex(&scp->mx);
  
    done2:
      cm_ReleaseSCache(dscp);
      return code;
  }
--- 1918,1932 ----
                            | FILE_NOTIFY_CHANGE_DIR_NAME,
                            dscp, cp, NULL, TRUE);
  
      lock_ObtainMutex(&scp->mx);
+   done1:
      cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
  
    done2:
+     lock_ReleaseMutex(&scp->mx);
+     cm_ReleaseSCache(scp);
+ 
+   done3:
      cm_ReleaseSCache(dscp);
      return code;
  }
Index: openafs/src/WINNT/afsd/cm_scache.c
diff -c openafs/src/WINNT/afsd/cm_scache.c:1.35.2.21 openafs/src/WINNT/afsd/cm_scache.c:1.35.2.22
*** openafs/src/WINNT/afsd/cm_scache.c:1.35.2.21	Sun Oct  8 16:38:24 2006
--- openafs/src/WINNT/afsd/cm_scache.c	Mon Oct 16 20:32:57 2006
***************
*** 534,541 ****
--- 534,546 ----
      return NULL;
  }
  
+ #ifdef DEBUG_REFCOUNT
+ long cm_GetSCacheDbg(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
+                   cm_req_t *reqp, char * file, long line)
+ #else
  long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
                    cm_req_t *reqp)
+ #endif
  {
      long hash;
      cm_scache_t *scp;
***************
*** 563,568 ****
--- 568,577 ----
      lock_ObtainWrite(&cm_scacheLock);
      for (scp=cm_data.hashTablep[hash]; scp; scp=scp->nextp) {
          if (cm_FidCmp(fidp, &scp->fid) == 0) {
+ #ifdef DEBUG_REFCOUNT
+ 	    afsi_log("%s:%d cm_GetSCache (1) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+ 	    osi_Log1(afsd_logp,"cm_GetSCache (1) outScpp 0x%p", scp);
+ #endif
              cm_HoldSCacheNoLock(scp);
              *outScpp = scp;
              cm_AdjustLRU(scp);
***************
*** 658,663 ****
--- 667,676 ----
  #endif
  	*outScpp = scp;
          lock_ReleaseWrite(&cm_scacheLock);
+ #ifdef DEBUG_REFCOUNT
+ 	afsi_log("%s:%d cm_GetSCache (2) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+ 	osi_Log1(afsd_logp,"cm_GetSCache (2) outScpp 0x%p", scp);
+ #endif
          return 0;
      }
      // end of yj code
***************
*** 681,686 ****
--- 694,703 ----
       */
      for (scp=cm_data.hashTablep[hash]; scp; scp=scp->nextp) {
          if (cm_FidCmp(fidp, &scp->fid) == 0) {
+ #ifdef DEBUG_REFCOUNT
+ 	    afsi_log("%s:%d cm_GetSCache (3) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+ 	    osi_Log1(afsd_logp,"cm_GetSCache (3) outScpp 0x%p", scp);
+ #endif
              cm_HoldSCacheNoLock(scp);
              osi_assert(scp->volp == volp);
              cm_AdjustLRU(scp);
***************
*** 749,754 ****
--- 766,775 ----
          
      /* now we have a held scache entry; just return it */
      *outScpp = scp;
+ #ifdef DEBUG_REFCOUNT
+     afsi_log("%s:%d cm_GetSCache (4) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+     osi_Log1(afsd_logp,"cm_GetSCache (4) outScpp 0x%p", scp);
+ #endif
      return 0;
  }
  
Index: openafs/src/WINNT/afsd/cm_scache.h
diff -c openafs/src/WINNT/afsd/cm_scache.h:1.21.2.7 openafs/src/WINNT/afsd/cm_scache.h:1.21.2.9
*** openafs/src/WINNT/afsd/cm_scache.h:1.21.2.7	Sun Oct  8 16:38:24 2006
--- openafs/src/WINNT/afsd/cm_scache.h	Sat Oct 21 16:47:48 2006
***************
*** 143,149 ****
  
      /* callback info */
      struct cm_server *cbServerp;	/* server granting callback */
!     time_t cbExpires;		/* time callback expires */
  
      /* access cache */
      long anyAccess;			/* anonymous user's access */
--- 143,149 ----
  
      /* callback info */
      struct cm_server *cbServerp;	/* server granting callback */
!     time_t cbExpires;			/* time callback expires */
  
      /* access cache */
      long anyAccess;			/* anonymous user's access */
***************
*** 308,317 ****
  
  extern void cm_InitSCache(int, long);
  
  extern long cm_GetSCache(cm_fid_t *, cm_scache_t **, struct cm_user *,
  	struct cm_req *);
! 
! extern void cm_PutSCache(cm_scache_t *);
  
  extern cm_scache_t *cm_GetNewSCache(void);
  
--- 308,322 ----
  
  extern void cm_InitSCache(int, long);
  
+ #ifdef DEBUG_REFCOUNT
+ extern long cm_GetSCacheDbg(cm_fid_t *, cm_scache_t **, struct cm_user *,
+ 	struct cm_req *, char *, long);
+ 
+ #define cm_GetSCache(a,b,c,d)  cm_GetSCacheDbg(a,b,c,d,__FILE__,__LINE__)
+ #else
  extern long cm_GetSCache(cm_fid_t *, cm_scache_t **, struct cm_user *,
  	struct cm_req *);
! #endif
  
  extern cm_scache_t *cm_GetNewSCache(void);
  
Index: openafs/src/WINNT/afsd/cm_vnodeops.c
diff -c openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.16 openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.17
*** openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.16	Sun Oct  8 16:38:24 2006
--- openafs/src/WINNT/afsd/cm_vnodeops.c	Mon Oct 16 20:32:57 2006
***************
*** 1258,1271 ****
--- 1258,1281 ----
      return 1;
  }   
  
+ #ifdef DEBUG_REFCOUNT
+ long cm_LookupDbg(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
+                cm_req_t *reqp, cm_scache_t **outpScpp, char * file, long line)
+ #else
  long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
                 cm_req_t *reqp, cm_scache_t **outpScpp)
+ #endif
  {
      long code;
      char tname[256];
      int sysNameIndex = 0;
      cm_scache_t *scp = NULL;
  
+ #ifdef DEBUG_REFCOUNT
+     afsi_log("%s:%d cm_Lookup dscp 0x%p ref %d", file, line, dscp, dscp->refCount, file, line);
+     osi_Log2(afsd_logp, "cm_Lookup dscp 0x%p ref %d", dscp, dscp->refCount);
+ #endif
+ 
      if ( stricmp(namep,SMB_IOCTL_FILENAME_NOSLASH) == 0 ) {
          if (flags & CM_FLAG_CHECKPATH)
              return CM_ERROR_NOSUCHPATH;
***************
*** 1277,1282 ****
--- 1287,1297 ----
          code = cm_ExpandSysName(namep, tname, sizeof(tname), sysNameIndex);
          if (code > 0) {
              code = cm_LookupInternal(dscp, tname, flags, userp, reqp, &scp);
+ #ifdef DEBUG_REFCOUNT
+ 	    afsi_log("%s:%d cm_LookupInternal (1) code 0x%x dscp 0x%p ref %d scp 0x%p ref %d", file, line, code, dscp, dscp->refCount, scp, scp ? scp->refCount : 0);
+ 	    osi_Log3(afsd_logp, "cm_LookupInternal (1) code 0x%x dscp 0x%p scp 0x%p", code, dscp, scp);
+ #endif
+ 
              if (code == 0) {
                  *outpScpp = scp;
                  return 0;
***************
*** 1286,1292 ****
                  scp = NULL;
              }
          } else {
!             return cm_LookupInternal(dscp, namep, flags, userp, reqp, outpScpp);
          }
      }
  
--- 1301,1313 ----
                  scp = NULL;
              }
          } else {
!             code = cm_LookupInternal(dscp, namep, flags, userp, reqp, &scp);
! #ifdef DEBUG_REFCOUNT
! 	    afsi_log("%s:%d cm_LookupInternal (2) code 0x%x dscp 0x%p ref %d scp 0x%p ref %d", file, line, code, dscp, dscp->refCount, scp, scp ? scp->refCount : 0);
! 	    osi_Log3(afsd_logp, "cm_LookupInternal (2) code 0x%x dscp 0x%p scp 0x%p", code, dscp, scp);
! #endif
! 	    *outpScpp = scp;
! 	    return code;
          }
      }
  
***************
*** 1517,1525 ****
      lock_ReleaseMutex(&linkScp->mx);
      return code;
  }
! 
  long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
                 cm_user_t *userp, char *tidPathp, cm_req_t *reqp, cm_scache_t **outScpp)
  {
      long code;
      char *tp;			/* ptr moving through input buffer */
--- 1538,1551 ----
      lock_ReleaseMutex(&linkScp->mx);
      return code;
  }
! #ifdef DEBUG_REFCOUNT
! long cm_NameIDbg(cm_scache_t *rootSCachep, char *pathp, long flags,
!                cm_user_t *userp, char *tidPathp, cm_req_t *reqp, cm_scache_t **outScpp, 
! 	       char * file, long line)
! #else
  long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
                 cm_user_t *userp, char *tidPathp, cm_req_t *reqp, cm_scache_t **outScpp)
+ #endif
  {
      long code;
      char *tp;			/* ptr moving through input buffer */
***************
*** 1540,1547 ****
      int extraFlag;		/* avoid chasing mt pts for dir cmd */
      int phase = 1;		/* 1 = tidPathp, 2 = pathp */
  
      osi_Log4(afsd_logp,"cm_NameI rootscp 0x%p path %s tidpath %s flags 0x%x",
! 	      rootSCachep, pathp, tidPathp, flags);
  
      tp = tidPathp;
      if (tp == NULL) {
--- 1566,1577 ----
      int extraFlag;		/* avoid chasing mt pts for dir cmd */
      int phase = 1;		/* 1 = tidPathp, 2 = pathp */
  
+ #ifdef DEBUG_REFCOUNT
+     afsi_log("%s:%d cm_NameI rootscp 0x%p ref %d", file, line, rootSCachep, rootSCachep->refCount);
      osi_Log4(afsd_logp,"cm_NameI rootscp 0x%p path %s tidpath %s flags 0x%x",
! 	      rootSCachep, pathp ? pathp : "<NULL>", tidPathp ? tidPathp : "<NULL>", 
! 	      flags);
! #endif
  
      tp = tidPathp;
      if (tp == NULL) {
***************
*** 1750,1755 ****
--- 1780,1789 ----
          *outScpp = tscp;
      else if (tscp)
          cm_ReleaseSCache(tscp);
+ 
+ #ifdef DEBUG_REFCOUNT
+     afsi_log("%s:%d cm_NameI code 0x%x outScpp 0x%p ref %d", file, line, code, *outScpp, (*outScpp)->refCount);
+ #endif
      osi_Log2(afsd_logp,"cm_NameI code 0x%x outScpp 0x%p", code, *outScpp);
      return code;
  }
Index: openafs/src/WINNT/afsd/cm_vnodeops.h
diff -c openafs/src/WINNT/afsd/cm_vnodeops.h:1.14.4.1 openafs/src/WINNT/afsd/cm_vnodeops.h:1.14.4.2
*** openafs/src/WINNT/afsd/cm_vnodeops.h:1.14.4.1	Tue Jun 27 23:24:05 2006
--- openafs/src/WINNT/afsd/cm_vnodeops.h	Mon Oct 16 20:32:57 2006
***************
*** 65,76 ****
  extern long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp,
  	cm_req_t *reqp);
  
  extern long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
  	cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
  	cm_scache_t **outScpp);
- 
  extern long cm_Lookup(cm_scache_t *dscp, char *namep, long flags,
  	cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp);
  
  extern long cm_LookupInternal(cm_scache_t *dscp, char *namep, long flags,
                                cm_user_t *userp, cm_req_t *reqp, 
--- 65,87 ----
  extern long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp,
  	cm_req_t *reqp);
  
+ #ifdef DEBUG_REFCOUNT
+ extern long cm_NameIDbg(cm_scache_t *rootSCachep, char *pathp, long flags,
+ 	cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
+ 	cm_scache_t **outScpp, char *, long);
+ 
+ extern long cm_LookupDbg(cm_scache_t *dscp, char *namep, long flags,
+ 	cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp, char *, long);
+ 
+ #define cm_Lookup(a,b,c,d,e,f)  cm_LookupDbg(a,b,c,d,e,f,__FILE__,__LINE__)
+ #define cm_NameI(a,b,c,d,e,f,g) cm_NameIDbg(a,b,c,d,e,f,g,__FILE__,__LINE__)
+ #else
  extern long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
  	cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
  	cm_scache_t **outScpp);
  extern long cm_Lookup(cm_scache_t *dscp, char *namep, long flags,
  	cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp);
+ #endif
  
  extern long cm_LookupInternal(cm_scache_t *dscp, char *namep, long flags,
                                cm_user_t *userp, cm_req_t *reqp, 
Index: openafs/src/WINNT/afsd/lanahelper.cpp
diff -c openafs/src/WINNT/afsd/lanahelper.cpp:1.12 openafs/src/WINNT/afsd/lanahelper.cpp:1.12.2.1
*** openafs/src/WINNT/afsd/lanahelper.cpp:1.12	Fri Apr 21 23:45:47 2006
--- openafs/src/WINNT/afsd/lanahelper.cpp	Sat Oct 21 16:47:48 2006
***************
*** 382,388 ****
          return LANA_INVALID;
      }
      for (i = 0; i < lana_list.length; i++) {
! 	if (lana_IsLoopback(lana_list.lana[i])) {
  	    // Found one, return it.
  #ifndef NOLOGGING
  	    afsi_log("lana_FindLoopback: Found LAN adapter %d",
--- 382,388 ----
          return LANA_INVALID;
      }
      for (i = 0; i < lana_list.length; i++) {
! 	if (lana_IsLoopback(lana_list.lana[i],TRUE)) {
  	    // Found one, return it.
  #ifndef NOLOGGING
  	    afsi_log("lana_FindLoopback: Found LAN adapter %d",
***************
*** 415,421 ****
          return FALSE;
      }
      for (i = 0; i < lana_list.length; i++) {
! 	if (!lana_IsLoopback(lana_list.lana[i])) {
  	    // Found one non-Loopback adapter
  	    return FALSE;
  	}
--- 415,421 ----
          return FALSE;
      }
      for (i = 0; i < lana_list.length; i++) {
! 	if (!lana_IsLoopback(lana_list.lana[i],FALSE)) {
  	    // Found one non-Loopback adapter
  	    return FALSE;
  	}
***************
*** 427,433 ****
  // Is the given lana a Windows Loopback Adapter?
  // TODO: implement a better check for loopback
  // TODO: also check for proper bindings (IPv4)
! extern "C" BOOL lana_IsLoopback(lana_number_t lana)
  {
      NCB ncb;
      struct {
--- 427,434 ----
  // Is the given lana a Windows Loopback Adapter?
  // TODO: implement a better check for loopback
  // TODO: also check for proper bindings (IPv4)
! // For VMWare we only check the first five octets since the last one may vary
! extern "C" BOOL lana_IsLoopback(lana_number_t lana, BOOL reset)
  {
      NCB ncb;
      struct {
***************
*** 436,441 ****
--- 437,443 ----
      } astat;
      unsigned char kWLA_MAC[6] = { 0x02, 0x00, 0x4c, 0x4f, 0x4f, 0x50 };
      unsigned char kVista_WLA_MAC[6] = { 0x7F, 0x00, 0x00, 0x01, 0x4f, 0x50 };
+     unsigned char kVMWare_MAC[5] = { 0x00, 0x50, 0x56, 0xC0, 0x00 };
      int status;
      HKEY hkConfig;
      LONG rv;
***************
*** 451,471 ****
              return TRUE;
      }
  
!     // Reset the adapter: in Win32, this is required for every process, and
!     // acts as an init call, not as a real hardware reset.
!     memset(&ncb, 0, sizeof(ncb));
!     ncb.ncb_command = NCBRESET;
!     ncb.ncb_callname[0] = 100;
!     ncb.ncb_callname[2] = 100;
!     ncb.ncb_lana_num = lana;
!     status = Netbios(&ncb);
!     if (status == 0)
!         status = ncb.ncb_retcode;
!     if (status != 0) {
  #ifndef NOLOGGING
!        afsi_log("NCBRESET failed: lana %u, status %ld", lana, status);
  #endif
!         return FALSE;
      }
  
      // Use the NCBASTAT command to get the adapter address.
--- 453,475 ----
              return TRUE;
      }
  
!     if (reset) {
! 	// Reset the adapter: in Win32, this is required for every process, and
! 	// acts as an init call, not as a real hardware reset.
! 	memset(&ncb, 0, sizeof(ncb));
! 	ncb.ncb_command = NCBRESET;
! 	ncb.ncb_callname[0] = 100;
! 	ncb.ncb_callname[2] = 100;
! 	ncb.ncb_lana_num = lana;
! 	status = Netbios(&ncb);
! 	if (status == 0)
! 	    status = ncb.ncb_retcode;
! 	if (status != 0) {
  #ifndef NOLOGGING
! 	    afsi_log("NCBRESET failed: lana %u, status %ld", lana, status);
  #endif
! 	    return FALSE;
! 	}
      }
  
      // Use the NCBASTAT command to get the adapter address.
***************
*** 485,491 ****
          return FALSE;
      }
      return (memcmp(astat.status.adapter_address, kWLA_MAC, 6) == 0 ||
! 	    memcmp(astat.status.adapter_address, kVista_WLA_MAC, 6) == 0);
  }
  
  // Get the netbios named used/to-be-used by the AFS SMB server.
--- 489,496 ----
          return FALSE;
      }
      return (memcmp(astat.status.adapter_address, kWLA_MAC, 6) == 0 ||
! 	    memcmp(astat.status.adapter_address, kVista_WLA_MAC, 6) == 0 ||
! 	    memcmp(astat.status.adapter_address, kVMWare_MAC, 5) == 0);
  }
  
  // Get the netbios named used/to-be-used by the AFS SMB server.
***************
*** 588,594 ****
  	}
  
  	if(regNbName[0] &&
!        (regLana >=0 && lana_IsLoopback((lana_number_t) regLana))) {
          strncpy(nbName,regNbName,15);
          nbName[16] = 0;
          strupr(nbName);
--- 593,599 ----
  	}
  
  	if(regNbName[0] &&
!        (regLana >=0 && lana_IsLoopback((lana_number_t) regLana,FALSE))) {
          strncpy(nbName,regNbName,15);
          nbName[16] = 0;
          strupr(nbName);
Index: openafs/src/WINNT/afsd/lanahelper.h
diff -c openafs/src/WINNT/afsd/lanahelper.h:1.5 openafs/src/WINNT/afsd/lanahelper.h:1.5.6.1
*** openafs/src/WINNT/afsd/lanahelper.h:1.5	Fri Mar 11 00:33:23 2005
--- openafs/src/WINNT/afsd/lanahelper.h	Sat Oct 21 16:47:48 2006
***************
*** 59,65 ****
  
      BOOL lana_OnlyLoopback(void);
  
!     BOOL lana_IsLoopback(lana_number_t lana);
  
      long lana_GetUncServerNameEx(char *buffer, lana_number_t * pLana, int * pIsGateway, int flags);
  
--- 59,65 ----
  
      BOOL lana_OnlyLoopback(void);
  
!     BOOL lana_IsLoopback(lana_number_t lana, BOOL reset);
  
      long lana_GetUncServerNameEx(char *buffer, lana_number_t * pLana, int * pIsGateway, int flags);
  
Index: openafs/src/WINNT/afsd/smb.c
diff -c openafs/src/WINNT/afsd/smb.c:1.118.2.23 openafs/src/WINNT/afsd/smb.c:1.118.2.24
*** openafs/src/WINNT/afsd/smb.c:1.118.2.23	Sat Oct  7 18:33:29 2006
--- openafs/src/WINNT/afsd/smb.c	Sun Oct 22 08:25:38 2006
***************
*** 1547,1552 ****
--- 1547,1555 ----
      fidp->refCount++;
  }
  
+ 
+ /* smb_ReleaseFID cannot be called while an cm_scache_t mutex lock is held */
+ /* the sm_fid_t->mx and smb_rctLock must not be held */
  void smb_ReleaseFID(smb_fid_t *fidp)
  {
      cm_scache_t *scp = NULL;
***************
*** 1561,1573 ****
          vcp = fidp->vcp;
          fidp->vcp = NULL;
          scp = fidp->scp;    /* release after lock is released */
! 		if (scp) {
! 		lock_ObtainMutex(&scp->mx);
! 		scp->flags &= ~CM_SCACHEFLAG_SMB_FID;
! 		lock_ReleaseMutex(&scp->mx);
! 		osi_Log2(afsd_logp,"smb_ReleaseFID fidp 0x%p scp 0x%p", fidp, scp);
!         fidp->scp = NULL;
! 		}
          userp = fidp->userp;
          fidp->userp = NULL;
  
--- 1564,1576 ----
          vcp = fidp->vcp;
          fidp->vcp = NULL;
          scp = fidp->scp;    /* release after lock is released */
! 	if (scp) {
! 	    lock_ObtainMutex(&scp->mx);
! 	    scp->flags &= ~CM_SCACHEFLAG_SMB_FID;
! 	    lock_ReleaseMutex(&scp->mx);
! 	    osi_Log2(afsd_logp,"smb_ReleaseFID fidp 0x%p scp 0x%p", fidp, scp);
! 	    fidp->scp = NULL;
! 	}
          userp = fidp->userp;
          fidp->userp = NULL;
  
Index: openafs/src/WINNT/afsd/smb3.c
diff -c openafs/src/WINNT/afsd/smb3.c:1.95.2.20 openafs/src/WINNT/afsd/smb3.c:1.95.2.23
*** openafs/src/WINNT/afsd/smb3.c:1.95.2.20	Sat Oct  7 18:33:30 2006
--- openafs/src/WINNT/afsd/smb3.c	Sun Oct 22 08:25:39 2006
***************
*** 2654,2659 ****
--- 2654,2660 ----
      cm_user_t *userp;
      cm_space_t *spacep;
      cm_scache_t *scp, *dscp;
+     int scp_mx_held = 0;
      int delonclose = 0;
      long code = 0;
      char *pathp;
***************
*** 2814,2819 ****
--- 2815,2821 ----
  #endif /* DFS_SUPPORT */
  
      lock_ObtainMutex(&scp->mx);
+     scp_mx_held = 1;
      code = cm_SyncOp(scp, NULL, userp, &req, 0,
                        CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
      if (code) goto done;
***************
*** 2867,2888 ****
      }
      else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO) {
  	smb_fid_t *fidp = smb_FindFIDByScache(vcp, scp);
- 	if (fidp) {
- 	    lock_ObtainMutex(&fidp->mx);
- 	    delonclose = fidp->flags & SMB_FID_DELONCLOSE;
- 	    lock_ReleaseMutex(&fidp->mx);
- 	    smb_ReleaseFID(fidp);
- 	}
  
          qpi.u.QPfileStandardInfo.allocationSize = scp->length;
          qpi.u.QPfileStandardInfo.endOfFile = scp->length;
          qpi.u.QPfileStandardInfo.numberOfLinks = scp->linkCount;
-         qpi.u.QPfileStandardInfo.deletePending = (delonclose ? 1 : 0);
          qpi.u.QPfileStandardInfo.directory = 
  	    ((scp->fileType == CM_SCACHETYPE_DIRECTORY ||
  	      scp->fileType == CM_SCACHETYPE_MOUNTPOINT ||
  	      scp->fileType == CM_SCACHETYPE_INVALID) ? 1 : 0);
          qpi.u.QPfileStandardInfo.reserved = 0;
      }
      else if (infoLevel == SMB_QUERY_FILE_EA_INFO) {
          qpi.u.QPfileEaInfo.eaSize = 0;
--- 2869,2893 ----
      }
      else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO) {
  	smb_fid_t *fidp = smb_FindFIDByScache(vcp, scp);
  
          qpi.u.QPfileStandardInfo.allocationSize = scp->length;
          qpi.u.QPfileStandardInfo.endOfFile = scp->length;
          qpi.u.QPfileStandardInfo.numberOfLinks = scp->linkCount;
          qpi.u.QPfileStandardInfo.directory = 
  	    ((scp->fileType == CM_SCACHETYPE_DIRECTORY ||
  	      scp->fileType == CM_SCACHETYPE_MOUNTPOINT ||
  	      scp->fileType == CM_SCACHETYPE_INVALID) ? 1 : 0);
          qpi.u.QPfileStandardInfo.reserved = 0;
+ 
+     	if (fidp) {
+ 	    lock_ReleaseMutex(&scp->mx);
+ 	    scp_mx_held = 0;
+ 	    lock_ObtainMutex(&fidp->mx);
+ 	    delonclose = fidp->flags & SMB_FID_DELONCLOSE;
+ 	    lock_ReleaseMutex(&fidp->mx);
+ 	    smb_ReleaseFID(fidp);
+ 	}
+         qpi.u.QPfileStandardInfo.deletePending = (delonclose ? 1 : 0);
      }
      else if (infoLevel == SMB_QUERY_FILE_EA_INFO) {
          qpi.u.QPfileEaInfo.eaSize = 0;
***************
*** 2920,2926 ****
  
      /* send and free the packets */
    done:
!     lock_ReleaseMutex(&scp->mx);
      cm_ReleaseSCache(scp);
      cm_ReleaseUser(userp);
      if (code == 0) {
--- 2925,2932 ----
  
      /* send and free the packets */
    done:
!     if (scp_mx_held)
! 	lock_ReleaseMutex(&scp->mx);
      cm_ReleaseSCache(scp);
      cm_ReleaseUser(userp);
      if (code == 0) {
***************
*** 3061,3068 ****
  
      fidp = smb_FindFIDByScache(vcp, scp);
      if (!fidp) {
-         cm_ReleaseUser(userp);
          cm_ReleaseSCache(scp);
  	smb_SendTran2Error(vcp, p, opx, code);
          return 0;
      }
--- 3067,3074 ----
  
      fidp = smb_FindFIDByScache(vcp, scp);
      if (!fidp) {
          cm_ReleaseSCache(scp);
+         cm_ReleaseUser(userp);
  	smb_SendTran2Error(vcp, p, opx, code);
          return 0;
      }
***************
*** 3070,3078 ****
      lock_ObtainMutex(&fidp->mx);
      if (!(fidp->flags & SMB_FID_OPENWRITE)) {
  	lock_ReleaseMutex(&fidp->mx);
          smb_ReleaseFID(fidp);
          cm_ReleaseUser(userp);
-         cm_ReleaseSCache(scp);
          smb_SendTran2Error(vcp, p, opx, CM_ERROR_NOACCESS);
          return 0;
      }
--- 3076,3084 ----
      lock_ObtainMutex(&fidp->mx);
      if (!(fidp->flags & SMB_FID_OPENWRITE)) {
  	lock_ReleaseMutex(&fidp->mx);
+         cm_ReleaseSCache(scp);
          smb_ReleaseFID(fidp);
          cm_ReleaseUser(userp);
          smb_SendTran2Error(vcp, p, opx, CM_ERROR_NOACCESS);
          return 0;
      }
***************
*** 5734,5741 ****
      smb_SetSMBDataLength(outp, 0);
  
   done:
-     smb_ReleaseFID(fidp);
      cm_ReleaseUser(userp);
  
      return code;
  }
--- 5740,5747 ----
      smb_SetSMBDataLength(outp, 0);
  
   done:
      cm_ReleaseUser(userp);
+     smb_ReleaseFID(fidp);
  
      return code;
  }
***************
*** 5857,5865 ****
      smb_SetSMBParm(outp, 5, finalCount);
      smb_SetSMBDataLength(outp, finalCount);
  
-     smb_ReleaseFID(fidp);
- 
      cm_ReleaseUser(userp);
      return code;
  }   
          
--- 5863,5870 ----
      smb_SetSMBParm(outp, 5, finalCount);
      smb_SetSMBDataLength(outp, finalCount);
  
      cm_ReleaseUser(userp);
+     smb_ReleaseFID(fidp);
      return code;
  }   
          
***************
*** 6210,6218 ****
                      treeStartp = realPathp + (tp - spacep->data);
  
                      if (*tp && !smb_IsLegalFilename(tp)) {
                          if (baseFidp) 
                              smb_ReleaseFID(baseFidp);
-                         cm_ReleaseUser(userp);
                          free(realPathp);
                          if (scp)
                              cm_ReleaseSCache(scp);
--- 6215,6223 ----
                      treeStartp = realPathp + (tp - spacep->data);
  
                      if (*tp && !smb_IsLegalFilename(tp)) {
+                         cm_ReleaseUser(userp);
                          if (baseFidp) 
                              smb_ReleaseFID(baseFidp);
                          free(realPathp);
                          if (scp)
                              cm_ReleaseSCache(scp);
***************
*** 6577,6592 ****
          lock_ReleaseMutex(&scp->mx);
  
          if (code) {
-             /* shouldn't this be smb_CloseFID() fidp->flags = SMB_FID_DELETE; */
- 	    smb_CloseFID(vcp, fidp, NULL, 0);
-             smb_ReleaseFID(fidp);
- 
              cm_ReleaseSCache(scp);
              if (dscp)
                  cm_ReleaseSCache(dscp);
              cm_ReleaseUser(userp);
              free(realPathp);
-             
              return code;
          }
      }
--- 6582,6595 ----
          lock_ReleaseMutex(&scp->mx);
  
          if (code) {
              cm_ReleaseSCache(scp);
              if (dscp)
                  cm_ReleaseSCache(dscp);
              cm_ReleaseUser(userp);
+             /* shouldn't this be smb_CloseFID() fidp->flags = SMB_FID_DELETE; */
+ 	    smb_CloseFID(vcp, fidp, NULL, 0);
+             smb_ReleaseFID(fidp);
              free(realPathp);
              return code;
          }
      }
***************
*** 6654,6662 ****
      osi_Log2(smb_logp, "SMB NT CreateX opening fid %d path %s", fidp->fid,
                osi_LogSaveString(smb_logp, realPathp));
  
-     smb_ReleaseFID(fidp);
- 
      cm_ReleaseUser(userp);
  
      /* Can't free realPathp if we get here since
         fidp->NTopen_wholepathp is pointing there */
--- 6657,6664 ----
      osi_Log2(smb_logp, "SMB NT CreateX opening fid %d path %s", fidp->fid,
                osi_LogSaveString(smb_logp, realPathp));
  
      cm_ReleaseUser(userp);
+     smb_ReleaseFID(fidp);
  
      /* Can't free realPathp if we get here since
         fidp->NTopen_wholepathp is pointing there */
***************
*** 7197,7210 ****
          lock_ReleaseMutex(&scp->mx);
  
          if (code) {
              /* Shouldn't this be smb_CloseFID()?  fidp->flags = SMB_FID_DELETE; */
  	    smb_CloseFID(vcp, fidp, NULL, 0);
              smb_ReleaseFID(fidp);
- 
-             cm_ReleaseSCache(scp);
-             cm_ReleaseUser(userp);
              free(realPathp);
-             
              return CM_ERROR_SHARING_VIOLATION;
          }
      }
--- 7199,7210 ----
          lock_ReleaseMutex(&scp->mx);
  
          if (code) {
+             cm_ReleaseSCache(scp);
+             cm_ReleaseUser(userp);
              /* Shouldn't this be smb_CloseFID()?  fidp->flags = SMB_FID_DELETE; */
  	    smb_CloseFID(vcp, fidp, NULL, 0);
              smb_ReleaseFID(fidp);
              free(realPathp);
              return CM_ERROR_SHARING_VIOLATION;
          }
      }
***************
*** 7351,7359 ****
  
      osi_Log1(smb_logp, "SMB NTTranCreate opening fid %d", fidp->fid);
  
-     smb_ReleaseFID(fidp);
- 
      cm_ReleaseUser(userp);
  
      /* free(realPathp); Can't free realPathp here because fidp->NTopen_wholepathp points there */
      /* leave scp held since we put it in fidp->scp */
--- 7351,7358 ----
  
      osi_Log1(smb_logp, "SMB NTTranCreate opening fid %d", fidp->fid);
  
      cm_ReleaseUser(userp);
+     smb_ReleaseFID(fidp);
  
      /* free(realPathp); Can't free realPathp here because fidp->NTopen_wholepathp points there */
      /* leave scp held since we put it in fidp->scp */
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm:1.5.4.3 openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm:1.5.4.4
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm:1.5.4.3	Sun Oct  8 21:22:30 2006
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm	Sat Oct 21 16:49:45 2006
***************
*** 198,204 ****
  
  <h1>OpenAFS for Windows</h1>
  
! <h2>Version 1.5.9</h2>
  
  <p class=MsoNormal><span style='mso-fareast-font-family:"MS Mincho"'>&nbsp; <o:p></o:p></span></p>
  
--- 198,204 ----
  
  <h1>OpenAFS for Windows</h1>
  
! <h2>Version 1.5.10</h2>
  
  <p class=MsoNormal><span style='mso-fareast-font-family:"MS Mincho"'>&nbsp; <o:p></o:p></span></p>
  
***************
*** 223,229 ****
  mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
  style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span></span></span><![endif]><a
! href="ReleaseNotes/frames.htm">OpenAFS for Windows 1.5.9
  Release Notes</a></p>
  
  <p style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1;
--- 223,229 ----
  mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
  style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span></span></span><![endif]><a
! href="ReleaseNotes/frames.htm">OpenAFS for Windows 1.5.10
  Release Notes</a></p>
  
  <p style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1;
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm:1.1.6.4 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm:1.1.6.5
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm:1.1.6.4	Sun Oct  8 21:22:36 2006
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm	Sat Oct 21 16:49:48 2006
***************
*** 3,9 ****
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
  <meta name=Generator content="Microsoft Word 11 (filtered)">
! <title>OpenAFS for Windows 1.5.9 Release Notes</title>
  <style>
  <!--
   /* Font Definitions */
--- 3,9 ----
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
  <meta name=Generator content="Microsoft Word 11 (filtered)">
! <title>OpenAFS for Windows 1.5.10 Release Notes</title>
  <style>
  <!--
   /* Font Definitions */
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm:1.1.4.6 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm:1.1.4.7
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm:1.1.4.6	Sun Oct  8 21:22:36 2006
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm	Sat Oct 21 16:49:49 2006
***************
*** 8,14 ****
  <meta name=Generator content="Microsoft Word 11">
  <meta name=Originator content="Microsoft Word 11">
  <link rel=File-List href="relnotes-frames_files/filelist.xml">
! <title>OpenAFS for Windows 1.5.9 Release Notes</title>
  <!--[if gte mso 9]><xml>
   <w:WordDocument>
    <w:Zoom>0</w:Zoom>
--- 8,14 ----
  <meta name=Generator content="Microsoft Word 11">
  <meta name=Originator content="Microsoft Word 11">
  <link rel=File-List href="relnotes-frames_files/filelist.xml">
! <title>OpenAFS for Windows 1.5.10 Release Notes</title>
  <!--[if gte mso 9]><xml>
   <w:WordDocument>
    <w:Zoom>0</w:Zoom>
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm:1.6.4.6 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm:1.6.4.7
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm:1.6.4.6	Mon Oct 16 10:13:09 2006
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm	Sat Oct 21 16:49:49 2006
***************
*** 10,16 ****
  <meta name=Generator content="Microsoft Word 11">
  <meta name=Originator content="Microsoft Word 11">
  <link rel=File-List href="relnotes_files/filelist.xml">
! <title>OpenAFS for Windows 1.5.9 Release Notes</title>
  <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
   name="PostalCode"/>
  <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
--- 10,16 ----
  <meta name=Generator content="Microsoft Word 11">
  <meta name=Originator content="Microsoft Word 11">
  <link rel=File-List href="relnotes_files/filelist.xml">
! <title>OpenAFS for Windows 1.5.10 Release Notes</title>
  <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
   name="PostalCode"/>
  <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
***************
*** 558,564 ****
  
  <div class=Section1>
  
! <p class=MsoTitle>OpenAFS for Windows 1.5.9<br>
  Release Notes</p>
  
  <p class=MsoBodyText>The Andrew File System (AFS) is a location-independent
--- 558,564 ----
  
  <div class=Section1>
  
! <p class=MsoTitle>OpenAFS for Windows 1.5.10<br>
  Release Notes</p>
  
  <p class=MsoBodyText>The Andrew File System (AFS) is a location-independent
Index: openafs/src/config/NTMakefile.amd64_w2k
diff -c openafs/src/config/NTMakefile.amd64_w2k:1.24.2.8 openafs/src/config/NTMakefile.amd64_w2k:1.24.2.11
*** openafs/src/config/NTMakefile.amd64_w2k:1.24.2.8	Mon Oct 16 09:42:13 2006
--- openafs/src/config/NTMakefile.amd64_w2k	Sat Oct 21 16:55:41 2006
***************
*** 84,90 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=902
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
--- 84,90 ----
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=1000
  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.84.2.8 openafs/src/config/NTMakefile.i386_nt40:1.84.2.11
*** openafs/src/config/NTMakefile.i386_nt40:1.84.2.8	Mon Oct 16 09:42:13 2006
--- openafs/src/config/NTMakefile.i386_nt40	Sat Oct 21 16:55:41 2006
***************
*** 84,90 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=902
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
--- 84,90 ----
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=1000
  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.23.2.8 openafs/src/config/NTMakefile.i386_w2k:1.23.2.11
*** openafs/src/config/NTMakefile.i386_w2k:1.23.2.8	Mon Oct 16 09:42:13 2006
--- openafs/src/config/NTMakefile.i386_w2k	Sat Oct 21 16:55:41 2006
***************
*** 84,90 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=902
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
--- 84,90 ----
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=1000
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
Index: openafs/src/platform/Makefile.in
diff -c /dev/null openafs/src/platform/Makefile.in:1.2.2.3
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/Makefile.in	Tue Aug  1 17:53:29 2006
***************
*** 0 ****
--- 1,26 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ # Common elements for Makefiles for all system types.
+ 
+ srcdir=@srcdir@
+ include @TOP_OBJDIR@/src/config/Makefile.config
+ include ../config/Makefile.version
+ 
+ all:
+ 	cd $(MKAFS_OSTYPE) ; \
+ 	echo $(MAKE) all; \
+ 	$(MAKE) all
+ dest:
+ 	cd $(MKAFS_OSTYPE) ; \
+ 	echo $(MAKE) DEST=${DEST} dest; \
+ 	$(MAKE) DEST=${DEST} dest
+ install:
+ 	cd $(MKAFS_OSTYPE) ; \
+ 	echo $(MAKE) DESTDIR=${DESTDIR} install; \
+ 	$(MAKE) DESTDIR=${DESTDIR} install
+ 
Index: openafs/src/platform/AIX/Makefile.in
diff -c /dev/null openafs/src/platform/AIX/Makefile.in:1.1.2.2
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/AIX/Makefile.in	Tue Aug  1 17:53:36 2006
***************
*** 0 ****
--- 1,14 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/DARWIN/Makefile.in
diff -c /dev/null openafs/src/platform/DARWIN/Makefile.in:1.2.2.5
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/DARWIN/Makefile.in	Tue Aug  1 23:49:35 2006
***************
*** 0 ****
--- 1,30 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ srcdir=@srcdir@
+ include @TOP_OBJDIR@/src/config/Makefile.config
+ include ../../config/Makefile.version
+ 
+ all: afssettings
+ 
+ afssettings: afssettings.m 
+ 	${CC} ${CFLAGS} -o afssettings afssettings.m -framework Foundation
+ 
+ install: \
+ 	${DESTDIR}${sbindir}/afssettings
+ 
+ dest: \
+ 	${DEST}/etc/afssettings
+ 
+ ${DESTDIR}${sbindir}/afssettings: afssettings
+ 	${INSTALL} -s $? $@
+ 
+ ${DEST}/etc/afssettings: afssettings
+ 	${INSTALL} -s $? $@
+ 
+ clean:
+ 	$(RM) -f *.o core afssettings AFS_component_version_number.c 
Index: openafs/src/platform/DARWIN/afssettings.m
diff -c /dev/null openafs/src/platform/DARWIN/afssettings.m:1.1.4.2
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/DARWIN/afssettings.m	Tue Aug  1 17:38:46 2006
***************
*** 0 ****
--- 1,173 ----
+ /*
+  * Copyright (c) 2003, 2006 Apple Computer, Inc. All rights reserved.
+  *
+  * @APPLE_LICENSE_HEADER_START@
+  * 
+  * This file contains Original Code and/or Modifications of Original Code
+  * as defined in and that are subject to the Apple Public Source License
+  * Version 2.0 (the 'License'). You may not use this file except in
+  * compliance with the License. Please obtain a copy of the License at
+  * http://www.opensource.apple.com/apsl/ and read it before using this
+  * file.
+  * 
+  * The Original Code and all software distributed under the License are
+  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+  * Please see the License for the specific language governing rights and
+  * limitations under the License.
+  * 
+  * @APPLE_LICENSE_HEADER_END@
+  */
+ #import <Foundation/Foundation.h>
+ #import <stdio.h>
+ #import <err.h>
+ #import <sys/types.h>
+ #import <sys/mount.h>
+ #import <sys/sysctl.h>
+ #import <afs/sysctl.h>
+ 
+ enum Type {
+     TypeNode = 0,
+     TypeNum,
+     TypeStr
+ };
+ 
+ typedef struct _setting {
+     NSString *key;
+     int selector;
+     enum Type type;
+     struct _setting *children;
+ } Setting;
+ 
+ Setting s_darwin_all[] = {
+     {@"RealModes", AFS_SC_DARWIN_ALL_REALMODES, TypeNum, NULL},
+     {NULL, 0, 0, NULL}
+ };
+ Setting s_darwin[] = {
+     {@"All", AFS_SC_DARWIN_ALL, TypeNode, s_darwin_all},
+     {@"Darwin12", AFS_SC_DARWIN_12, TypeNode, NULL},
+     {@"Darwin13", AFS_SC_DARWIN_13, TypeNode, NULL},
+     {@"Darwin14", AFS_SC_DARWIN_14, TypeNode, NULL},
+     {@"Darwin60", AFS_SC_DARWIN_60, TypeNode, NULL},
+     {@"Darwin70", AFS_SC_DARWIN_70, TypeNode, NULL},
+     {@"Darwin80", AFS_SC_DARWIN_80, TypeNode, NULL},
+     {@"Darwin90", AFS_SC_DARWIN_90, TypeNode, NULL},
+     {NULL, 0, 0, NULL}
+ };
+ Setting s_first[] = {
+     {@"All", AFS_SC_ALL, TypeNode, NULL},
+     {@"Darwin", AFS_SC_DARWIN, TypeNode, s_darwin},
+     {NULL, 0, 0, NULL}
+ };
+ Setting s_top = {NULL, -1, TypeNode, s_first};
+ 
+ int oid[CTL_MAXNAME] = {CTL_VFS};
+ NSString *path = @"/var/db/openafs/etc/config/settings.plist";
+ 
+ char *oidString(int *oid, int len);
+ void init(void);
+ void walk(id obj, Setting *s, int level);
+ 
+ void
+ init(void)
+ {
+     int oidmax[] = {CTL_VFS, VFS_GENERIC, VFS_MAXTYPENUM};
+     int oidvfs[] = {CTL_VFS, VFS_GENERIC, VFS_CONF, 0};
+     int max;
+     struct vfsconf conf;
+     size_t len;
+     int i;
+ 
+     len = sizeof(max);
+     if(sysctl(oidmax, 3, &max, &len, NULL, 0) < 0)
+ 	err(1, "sysctl VFS_MAXTYPENUM");
+     for(i = max; --i >= 0; ) {
+ 	oidvfs[3] = i;
+ 	len = sizeof(conf);
+ 	if(sysctl(oidvfs, 4, &conf, &len, NULL, 0) < 0)
+ 	    continue;
+ 	if(strcmp("afs", conf.vfc_name) == 0) {
+ 	    s_top.selector = conf.vfc_typenum;
+ 	    break;
+ 	}
+     }
+     if(s_top.selector < 0)
+ 	errx(1, "AFS is not loaded");
+ }
+ 
+ char *
+ oidString(int *oid, int len)
+ {
+     static char buf[256];
+     char *cp = buf;
+ 
+     for(;;) {
+ 	sprintf(cp, "%d", *oid++);
+ 	if(--len <= 0)
+ 	    break;
+ 	cp += strlen(cp);
+ 	*cp++ = '.';
+     }
+     return buf;
+ }
+ 
+ void
+ walk(id obj, Setting *s, int level)
+ {
+     Setting *child;
+     id newobj;
+     int intval;
+     const char *cp;
+     int level1 = level + 1;
+ 
+     oid[level] = s->selector;
+     switch(s->type) {
+       case TypeNode:
+ 	for(child = s->children; child->key; child++) {
+ 	    if(child->type == TypeNode && !child->children)
+ 		continue;
+ 	    newobj = [obj objectForKey: child->key];
+ 	    if(newobj)
+ 		walk(newobj, child, level1);
+ 	}
+ 	break;
+       case TypeNum:
+ 	intval = [obj intValue];
+ 	if(sysctl(oid, level1, NULL, NULL, &intval, sizeof(intval)) < 0)
+ 	    err(1, "sysctl %s => %d", oidString(oid, level1), intval);
+ 	break;
+       case TypeStr:
+ 	cp = [obj UTF8String];
+ 	if(sysctl(oid, level1, NULL, NULL, (void *)cp, strlen(cp)) < 0)
+ 	    err(1, "sysctl %s => %s", oidString(oid, level1), cp);
+ 	break;
+     }
+ }
+ 
+ main()
+ {
+     NSData *plistData;
+     id plist;
+     NSString *error;
+     NSPropertyListFormat format;
+     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+ 
+     init();
+     plistData = [NSData dataWithContentsOfFile: path];
+     if(plistData) {
+ 	plist = [NSPropertyListSerialization propertyListFromData: plistData
+ 	  mutabilityOption: NSPropertyListImmutable
+ 	  format: &format
+ 	  errorDescription: &error
+ 	];
+ 	if(plist)
+ 	    walk(plist, &s_top, 1);
+ 	else
+ 	    errx(1, "%s: %s", [path UTF8String], [error UTF8String]);
+     }
+ 
+     [pool release];
+     return 0;
+ }
Index: openafs/src/platform/FBSD/Makefile.in
diff -c /dev/null openafs/src/platform/FBSD/Makefile.in:1.1.2.2
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/FBSD/Makefile.in	Tue Aug  1 17:53:41 2006
***************
*** 0 ****
--- 1,14 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/HPUX/Makefile.in
diff -c /dev/null openafs/src/platform/HPUX/Makefile.in:1.1.2.2
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/HPUX/Makefile.in	Tue Aug  1 17:53:41 2006
***************
*** 0 ****
--- 1,14 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/IRIX/Makefile.in
diff -c /dev/null openafs/src/platform/IRIX/Makefile.in:1.1.2.2
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/IRIX/Makefile.in	Tue Aug  1 17:53:41 2006
***************
*** 0 ****
--- 1,14 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/LINUX/Makefile.in
diff -c /dev/null openafs/src/platform/LINUX/Makefile.in:1.1.2.2
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/LINUX/Makefile.in	Tue Aug  1 17:53:42 2006
***************
*** 0 ****
--- 1,14 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/NBSD/Makefile.in
diff -c /dev/null openafs/src/platform/NBSD/Makefile.in:1.1.2.2
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/NBSD/Makefile.in	Tue Aug  1 17:53:42 2006
***************
*** 0 ****
--- 1,14 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/OBSD/Makefile.in
diff -c /dev/null openafs/src/platform/OBSD/Makefile.in:1.1.2.2
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/OBSD/Makefile.in	Tue Aug  1 17:53:42 2006
***************
*** 0 ****
--- 1,14 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/SOLARIS/Makefile.in
diff -c /dev/null openafs/src/platform/SOLARIS/Makefile.in:1.1.2.2
*** /dev/null	Mon Oct 23 22:15:21 2006
--- openafs/src/platform/SOLARIS/Makefile.in	Tue Aug  1 17:53:42 2006
***************
*** 0 ****
--- 1,14 ----
+ # Copyright 2000, International Business Machines Corporation and others.
+ # All Rights Reserved.
+ # 
+ # This software has been released under the terms of the IBM Public
+ # License.  For details, see the LICENSE file in the top-level source
+ # directory or online at http://www.openafs.org/dl/license10.html
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/util/kreltime.c
diff -c openafs/src/util/kreltime.c:1.9.2.4 openafs/src/util/kreltime.c:1.9.2.5
*** openafs/src/util/kreltime.c:1.9.2.4	Wed Aug  2 14:50:01 2006
--- openafs/src/util/kreltime.c	Sat Oct 21 21:53:46 2006
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/util/kreltime.c,v 1.9.2.4 2006/08/02 18:50:01 shadow Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/util/kreltime.c,v 1.9.2.5 2006/10/22 01:53:46 jaltman Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
***************
*** 121,128 ****
  
      timePtr = &timeP;
  
!     memset(&timePtr, 0, sizeof(timePtr));
!     localtime_r(&tt, &timePtr);
  #else
      timePtr = localtime(&tt);
  #endif
--- 121,128 ----
  
      timePtr = &timeP;
  
!     memset(&timeP, 0, sizeof(timeP));
!     localtime_r(&tt, &timeP);
  #else
      timePtr = localtime(&tt);
  #endif
Index: openafs/src/vol/volume.c
diff -c openafs/src/vol/volume.c:1.43.2.4 openafs/src/vol/volume.c:1.43.2.5
*** openafs/src/vol/volume.c:1.43.2.4	Wed Sep  6 21:09:30 2006
--- openafs/src/vol/volume.c	Sat Oct 21 22:00:12 2006
***************
*** 22,28 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/volume.c,v 1.43.2.4 2006/09/07 01:09:30 shadow Exp $");
  
  #include <rx/xdr.h>
  #include <afs/afsint.h>
--- 22,28 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/volume.c,v 1.43.2.5 2006/10/22 02:00:12 jaltman Exp $");
  
  #include <rx/xdr.h>
  #include <afs/afsint.h>
***************
*** 527,533 ****
  	    dpq = (diskpartition_queue_t *) malloc(sizeof(struct diskpartition_queue_t));
  	    assert(dpq != NULL);
  	    dpq->diskP = diskP;
! 	    queue_Prepend(&params,dpq);
  	}
  
  	threads = MIN(parts, vol_attach_threads);
--- 527,533 ----
  	    dpq = (diskpartition_queue_t *) malloc(sizeof(struct diskpartition_queue_t));
  	    assert(dpq != NULL);
  	    dpq->diskP = diskP;
! 	    queue_Append(&params,dpq);
  	}
  
  	threads = MIN(parts, vol_attach_threads);
