Revert "Windows: Readonly Volume Versioning for Windows Cache Manager"

This reverts commit bb6e38a45b.

Reviewed-on: http://gerrit.openafs.org/659
Tested-by: Jeffrey Altman <jaltman@openafs.org>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
This commit is contained in:
Jeffrey Altman 2009-10-14 09:26:27 -04:00 committed by Jeffrey Altman
parent 5a403db74e
commit a394d74e44
11 changed files with 26 additions and 253 deletions

View File

@ -424,7 +424,6 @@ AFSD_EXELIBS =\
$(DESTDIR)\lib\libafsconf.lib \
$(DESTDIR)\lib\afs\afsreg.lib \
$(DESTDIR)\lib\afspthread.lib \
$(DESTDIR)\lib\afs\afstvolser.lib \
$(LANAHELPERLIB)
$(AFSD_EXEFILE): $(OUT)\afsd.obj $(AFSDOBJS) $(OUT)\afsd.res $(RXOBJS) $(AFSD_EXELIBS)

View File

@ -111,7 +111,6 @@ extern int cm_fakeGettingCallback; // 1 if currently updating the fake root.af
extern int cm_dnsEnabled;
extern int cm_freelanceEnabled;
extern int cm_readonlyVolumeVersioning;
extern long rx_mtu;

View File

@ -68,7 +68,6 @@ DWORD cm_mountRootLen;
clientchar_t cm_mountRootC[1024];
DWORD cm_mountRootCLen;
int cm_readonlyVolumeVersioning = 0;
int cm_logChunkSize;
int cm_chunkSize;
@ -399,21 +398,6 @@ static void afsd_InitServerPreferences(void)
tsp->flags |= CM_SERVERFLAG_PREF_SET;
lock_ReleaseMutex(&tsp->mx);
}
if (cm_readonlyVolumeVersioning) {
/* Add a matching vol server */
tsp = cm_FindServer(&saddr, CM_SERVER_VOL);
if ( tsp ) /* an existing server - ref count increased */
{
tsp->ipRank = (USHORT)dwRank; /* no need to protect by mutex*/
cm_PutServer(tsp); /* decrease refcount */
}
else /* add a new server without a cell */
{
tsp = cm_NewServer(&saddr, CM_SERVER_VOL, NULL, NULL, CM_FLAG_NOPROBE); /* refcount = 1 */
tsp->ipRank = (USHORT)dwRank;
}
}
}
RegCloseKey(hkPrefs);
@ -1215,7 +1199,7 @@ afsd_InitCM(char **reasonP)
(BYTE *) &dwValue, &dummyLen);
if (code == ERROR_SUCCESS) {
cm_followBackupPath = (unsigned short) dwValue;
}
}
afsi_log("CM FollowBackupPath is %u", cm_followBackupPath);
dummyLen = sizeof(DWORD);
@ -1226,14 +1210,6 @@ afsd_InitCM(char **reasonP)
}
afsi_log("CM PerFileAccessCheck is %d", cm_accessPerFileCheck);
dummyLen = sizeof(DWORD);
code = RegQueryValueEx(parmKey, "ReadOnlyVolumeVersioning", NULL, NULL,
(BYTE *) &dwValue, &dummyLen);
if (code == ERROR_SUCCESS) {
cm_readonlyVolumeVersioning = (unsigned short) dwValue;
}
afsi_log("CM ReadOnlyVolumeVersioning is %u", cm_readonlyVolumeVersioning);
RegCloseKey (parmKey);
cacheBlocks = ((afs_uint64)cacheSize * 1024) / blockSize;

View File

