<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">Index: openafs/src/WINNT/afsd/afslogon.c
diff -c openafs/src/WINNT/afsd/afslogon.c:1.24.2.16 openafs/src/WINNT/afsd/afslogon.c:1.24.2.17
*** openafs/src/WINNT/afsd/afslogon.c:1.24.2.16	Thu Jan 19 18:08:44 2006
--- openafs/src/WINNT/afsd/afslogon.c	Thu Jan 26 01:09:47 2006
***************
*** 256,262 ****
  
          CloseServiceHandle (hManager);
      }
!     DebugEvent("AFS AfsLogon - Test Service Running","Return Code[%x] ?Running[%d]",Status.dwCurrentState,(Status.dwCurrentState == SERVICE_RUNNING));
      return (Status.dwCurrentState == SERVICE_RUNNING);
  }   
  
--- 256,262 ----
  
          CloseServiceHandle (hManager);
      }
!     DebugEvent("AFS AfsLogon - Test Service Running Return Code[%x] ?Running[%d]",Status.dwCurrentState,(Status.dwCurrentState == SERVICE_RUNNING));
      return (Status.dwCurrentState == SERVICE_RUNNING);
  }   
  
***************
*** 278,284 ****
  
          CloseServiceHandle (hManager);
      }
!     DebugEvent("AFS AfsLogon - Test Service Start Pending","Return Code[%x] ?Start Pending[%d]",Status.dwCurrentState,(Status.dwCurrentState == SERVICE_START_PENDING));
      return (Status.dwCurrentState == SERVICE_START_PENDING);
  }   
  
--- 278,284 ----
  
          CloseServiceHandle (hManager);
      }
!     DebugEvent("AFS AfsLogon - Test Service Start Pending Return Code[%x] ?Start Pending[%d]",Status.dwCurrentState,(Status.dwCurrentState == SERVICE_START_PENDING));
      return (Status.dwCurrentState == SERVICE_START_PENDING);
  }   
  
Index: openafs/src/WINNT/afsd/smb.c
diff -c openafs/src/WINNT/afsd/smb.c:1.55.2.41 openafs/src/WINNT/afsd/smb.c:1.55.2.43
*** openafs/src/WINNT/afsd/smb.c:1.55.2.41	Tue Jan 24 12:16:06 2006
--- openafs/src/WINNT/afsd/smb.c	Tue Jan 31 04:09:59 2006
***************
*** 877,883 ****
          
      for(i=0; i&lt;11; i++) {
          tc = *maskp++;
!         if (tc == '?' || tc == '*' || tc == '&gt;') return 1;        
      }	
      return 0;
  }
--- 877,884 ----
          
      for(i=0; i&lt;11; i++) {
          tc = *maskp++;
!         if (tc == '?' || tc == '*' || tc == '&gt;')
! 	    return 1;
      }	
      return 0;
  }
***************
*** 900,906 ****
                  break;
              }
          }
! 	
  	memset(vcp,0,sizeof(smb_vc_t));
  	free(vcp);
      }
--- 901,907 ----
                  break;
              }
          }
! 	lock_FinalizeMutex(&amp;vcp-&gt;mx);
  	memset(vcp,0,sizeof(smb_vc_t));
  	free(vcp);
      }
***************
*** 962,970 ****
  	smb_HoldFIDNoLock(fidpIter);
  	lock_ReleaseWrite(&amp;smb_rctLock);
  
! 	/* smb_CloseFID sets SMB_FID_DELETE */
!         if (smb_CloseFID(vcp, fidpIter, NULL, 0) == 0)
! 	    smb_ReleaseFID(fidpIter);
  
          lock_ObtainWrite(&amp;smb_rctLock);
  	fidpNext = vcp-&gt;fidsp;
--- 963,971 ----
  	smb_HoldFIDNoLock(fidpIter);
  	lock_ReleaseWrite(&amp;smb_rctLock);
  
! 	/* smb_CloseFID sets SMB_FID_DELETE on Success */
!         smb_CloseFID(vcp, fidpIter, NULL, 0);
! 	smb_ReleaseFID(fidpIter);
  
          lock_ObtainWrite(&amp;smb_rctLock);
  	fidpNext = vcp-&gt;fidsp;
***************
*** 1369,1376 ****
          if (newFid) {
              vcp-&gt;fidCounter = fid+1;
              if (vcp-&gt;fidCounter == 0) {
!                 osi_Log1(smb_logp, "fidCounter wrapped around for vcp 0x%x",
!                          vcp);
                  vcp-&gt;fidCounter = 1;
  	    }
  	}
--- 1370,1377 ----
          if (newFid) {
              vcp-&gt;fidCounter = fid+1;
              if (vcp-&gt;fidCounter == 0) {
! 		osi_Log1(smb_logp, "fidCounter wrapped around for vcp 0x%x",
! 			 vcp);
                  vcp-&gt;fidCounter = 1;
  	    }
  	}
***************
*** 1392,1402 ****
      smb_vc_t *vcp = NULL;
      smb_ioctl_t *ioctlp;
  
-     if (!fidp)
-         return;
- 
      lock_ObtainWrite(&amp;smb_rctLock);
      osi_assert(fidp-&gt;refCount-- &gt; 0);
      if (fidp-&gt;refCount == 0 &amp;&amp; (fidp-&gt;flags &amp; SMB_FID_DELETE)) {
          vcp = fidp-&gt;vcp;
          fidp-&gt;vcp = NULL;
--- 1393,1401 ----
      smb_vc_t *vcp = NULL;
      smb_ioctl_t *ioctlp;
  
      lock_ObtainWrite(&amp;smb_rctLock);
      osi_assert(fidp-&gt;refCount-- &gt; 0);
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      if (fidp-&gt;refCount == 0 &amp;&amp; (fidp-&gt;flags &amp; SMB_FID_DELETE)) {
          vcp = fidp-&gt;vcp;
          fidp-&gt;vcp = NULL;
***************
*** 1420,1429 ****
--- 1419,1432 ----
              free(ioctlp);
          }       
  
+ 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
+ 	lock_FinalizeMutex(&amp;fidp-&gt;mx);
          free(fidp);
  
  	if (vcp)
  	    smb_ReleaseVCNoLock(vcp);
+     } else {
+ 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
      }
      lock_ReleaseWrite(&amp;smb_rctLock);
  
***************
*** 2937,2944 ****
--- 2940,2949 ----
      if (!rawBuf)
          goto send1a;
  
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      if (fidp-&gt;flags &amp; SMB_FID_IOCTL)
      {
+ 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
  #ifndef DJGPP
          rc = smb_IoctlReadRaw(fidp, vcp, inp, outp);
  #else
***************
*** 2960,2966 ****
          smb_ReleaseFID(fidp);
          return rc;
      }
!         
      userp = smb_GetUser(vcp, inp);
  
  #ifndef DJGPP
--- 2965,2972 ----
          smb_ReleaseFID(fidp);
          return rc;
      }
!     lock_ReleaseMutex(&amp;fidp-&gt;mx);
! 
      userp = smb_GetUser(vcp, inp);
  
  #ifndef DJGPP
***************
*** 3309,3319 ****
  	    smb_CheckVCs();
  	}
  
! 	/* XXX GC the smb_username_t objects with refCount 0 and
! 	 * neither SMB_USERNAMEFLAG_AFSLOGON nor (SMB_USERNAMEFLAG_LOGOFF
! 	 * &amp;&amp; smb_LogoffTokenTransfer &amp;&amp; 
! 	 * now &gt; last_logoff_t + smb_LogoffTransferTimeout) 
! 	 */
  	now = osi_Time();
  	lock_ObtainWrite(&amp;smb_rctLock);
  	for ( unpp=&amp;usernamesp; *unpp; ) {
--- 3315,3321 ----
  	    smb_CheckVCs();
  	}
  
! 	/* GC smb_username_t objects that will no longer be used */
  	now = osi_Time();
  	lock_ObtainWrite(&amp;smb_rctLock);
  	for ( unpp=&amp;usernamesp; *unpp; ) {
***************
*** 3321,3333 ****
  	    smb_username_t *unp;
  
  	    lock_ObtainMutex(&amp;(*unpp)-&gt;mx);
! 	    if ( (*unpp)-&gt;refCount &gt; 0 )
  		;
! 	    else if ((*unpp)-&gt;flags &amp; SMB_USERNAMEFLAG_AFSLOGON)
! 		;
! 	    else if (!(((*unpp)-&gt;flags &amp; SMB_USERNAMEFLAG_LOGOFF) &amp;&amp; smb_LogoffTokenTransfer))
! 		delete = 1;
! 	    else if ((*unpp)-&gt;last_logoff_t + smb_LogoffTransferTimeout &lt; now)
  		delete = 1;
  	    lock_ReleaseMutex(&amp;(*unpp)-&gt;mx);
  
--- 3323,3334 ----
  	    smb_username_t *unp;
  
  	    lock_ObtainMutex(&amp;(*unpp)-&gt;mx);
! 	    if ( (*unpp)-&gt;refCount &gt; 0 || 
! 		 ((*unpp)-&gt;flags &amp; SMB_USERNAMEFLAG_AFSLOGON) || 
! 		 !((*unpp)-&gt;flags &amp; SMB_USERNAMEFLAG_LOGOFF))
  		;
! 	    else if (!smb_LogoffTokenTransfer ||
! 		     ((*unpp)-&gt;last_logoff_t + smb_LogoffTransferTimeout &lt; now))
  		delete = 1;
  	    lock_ReleaseMutex(&amp;(*unpp)-&gt;mx);
  
***************
*** 4848,4859 ****
--- 4849,4862 ----
      cm_HoldUser(userp);
      fidp-&gt;userp = userp;
  
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      if ((share &amp; 0xf) == 0)
          fidp-&gt;flags |= SMB_FID_OPENREAD;
      else if ((share &amp; 0xf) == 1)
          fidp-&gt;flags |= SMB_FID_OPENWRITE;
      else 
          fidp-&gt;flags |= (SMB_FID_OPENREAD | SMB_FID_OPENWRITE);
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      lock_ObtainMutex(&amp;scp-&gt;mx);
      smb_SetSMBParm(outp, 0, fidp-&gt;fid);
***************
*** 5589,5599 ****
  
      fid = smb_ChainFID(fid, inp);
      fidp = smb_FindFID(vcp, fid, 0);
!     if (!fidp || (fidp-&gt;flags &amp; SMB_FID_IOCTL)) {
!         if (fidp)
!             smb_ReleaseFID(fidp);
          return CM_ERROR_BADFD;
      }
          
      userp = smb_GetUser(vcp, inp);
  
--- 5592,5607 ----
  
      fid = smb_ChainFID(fid, inp);
      fidp = smb_FindFID(vcp, fid, 0);
!     if (!fidp)
! 	return CM_ERROR_BADFD;
!     
!     lock_ObtainMutex(&amp;fidp-&gt;mx);
!     if (fidp-&gt;flags &amp; SMB_FID_IOCTL) {
! 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
! 	smb_ReleaseFID(fidp);
          return CM_ERROR_BADFD;
      }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
          
      userp = smb_GetUser(vcp, inp);
  
***************
*** 5669,5681 ****
--- 5677,5692 ----
               fidp, fidp-&gt;fid, vcp);
  
      if (!userp) {
+ 	lock_ObtainMutex(&amp;fidp-&gt;mx);
          if (!fidp-&gt;userp &amp;&amp; !(fidp-&gt;flags &amp; SMB_FID_IOCTL)) {
+ 	    lock_ReleaseMutex(&amp;fidp-&gt;mx);
              osi_Log0(smb_logp, "  No user specified.  Not closing fid.");
  	    return CM_ERROR_BADFD;
  	}
          
          userp = fidp-&gt;userp;    /* no hold required since fidp is held
                                     throughout the function */
+ 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
      }
  
      cm_InitReq(&amp;req);
***************
*** 6023,6028 ****
--- 6034,6040 ----
          
      /* make sure we have a writable FD */
      if (!(fidp-&gt;flags &amp; SMB_FID_OPENWRITE)) {
+ 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
          code = CM_ERROR_BADFDOP;
          goto done;
      }
***************
*** 6187,6193 ****
  
    done:
      lock_ReleaseMutex(&amp;scp-&gt;mx);
