$(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)
extern int cm_dnsEnabled;
extern int cm_freelanceEnabled;
-extern int cm_readonlyVolumeVersioning;
extern long rx_mtu;
clientchar_t cm_mountRootC[1024];
DWORD cm_mountRootCLen;
-int cm_readonlyVolumeVersioning = 0;
int cm_logChunkSize;
int cm_chunkSize;
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);
(BYTE *) &dwValue, &dummyLen);
if (code == ERROR_SUCCESS) {
cm_followBackupPath = (unsigned short) dwValue;
- }
+ }
afsi_log("CM FollowBackupPath is %u", cm_followBackupPath);
dummyLen = sizeof(DWORD);
}
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;
#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);
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)
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) {
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__);
}
scp->cbServerp = NULL;
}
scp->cbExpires = 0;
- scp->lastUpdateRO = 0;
scp->fid.vnode = 0;
scp->fid.volume = 0;
#endif
scp->cbServerp = NULL;
scp->cbExpires = 0;
- scp->lastUpdateRO = 0;
scp->fileLocksH = NULL;
scp->fileLocksT = NULL;
scp->serverLock = (-1);
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) {
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);
}
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);
}
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 */
cm_server_t *cm_allServersp;
afs_uint32 cm_numFileServers = 0;
afs_uint32 cm_numVldbServers = 0;
-afs_uint32 cm_numVolServers = 0;
void
cm_ForceNewConnectionsAllServers(void)
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++;
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);
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);
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
((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;
}
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++)
{
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 */
}
case CM_SERVER_FILE:
cm_numFileServers--;
break;
- case CM_SERVER_VOL:
- cm_numVolServers--;
- break;
}
lock_FinalizeMutex(&serverp->mx);
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)
case CM_SERVER_FILE:
type = "file";
break;
- case CM_SERVER_VOL:
- type = "vol";
- break;
default:
type = "unknown";
}
/* 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 */
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;
}
}
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);
}
}
volp->cbExpiresRO = 0;
volp->cbServerpRO = NULL;
- volp->lastUpdateRO = 0;
cm_AddVolumeToNameHashTable(volp);
lock_ReleaseWrite(&cm_volumeLock);
}
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);
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 */