@ -24,8 +24,6 @@
#include <WINNT/syscfg.h>
#include <WINNT/afsreg.h>
#include <afs/vldbint.h>
#include <afs/volint.h>
int
SRXAFSCB_InitCallBackState3(struct rx_call *callp, afsUUID* serverUuid);
@ -1731,60 +1729,6 @@ void cm_EndCallbackGrantingCall(cm_scache_t *scp, cm_callbackRequest_t *cbrp,
if (scp && scp->flags & CM_SCACHEFLAG_PURERO) {
cm_volume_t * volp = cm_GetVolumeByFID(&scp->fid);
if (volp) {
/* If the volume has a valid callback from the same
* server as issued this latest callback and we know
* the last update time of the RO volume,
* then the last update time of the RO volume
* must not have changed. Otherwise, we must obtain
* the volume status info from the volserver that
* matches the file server the callback was received
* from.
*/
if (cm_readonlyVolumeVersioning &&
(volp->cbExpiresRO == 0 || volp->cbServerpRO != scp->cbServerp)) {
cm_server_t *volserverp;
volserverp = cm_FindServer(&scp->cbServerp->addr, CM_SERVER_VOL);
if (volserverp) {
afs_int32 vcode = -1, code = -1;
volEntries volumeInfo;
struct nvldbentry entry;
int i;
afs_uint32 addr = volserverp->addr.sin_addr.s_addr;
cm_cell_t *cellp;
cm_conn_t *connp;
struct rx_connection * rxconnp;
cm_req_t req;
cm_InitReq(&req);
cellp = cm_FindCellByID(scp->fid.cell, 0);
code = cm_ConnByMServers(cellp->vlServersp, cm_rootUserp, &req, &connp);
if (code == 0) {
rxconnp = cm_GetRxConn(connp);
vcode = VL_GetEntryByIDN(rxconnp, scp->fid.volume, -1, &entry);
rx_PutConnection(rxconnp);
}
if (vcode == 0) {
for (i=0, code=-1; i < entry.nServers; i++) {
if ( entry.serverNumber[i] == htonl(addr)) {
code = cm_ConnByServer(volserverp, cm_rootUserp, &connp);
if (code == 0) {
rxconnp = cm_GetRxConn(connp);
memset(&volumeInfo, 0, sizeof(volumeInfo));
code = AFSVolListOneVolume(rxconnp, entry.serverPartition[i], scp->fid.volume, &volumeInfo);
rx_PutConnection(rxconnp);
}
break;
}
}
}
volp->lastUpdateRO = (vcode == 0 && code == 0 ? volumeInfo.volEntries_val->updateDate : 0);
cm_PutServer(volserverp);
}
}
scp->lastUpdateRO = volp->lastUpdateRO;
volp->cbExpiresRO = scp->cbExpires;
if (volp->cbServerpRO != scp->cbServerp) {
if (volp->cbServerpRO)
@ -1997,22 +1941,8 @@ void cm_CheckCBExpiration(void)
if (scp->flags & CM_SCACHEFLAG_PURERO) {
cm_volume_t *volp = cm_GetVolumeByFID(&scp->fid);
if (volp) {
/* In the case of a scp from a .readonly volume
* we can automatically refresh the scp callback
* state under one of two conditions:
*
* - there is currently an unexpired callback
* and the callback is simply being extended
*
* - the lastUpdateRO time for the scp and the
* volp are the same indicating that the
* .readonly has not changed
*/
if (volp->cbExpiresRO > scp->cbExpires &&
(volp->cbServerpRO == scp->cbServerp &&
scp->cbExpires > 0 ||
volp->lastUpdateRO > 0 &&
scp->lastUpdateRO == volp->lastUpdateRO))
scp->cbExpires > 0)
{
scp->cbExpires = volp->cbExpiresRO;
if (volp->cbServerpRO != scp->cbServerp) {

View File

@ -1074,11 +1074,6 @@ static void cm_NewRXConnection(cm_conn_t *tcp, cm_ucell_t *ucellp,
port = htons(7000);
serviceID = 1;
break;
case CM_SERVER_VOL:
if (port == 0)
port = htons(7005);
serviceID = 4;
break;
default:
osi_panic("unknown server type", __FILE__, __LINE__);
}

View File

@ -208,7 +208,6 @@ long cm_RecycleSCache(cm_scache_t *scp, afs_int32 flags)
scp->cbServerp = NULL;
}
scp->cbExpires = 0;
scp->lastUpdateRO = 0;
scp->fid.vnode = 0;
scp->fid.volume = 0;
@ -620,7 +619,6 @@ void cm_InitSCache(int newFile, long maxSCaches)
#endif
scp->cbServerp = NULL;
scp->cbExpires = 0;
scp->lastUpdateRO = 0;
scp->fileLocksH = NULL;
scp->fileLocksT = NULL;
scp->serverLock = (-1);
@ -1965,44 +1963,11 @@ int cm_DumpSCache(FILE *outputFile, char *cookie, int lock)
for (scp = cm_data.allSCachesp; scp; scp = scp->allNextp)
{
time_t t;
char *srvStr = NULL;
afs_uint32 srvStrRpc = TRUE;
char *cbt = NULL;
char *lurot = NULL;
if (scp->cbServerp) {
if (!((scp->cbServerp->flags & CM_SERVERFLAG_UUID) &&
UuidToString((UUID *)&scp->cbServerp->uuid, &srvStr) == RPC_S_OK)) {
afs_asprintf(&srvStr, "%.0I", scp->cbServerp->addr.sin_addr.s_addr);
srvStrRpc = FALSE;
}
}
if (scp->cbExpires) {
t = scp->cbExpires;
cbt = ctime(&t);
if (cbt) {
cbt = strdup(cbt);
cbt[strlen(cbt)-1] = '\0';
}
}
if (scp->lastUpdateRO) {
t = scp->lastUpdateRO;
lurot = ctime(&t);
if (lurot) {
lurot = strdup(lurot);
lurot[strlen(lurot)-1] = '\0';
}
}
sprintf(output,
"%s scp=0x%p, fid (cell=%d, volume=%d, vnode=%d, unique=%d) type=%d dv=%I64d len=0x%I64x "
"mp='%s' Locks (server=0x%x shared=%d excl=%d clnt=%d) fsLockCount=%d linkCount=%d anyAccess=0x%x "
"flags=0x%x cbServer='%s' cbExpires='%s' lastUpdateRO='%s' refCount=%u\r\n",
cookie, scp, scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique,
scp->fileType, scp->dataVersion, scp->length.QuadPart, scp->mountPointStringp,
sprintf(output, "%s scp=0x%p, fid (cell=%d, volume=%d, vnode=%d, unique=%d) type=%d dv=%I64d len=0x%I64x mp='%s' Locks (server=0x%x shared=%u excl=%u clnt=%u) lockCount=%d flags=0x%x cb=0x%x refCount=%u\r\n",
cookie, scp, scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique,
scp->fileType, scp->dataVersion, scp->length.QuadPart, scp->mountPointStringp,
scp->serverLock, scp->sharedLocks, scp->exclusiveLocks, scp->clientLocks, scp->fsLockCount,
scp->linkCount, scp->anyAccess, scp->flags, srvStr ? srvStr : "<none>", cbt ? cbt : "<none>",
lurot ? lurot : "<none>", scp->refCount);
scp->flags, (unsigned long)scp->cbExpires, scp->refCount);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
if (scp->fileLocksH) {
@ -2011,41 +1976,27 @@ int cm_DumpSCache(FILE *outputFile, char *cookie, int lock)
for (q = scp->fileLocksH; q; q = osi_QNext(q)) {
cm_file_lock_t * lockp = (cm_file_lock_t *)((char *) q - offsetof(cm_file_lock_t, fileq));
sprintf(output,
" %s lockp=0x%p scp=0x%p, cm_userp=0x%p offset=0x%I64x len=0x%08I64x type=0x%x "
"key=0x%I64x flags=0x%x update=0x%I64u\r\n",
cookie, lockp, lockp->scp, lockp->userp, lockp->range.offset, lockp->range.length,
lockp->lockType, lockp->key, lockp->flags, (afs_uint64)lockp->lastUpdate);
sprintf(output, " %s lockp=0x%p scp=0x%p, cm_userp=0x%p offset=0x%I64x len=0x%08I64x type=0x%x key=0x%I64x flags=0x%x update=0x%I64u\r\n",
cookie, lockp, lockp->scp, lockp->userp, lockp->range.offset, lockp->range.length,
lockp->lockType, lockp->key, lockp->flags, (afs_uint64)lockp->lastUpdate);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
}
sprintf(output, " %s - done dumping scp locks\r\n", cookie);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
}
if (srvStr) {
if (srvStrRpc)
RpcStringFree(&srvStr);
else
free(srvStr);
}
if (cbt)
free(cbt);
if (lurot)
free(lurot);
}
sprintf(output, "%s - Done dumping all scache.\r\n", cookie);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
sprintf(output, "%s - dumping cm_data.scacheHashTable - cm_data.scacheHashTableSize=%d\r\n",
cookie, cm_data.scacheHashTableSize);
sprintf(output, "%s - dumping cm_data.scacheHashTable - cm_data.scacheHashTableSize=%d\r\n", cookie, cm_data.scacheHashTableSize);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
for (i = 0; i < cm_data.scacheHashTableSize; i++)
{
for(scp = cm_data.scacheHashTablep[i]; scp; scp=scp->nextp)
{
sprintf(output, "%s scp=0x%p, hash=%d, fid (cell=%d, volume=%d, vnode=%d, unique=%d)\r\n",
sprintf(output, "%s scp=0x%p, hash=%d, fid (cell=%d, volume=%d, vnode=%d, unique=%d)\r\n",
cookie, scp, i, scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
}
@ -2059,11 +2010,9 @@ int cm_DumpSCache(FILE *outputFile, char *cookie, int lock)
for (q = cm_allFileLocks; q; q = osi_QNext(q)) {
cm_file_lock_t * lockp = (cm_file_lock_t *)q;
sprintf(output,
"%s filelockp=0x%p scp=0x%p, cm_userp=0x%p offset=0x%I64x len=0x%08I64x type=0x%x "
"key=0x%I64x flags=0x%x update=0x%I64u\r\n",
cookie, lockp, lockp->scp, lockp->userp, lockp->range.offset, lockp->range.length,
lockp->lockType, lockp->key, lockp->flags, (afs_uint64)lockp->lastUpdate);
sprintf(output, "%s filelockp=0x%p scp=0x%p, cm_userp=0x%p offset=0x%I64x len=0x%08I64x type=0x%x key=0x%I64x flags=0x%x update=0x%I64u\r\n",
cookie, lockp, lockp->scp, lockp->userp, lockp->range.offset, lockp->range.length,
lockp->lockType, lockp->key, lockp->flags, (afs_uint64)lockp->lastUpdate);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
}

View File

@ -128,9 +128,6 @@ typedef struct cm_scache {
afs_uint32 group; /* file owning group */
cm_user_t *creator; /* user, if new file */
/* volume status */
time_t lastUpdateRO; /* last update time for readonly volume */
/* pseudo file status */
osi_hyper_t serverLength; /* length known to server */

View File

@ -29,7 +29,6 @@ osi_rwlock_t cm_syscfgLock;
cm_server_t *cm_allServersp;
afs_uint32 cm_numFileServers = 0;
afs_uint32 cm_numVldbServers = 0;
afs_uint32 cm_numVolServers = 0;
void
cm_ForceNewConnectionsAllServers(void)
@ -60,10 +59,6 @@ cm_PingServer(cm_server_t *tsp)
char hoststr[16];
cm_req_t req;
/* do not probe vol server (yet) */
if (tsp->type == CM_SERVER_VOL)
return;
lock_ObtainMutex(&tsp->mx);
if (tsp->flags & CM_SERVERFLAG_PINGING) {
tsp->waitCount++;
@ -91,7 +86,7 @@ cm_PingServer(cm_server_t *tsp)
osi_Log4(afsd_logp, "cm_PingServer server %s (%s) was %s with caps 0x%x",
osi_LogSaveString(afsd_logp, hoststr),
tsp->type == CM_SERVER_VLDB ? "vldb" : (tsp->type == CM_SERVER_FILE ? "file" : "vol"),
tsp->type == CM_SERVER_VLDB ? "vldb" : "file",
wasDown ? "down" : "up",
tsp->capabilities);
@ -215,14 +210,9 @@ static void cm_CheckServersSingular(afs_uint32 flags, cm_cell_t *cellp)
int doPing;
int isDown;
int isFS;
int isVLDB;
lock_ObtainRead(&cm_serverLock);
for (tsp = cm_allServersp; tsp; tsp = tsp->allNextp) {
/* do not probe vol server (yet) */
if (tsp->type == CM_SERVER_VOL)
continue;
cm_GetServerNoLock(tsp);
lock_ReleaseRead(&cm_serverLock);
@ -232,7 +222,6 @@ static void cm_CheckServersSingular(afs_uint32 flags, cm_cell_t *cellp)
doPing = 0;
isDown = tsp->flags & CM_SERVERFLAG_DOWN;
isFS = tsp->type == CM_SERVER_FILE;
isVLDB = tsp->type == CM_SERVER_VLDB;
/* only do the ping if the cell matches the requested cell, or we're
* matching all cells (cellp == NULL), and if we've requested to ping
@ -242,7 +231,7 @@ static void cm_CheckServersSingular(afs_uint32 flags, cm_cell_t *cellp)
((isDown && (flags & CM_FLAG_CHECKDOWNSERVERS)) ||
(!isDown && (flags & CM_FLAG_CHECKUPSERVERS))) &&
((!(flags & CM_FLAG_CHECKVLDBSERVERS) ||
isVLDB && (flags & CM_FLAG_CHECKVLDBSERVERS)) &&
!isFS && (flags & CM_FLAG_CHECKVLDBSERVERS)) &&
(!(flags & CM_FLAG_CHECKFILESERVERS) ||
isFS && (flags & CM_FLAG_CHECKFILESERVERS)))) {
doPing = 1;
@ -848,7 +837,7 @@ void cm_SetServerPrefs(cm_server_t * serverp)
}
serverAddr = ntohl(serverp->addr.sin_addr.s_addr);
serverp->ipRank = CM_IPRANK_LOW; /* default settings */
serverp->ipRank = CM_IPRANK_LOW; /* default setings */
for ( i=0; i < cm_noIPAddr; i++)
{
@ -919,14 +908,11 @@ cm_server_t *cm_NewServer(struct sockaddr_in *socketp, int type, cm_cell_t *cell
case CM_SERVER_FILE:
cm_numFileServers++;
break;
case CM_SERVER_VOL:
cm_numVolServers++;
break;
}
lock_ReleaseWrite(&cm_serverLock); /* release server lock */
if ( !(flags & CM_FLAG_NOPROBE) && (type != CM_SERVER_VOL)) {
if ( !(flags & CM_FLAG_NOPROBE) ) {
tsp->flags |= CM_SERVERFLAG_DOWN; /* assume down; ping will mark up if available */
cm_PingServer(tsp); /* Obtain Capabilities and check up/down state */
}
@ -1255,9 +1241,6 @@ void cm_FreeServer(cm_server_t* serverp)
case CM_SERVER_FILE:
cm_numFileServers--;
break;
case CM_SERVER_VOL:
cm_numVolServers--;
break;
}
lock_FinalizeMutex(&serverp->mx);
@ -1354,8 +1337,8 @@ int cm_DumpServers(FILE *outputFile, char *cookie, int lock)
if (lock)
lock_ObtainRead(&cm_serverLock);
sprintf(output, "%s - dumping servers - cm_numFileServers=%d, cm_numVolServers=%d, cm_numVldbServers=%d\r\n",
cookie, cm_numFileServers, cm_numVolServers, cm_numVldbServers);
sprintf(output, "%s - dumping servers - cm_numFileServers=%d, cm_numVldbServers=%d\r\n",
cookie, cm_numFileServers, cm_numVldbServers);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
for (tsp = cm_allServersp; tsp; tsp=tsp->allNextp)
@ -1370,9 +1353,6 @@ int cm_DumpServers(FILE *outputFile, char *cookie, int lock)
case CM_SERVER_FILE:
type = "file";
break;
case CM_SERVER_VOL:
type = "vol";
break;
default:
type = "unknown";
}

View File

@ -53,7 +53,6 @@ typedef struct cm_serverRef {
/* types */
#define CM_SERVER_VLDB 1 /* a VLDB server */
#define CM_SERVER_FILE 2 /* a file server */
#define CM_SERVER_VOL 3 /* a vol server */
/* flags */
#define CM_SERVERFLAG_DOWN 0x1 /* server is down */

View File

@ -169,7 +169,7 @@ long cm_UpdateVolumeLocation(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *
afs_uint32 j, k;
cm_serverRef_t *tsrp;
cm_server_t *tsp;
struct sockaddr_in tsockAddr, tsockAddr2;
struct sockaddr_in tsockAddr;
long tflags;
u_long tempAddr;
struct vldbentry vldbEntry;
@ -526,18 +526,9 @@ long cm_UpdateVolumeLocation(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *
}
}
if (!tsp) {
lock_ReleaseWrite(&volp->rw);
if (cm_readonlyVolumeVersioning) {
tsockAddr2 = tsockAddr;
tsockAddr2.sin_port = htons(7005);
/* Do not probe the volserver. We will always use the file server's state. */
tsp = cm_NewServer(&tsockAddr2, CM_SERVER_VOL, cellp, &serverUUID[i], CM_FLAG_NOPROBE);
cm_PutServer(tsp); /* no longer need to vol server reference */
}
/* cm_NewServer will probe the file server which in turn will
/* cm_NewServer will probe the server which in turn will
* update the state on the volume group object */
lock_ReleaseWrite(&volp->rw);
tsp = cm_NewServer(&tsockAddr, CM_SERVER_FILE, cellp, &serverUUID[i], 0);
lock_ObtainWrite(&volp->rw);
}
@ -946,7 +937,6 @@ long cm_FindVolumeByName(struct cm_cell *cellp, char *volumeNamep,
}
volp->cbExpiresRO = 0;
volp->cbServerpRO = NULL;
volp->lastUpdateRO = 0;
cm_AddVolumeToNameHashTable(volp);
lock_ReleaseWrite(&cm_volumeLock);
}
@ -1494,50 +1484,10 @@ int cm_DumpVolumes(FILE *outputFile, char *cookie, int lock)
for (volp = cm_data.allVolumesp; volp; volp=volp->allNextp)
{
time_t t;
char *srvStr = NULL;
afs_uint32 srvStrRpc = TRUE;
char *cbt = NULL;
char *lurot = NULL;
if (volp->cbServerpRO) {
if (!((volp->cbServerpRO->flags & CM_SERVERFLAG_UUID) &&
UuidToString((UUID *)&volp->cbServerpRO->uuid, &srvStr) == RPC_S_OK)) {
afs_asprintf(&srvStr, "%.0I", volp->cbServerpRO->addr.sin_addr.s_addr);
srvStrRpc = FALSE;
}
}
if (volp->cbExpiresRO) {
t = volp->cbExpiresRO;
cbt = ctime(&t);
if (cbt) {
cbt = strdup(cbt);
cbt[strlen(cbt)-1] = '\0';
}
}
if (volp->lastUpdateRO) {
t = volp->lastUpdateRO;
lurot = ctime(&t);
if (lurot) {
lurot = strdup(lurot);
lurot[strlen(lurot)-1] = '\0';
}
}
sprintf(output, "%s - volp=0x%p cell=%s name=%s rwID=%u roID=%u bkID=%u flags=0x%x cbServerpRO='%s' cbExpiresRO='%s' lastUpdateRO='%s' refCount=%u\r\n",
cookie, volp, volp->cellp->name, volp->namep, volp->vol[RWVOL].ID, volp->vol[ROVOL].ID, volp->vol[BACKVOL].ID, volp->flags,
srvStr ? srvStr : "<none>", cbt ? cbt : "<none>", lurot ? lurot : "<none>", volp->refCount);
sprintf(output, "%s - volp=0x%p cell=%s name=%s rwID=%u roID=%u bkID=%u flags=0x%x refCount=%u\r\n",
cookie, volp, volp->cellp->name, volp->namep, volp->vol[RWVOL].ID, volp->vol[ROVOL].ID, volp->vol[BACKVOL].ID, volp->flags,
volp->refCount);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
if (srvStr) {
if (srvStrRpc)
RpcStringFree(&srvStr);
else
free(srvStr);
}
if (cbt)
free(cbt);
if (lurot)
free(lurot);
}
sprintf(output, "%s - Done dumping volumes.\r\n", cookie);
WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);

View File

@ -44,7 +44,6 @@ typedef struct cm_volume {
afs_int32 refCount; /* by Interlocked operations */
struct cm_server *cbServerpRO; /* server granting RO callback; by cm_scacheLock */
time_t cbExpiresRO; /* latest RO expiration time; by cm_scacheLock */
time_t lastUpdateRO; /* latest RO volume update time; 0 if unknown; by cm_scacheLock */
} cm_volume_t;
#define CM_VOLUMEFLAG_RESET 1 /* reload this info on next use */