!     lock_ReleaseMutex(&amp;fidp-&gt;mx);
      if (bufferp) {
          lock_ReleaseMutex(&amp;bufferp-&gt;mx);
          buf_Release(bufferp);
--- 6199,6205 ----
  
    done:
      lock_ReleaseMutex(&amp;scp-&gt;mx);
! 
      if (bufferp) {
          lock_ReleaseMutex(&amp;bufferp-&gt;mx);
          buf_Release(bufferp);
***************
*** 6199,6204 ****
--- 6211,6217 ----
                            fidp-&gt;NTopen_dscp, fidp-&gt;NTopen_pathp,
                            NULL, TRUE);
      }       
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      if (code == 0 &amp;&amp; doWriteBack) {
          long code2;
***************
*** 6244,6256 ****
          
      fd = smb_ChainFID(fd, inp);
      fidp = smb_FindFID(vcp, fd, 0);
!     if (!fidp) {
          return CM_ERROR_BADFD;
-     }
-         
-     if (fidp-&gt;flags &amp; SMB_FID_IOCTL)
-         return smb_IoctlWrite(fidp, vcp, inp, outp);
          
      userp = smb_GetUser(vcp, inp);
  
      /* special case: 0 bytes transferred means truncate to this position */
--- 6257,6273 ----
          
      fd = smb_ChainFID(fd, inp);
      fidp = smb_FindFID(vcp, fd, 0);
!     if (!fidp)
          return CM_ERROR_BADFD;
          
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
+     if (fidp-&gt;flags &amp; SMB_FID_IOCTL) {
+ 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
+         code = smb_IoctlWrite(fidp, vcp, inp, outp);
+ 	smb_ReleaseFID(fidp);
+ 	return code;
+     }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
      userp = smb_GetUser(vcp, inp);
  
      /* special case: 0 bytes transferred means truncate to this position */
***************
*** 6302,6311 ****
--- 6319,6330 ----
       * and don't set client mod time if we think that would go against the
       * intention.
       */
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      if ((fidp-&gt;flags &amp; SMB_FID_MTIMESETDONE) != SMB_FID_MTIMESETDONE) {
          fidp-&gt;scp-&gt;mask |= CM_SCACHEMASK_CLIENTMODTIME;
          fidp-&gt;scp-&gt;clientModTime = time(NULL);
      }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      code = 0;
      while ( code == 0 &amp;&amp; count &gt; 0 ) {
***************
*** 6480,6489 ****
--- 6499,6510 ----
       * and don't set client mod time if we think that would go against the
       * intention.
       */
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      if ((fidp-&gt;flags &amp; SMB_FID_LOOKSLIKECOPY) != SMB_FID_LOOKSLIKECOPY) {
          fidp-&gt;scp-&gt;mask |= CM_SCACHEMASK_CLIENTMODTIME;
          fidp-&gt;scp-&gt;clientModTime = time(NULL);
      }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      code = 0;
      while ( code == 0 &amp;&amp; count &gt; 0 ) {
***************
*** 6577,6589 ****
          
      fd = smb_ChainFID(fd, inp);
      fidp = smb_FindFID(vcp, fd, 0);
!     if (!fidp) {
          return CM_ERROR_BADFD;
-     }
          
      if (fidp-&gt;flags &amp; SMB_FID_IOCTL) {
!         return smb_IoctlRead(fidp, vcp, inp, outp);
      }
  
      {
          LARGE_INTEGER LOffset, LLength;
--- 6598,6614 ----
          
      fd = smb_ChainFID(fd, inp);
      fidp = smb_FindFID(vcp, fd, 0);
!     if (!fidp)
          return CM_ERROR_BADFD;
          
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      if (fidp-&gt;flags &amp; SMB_FID_IOCTL) {
! 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
!         code = smb_IoctlRead(fidp, vcp, inp, outp);
! 	smb_ReleaseFID(fidp);
! 	return code;
      }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      {
          LARGE_INTEGER LOffset, LLength;
***************
*** 6925,6946 ****
      fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE);
      osi_assert(fidp);
  	
      /* save a pointer to the vnode */
      fidp-&gt;scp = scp;
      /* and the user */
-     cm_HoldUser(userp);
      fidp-&gt;userp = userp;
!         
!     /* always create it open for read/write */
!     fidp-&gt;flags |= (SMB_FID_OPENREAD | SMB_FID_OPENWRITE);
  
-     smb_ReleaseFID(fidp);
-         
      smb_SetSMBParm(outp, 0, fidp-&gt;fid);
      smb_SetSMBDataLength(outp, 0);
  
      cm_Open(scp, 0, userp);
  
      cm_ReleaseUser(userp);
      /* leave scp held since we put it in fidp-&gt;scp */
      return 0;
--- 6950,6973 ----
      fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE);
      osi_assert(fidp);
  	
+     cm_HoldUser(userp);
+ 
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
+     /* always create it open for read/write */
+     fidp-&gt;flags |= (SMB_FID_OPENREAD | SMB_FID_OPENWRITE);
+ 
      /* save a pointer to the vnode */
      fidp-&gt;scp = scp;
      /* and the user */
      fidp-&gt;userp = userp;
!     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      smb_SetSMBParm(outp, 0, fidp-&gt;fid);
      smb_SetSMBDataLength(outp, 0);
  
      cm_Open(scp, 0, userp);
  
+     smb_ReleaseFID(fidp);
      cm_ReleaseUser(userp);
      /* leave scp held since we put it in fidp-&gt;scp */
      return 0;
***************
*** 6966,6974 ****
      /* try to find the file descriptor */
      fd = smb_ChainFID(fd, inp);
      fidp = smb_FindFID(vcp, fd, 0);
!     if (!fidp || (fidp-&gt;flags &amp; SMB_FID_IOCTL)) {
          return CM_ERROR_BADFD;
      }
  	
      userp = smb_GetUser(vcp, inp);
  
--- 6993,7009 ----
      /* try to find the file descriptor */
      fd = smb_ChainFID(fd, inp);
      fidp = smb_FindFID(vcp, fd, 0);
! 
!     if (!fidp)
! 	return CM_ERROR_BADFD;
! 
!     lock_ObtainMutex(&amp;fidp-&gt;mx);
!     if (fidp-&gt;flags &amp; SMB_FID_IOCTL) {
! 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
! 	smb_ReleaseFID(fidp);
          return CM_ERROR_BADFD;
      }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  	
      userp = smb_GetUser(vcp, inp);
  
***************
*** 8150,8157 ****
--- 8185,8194 ----
  #endif /* !DJGPP */
  	    }
  
+ 	    lock_ObtainMutex(&amp;vcp-&gt;mx);
  	    strcpy(vcp-&gt;rname, rname);
  	    vcp-&gt;flags |= flags;
+ 	    lock_ReleaseMutex(&amp;vcp-&gt;mx);
  
  	    /* Allocate slot in session arrays */
  	    /* Re-use dead session if possible, otherwise add one more */
***************
*** 8243,8249 ****
  	    vcp-&gt;flags |= SMB_VCFLAG_ALREADYDEAD;
  	    lock_ReleaseMutex(&amp;vcp-&gt;mx);
  	    smb_CleanupDeadVC(vcp);
- 	    smb_ReleaseVC(vcp);
          } else {
              /* assert that we do not exceed the maximum number of sessions or NCBs.
               * we should probably want to wait for a session to be freed in case
--- 8280,8285 ----
***************
*** 8288,8294 ****
                  thrd_SetEvent(SessionEvents[session]);
              }
          }
-         
          smb_ReleaseVC(vcp);
  
          /* unlock */
--- 8324,8329 ----
Index: openafs/src/WINNT/afsd/smb3.c
diff -c openafs/src/WINNT/afsd/smb3.c:1.42.2.41 openafs/src/WINNT/afsd/smb3.c:1.42.2.43
*** openafs/src/WINNT/afsd/smb3.c:1.42.2.41	Tue Jan 24 12:16:07 2006
--- openafs/src/WINNT/afsd/smb3.c	Tue Jan 31 04:10:00 2006
***************
*** 2372,2387 ****
      fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE);
      osi_assert(fidp);
  	
      /* save a pointer to the vnode */
      fidp-&gt;scp = scp;
      /* and the user */
-     cm_HoldUser(userp);
      fidp-&gt;userp = userp;
          
      /* compute open mode */
!     if (openMode != 1) fidp-&gt;flags |= SMB_FID_OPENREAD;
      if (openMode == 1 || openMode == 2)
          fidp-&gt;flags |= SMB_FID_OPENWRITE;
  
      smb_ReleaseFID(fidp);
          
--- 2372,2390 ----
      fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE);
      osi_assert(fidp);
  	
+     cm_HoldUser(userp);
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      /* save a pointer to the vnode */
      fidp-&gt;scp = scp;
      /* and the user */
      fidp-&gt;userp = userp;
          
      /* compute open mode */
!     if (openMode != 1) 
! 	fidp-&gt;flags |= SMB_FID_OPENREAD;
      if (openMode == 1 || openMode == 2)
          fidp-&gt;flags |= SMB_FID_OPENWRITE;
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      smb_ReleaseFID(fidp);
          
***************
*** 2946,2952 ****
--- 2949,2957 ----
          *((LARGE_INTEGER *)op) = scp-&gt;length; op += 8;	/* alloc size */
          *((LARGE_INTEGER *)op) = scp-&gt;length; op += 8;	/* EOF */
          *((u_long *)op) = scp-&gt;linkCount; op += 4;
+ 	lock_ObtainMutex(&amp;fidp-&gt;mx);
          *op++ = ((fidp-&gt;flags &amp; SMB_FID_DELONCLOSE) ? 1 : 0);
+ 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
          *op++ = (scp-&gt;fileType == CM_SCACHETYPE_DIRECTORY ? 1 : 0);
          *op++ = 0;
          *op++ = 0;
***************
*** 3013,3029 ****
          return 0;
      }
  
      if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO &amp;&amp; !(fidp-&gt;flags &amp; SMB_FID_OPENDELETE)) {
!         smb_SendTran2Error(vcp, p, op, CM_ERROR_NOACCESS);
          smb_ReleaseFID(fidp);
          return 0;
      }
      if ((infoLevel == SMB_QUERY_FILE_EA_INFO || infoLevel == SMB_QUERY_FILE_NAME_INFO)
           &amp;&amp; !(fidp-&gt;flags &amp; SMB_FID_OPENWRITE)) {
!         smb_SendTran2Error(vcp, p, op, CM_ERROR_NOACCESS);
          smb_ReleaseFID(fidp);
          return 0;
      }
  
      osi_Log1(smb_logp, "T2 SFileInfo type 0x%x", infoLevel);
  
--- 3018,3038 ----
          return 0;
      }
  
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO &amp;&amp; !(fidp-&gt;flags &amp; SMB_FID_OPENDELETE)) {
! 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
          smb_ReleaseFID(fidp);
+         smb_SendTran2Error(vcp, p, op, CM_ERROR_NOACCESS);
          return 0;
      }
      if ((infoLevel == SMB_QUERY_FILE_EA_INFO || infoLevel == SMB_QUERY_FILE_NAME_INFO)
           &amp;&amp; !(fidp-&gt;flags &amp; SMB_FID_OPENWRITE)) {
! 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
          smb_ReleaseFID(fidp);
+         smb_SendTran2Error(vcp, p, op, CM_ERROR_NOACCESS);
          return 0;
      }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      osi_Log1(smb_logp, "T2 SFileInfo type 0x%x", infoLevel);
  
***************
*** 3070,3076 ****
--- 3079,3087 ----
               lastMod.dwLowDateTime != -1 &amp;&amp; lastMod.dwHighDateTime != -1) {
              attr.mask |= CM_ATTRMASK_CLIENTMODTIME;
              smb_UnixTimeFromLargeSearchTime(&amp;attr.clientModTime, &amp;lastMod);
+ 	    lock_ObtainMutex(&amp;fidp-&gt;mx);
              fidp-&gt;flags |= SMB_FID_MTIMESETDONE;
+ 	    lock_ReleaseMutex(&amp;fidp-&gt;mx);
          }
  		
          attribute = *((u_long *)(p-&gt;datap + 32));
***************
*** 3109,3120 ****
          if (*((char *)(p-&gt;datap))) {
              code = cm_CheckNTDelete(fidp-&gt;NTopen_dscp, scp, userp,
                                       &amp;req);
!             if (code == 0)          
                  fidp-&gt;flags |= SMB_FID_DELONCLOSE;
!         }               
          else {  
              code = 0;
              fidp-&gt;flags &amp;= ~SMB_FID_DELONCLOSE;
          }
      }       
  
--- 3120,3136 ----
          if (*((char *)(p-&gt;datap))) {
              code = cm_CheckNTDelete(fidp-&gt;NTopen_dscp, scp, userp,
                                       &amp;req);
!             if (code == 0) {
! 		lock_ObtainMutex(&amp;fidp-&gt;mx);
                  fidp-&gt;flags |= SMB_FID_DELONCLOSE;
! 		lock_ReleaseMutex(&amp;fidp-&gt;mx);
! 	    }
! 	}               
          else {  
              code = 0;
+ 	    lock_ObtainMutex(&amp;fidp-&gt;mx);
              fidp-&gt;flags &amp;= ~SMB_FID_DELONCLOSE;
+ 	    lock_ReleaseMutex(&amp;fidp-&gt;mx);
          }
      }       
  
***************
*** 4753,4762 ****
      fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE);
      osi_assert(fidp);
  	
      /* save a pointer to the vnode */
      fidp-&gt;scp = scp;
      /* also the user */
-     cm_HoldUser(userp);
      fidp-&gt;userp = userp;
          
      /* compute open mode */
--- 4769,4779 ----
      fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE);
      osi_assert(fidp);
  	
+     cm_HoldUser(userp);
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      /* save a pointer to the vnode */
      fidp-&gt;scp = scp;
      /* also the user */
      fidp-&gt;userp = userp;
          
      /* compute open mode */
***************
*** 4765,4770 ****
--- 4782,4788 ----
      if (openMode == 1 || openMode == 2)
          fidp-&gt;flags |= SMB_FID_OPENWRITE;
  
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
      smb_ReleaseFID(fidp);
          
      cm_Open(scp, 0, userp);
***************
*** 4855,4864 ****
      fid = smb_ChainFID(fid, inp);
  
      fidp = smb_FindFID(vcp, fid, 0);
!     if (!fidp || (fidp-&gt;flags &amp; SMB_FID_IOCTL)) {
          osi_Log0(smb_logp, "smb_ReceiveV3Locking BadFD");
          return CM_ERROR_BADFD;
      }
      /* set inp-&gt;fid so that later read calls in same msg can find fid */
      inp-&gt;fid = fid;
  
