*
* The callp parameter is currently unused.
*/
-void cm_RevokeCallback(struct rx_call *callp, AFSFid *fidp)
+void cm_RevokeCallback(struct rx_call *callp, cm_cell_t * cellp, AFSFid *fidp)
{
cm_fid_t tfid;
cm_scache_t *scp;
if (scp->fid.volume == tfid.volume &&
scp->fid.vnode == tfid.vnode &&
scp->fid.unique == tfid.unique &&
+ (cellp == NULL || scp->fid.cell == cellp->cellID) &&
scp->cbExpires > 0 &&
scp->cbServerp != NULL)
{
*
* Called with no locks held.
*/
-void cm_RevokeVolumeCallback(struct rx_call *callp, AFSFid *fidp)
+void cm_RevokeVolumeCallback(struct rx_call *callp, cm_cell_t *cellp, AFSFid *fidp)
{
long hash;
cm_scache_t *scp;
for (hash = 0; hash < cm_data.scacheHashTableSize; hash++) {
for(scp=cm_data.scacheHashTablep[hash]; scp; scp=scp->nextp) {
if (scp->fid.volume == fidp->Volume &&
+ (cellp == NULL || scp->fid.cell == cellp->cellID) &&
scp->cbExpires > 0 &&
scp->cbServerp != NULL) {
cm_HoldSCacheNoLock(scp);
struct rx_peer *peerp;
unsigned long host = 0;
unsigned short port = 0;
+ cm_server_t *tsp = NULL;
+ cm_cell_t * cellp = NULL;
MUTEX_ENTER(&callp->lock);
if ((connp = rx_ConnectionOf(callp)) && (peerp = rx_PeerOf(connp))) {
host = rx_HostOf(peerp);
port = rx_PortOf(peerp);
+
+ tsp = cm_FindServerByIP(host);
+ if (tsp)
+ cellp = tsp->cellp;
}
osi_Log2(afsd_logp, "SRXAFSCB_CallBack from host 0x%x port %d",
if (tfidp->Volume == 0)
continue; /* means don't do anything */
else if (tfidp->Vnode == 0)
- cm_RevokeVolumeCallback(callp, tfidp);
+ cm_RevokeVolumeCallback(callp, cellp, tfidp);
else
- cm_RevokeCallback(callp, tfidp);
+ cm_RevokeCallback(callp, cellp, tfidp);
}
MUTEX_EXIT(&callp->lock);