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