--- 4873,4890 ----
      fid = smb_ChainFID(fid, inp);
  
      fidp = smb_FindFID(vcp, fid, 0);
!     if (!fidp)
! 	return CM_ERROR_BADFD;
!     
!     lock_ObtainMutex(&amp;fidp-&gt;mx);
!     if (fidp-&gt;flags &amp; SMB_FID_IOCTL) {
          osi_Log0(smb_logp, "smb_ReceiveV3Locking BadFD");
+ 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
+ 	smb_ReleaseFID(fidp);
          return CM_ERROR_BADFD;
      }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
+ 
      /* set inp-&gt;fid so that later read calls in same msg can find fid */
      inp-&gt;fid = fid;
  
***************
*** 5085,5093 ****
      fid = smb_ChainFID(fid, inp);
          
      fidp = smb_FindFID(vcp, fid, 0);
!     if (!fidp || (fidp-&gt;flags &amp; SMB_FID_IOCTL)) {
          return CM_ERROR_BADFD;
      }
          
      userp = smb_GetUser(vcp, inp);
          
--- 5111,5126 ----
      fid = smb_ChainFID(fid, inp);
          
      fidp = smb_FindFID(vcp, fid, 0);
!     if (!fidp)
! 	return CM_ERROR_BADFD;
!     
!     lock_ObtainMutex(&amp;fidp-&gt;mx);
!     if (fidp-&gt;flags &amp; SMB_FID_IOCTL) {
! 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
! 	smb_ReleaseFID(fidp);
          return CM_ERROR_BADFD;
      }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
          
      userp = smb_GetUser(vcp, inp);
          
***************
*** 5149,5157 ****
      fid = smb_ChainFID(fid, inp);
          
      fidp = smb_FindFID(vcp, fid, 0);
!     if (!fidp || (fidp-&gt;flags &amp; SMB_FID_IOCTL)) {
          return CM_ERROR_BADFD;
      }
          
      userp = smb_GetUser(vcp, inp);
          
--- 5182,5197 ----
      fid = smb_ChainFID(fid, inp);
          
      fidp = smb_FindFID(vcp, fid, 0);
!     if (!fidp)
! 	return CM_ERROR_BADFD;
!     
!     lock_ObtainMutex(&amp;fidp-&gt;mx);
!     if (fidp-&gt;flags &amp; SMB_FID_IOCTL) {
! 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
! 	smb_ReleaseFID(fidp);
          return CM_ERROR_BADFD;
      }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
          
      userp = smb_GetUser(vcp, inp);
          
***************
*** 5234,5242 ****
      /* set inp-&gt;fid so that later read calls in same msg can find fid */
      inp-&gt;fid = fd;
  
      if (fidp-&gt;flags &amp; SMB_FID_IOCTL) {
!         return smb_IoctlV3Read(fidp, vcp, inp, outp);
      }
  
      userp = smb_GetUser(vcp, inp);
  
--- 5274,5287 ----
      /* set inp-&gt;fid so that later read calls in same msg can find fid */
      inp-&gt;fid = fd;
  
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      if (fidp-&gt;flags &amp; SMB_FID_IOCTL) {
! 	lock_ReleaseMutex(&amp;fidp-&gt;mx);
!         code = smb_IoctlV3Read(fidp, vcp, inp, outp);
! 	smb_ReleaseFID(fidp);
! 	return code;
      }
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      userp = smb_GetUser(vcp, inp);
  
***************
*** 5472,5477 ****
--- 5517,5523 ----
      }
  
      if (baseFid == 0) {
+ 	baseFidp = NULL;
          baseDirp = cm_data.rootSCachep;
          code = smb_LookupTIDPath(vcp, ((smb_t *)inp)-&gt;tid, &amp;tidPathp);
          if (code == CM_ERROR_TIDIPC) {
***************
*** 5532,5537 ****
--- 5578,5585 ----
                  cm_ReleaseSCache(dscp);
                  cm_ReleaseUser(userp);
                  free(realPathp);
+ 		if (baseFidp) 
+ 		    smb_ReleaseFID(baseFidp);
                  if ( WANTS_DFS_PATHNAMES(inp) )
                      return CM_ERROR_PATH_NOT_COVERED;
                  else
***************
*** 5548,5553 ****
--- 5596,5603 ----
                      cm_ReleaseSCache(dscp);
                      cm_ReleaseUser(userp);
                      free(realPathp);
+ 		    if (baseFidp) 
+ 			smb_ReleaseFID(baseFidp);
                      return CM_ERROR_EXISTS;
                  }
              }
***************
*** 5561,5566 ****
--- 5611,5618 ----
              cm_ReleaseSCache(scp);
              cm_ReleaseUser(userp);
              free(realPathp);
+ 	    if (baseFidp) 
+ 		smb_ReleaseFID(baseFidp);
              if ( WANTS_DFS_PATHNAMES(inp) )
                  return CM_ERROR_PATH_NOT_COVERED;
              else
***************
*** 5597,5602 ****
--- 5649,5656 ----
                      cm_ReleaseSCache(dscp);
                      cm_ReleaseUser(userp);
                      free(realPathp);
+ 		    if (baseFidp) 
+ 			smb_ReleaseFID(baseFidp);
                      if ( WANTS_DFS_PATHNAMES(inp) )
                          return CM_ERROR_PATH_NOT_COVERED;
                      else
***************
*** 5613,5619 ****
                      treeStartp = realPathp + (tp - spacep-&gt;data);
  
                      if (*tp &amp;&amp; !smb_IsLegalFilename(tp)) {
!                         if (baseFid != 0) 
                              smb_ReleaseFID(baseFidp);
                          cm_ReleaseUser(userp);
                          free(realPathp);
--- 5667,5673 ----
                      treeStartp = realPathp + (tp - spacep-&gt;data);
  
                      if (*tp &amp;&amp; !smb_IsLegalFilename(tp)) {
!                         if (baseFidp) 
                              smb_ReleaseFID(baseFidp);
                          cm_ReleaseUser(userp);
                          free(realPathp);
***************
*** 5629,5635 ****
  
          /* we might have scp and we might have dscp */
  
!         if (baseFid != 0) 
              smb_ReleaseFID(baseFidp);
  
          if (code) {
--- 5683,5689 ----
  
          /* we might have scp and we might have dscp */
  
!         if (baseFidp)
              smb_ReleaseFID(baseFidp);
  
          if (code) {
***************
*** 5691,5697 ****
          /* we have scp and dscp */
      } else {
          /* we have scp but not dscp */
!         if (baseFid != 0) 
              smb_ReleaseFID(baseFidp);
      }
  
--- 5745,5751 ----
          /* we have scp and dscp */
      } else {
          /* we have scp but not dscp */
!         if (baseFidp)
              smb_ReleaseFID(baseFidp);
      }
  
***************
*** 5978,5984 ****
          lock_ReleaseMutex(&amp;scp-&gt;mx);
  
          if (code) {
!             fidp-&gt;flags = SMB_FID_DELETE;
              smb_ReleaseFID(fidp);
  
              cm_ReleaseSCache(scp);
--- 6032,6039 ----
          lock_ReleaseMutex(&amp;scp-&gt;mx);
  
          if (code) {
!             /* shouldn't this be smb_CloseFID() fidp-&gt;flags = SMB_FID_DELETE; */
! 	    smb_CloseFID(vcp, fidp, NULL, 0);
              smb_ReleaseFID(fidp);
  
              cm_ReleaseSCache(scp);
***************
*** 5991,5996 ****
--- 6046,6052 ----
          }
      }
  
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      /* save a pointer to the vnode */
      fidp-&gt;scp = scp;    /* Hold transfered to fidp-&gt;scp and no longer needed */
  
***************
*** 6004,6009 ****
--- 6060,6066 ----
          fidp-&gt;NTopen_pathp = strdup(lastNamep);
      }
      fidp-&gt;NTopen_wholepathp = realPathp;
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      /* we don't need this any longer */
      if (dscp) {
***************
*** 6196,6201 ****
--- 6253,6259 ----
      }
  
      if (baseFid == 0) {
+ 	baseFidp = NULL;
          baseDirp = cm_data.rootSCachep;
          code = smb_LookupTIDPath(vcp, ((smb_t *)inp)-&gt;tid, &amp;tidPathp);
          if (code == CM_ERROR_TIDIPC) {
***************
*** 6214,6220 ****
      } else {
          baseFidp = smb_FindFID(vcp, baseFid, 0);
          if (!baseFidp) {
!         	osi_Log1(smb_logp, "NTTranCreate Invalid fid [%d]", baseFid);
              free(realPathp);
              cm_ReleaseUser(userp);
              return CM_ERROR_INVAL;
--- 6272,6278 ----
      } else {
          baseFidp = smb_FindFID(vcp, baseFid, 0);
          if (!baseFidp) {
! 	    osi_Log1(smb_logp, "NTTranCreate Invalid fid [%d]", baseFid);
              free(realPathp);
              cm_ReleaseUser(userp);
              return CM_ERROR_INVAL;
***************
*** 6253,6258 ****
--- 6311,6318 ----
                  cm_ReleaseSCache(dscp);
                  cm_ReleaseUser(userp);
                  free(realPathp);
+ 		if (baseFidp)
+ 		    smb_ReleaseFID(baseFidp);
                  if ( WANTS_DFS_PATHNAMES(inp) )
                      return CM_ERROR_PATH_NOT_COVERED;
                  else
***************
*** 6269,6274 ****
--- 6329,6336 ----
                      cm_ReleaseSCache(dscp);
                      cm_ReleaseUser(userp);
                      free(realPathp);
+ 		    if (baseFidp)
+ 			smb_ReleaseFID(baseFidp);
                      return CM_ERROR_EXISTS;
                  }
              }
***************
*** 6282,6287 ****
--- 6344,6351 ----
              cm_ReleaseSCache(scp);
              cm_ReleaseUser(userp);
              free(realPathp);
+ 	    if (baseFidp)
+ 		smb_ReleaseFID(baseFidp);
              if ( WANTS_DFS_PATHNAMES(inp) )
                  return CM_ERROR_PATH_NOT_COVERED;
              else
***************
*** 6304,6309 ****
--- 6368,6375 ----
                  cm_ReleaseSCache(dscp);
                  cm_ReleaseUser(userp);
                  free(realPathp);
+ 		if (baseFidp)
+ 		    smb_ReleaseFID(baseFidp);
                  if ( WANTS_DFS_PATHNAMES(inp) )
                      return CM_ERROR_PATH_NOT_COVERED;
                  else
***************
*** 6315,6324 ****
          
          cm_FreeSpace(spacep);
  
!         if (baseFid != 0) {
              smb_ReleaseFID(baseFidp);
-             baseFidp = 0;
-         }
  
          if (code) {
              cm_ReleaseUser(userp);
--- 6381,6388 ----
          
          cm_FreeSpace(spacep);
  
!         if (baseFidp)
              smb_ReleaseFID(baseFidp);
  
          if (code) {
              cm_ReleaseUser(userp);
***************
*** 6326,6333 ****
              return code;
          }
  
!         if (!lastNamep) lastNamep = realPathp;
!         else lastNamep++;
  
          if (!smb_IsLegalFilename(lastNamep))
              return CM_ERROR_BADNTFILENAME;
--- 6390,6399 ----
              return code;
          }
  
!         if (!lastNamep)
! 	    lastNamep = realPathp;
!         else 
! 	    lastNamep++;
  
          if (!smb_IsLegalFilename(lastNamep))
              return CM_ERROR_BADNTFILENAME;
***************
*** 6349,6358 ****
              }
          }
      } else {
!         if (baseFid != 0) {
              smb_ReleaseFID(baseFidp);
-             baseFidp = 0;
-         }
          cm_FreeSpace(spacep);
      }
  
--- 6415,6422 ----
              }
          }
      } else {
!         if (baseFidp)
              smb_ReleaseFID(baseFidp);
          cm_FreeSpace(spacep);
      }
  
***************
*** 6570,6576 ****
          lock_ReleaseMutex(&amp;scp-&gt;mx);
  
          if (code) {
!             fidp-&gt;flags = SMB_FID_DELETE;
              smb_ReleaseFID(fidp);
  
              cm_ReleaseSCache(scp);
--- 6634,6641 ----
          lock_ReleaseMutex(&amp;scp-&gt;mx);
  
          if (code) {
!             /* Shouldn't this be smb_CloseFID()?  fidp-&gt;flags = SMB_FID_DELETE; */
! 	    smb_CloseFID(vcp, fidp, NULL, 0);
              smb_ReleaseFID(fidp);
  
              cm_ReleaseSCache(scp);
***************
*** 6581,6586 ****
--- 6646,6652 ----
          }
      }
  
+     lock_ObtainMutex(&amp;fidp-&gt;mx);
      /* save a pointer to the vnode */
      fidp-&gt;scp = scp;
  
***************
*** 6594,6599 ****
--- 6660,6666 ----
          fidp-&gt;NTopen_pathp = strdup(lastNamep);
      }
      fidp-&gt;NTopen_wholepathp = realPathp;
+     lock_ReleaseMutex(&amp;fidp-&gt;mx);
  
      /* we don't need this any longer */
      if (dscp) 
Index: openafs/src/WINNT/afsd/smb_ioctl.c
diff -c openafs/src/WINNT/afsd/smb_ioctl.c:1.14.2.6 openafs/src/WINNT/afsd/smb_ioctl.c:1.14.2.7
*** openafs/src/WINNT/afsd/smb_ioctl.c:1.14.2.6	Sun Jan 15 21:07:01 2006
--- openafs/src/WINNT/afsd/smb_ioctl.c	Thu Jan 26 01:09:49 2006
***************
*** 231,237 ****
      iop-&gt;outCopied += count;
  
      cm_ReleaseUser(userp);
