lock_ReleaseWrite(&cm_scacheLock);
osi_Log4(afsd_logp, "RevokeCallback Discarding SCache scp 0x%p vol %u vn %u uniq %u",
scp, scp->fid.volume, scp->fid.vnode, scp->fid.unique);
+
lock_ObtainMutex(&scp->mx);
cm_DiscardSCache(scp);
lock_ReleaseMutex(&scp->mx);
+
cm_CallbackNotifyChange(scp);
+
lock_ObtainWrite(&cm_scacheLock);
cm_ReleaseSCacheNoLock(scp);
}
tfid.volume = fidp->Volume;
cm_RecordRacingRevoke(&tfid, CM_RACINGFLAG_CANCELVOL);
-
lock_ObtainWrite(&cm_scacheLock);
for (hash = 0; hash < cm_data.scacheHashTableSize; hash++) {
for(scp=cm_data.scacheHashTablep[hash]; scp; scp=scp->nextp) {
scp->cbServerp != NULL) {
cm_HoldSCacheNoLock(scp);
lock_ReleaseWrite(&cm_scacheLock);
+
lock_ObtainMutex(&scp->mx);
osi_Log4(afsd_logp, "RevokeVolumeCallback Discarding SCache scp 0x%p vol %u vn %u uniq %u",
scp, scp->fid.volume, scp->fid.vnode, scp->fid.unique);
cm_DiscardSCache(scp);
lock_ReleaseMutex(&scp->mx);
+
cm_CallbackNotifyChange(scp);
lock_ObtainWrite(&cm_scacheLock);
cm_ReleaseSCacheNoLock(scp);
host = rx_HostOf(peerp);
port = rx_PortOf(peerp);
- tsp = cm_FindServerByIP(host);
+ tsp = cm_FindServerByIP(host, CM_SERVER_FILE);
if (tsp)
cellp = tsp->cellp;
}
/* we're done with the server structure */
cm_PutServer(tsp);
- }
+ }
}
MUTEX_EXIT(&callp->lock);
return 0;
cm_racingRevokes_t *revp; /* where we are */
cm_racingRevokes_t *nrevp; /* where we'll be next */
int freeFlag;
- cm_server_t * serverp = 0;
+ cm_server_t * serverp = NULL;
int discardScp = 0;
lock_ObtainWrite(&cm_callbackLock);
lock_ReleaseMutex(&scp->mx);
cm_CallbackNotifyChange(scp);
lock_ObtainMutex(&scp->mx);
- }
+ }
if ( serverp ) {
lock_ObtainWrite(&cm_serverLock);
osi_Log0(afsd_logp, "CheckCBExpiration Complete");
}
+
+void
+cm_GiveUpAllCallbacks(cm_server_t *tsp)
+{
+ long code;
+ cm_conn_t *connp;
+ struct rx_connection * rxconnp;
+
+ if (tsp->type == CM_SERVER_FILE) {
+ code = cm_ConnByServer(tsp, cm_rootUserp, &connp);
+ if (code == 0) {
+ rxconnp = cm_GetRxConn(connp);
+ code = RXAFS_GiveUpAllCallBacks(rxconnp);
+ rx_PutConnection(rxconnp);
+ }
+ }
+}
+
+void
+cm_GiveUpAllCallbacksAllServers(void)
+{
+ cm_server_t *tsp;
+
+ lock_ObtainWrite(&cm_serverLock);
+ for (tsp = cm_allServersp; tsp; tsp = tsp->allNextp) {
+ cm_GetServerNoLock(tsp);
+ lock_ReleaseWrite(&cm_serverLock);
+ cm_GiveUpAllCallbacks(tsp);
+ lock_ObtainWrite(&cm_serverLock);
+ cm_PutServerNoLock(tsp);
+ }
+ lock_ReleaseWrite(&cm_serverLock);
+}
+
+