-     smb_ReleaseFID(fidp);
  
      return 0;
  }	
--- 231,236 ----
***************
*** 274,280 ****
  	smb_SetSMBDataLength(outp, 0);
      }
  
-     smb_ReleaseFID(fidp);
      return code;
  }
  
--- 273,278 ----
***************
*** 315,321 ****
  	if (uidp)
  	    smb_ReleaseUID(uidp);
          cm_ReleaseUser(userp);
-         smb_ReleaseFID(fidp);
          return CM_ERROR_NOSUCHPATH;
      }
  
--- 313,318 ----
***************
*** 326,332 ****
      }
      if (code) {
  	cm_ReleaseUser(userp);
-         smb_ReleaseFID(fidp);
  	return code;
      }
  
--- 323,328 ----
***************
*** 366,372 ****
  
      /* and cleanup things */
      cm_ReleaseUser(userp);
-     smb_ReleaseFID(fidp);
  
      return 0;
  }
--- 362,367 ----
***************
*** 421,434 ****
      code = smb_LookupTIDPath(vcp, ((smb_t *)inp)-&gt;tid, &amp;iop-&gt;tidPathp);
      if(code) {
          cm_ReleaseUser(userp);
-         smb_ReleaseFID(fidp);
          return CM_ERROR_NOSUCHPATH;
      }
  
      code = smb_IoctlPrepareRead(fidp, iop, userp);
      if (code) {
  	cm_ReleaseUser(userp);
- 	smb_ReleaseFID(fidp);
  	return code;
      }
  
--- 416,427 ----
***************
*** 457,463 ****
  	osi_Log1(afsd_logp, "ReadRaw send failure code %d", code);
  
      cm_ReleaseUser(userp);
-     smb_ReleaseFID(fidp);
  
      return 0;
  }
--- 450,455 ----
Index: openafs/src/afs/afs_daemons.c
diff -c openafs/src/afs/afs_daemons.c:1.28.2.10 openafs/src/afs/afs_daemons.c:1.28.2.12
*** openafs/src/afs/afs_daemons.c:1.28.2.10	Tue Jan 24 12:34:15 2006
--- openafs/src/afs/afs_daemons.c	Thu Feb  2 03:28:42 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_daemons.c,v 1.28.2.10 2006/01/24 17:34:15 shadow Exp $");
  
  #ifdef AFS_AIX51_ENV
  #define __FULL_PROTO
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_daemons.c,v 1.28.2.12 2006/02/02 08:28:42 shadow Exp $");
  
  #ifdef AFS_AIX51_ENV
  #define __FULL_PROTO
***************
*** 35,40 ****
--- 35,43 ----
  struct brequest afs_brs[NBRS];	/* request structures */
  struct afs_osi_WaitHandle AFS_WaitHandler, AFS_CSWaitHandler;
  static int afs_brs_count = 0;	/* request counter, to service reqs in order */
+ #ifdef AFS_DISABLE_BKG
+ int disable_bkg = AFS_DISABLE_BKG;
+ #endif
  
  static int rxepoch_checked = 0;
  #define afs_CheckRXEpoch() {if (rxepoch_checked == 0 &amp;&amp; rxkad_EpochWasSet) { \
***************
*** 563,568 ****
--- 566,575 ----
  afs_BBusy(void)
  {
      AFS_STATCNT(afs_BBusy);
+ #ifdef AFS_DISABLE_BKG
+     if (disable_bkg)
+ 	return 1;
+ #endif
      if (afs_brsDaemons &gt; 0)
  	return 0;
      return 1;
Index: openafs/src/afs/afs_osidnlc.c
diff -c openafs/src/afs/afs_osidnlc.c:1.8.2.3 openafs/src/afs/afs_osidnlc.c:1.8.2.4
*** openafs/src/afs/afs_osidnlc.c:1.8.2.3	Thu Jan  5 00:57:55 2006
--- openafs/src/afs/afs_osidnlc.c	Sat Jan 28 13:04:04 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osidnlc.c,v 1.8.2.3 2006/01/05 05:57:55 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.4 2006/01/28 18:04:04 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
***************
*** 239,244 ****
--- 239,250 ----
  	ReleaseReadLock(&amp;afs_xvcache);
  	dnlcstats.misses++;
      } else {
+ 	if (tvc-&gt;states &amp; CVInit) {
+ 	    ReleaseReadLock(&amp;afs_xvcache);
+ 	    dnlcstats.misses++;
+ 	    osi_dnlc_remove(adp, aname, tvc);
+ 	    return 0;
+ 	}
  #ifdef	AFS_OSF_ENV
  	VN_HOLD((vnode_t *) tvc);
  #else
Index: openafs/src/afs/afs_vcache.c
diff -c openafs/src/afs/afs_vcache.c:1.65.2.37 openafs/src/afs/afs_vcache.c:1.65.2.41
*** openafs/src/afs/afs_vcache.c:1.65.2.37	Tue Jan 24 23:47:11 2006
--- openafs/src/afs/afs_vcache.c	Sat Jan 28 13:06:37 2006
***************
*** 39,45 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_vcache.c,v 1.65.2.37 2006/01/25 04:47:11 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.41 2006/01/28 18:06:37 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
***************
*** 205,210 ****
--- 205,214 ----
  	AFSTOV(avc) = NULL;             /* also drop the ptr to vnode */
      }
  #endif
+ #ifdef AFS_SUN510_ENV
+     /* As we use private vnodes, cleanup is up to us */
+     vn_reinit(AFSTOV(avc));
+ #endif
      afs_FreeAllAxs(&amp;(avc-&gt;Access));
  
      /* we can't really give back callbacks on RO files, since the
***************
*** 598,603 ****
--- 602,619 ----
  	    tmpReclaimedVCList = tvc;
  	    printf("Reclaim list flush %x failed: %d\n", tvc, code);
  	}
+         if (tvc-&gt;states &amp; (CVInit
+ #ifdef AFS_DARWIN80_ENV
+ 			  | CDeadVnode
+ #endif
+            )) {
+ 	   tvc-&gt;states &amp;= ~(CVInit
+ #ifdef AFS_DARWIN80_ENV
+ 			    | CDeadVnode
+ #endif
+ 	   );
+ 	   afs_osi_Wakeup(&amp;tvc-&gt;states);
+ 	}
      }
      if (tmpReclaimedVCList) 
  	ReclaimedVCList = tmpReclaimedVCList;
***************
*** 675,681 ****
  	    if (tvc != afs_globalVp &amp;&amp; VREFCOUNT(tvc) &gt; 1 &amp;&amp; tvc-&gt;opens == 0) {
                  struct dentry *dentry;
                  struct list_head *cur, *head;
-                 AFS_FAST_HOLD(tvc);
                  AFS_GUNLOCK();
  #if defined(AFS_LINUX24_ENV)
                  spin_lock(&amp;dcache_lock);
--- 691,696 ----
***************
*** 711,717 ****
  #endif
  	    inuse:
  		AFS_GLOCK();
- 		AFS_FAST_RELE(tvc);
  	    }
  #endif
  
--- 726,731 ----
***************
*** 773,778 ****
--- 787,793 ----
  #else /* AFS_OSF_ENV */
      /* pull out a free cache entry */
      if (!freeVCList) {
+         int loop = 0;
  	i = 0;
  	for (tq = VLRU.prev; (anumber &gt; 0) &amp;&amp; (tq != &amp;VLRU); tq = uq) {
  	    tvc = QTOV(tq);
***************
*** 800,805 ****
--- 815,821 ----
  		/* VREFCOUNT_GT only sees usecounts, not iocounts */
  		/* so this may fail to actually recycle the vnode now */
  		/* must call vnode_get to avoid races. */
+                 fv_slept = 0;
  		if (vnode_get(tvp) == 0) {
  		    fv_slept=1;
  		    /* must release lock, since vnode_put will immediately
***************
*** 814,822 ****
  		/* we can't use the vnode_recycle return value to figure
  		 * this out, since the iocount we have to hold makes it
  		 * always "fail" */
! 		if (AFSTOV(tvc) == tvp)
  		    code = EBUSY;
! 		else
  		    code = 0;
  #else
                  /*
--- 830,842 ----
  		/* we can't use the vnode_recycle return value to figure
  		 * this out, since the iocount we have to hold makes it
  		 * always "fail" */
! 		if (AFSTOV(tvc) == tvp) {
!                     if (anumber &gt; 0 &amp;&amp; fv_slept) {
!                        QRemove(&amp;tvc-&gt;vlruq);
!                        QAdd(&amp;VLRU, &amp;tvc-&gt;vlruq);
!                     }
  		    code = EBUSY;
! 		} else
  		    code = 0;
  #else
                  /*
***************
*** 839,844 ****
--- 859,866 ----
  		    anumber--;
  		}
  		if (fv_slept) {
+                     if (loop++ &gt; 100)
+                        break;
  		    uq = VLRU.prev;
  		    i = 0;
  		    continue;	/* start over - may have raced. */
Index: openafs/src/afs/AIX/osi_vnodeops.c
diff -c openafs/src/afs/AIX/osi_vnodeops.c:1.15.2.2 openafs/src/afs/AIX/osi_vnodeops.c:1.15.2.3
*** openafs/src/afs/AIX/osi_vnodeops.c:1.15.2.2	Fri Jan 20 00:06:57 2006
--- openafs/src/afs/AIX/osi_vnodeops.c	Thu Jan 26 10:45:51 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/AIX/osi_vnodeops.c,v 1.15.2.2 2006/01/20 05:06:57 shadow Exp $");
  
  #include "h/systm.h"
  #include "h/types.h"
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/AIX/osi_vnodeops.c,v 1.15.2.3 2006/01/26 15:45:51 shadow Exp $");
  
  #include "h/systm.h"
  #include "h/types.h"
***************
*** 1315,1321 ****
--- 1315,1325 ----
  	       struct eflock *lckdat, 
  	       int32long64_t cmd, 
  	       int (*ignored_fcn) (),
+ #ifdef AFS_AIX52_ENV /* Changed in AIX 5.2 and up */
  	       ulong * ignored_id, 
+ #else /* AFS_AIX52_ENV */
+ 	       ulong32int64_t * ignored_id,
+ #endif /* AFS_AIX52_ENV */
  	       struct ucred *cred)
  {
      int error, ncmd = 0;
***************
*** 1757,1762 ****
--- 1761,1767 ----
  	afs_gn_enosys,		/* vn_rdwr_attr */
      (int(*)(struct vnode*,int,void*,struct ucred*))
  	afs_gn_enosys,		/* vn_memcntl */
+ #ifdef AFS_AIX53_ENV /* Present in AIX 5.3 and up */
      (int(*)(struct vnode*,const char*,struct uio*,struct ucred*))
  	afs_gn_enosys,		/* vn_getea */
      (int(*)(struct vnode*,const char*,struct uio*,int,struct ucred*))
***************
*** 1771,1776 ****
--- 1776,1790 ----
  	afs_gn_enosys,		/* vn_getxacl */
      (int(*)(struct vnode *, uint64_t, acl_type_t, struct uio *, mode_t,  struct ucred *))
  	afs_gn_enosys,		/* vn_setxacl */
+ #else /* AFS_AIX53_ENV */
+     afs_gn_enosys,		/* vn_spare7 */
+     afs_gn_enosys,		/* vn_spare8 */
+     afs_gn_enosys,		/* vn_spare9 */
+     afs_gn_enosys,		/* vn_spareA */
+     afs_gn_enosys,		/* vn_spareB */
+     afs_gn_enosys,		/* vn_spareC */
+     afs_gn_enosys,		/* vn_spareD */
+ #endif /* AFS_AIX53_ENV */
      afs_gn_enosys,		/* vn_spareE */
      afs_gn_enosys		/* vn_spareF */
  #ifdef AFS_AIX51_ENV
***************
*** 2296,2303 ****
  }
  
  static
! vn_lockctl(struct vnode *a, offset_t b, struct eflock *c, int32long64_t d,
! 	   int (*e) (), ulong * f, struct ucred *g)
  {
      int glockOwner, ret;
  
--- 2310,2326 ----
  }
  
  static
! vn_lockctl(struct vnode *a,
! 	   offset_t b,
! 	   struct eflock *c,
! 	   int32long64_t d,
! 	   int (*e) (),
! #ifdef AFS_AIX52_ENV /* Changed in AIX 5.2 and up */
! 	       ulong * f, 
! #else /* AFS_AIX52_ENV */
! 	       ulong32int64_t * f,
! #endif /* AFS_AIX52_ENV */
! 	   struct ucred *g)
  {
      int glockOwner, ret;
  
***************
*** 2516,2521 ****
--- 2539,2545 ----
  	afs_gn_enosys,		/* vn_rdwr_attr */
      (int(*)(struct vnode*,int,void*,struct ucred*))
  	afs_gn_enosys,		/* vn_memcntl */
+ #ifdef AFS_AIX53_ENV /* Present in AIX 5.3 and up */
      (int(*)(struct vnode*,const char*,struct uio*,struct ucred*))
  	afs_gn_enosys,		/* vn_getea */
      (int(*)(struct vnode*,const char*,struct uio*,int,struct ucred*))
***************
*** 2530,2535 ****
--- 2554,2568 ----
  	afs_gn_enosys,		/* vn_getxacl */
      (int(*)(struct vnode *, uint64_t, acl_type_t, struct uio *, mode_t,  struct ucred *))
  	afs_gn_enosys,		/* vn_setxacl */
+ #else /* AFS_AIX53_ENV */
+     afs_gn_enosys,		/* vn_spare7 */
+     afs_gn_enosys,		/* vn_spare8 */
+     afs_gn_enosys,		/* vn_spare9 */
+     afs_gn_enosys,		/* vn_spareA */
+     afs_gn_enosys,		/* vn_spareB */
+     afs_gn_enosys,		/* vn_spareC */
+     afs_gn_enosys,		/* vn_spareD */
+ #endif /* AFS_AIX53_ENV */
      afs_gn_enosys,		/* vn_spareE */
      afs_gn_enosys		/* vn_spareF */
  #ifdef AFS_AIX51_ENV
Index: openafs/src/afs/DARWIN/osi_vm.c
diff -c openafs/src/afs/DARWIN/osi_vm.c:1.14.2.4 openafs/src/afs/DARWIN/osi_vm.c:1.14.2.5
*** openafs/src/afs/DARWIN/osi_vm.c:1.14.2.4	Wed Oct  5 01:58:29 2005
--- openafs/src/afs/DARWIN/osi_vm.c	Sat Jan 28 13:04:05 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/DARWIN/osi_vm.c,v 1.14.2.4 2005/10/05 05:58:29 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_vm.c,v 1.14.2.5 2006/01/28 18:04:05 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 41,46 ****
--- 41,48 ----
      kern_return_t kret;
      off_t size;
  
+     if (!vp)
+ 	return 0;
      AFS_GUNLOCK();
  #if 0
      if (!(UBCINFOMISSING(vp) || UBCINFORECLAIMED(vp))) {
Index: openafs/src/afs/DOC/afs_rwlocks
diff -c openafs/src/afs/DOC/afs_rwlocks:1.3 openafs/src/afs/DOC/afs_rwlocks:1.3.8.1
*** openafs/src/afs/DOC/afs_rwlocks:1.3	Wed Nov 21 11:01:22 2001
--- openafs/src/afs/DOC/afs_rwlocks	Thu Jan 26 11:04:49 2006
***************
*** 33,38 ****
--- 33,40 ----
  holding either of this lock, unless, as in afs_create, the cache entry
  is actually created while the afs_xvcache is held.
  
+ 6a. afs_xvreclaim. Protects the lookaside reclaim list. Locked inside xvcache in FlushReclaimedVcaches via NewVCache or the 1 min loop.
+ 
  7. afs_xvcb.  Volume callback lock.  Locked before afs_xserver in
  afs_RemoveVCB.
  
Index: openafs/src/afs/LINUX/osi_module.c
diff -c openafs/src/afs/LINUX/osi_module.c:1.52.2.20 openafs/src/afs/LINUX/osi_module.c:1.52.2.21
*** openafs/src/afs/LINUX/osi_module.c:1.52.2.20	Tue Nov  1 19:28:17 2005
--- openafs/src/afs/LINUX/osi_module.c	Mon Jan 30 13:19:38 2006
***************
*** 15,21 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_module.c,v 1.52.2.20 2005/11/02 00:28:17 shadow Exp $");
  
  #include &lt;linux/module.h&gt; /* early to avoid printf-&gt;printk mapping */
  #include "afs/sysincludes.h"
--- 15,21 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_module.c,v 1.52.2.21 2006/01/30 18:19:38 rra Exp $");
  
  #include &lt;linux/module.h&gt; /* early to avoid printf-&gt;printk mapping */
  #include "afs/sysincludes.h"
***************
*** 26,37 ****
--- 26,41 ----
  #ifdef AFS_AMD64_LINUX20_ENV
  #include &lt;asm/ia32_unistd.h&gt;
  #endif
+ #ifdef AFS_SPARC64_LINUX20_ENV
+ #include &lt;linux/ioctl32.h&gt;
+ #endif
  
  #include &lt;linux/proc_fs.h&gt;
  #include &lt;linux/slab.h&gt;
  #if LINUX_VERSION_CODE &gt;= KERNEL_VERSION(2,4,0)
  #include &lt;linux/init.h&gt;
  #include &lt;linux/sched.h&gt;
+ #include &lt;linux/kernel.h&gt;
  #endif
  
  #ifdef HAVE_KERNEL_LINUX_SEQ_FILE_H
***************
*** 283,311 ****
      if (cmd != VIOC_SYSCALL &amp;&amp; cmd != VIOC_SYSCALL32) return -EINVAL;
  
  #ifdef NEED_IOCTL32
  #ifdef AFS_SPARC64_LINUX24_ENV
      if (current-&gt;thread.flags &amp; SPARC_FLAG_32BIT)
  #elif defined(AFS_SPARC64_LINUX20_ENV)
      if (current-&gt;tss.flags &amp; SPARC_FLAG_32BIT)
  #elif defined(AFS_AMD64_LINUX20_ENV)
- #ifdef AFS_LINUX26_ENV
-     if (test_thread_flag(TIF_IA32))
- #else
      if (current-&gt;thread.flags &amp; THREAD_IA32)
- #endif
  #elif defined(AFS_PPC64_LINUX20_ENV)
- #ifdef AFS_PPC64_LINUX26_ENV
-     if (current-&gt;thread_info-&gt;flags &amp; _TIF_32BIT)
- #else /*Linux 2.6 */
      if (current-&gt;thread.flags &amp; PPC_FLAG_32BIT)
- #endif
- #elif defined(AFS_S390X_LINUX26_ENV)
-     if (test_thread_flag(TIF_31BIT))
  #elif defined(AFS_S390X_LINUX20_ENV)
      if (current-&gt;thread.flags &amp; S390_FLAG_31BIT)
  #else
  #error Not done for this linux type
! #endif
      {
  	if (copy_from_user(&amp;sysargs32, (void *)arg,
  			   sizeof(struct afsprocdata32)))
--- 287,313 ----
      if (cmd != VIOC_SYSCALL &amp;&amp; cmd != VIOC_SYSCALL32) return -EINVAL;
  
  #ifdef NEED_IOCTL32
+ #ifdef AFS_LINUX26_ENV 
+ #ifdef AFS_S390X_LINUX26_ENV
+     if (test_thread_flag(TIF_31BIT))
+ #else
+     if (test_thread_flag(TIF_32BIT))
+ #endif /* AFS_S390X_LINUX26_ENV */
+ #else
  #ifdef AFS_SPARC64_LINUX24_ENV
      if (current-&gt;thread.flags &amp; SPARC_FLAG_32BIT)
  #elif defined(AFS_SPARC64_LINUX20_ENV)
      if (current-&gt;tss.flags &amp; SPARC_FLAG_32BIT)
  #elif defined(AFS_AMD64_LINUX20_ENV)
      if (current-&gt;thread.flags &amp; THREAD_IA32)
  #elif defined(AFS_PPC64_LINUX20_ENV)
      if (current-&gt;thread.flags &amp; PPC_FLAG_32BIT)
  #elif defined(AFS_S390X_LINUX20_ENV)
      if (current-&gt;thread.flags &amp; S390_FLAG_31BIT)
  #else
  #error Not done for this linux type
! #endif /* AFS_LINUX26_ENV */
! #endif /* NEED_IOCTL32 */
      {
  	if (copy_from_user(&amp;sysargs32, (void *)arg,
  			   sizeof(struct afsprocdata32)))
Index: openafs/src/cf/linux-test1.m4
diff -c openafs/src/cf/linux-test1.m4:1.3.2.2 openafs/src/cf/linux-test1.m4:1.3.2.3
*** openafs/src/cf/linux-test1.m4:1.3.2.2	Wed Aug 10 15:23:19 2005
--- openafs/src/cf/linux-test1.m4	Thu Jan 26 10:58:35 2006
***************
*** 1,7 ****
  AC_DEFUN([LINUX_INODE_SETATTR_RETURN_TYPE],[
  AC_MSG_CHECKING(for inode_setattr return type)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_func_inode_setattr_returns_int,
  [
  AC_TRY_COMPILE(
--- 1,7 ----
  AC_DEFUN([LINUX_INODE_SETATTR_RETURN_TYPE],[
  AC_MSG_CHECKING(for inode_setattr return type)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_func_inode_setattr_returns_int,
  [
  AC_TRY_COMPILE(
***************
*** 18,24 ****
  AC_DEFUN([LINUX_WRITE_INODE_RETURN_TYPE],[
  AC_MSG_CHECKING(for write_inode return type)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_func_write_inode_returns_int,
  [
  AC_TRY_COMPILE(
--- 18,24 ----
  AC_DEFUN([LINUX_WRITE_INODE_RETURN_TYPE],[
  AC_MSG_CHECKING(for write_inode return type)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_func_write_inode_returns_int,
  [
  AC_TRY_COMPILE(
***************
*** 34,40 ****
  
  AC_DEFUN([LINUX_IOP_NAMEIDATA],[
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_MSG_CHECKING(whether inode_operations.create takes a nameidata)
  AC_CACHE_VAL(ac_cv_linux_func_i_create_takes_nameidata,
  [
--- 34,40 ----
  
  AC_DEFUN([LINUX_IOP_NAMEIDATA],[
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_MSG_CHECKING(whether inode_operations.create takes a nameidata)
  AC_CACHE_VAL(ac_cv_linux_func_i_create_takes_nameidata,
  [
***************
*** 102,108 ****
  
  AC_DEFUN([LINUX_AOP_WRITEBACK_CONTROL],[
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_MSG_CHECKING(whether address_space_operations.writepage takes a writeback_control)
  AC_CACHE_VAL(ac_cv_linux_func_a_writepage_takes_writeback_control,
  [
--- 102,108 ----
  
  AC_DEFUN([LINUX_AOP_WRITEBACK_CONTROL],[
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_MSG_CHECKING(whether address_space_operations.writepage takes a writeback_control)
  AC_CACHE_VAL(ac_cv_linux_func_a_writepage_takes_writeback_control,
  [
***************
*** 124,130 ****
  
  AC_DEFUN([LINUX_REFRIGERATOR],[
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_MSG_CHECKING(whether refrigerator takes PF_FREEZE)
  AC_CACHE_VAL(ac_cv_linux_func_refrigerator_takes_pf_freeze,
  [
--- 124,130 ----
  
  AC_DEFUN([LINUX_REFRIGERATOR],[
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_MSG_CHECKING(whether refrigerator takes PF_FREEZE)
  AC_CACHE_VAL(ac_cv_linux_func_refrigerator_takes_pf_freeze,
  [
Index: openafs/src/cf/linux-test2.m4
diff -c openafs/src/cf/linux-test2.m4:1.9.2.2 openafs/src/cf/linux-test2.m4:1.9.2.3
*** openafs/src/cf/linux-test2.m4:1.9.2.2	Fri Jul 29 10:49:51 2005
--- openafs/src/cf/linux-test2.m4	Thu Jan 26 10:58:35 2006
***************
*** 1,7 ****
  AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK], [
  AC_MSG_CHECKING(for gfp_mask in struct address_space)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_address_space_has_gfp_mask, 
  [
  AC_TRY_COMPILE(
--- 1,7 ----
  AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK], [
  AC_MSG_CHECKING(for gfp_mask in struct address_space)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_address_space_has_gfp_mask, 
  [
  AC_TRY_COMPILE(
***************
*** 16,22 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_BYTES], [
  AC_MSG_CHECKING(for i_bytes in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_bytes, 
  [
  AC_TRY_COMPILE(
--- 16,22 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_BYTES], [
  AC_MSG_CHECKING(for i_bytes in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_bytes, 
  [
  AC_TRY_COMPILE(
***************
*** 31,37 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM], [
  AC_MSG_CHECKING(for i_alloc_sem in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_alloc_sem,
  [
  AC_TRY_COMPILE(
--- 31,37 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM], [
  AC_MSG_CHECKING(for i_alloc_sem in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_alloc_sem,
  [
  AC_TRY_COMPILE(
***************
*** 46,52 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM], [
  AC_MSG_CHECKING(for i_truncate_sem in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_truncate_sem,
  [
  AC_TRY_COMPILE(
--- 46,52 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM], [
  AC_MSG_CHECKING(for i_truncate_sem in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_truncate_sem,
  [
  AC_TRY_COMPILE(
***************
*** 61,67 ****
  AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK], [
  AC_MSG_CHECKING(for page_lock in struct address_space)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_address_space_has_page_lock, 
  [
  AC_TRY_COMPILE(
--- 61,67 ----
  AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK], [
  AC_MSG_CHECKING(for page_lock in struct address_space)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_address_space_has_page_lock, 
  [
  AC_TRY_COMPILE(
Index: openafs/src/cf/linux-test3.m4
diff -c openafs/src/cf/linux-test3.m4:1.8.2.8 openafs/src/cf/linux-test3.m4:1.8.2.9
*** openafs/src/cf/linux-test3.m4:1.8.2.8	Mon Jul 11 15:41:27 2005
--- openafs/src/cf/linux-test3.m4	Thu Jan 26 10:58:35 2006
***************
*** 85,91 ****
  AC_DEFUN([LINUX_KERNEL_SOCK_CREATE],[
  AC_MSG_CHECKING(for 5th argument in sock_create found in some SELinux kernels)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_kernel_sock_create_v,
  [
  AC_TRY_COMPILE(
--- 85,91 ----
  AC_DEFUN([LINUX_KERNEL_SOCK_CREATE],[
  AC_MSG_CHECKING(for 5th argument in sock_create found in some SELinux kernels)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -D__KERNEL__ -DKBUILD_BASENAME=\\"libafs\\" $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_kernel_sock_create_v,
  [
  AC_TRY_COMPILE(
***************
*** 101,107 ****
  AC_DEFUN([LINUX_KERNEL_PAGE_FOLLOW_LINK],[
  AC_MSG_CHECKING(for page_follow_link_light vs page_follow_link)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-default -Werror-implicit-function-declaration -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_kernel_page_follow_link,
  [
  AC_TRY_COMPILE(
--- 101,107 ----
  AC_DEFUN([LINUX_KERNEL_PAGE_FOLLOW_LINK],[
  AC_MSG_CHECKING(for page_follow_link_light vs page_follow_link)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-default -Werror-implicit-function-declaration -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_kernel_page_follow_link,
  [
  AC_TRY_COMPILE(
Index: openafs/src/cf/linux-test4.m4
diff -c openafs/src/cf/linux-test4.m4:1.20.2.7 openafs/src/cf/linux-test4.m4:1.20.2.8
*** openafs/src/cf/linux-test4.m4:1.20.2.7	Mon Jul 11 15:30:01 2005
--- openafs/src/cf/linux-test4.m4	Thu Jan 26 10:58:35 2006
***************
*** 1,7 ****
  AC_DEFUN([LINUX_COMPLETION_H_EXISTS], [
  AC_MSG_CHECKING(for linux/completion.h existance)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_completion_h_exists,
  [
  AC_TRY_COMPILE(
--- 1,7 ----
  AC_DEFUN([LINUX_COMPLETION_H_EXISTS], [
  AC_MSG_CHECKING(for linux/completion.h existance)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_completion_h_exists,
  [
  AC_TRY_COMPILE(
***************
*** 21,27 ****
  AC_DEFUN([LINUX_DEFINES_FOR_EACH_PROCESS], [
  AC_MSG_CHECKING(for defined for_each_process)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_defines_for_each_process,
  [
  AC_TRY_COMPILE(
--- 21,27 ----
  AC_DEFUN([LINUX_DEFINES_FOR_EACH_PROCESS], [
  AC_MSG_CHECKING(for defined for_each_process)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_defines_for_each_process,
  [
  AC_TRY_COMPILE(
***************
*** 38,44 ****
  AC_DEFUN([LINUX_DEFINES_PREV_TASK], [
  AC_MSG_CHECKING(for defined prev_task)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_defines_prev_task,
  [
  AC_TRY_COMPILE(
--- 38,44 ----
  AC_DEFUN([LINUX_DEFINES_PREV_TASK], [
  AC_MSG_CHECKING(for defined prev_task)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_defines_prev_task,
  [
  AC_TRY_COMPILE(
***************
*** 55,61 ****
  AC_DEFUN([LINUX_EXPORTS_INIT_MM], [
  AC_MSG_CHECKING(for exported init_mm)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_init_mm,
  [
  AC_TRY_COMPILE(
--- 55,61 ----
  AC_DEFUN([LINUX_EXPORTS_INIT_MM], [
  AC_MSG_CHECKING(for exported init_mm)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_init_mm,
  [
  AC_TRY_COMPILE(
***************
*** 72,78 ****
  AC_DEFUN([LINUX_EXPORTS_KALLSYMS_ADDRESS], [
  AC_MSG_CHECKING(for exported kallsyms_address_to_symbol)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_kallsyms_address,
  [
  AC_TRY_COMPILE(
--- 72,78 ----
  AC_DEFUN([LINUX_EXPORTS_KALLSYMS_ADDRESS], [
  AC_MSG_CHECKING(for exported kallsyms_address_to_symbol)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_kallsyms_address,
  [
  AC_TRY_COMPILE(
***************
*** 89,95 ****
  AC_DEFUN([LINUX_EXPORTS_KALLSYMS_SYMBOL], [
  AC_MSG_CHECKING(for exported kallsyms_symbol_to_address)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_kallsyms_symbol,
  [
  AC_TRY_COMPILE(
--- 89,95 ----
  AC_DEFUN([LINUX_EXPORTS_KALLSYMS_SYMBOL], [
  AC_MSG_CHECKING(for exported kallsyms_symbol_to_address)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_kallsyms_symbol,
  [
  AC_TRY_COMPILE(
***************
*** 106,112 ****
  AC_DEFUN([LINUX_EXPORTS_SYS_CALL_TABLE], [
  AC_MSG_CHECKING(for exported sys_call_table)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_sys_call_table,
  [
  AC_TRY_COMPILE(
--- 106,112 ----
  AC_DEFUN([LINUX_EXPORTS_SYS_CALL_TABLE], [
  AC_MSG_CHECKING(for exported sys_call_table)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_sys_call_table,
  [
  AC_TRY_COMPILE(
***************
*** 123,129 ****
  AC_DEFUN([LINUX_EXPORTS_IA32_SYS_CALL_TABLE], [
  AC_MSG_CHECKING(for exported ia32_sys_call_table)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_ia32_sys_call_table,
  [
  AC_TRY_COMPILE(
--- 123,129 ----
  AC_DEFUN([LINUX_EXPORTS_IA32_SYS_CALL_TABLE], [
  AC_MSG_CHECKING(for exported ia32_sys_call_table)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_ia32_sys_call_table,
  [
  AC_TRY_COMPILE(
***************
*** 140,146 ****
  AC_DEFUN([LINUX_EXPORTS_SYS_CHDIR], [
  AC_MSG_CHECKING(for exported sys_chdir)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_sys_chdir,
  [
  AC_TRY_COMPILE(
--- 140,146 ----
  AC_DEFUN([LINUX_EXPORTS_SYS_CHDIR], [
  AC_MSG_CHECKING(for exported sys_chdir)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_sys_chdir,
  [
  AC_TRY_COMPILE(
***************
*** 157,163 ****
  AC_DEFUN([LINUX_EXPORTS_SYS_CLOSE], [
  AC_MSG_CHECKING(for exported sys_close)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_sys_close,
  [
  AC_TRY_COMPILE(
--- 157,163 ----
  AC_DEFUN([LINUX_EXPORTS_SYS_CLOSE], [
  AC_MSG_CHECKING(for exported sys_close)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_sys_close,
  [
  AC_TRY_COMPILE(
***************
*** 174,180 ****
  AC_DEFUN([LINUX_EXPORTS_SYS_WAIT4], [
  AC_MSG_CHECKING(for exported sys_wait4)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_sys_wait4,
  [
  AC_TRY_COMPILE(
--- 174,180 ----
  AC_DEFUN([LINUX_EXPORTS_SYS_WAIT4], [
  AC_MSG_CHECKING(for exported sys_wait4)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_exports_sys_wait4,
  [
  AC_TRY_COMPILE(
***************
*** 191,197 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_CDEV], [
  AC_MSG_CHECKING(for i_cdev in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_cdev, 
  [
  AC_TRY_COMPILE(
--- 191,197 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_CDEV], [
  AC_MSG_CHECKING(for i_cdev in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_cdev, 
  [
  AC_TRY_COMPILE(
***************
*** 207,213 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DEVICES], [
  AC_MSG_CHECKING(for i_devices in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_cdev, 
  [
  AC_TRY_COMPILE(
--- 207,213 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DEVICES], [
  AC_MSG_CHECKING(for i_devices in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_cdev, 
  [
  AC_TRY_COMPILE(
***************
*** 223,229 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS], [
  AC_MSG_CHECKING(for i_dirty_data_buffers in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_dirty_data_buffers, 
  [
  AC_TRY_COMPILE(
--- 223,229 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS], [
  AC_MSG_CHECKING(for i_dirty_data_buffers in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_dirty_data_buffers, 
  [
  AC_TRY_COMPILE(
***************
*** 239,245 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_INOTIFY_LOCK], [
  AC_MSG_CHECKING(for inotify_lock in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_inotify_lock, 
  [
  AC_TRY_COMPILE(
--- 239,245 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_INOTIFY_LOCK], [
  AC_MSG_CHECKING(for inotify_lock in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_inotify_lock, 
  [
  AC_TRY_COMPILE(
***************
*** 254,260 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_INOTIFY_SEM], [
  AC_MSG_CHECKING(for inotify_sem in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_inotify_sem, 
  [
  AC_TRY_COMPILE(
--- 254,260 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_INOTIFY_SEM], [
  AC_MSG_CHECKING(for inotify_sem in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_inotify_sem, 
  [
  AC_TRY_COMPILE(
***************
*** 270,276 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MAPPING_OVERLOAD], [
  AC_MSG_CHECKING(for i_mapping_overload in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_mapping_overload, 
  [
  AC_TRY_COMPILE(
--- 270,276 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MAPPING_OVERLOAD], [
  AC_MSG_CHECKING(for i_mapping_overload in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_mapping_overload, 
  [
  AC_TRY_COMPILE(
***************
*** 286,292 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MMAP_SHARED], [
  AC_MSG_CHECKING(for i_mmap_shared in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_mmap_shared,
  [
  AC_TRY_COMPILE(
--- 286,292 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MMAP_SHARED], [
  AC_MSG_CHECKING(for i_mmap_shared in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_mmap_shared,
  [
  AC_TRY_COMPILE(
***************
*** 302,308 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_SECURITY], [
  AC_MSG_CHECKING(for i_security in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_security, 
  [
  AC_TRY_COMPILE(
--- 302,308 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_SECURITY], [
  AC_MSG_CHECKING(for i_security in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_security, 
  [
  AC_TRY_COMPILE(
***************
*** 318,324 ****
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_SB_LIST], [
  AC_MSG_CHECKING(for i_sb_list in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_sb_list, 
  [
  AC_TRY_COMPILE(
--- 318,324 ----
  AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_SB_LIST], [
  AC_MSG_CHECKING(for i_sb_list in struct inode)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_sb_list, 
  [
  AC_TRY_COMPILE(
***************
*** 334,340 ****
  AC_DEFUN([LINUX_RECALC_SIGPENDING_ARG_TYPE],[
  AC_MSG_CHECKING(for recalc_sigpending arg type)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_func_recalc_sigpending_takes_void,
  [
  AC_TRY_COMPILE(
--- 334,340 ----
  AC_DEFUN([LINUX_RECALC_SIGPENDING_ARG_TYPE],[
  AC_MSG_CHECKING(for recalc_sigpending arg type)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_func_recalc_sigpending_takes_void,
  [
  AC_TRY_COMPILE(
***************
*** 349,355 ****
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT], [
  AC_MSG_CHECKING(for parent in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_parent,
  [
  AC_TRY_COMPILE(
--- 349,355 ----
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT], [
  AC_MSG_CHECKING(for parent in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_parent,
  [
  AC_TRY_COMPILE(
***************
*** 365,371 ****
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_REAL_PARENT], [
  AC_MSG_CHECKING(for real_parent in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_real_parent,
  [
  AC_TRY_COMPILE(
--- 365,371 ----
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_REAL_PARENT], [
  AC_MSG_CHECKING(for real_parent in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_real_parent,
  [
  AC_TRY_COMPILE(
***************
*** 381,387 ****
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIG], [
  AC_MSG_CHECKING(for sig in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_sig,
  [
  AC_TRY_COMPILE(
--- 381,387 ----
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIG], [
  AC_MSG_CHECKING(for sig in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_sig,
  [
  AC_TRY_COMPILE(
***************
*** 396,402 ****
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK], [
  AC_MSG_CHECKING(for sigmask_lock in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_sigmask_lock,
  [
  AC_TRY_COMPILE(
--- 396,402 ----
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK], [
  AC_MSG_CHECKING(for sigmask_lock in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_sigmask_lock,
  [
  AC_TRY_COMPILE(
***************
*** 411,417 ****
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGHAND], [
  AC_MSG_CHECKING(for sighand in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_sighand,
  [
  AC_TRY_COMPILE(
--- 411,417 ----
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGHAND], [
  AC_MSG_CHECKING(for sighand in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_sighand,
  [
  AC_TRY_COMPILE(
***************
*** 426,432 ****
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_RLIM], [
  AC_MSG_CHECKING(for rlim in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_rlim,
  [
  AC_TRY_COMPILE(
--- 426,432 ----
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_RLIM], [
  AC_MSG_CHECKING(for rlim in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_rlim,
  [
  AC_TRY_COMPILE(
***************
*** 441,447 ****
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGNAL_RLIM], [
  AC_MSG_CHECKING(for signal-&gt;rlim in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_signal_rlim,
  [
  AC_TRY_COMPILE(
--- 441,447 ----
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGNAL_RLIM], [
  AC_MSG_CHECKING(for signal-&gt;rlim in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_signal_rlim,
  [
  AC_TRY_COMPILE(
***************
*** 456,462 ****
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_EXIT_STATE], [
  AC_MSG_CHECKING(for exit_state in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_exit_state,
  [
  AC_TRY_COMPILE(
--- 456,462 ----
  AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_EXIT_STATE], [
  AC_MSG_CHECKING(for exit_state in struct task_struct)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_sched_struct_task_struct_has_exit_state,
  [
  AC_TRY_COMPILE(
***************
*** 471,477 ****
  AC_DEFUN([LINUX_FS_STRUCT_SUPER_HAS_ALLOC_INODE], [
  AC_MSG_CHECKING(for alloc_inode in struct super_operations)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_super_has_alloc_inode, 
  [
  AC_TRY_COMPILE(
--- 471,477 ----
  AC_DEFUN([LINUX_FS_STRUCT_SUPER_HAS_ALLOC_INODE], [
  AC_MSG_CHECKING(for alloc_inode in struct super_operations)
  save_CPPFLAGS="$CPPFLAGS"
! CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -DKBUILD_BASENAME=\"libafs\" -D__KERNEL__ $CPPFLAGS"
  AC_CACHE_VAL(ac_cv_linux_fs_struct_super_has_alloc_inode, 
  [
  AC_TRY_COMPILE(
Index: openafs/src/cf/osconf.m4
diff -c openafs/src/cf/osconf.m4:1.51.2.22 openafs/src/cf/osconf.m4:1.51.2.24
*** openafs/src/cf/osconf.m4:1.51.2.22	Thu Dec  1 00:16:31 2005
--- openafs/src/cf/osconf.m4	Mon Jan 30 13:20:46 2006
***************
*** 643,662 ****
  		SHLIB_LINKER="${CC} -shared"
  		;;
  
! 	sparc64_linux22)
! 		KERN_OPTMZ=-O2
! 		LEX="flex -l"
! 		MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
! 		MT_LIBS="-lpthread"
! 		PAM_CFLAGS="-O2 -Dlinux -DLINUX_PAM -fPIC"
! 		SHLIB_LDFLAGS="-shared -Xlinker -x"
! 		TXLIBS="-lncurses"
! 		XCFLAGS="-O2 -D_LARGEFILE64_SOURCE"
! 		YACC="bison -y"
! 		SHLIB_LINKER="${MT_CC} -shared"
! 		;;
! 
! 	sparc64_linux24)
  		KERN_OPTMZ=-O2
  		LEX="flex -l"
  		MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
--- 643,649 ----
  		SHLIB_LINKER="${CC} -shared"
  		;;
  
! 	sparc64_linux*)
  		KERN_OPTMZ=-O2
  		LEX="flex -l"
  		MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
***************
*** 665,670 ****
--- 652,659 ----
  		SHLIB_LDFLAGS="-shared -Xlinker -x"
  		TXLIBS="-lncurses"
  		XCFLAGS="-O2 -D_LARGEFILE64_SOURCE"
+ 		XCFLAGS64="-O2 -D_LARGEFILE64_SOURCE -m64"
+ 		XLDFLAGS64="-m64"
  		YACC="bison -y"
  		SHLIB_LINKER="${MT_CC} -shared"
  		;;
Index: openafs/src/config/param.ppc_darwin_80.h
diff -c openafs/src/config/param.ppc_darwin_80.h:1.1.2.2 openafs/src/config/param.ppc_darwin_80.h:1.1.2.3
*** openafs/src/config/param.ppc_darwin_80.h:1.1.2.2	Wed Oct  5 01:58:34 2005
--- openafs/src/config/param.ppc_darwin_80.h	Sat Jan 28 14:22:31 2006
***************
*** 95,100 ****
--- 95,101 ----
  #define AFS_NONFSTRANS
  #define AFS_SYSCALL             230
  #define DARWIN_REFBASE 0
+ #define AFS_DISABLE_BKG 1
  
  /* File system entry (used if mount.h doesn't define MOUNT_AFS */
  #define AFS_MOUNT_AFS    "afs"
Index: openafs/src/config/param.sparc64_linux26.h
diff -c openafs/src/config/param.sparc64_linux26.h:1.1.4.2 openafs/src/config/param.sparc64_linux26.h:1.1.4.3
*** openafs/src/config/param.sparc64_linux26.h:1.1.4.2	Mon May 23 17:16:10 2005
--- openafs/src/config/param.sparc64_linux26.h	Mon Jan 30 13:19:39 2006
***************
*** 59,66 ****
  #define CONFIG_SMP 1
  #endif
  #define __SMP__
- #define AFS_GLOBAL_SUNLOCK
  #endif
  
  #endif /* __KERNEL__  &amp;&amp; !DUMP_KERNEL */
  #include &lt;afs/afs_sysnames.h&gt;
--- 59,66 ----
  #define CONFIG_SMP 1
  #endif
  #define __SMP__
  #endif
+ #define AFS_GLOBAL_SUNLOCK
  
  #endif /* __KERNEL__  &amp;&amp; !DUMP_KERNEL */
  #include &lt;afs/afs_sysnames.h&gt;
Index: openafs/src/packaging/MacOS/OpenAFS.info
diff -c openafs/src/packaging/MacOS/OpenAFS.info:1.1.4.25 openafs/src/packaging/MacOS/OpenAFS.info:1.1.4.26
*** openafs/src/packaging/MacOS/OpenAFS.info:1.1.4.25	Fri Jan 20 01:32:23 2006
--- openafs/src/packaging/MacOS/OpenAFS.info	Wed Feb  1 23:37:47 2006
***************
*** 1,5 ****
  Title OpenAFS
! Version 1.4.1-rc5
  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-rc6
  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_packet.c
diff -c openafs/src/rx/rx_packet.c:1.35.2.23 openafs/src/rx/rx_packet.c:1.35.2.24
*** openafs/src/rx/rx_packet.c:1.35.2.23	Mon Jan 16 11:23:33 2006
--- openafs/src/rx/rx_packet.c	Thu Jan 26 15:58:47 2006
***************
*** 15,21 ****
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_packet.c,v 1.35.2.23 2006/01/16 16:23:33 jaltman Exp $");
  
  #ifdef KERNEL
  #if defined(UKERNEL)
--- 15,21 ----
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_packet.c,v 1.35.2.24 2006/01/26 20:58:47 shadow Exp $");
  
  #ifdef KERNEL
  #if defined(UKERNEL)
***************
*** 71,76 ****
--- 71,77 ----
  #include &lt;sys/socket.h&gt;
  #include &lt;netinet/in.h&gt;
  #endif /* AFS_NT40_ENV */
+ #include "rx_user.h"
  #include "rx_xmit_nt.h"
  #include &lt;stdlib.h&gt;
  #else
***************
*** 1349,1355 ****
   * the data length of the packet is stored in the packet structure.
   * The header is decoded. */
  int
! rxi_ReadPacket(int socket, register struct rx_packet *p, afs_uint32 * host,
  	       u_short * port)
  {
      struct sockaddr_in from;
--- 1350,1356 ----
   * the data length of the packet is stored in the packet structure.
   * The header is decoded. */
  int
! rxi_ReadPacket(osi_socket socket, register struct rx_packet *p, afs_uint32 * host,
  	       u_short * port)
  {
      struct sockaddr_in from;
Index: openafs/src/rx/rx_prototypes.h
diff -c openafs/src/rx/rx_prototypes.h:1.14.2.13 openafs/src/rx/rx_prototypes.h:1.14.2.14
*** openafs/src/rx/rx_prototypes.h:1.14.2.13	Tue Oct 25 02:37:13 2005
--- openafs/src/rx/rx_prototypes.h	Thu Jan 26 16:03:11 2006
***************
*** 238,247 ****
  /* old style till varargs */
  #if 0
  void
!   rxi_DebugPrint(char *format, int a1, int a2, int a3, int a4, int a5, int a6,
! 		 int a7, int a8, int a9, int a10, int a11, int a12, int a13,
! 		 int a14, int a15);
  #else
  void rxi_DebugPrint();
  #endif
  
--- 238,250 ----
  /* old style till varargs */
  #if 0
  void
! rxi_DebugPrint(char *format, int a1, int a2, int a3, int a4, int a5, int a6,
!                int a7, int a8, int a9, int a10, int a11, int a12, int a13,
! 	       int a14, int a15);
! void
! rxi_DebugInit(void);
  #else
+ void rxi_DebugInit();
  void rxi_DebugPrint();
  #endif
  
***************
*** 407,413 ****
  extern void rxi_StartListener(void);
  extern void rx_ServerProc(void);
  extern int rxi_Listen(osi_socket sock);
! extern int rxi_Recvmsg(int socket, struct msghdr *msg_p, int flags);
  extern int rxi_Sendmsg(osi_socket socket, struct msghdr *msg_p, int flags);
  
  
--- 410,416 ----
  extern void rxi_StartListener(void);
  extern void rx_ServerProc(void);
  extern int rxi_Listen(osi_socket sock);
! extern int rxi_Recvmsg(osi_socket socket, struct msghdr *msg_p, int flags);
  extern int rxi_Sendmsg(osi_socket socket, struct msghdr *msg_p, int flags);
  
  
***************
*** 462,468 ****
  extern int rxi_FreePackets(int num_pkts, struct rx_queue *q);
  extern struct rx_packet *rxi_AllocSendPacket(register struct rx_call *call,
  					     int want);
! extern int rxi_ReadPacket(int socket, register struct rx_packet *p,
  			  afs_uint32 * host, u_short * port);
  extern struct rx_packet *rxi_SplitJumboPacket(register struct rx_packet *p,
  					      afs_int32 host, short port,
--- 465,471 ----
  extern int rxi_FreePackets(int num_pkts, struct rx_queue *q);
  extern struct rx_packet *rxi_AllocSendPacket(register struct rx_call *call,
  					     int want);
! extern int rxi_ReadPacket(osi_socket socket, register struct rx_packet *p,
  			  afs_uint32 * host, u_short * port);
  extern struct rx_packet *rxi_SplitJumboPacket(register struct rx_packet *p,
  					      afs_int32 host, short port,
***************
*** 512,518 ****
  extern void rx_ServerProc(void);
  extern void rxi_StartListener(void);
  extern int rxi_Listen(osi_socket sock);
! extern int rxi_Recvmsg(int socket, struct msghdr *msg_p, int flags);
  extern int rxi_Sendmsg(osi_socket socket, struct msghdr *msg_p, int flags);
  
  
--- 515,521 ----
  extern void rx_ServerProc(void);
  extern void rxi_StartListener(void);
  extern int rxi_Listen(osi_socket sock);
! extern int rxi_Recvmsg(osi_socket socket, struct msghdr *msg_p, int flags);
  extern int rxi_Sendmsg(osi_socket socket, struct msghdr *msg_p, int flags);
  
  
Index: openafs/src/rx/UKERNEL/rx_knet.c
diff -c openafs/src/rx/UKERNEL/rx_knet.c:1.10.2.1 openafs/src/rx/UKERNEL/rx_knet.c:1.10.2.3
*** openafs/src/rx/UKERNEL/rx_knet.c:1.10.2.1	Fri Apr 15 14:37:20 2005
--- openafs/src/rx/UKERNEL/rx_knet.c	Thu Jan 26 15:55:38 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/UKERNEL/rx_knet.c,v 1.10.2.1 2005/04/15 18:37:20 shadow Exp $");
  
  #include "rx/rx_kcommon.h"
  
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/UKERNEL/rx_knet.c,v 1.10.2.3 2006/01/26 20:55:38 shadow Exp $");
  
  #include "rx/rx_kcommon.h"
  
***************
*** 76,82 ****
      while (1) {
  	tp = rxi_AllocPacket(RX_PACKET_CLASS_RECEIVE);
  	usr_assert(tp != NULL);
! 	rc = rxi_ReadPacket(usockp-&gt;sock, tp, &amp;host, &amp;port);
  	if (rc != 0) {
  	    tp = rxi_ReceivePacket(tp, usockp, host, port, tnop, newcallp);
  	    if (newcallp &amp;&amp; *newcallp) {
--- 76,82 ----
      while (1) {
  	tp = rxi_AllocPacket(RX_PACKET_CLASS_RECEIVE);
  	usr_assert(tp != NULL);
! 	rc = rxi_ReadPacket(usockp, tp, &amp;host, &amp;port);
  	if (rc != 0) {
  	    tp = rxi_ReceivePacket(tp, usockp, host, port, tnop, newcallp);
  	    if (newcallp &amp;&amp; *newcallp) {
***************
*** 331,341 ****
   *
   */
  int
! rxi_Recvmsg(int socket, struct msghdr *msg_p, int flags)
  {
      int ret;
      do {
! 	ret = recvmsg(socket, msg_p, flags);
      } while (ret == -1 &amp;&amp; errno == EAGAIN);
      return ret;
  }
--- 331,341 ----
   *
   */
  int
! rxi_Recvmsg(osi_socket socket, struct msghdr *msg_p, int flags)
  {
      int ret;
      do {
! 	ret = recvmsg(socket-&gt;sock, msg_p, flags);
      } while (ret == -1 &amp;&amp; errno == EAGAIN);
      return ret;
  }
Index: openafs/src/viced/afsfileprocs.c
diff -c openafs/src/viced/afsfileprocs.c:1.81.2.13 openafs/src/viced/afsfileprocs.c:1.81.2.14
*** openafs/src/viced/afsfileprocs.c:1.81.2.13	Thu Oct 20 19:33:00 2005
--- openafs/src/viced/afsfileprocs.c	Wed Feb  1 10:59:43 2006
***************
*** 29,35 ****
  #include &lt;afs/param.h&gt;
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.81.2.13 2005/10/20 23:33:00 jaltman Exp $");
  
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
--- 29,35 ----
  #include &lt;afs/param.h&gt;
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.81.2.14 2006/02/01 15:59:43 shadow Exp $");
  
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
***************
*** 344,350 ****
  
      thost = tclient-&gt;host;
      tclient-&gt;LastCall = thost-&gt;LastCall = FT_ApproxTime();
!     if (activecall)		/* For all but "GetTime" calls */
  	thost-&gt;ActiveCall = thost-&gt;LastCall;
  
      h_Lock_r(thost);
--- 344,350 ----
  
      thost = tclient-&gt;host;
      tclient-&gt;LastCall = thost-&gt;LastCall = FT_ApproxTime();
!     if (activecall)		/* For all but "GetTime", "GetStats", and "GetCaps" calls */
  	thost-&gt;ActiveCall = thost-&gt;LastCall;
  
      h_Lock_r(thost);
***************
*** 6039,6053 ****
--- 6039,6098 ----
  afs_int32
  SRXAFS_GetCapabilities(struct rx_call * acall, Capabilities * capabilities)
  {
+     afs_int32 code;
+     struct rx_connection *tcon;
      afs_int32 *dataBuffP;
      afs_int32 dataBytes;
+ #if FS_STATS_DETAILED
+     struct fs_stats_opTimingData *opP;	/* Ptr to this op's timing struct */
+     struct timeval opStartTime, opStopTime;	/* Start/stop times for RPC op */
+     struct timeval elapsedTime;	/* Transfer time */
+ 
+     /*
+      * Set our stats pointer, remember when the RPC operation started, and
+      * tally the operation.
+      */
+     opP = &amp;(afs_FullPerfStats.det.rpcOpTimes[FS_STATS_RPCIDX_GETCAPABILITIES]);
+     FS_LOCK;
+     (opP-&gt;numOps)++;
+     FS_UNLOCK;
+     TM_GetTimeOfDay(&amp;opStartTime, 0);
+ #endif /* FS_STATS_DETAILED */
+ 
+     if ((code = CallPreamble(acall, NOTACTIVECALL, &amp;tcon)))
+ 	goto Bad_GetCaps;
  
+     FS_LOCK;
+     AFSCallStats.GetCapabilities++, AFSCallStats.TotalCalls++;
+     FS_UNLOCK;
      dataBytes = 1 * sizeof(afs_int32);
      dataBuffP = (afs_int32 *) malloc(dataBytes);
      dataBuffP[0] = CAPABILITY_ERRORTRANS;
      capabilities-&gt;Capabilities_len = dataBytes / sizeof(afs_int32);
      capabilities-&gt;Capabilities_val = dataBuffP;
  
+     ViceLog(2, ("SAFS_GetCapabilties\n"));
+ 
+   Bad_GetCaps:
+     code = CallPostamble(tcon, code);
+ 
+ #if FS_STATS_DETAILED
+     TM_GetTimeOfDay(&amp;opStopTime, 0);
+     fs_stats_GetDiff(elapsedTime, opStartTime, opStopTime);
+     if (code == 0) {
+ 	FS_LOCK;
+ 	(opP-&gt;numSuccesses)++;
+ 	fs_stats_AddTo((opP-&gt;sumTime), elapsedTime);
+ 	fs_stats_SquareAddTo((opP-&gt;sqrTime), elapsedTime);
+ 	if (fs_stats_TimeLessThan(elapsedTime, (opP-&gt;minTime))) {
+ 	    fs_stats_TimeAssign((opP-&gt;minTime), elapsedTime);
+ 	}
+ 	if (fs_stats_TimeGreaterThan(elapsedTime, (opP-&gt;maxTime))) {
+ 	    fs_stats_TimeAssign((opP-&gt;maxTime), elapsedTime);
+ 	}
+ 	FS_UNLOCK;
+     }
+ #endif /* FS_STATS_DETAILED */
      return 0;
  }
  
Index: openafs/src/viced/callback.c
diff -c openafs/src/viced/callback.c:1.55.2.12 openafs/src/viced/callback.c:1.55.2.13
*** openafs/src/viced/callback.c:1.55.2.12	Fri Dec 16 08:29:38 2005
--- openafs/src/viced/callback.c	Wed Feb  1 10:59:43 2006
***************
*** 83,89 ****
  #include &lt;afs/param.h&gt;
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/callback.c,v 1.55.2.12 2005/12/16 13:29:38 shadow Exp $");
  
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;		/* for malloc() */
--- 83,89 ----
  #include &lt;afs/param.h&gt;
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/callback.c,v 1.55.2.13 2006/02/01 15:59:43 shadow Exp $");
  
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;		/* for malloc() */
***************
*** 1575,1589 ****
      return held;
  }
  
  /* This could be upgraded to get more space each time */
! /* first pass: find the oldest host which isn't held by anyone */
! /* second pass: find the oldest host who isn't "me" */
  /* always called with hostp unlocked */
  extern struct host *hostList;
  static int
  GetSomeSpace_r(struct host *hostp, int locked)
  {
!     register struct host *hp, *hp1 = (struct host *)0, *hp2 = hostList;
      int i = 0;
  
      cbstuff.GotSomeSpaces++;
--- 1575,1643 ----
      return held;
  }
  
+ /* This version does not allow 'host' to be selected unless its ActiveCall 
+  * is newer than 'hostp' which is the host with the oldest ActiveCall from
+  * the last pass (if it is provided).  We filter out any hosts that are
+  * are held by other threads.
+  */
+ static int
+ lih0_r(register struct host *host, register int held,
+       register struct host *hostp)
+ {
+     if (host-&gt;cblist
+ 	&amp;&amp; (hostp &amp;&amp; host != hostp) 
+ 	&amp;&amp; (!held &amp;&amp; !h_OtherHolds_r(host))
+ 	&amp;&amp; (!lih_host || host-&gt;ActiveCall &lt; lih_host-&gt;ActiveCall) 
+ 	&amp;&amp; (!hostp || host-&gt;ActiveCall &gt; hostp-&gt;ActiveCall)) {
+ 	if (lih_host != NULL &amp;&amp; lih_host_held) {
+ 	    h_Release_r(lih_host);
+ 	}
+ 	lih_host = host;
+ 	lih_host_held = !held;
+ 	held = 1;
+     }
+     return held;
+ }
+ 
+ /* This version does not allow 'host' to be selected unless its ActiveCall 
+  * is newer than 'hostp' which is the host with the oldest ActiveCall from
+  * the last pass (if it is provided).  In this second varient, we do not 
+  * prevent held hosts from being selected.
+  */
+ static int
+ lih1_r(register struct host *host, register int held,
+       register struct host *hostp)
+ {
+     if (host-&gt;cblist
+ 	&amp;&amp; (hostp &amp;&amp; host != hostp) 
+ 	&amp;&amp; (!lih_host || host-&gt;ActiveCall &lt; lih_host-&gt;ActiveCall) 
+ 	&amp;&amp; (!hostp || host-&gt;ActiveCall &gt; hostp-&gt;ActiveCall)) {
+ 	if (lih_host != NULL &amp;&amp; lih_host_held) {
+ 	    h_Release_r(lih_host);
+ 	}
+ 	lih_host = host;
+ 	lih_host_held = !held;
+ 	held = 1;
+     }
+     return held;
+ }
+ 
  /* This could be upgraded to get more space each time */
! /* first pass: sequentially find the oldest host which isn't held by
!                anyone for which we can clear callbacks;
! 	       skipping 'hostp' */
! /* second pass: sequentially find the oldest host regardless of 
!                whether or not the host is held; skipping 'hostp' */
! /* third pass: attempt to clear callbacks from 'hostp' */
  /* always called with hostp unlocked */
+ 
+ /* Note: hostlist is ordered most recently created host first and 
+  * its order has no relationship to the most recently used. */
  extern struct host *hostList;
  static int
  GetSomeSpace_r(struct host *hostp, int locked)
  {
!     register struct host *hp, *hp1, *hp2;
      int i = 0;
  
      cbstuff.GotSomeSpaces++;
***************
*** 1593,1621 ****
  	cbstuff.GSS3++;
  	return 0;
      }
      do {
  	lih_host = 0;
! 	h_Enumerate_r(lih_r, hp2, (char *)hp1);
  	hp = lih_host;
  	if (hp) {
  	    /* set in lih_r! private copy before giving up H_LOCK */
  	    int lih_host_held2=lih_host_held;   
  	    cbstuff.GSS4++;
! 	    if (!ClearHostCallbacks_r(hp, 0 /* not locked or held */ )) {
  		if (lih_host_held2)
  		    h_Release_r(hp);
  		return 0;
  	    }
  	    if (lih_host_held2)
  		h_Release_r(hp);
! 	    hp2 = hp-&gt;next;
! 	} else {
  	    hp2 = hostList;
! 	    hp1 = hostp;
! 	    cbstuff.GSS1++;
! 	    ViceLog(5,
! 		    ("GSS: Try harder for longest inactive host cnt= %d\n",
! 		     i));
  	    /*
  	     * Next time try getting callbacks from any host even if
  	     * it's deleted (that's actually great since we can freely
--- 1647,1674 ----
  	cbstuff.GSS3++;
  	return 0;
      }
+ 
+     i = 0;
+     hp1 = NULL;
+     hp2 = hostList;
      do {
  	lih_host = 0;
! 	h_Enumerate_r(i == 0 ? lih0_r : lih1_r, hp2, (char *)hp1);
  	hp = lih_host;
  	if (hp) {
  	    /* set in lih_r! private copy before giving up H_LOCK */
  	    int lih_host_held2=lih_host_held;   
  	    cbstuff.GSS4++;
! 	    if ((hp != hostp) &amp;&amp; !ClearHostCallbacks_r(hp, 0 /* not locked or held */ )) {
  		if (lih_host_held2)
  		    h_Release_r(hp);
  		return 0;
  	    }
  	    if (lih_host_held2)
  		h_Release_r(hp);
! 	    hp1 = hp;
  	    hp2 = hostList;
! 	} else {
  	    /*
  	     * Next time try getting callbacks from any host even if
  	     * it's deleted (that's actually great since we can freely
***************
*** 1624,1636 ****
  	     * callback timeout arrives).
  	     */
  	    i++;
  	}
      } while (i &lt; 2);
!     /*
!      * No choice to clear this host's callback state
!      */
!     /* third pass: we still haven't gotten any space, so we free what we had
!      * previously passed over. */
      cbstuff.GSS2++;
      if (!locked) {
  	h_Lock_r(hostp);
--- 1677,1692 ----
  	     * callback timeout arrives).
  	     */
  	    i++;
+ 	    hp1 = NULL;
+ 	    hp2 = hostList;
+ 	    cbstuff.GSS1++;
+ 	    ViceLog(5,
+ 		    ("GSS: Try harder for longest inactive host cnt= %d\n",
+ 		     i));
  	}
      } while (i &lt; 2);
! 
!     /* Could not obtain space from other hosts, clear hostp's callback state */
      cbstuff.GSS2++;
      if (!locked) {
  	h_Lock_r(hostp);
Index: openafs/src/viced/fs_stats.h
diff -c openafs/src/viced/fs_stats.h:1.3.2.1 openafs/src/viced/fs_stats.h:1.3.2.2
*** openafs/src/viced/fs_stats.h:1.3.2.1	Sun Jan 30 23:14:50 2005
--- openafs/src/viced/fs_stats.h	Wed Feb  1 10:59:43 2006
***************
*** 164,171 ****
  #define FS_STATS_RPCIDX_BULKSTATUS	25
  #define FS_STATS_RPCIDX_XSTATSVERSION	26
  #define FS_STATS_RPCIDX_GETXSTATS	27
  
! #define FS_STATS_NUM_RPC_OPS		28
  
  /*
   * Assign an index to each of the File Server's RPC interface routines
--- 164,172 ----
  #define FS_STATS_RPCIDX_BULKSTATUS	25
  #define FS_STATS_RPCIDX_XSTATSVERSION	26
  #define FS_STATS_RPCIDX_GETXSTATS	27
+ #define FS_STATS_RPCIDX_GETCAPABILITIES 28
  
! #define FS_STATS_NUM_RPC_OPS		29
  
  /*
   * Assign an index to each of the File Server's RPC interface routines
Index: openafs/src/viced/host.h
diff -c openafs/src/viced/host.h:1.9.2.3 openafs/src/viced/host.h:1.9.2.4
*** openafs/src/viced/host.h:1.9.2.3	Mon Jan 23 16:30:18 2006
--- openafs/src/viced/host.h	Wed Feb  1 10:59:43 2006
***************
*** 80,86 ****
      char hcpsfailed;		/* Retry the cps call next time */
      prlist hcps;		/* cps for hostip acls */
      afs_uint32 LastCall;	/* time of last call from host */
!     afs_uint32 ActiveCall;	/* time of any call but gettime */
      struct client *FirstClient;	/* first connection from host */
      afs_uint32 cpsCall;		/* time of last cps call from this host */
      struct Interface *interface;	/* all alternate addr for client */
--- 80,87 ----
      char hcpsfailed;		/* Retry the cps call next time */
      prlist hcps;		/* cps for hostip acls */
      afs_uint32 LastCall;	/* time of last call from host */
!     afs_uint32 ActiveCall;	/* time of any call but gettime, 
!                                    getstats and getcaps */
      struct client *FirstClient;	/* first connection from host */
      afs_uint32 cpsCall;		/* time of last cps call from this host */
      struct Interface *interface;	/* all alternate addr for client */
Index: openafs/src/viced/viced.h
diff -c openafs/src/viced/viced.h:1.6 openafs/src/viced/viced.h:1.6.2.1
*** openafs/src/viced/viced.h:1.6	Tue Jul 29 14:58:20 2003
--- openafs/src/viced/viced.h	Wed Feb  1 10:59:43 2006
***************
*** 117,122 ****
--- 117,123 ----
      afs_uint32 GetRootVolume;
      afs_uint32 CheckToken;
      afs_uint32 GetTime;
+     afs_uint32 GetCapabilities;
  
      /* General Fetch/Store Stats */
      afs_uint32 TotalCalls;
</pre></body></html>