volp->cbExpiresRO = 0;
volp->cbIssuedRO = 0;
volp->cbServerpRO = NULL;
+ volp->volumeSizeRO = 0;
+ _InterlockedAnd(&volp->volumeSizeRO, ~CM_VOLUMEFLAG_RO_SIZE_VALID);
+
lock_FinalizeRWLock(&volp->rw);
}
volp->cbExpiresRO = 0;
volp->cbIssuedRO = 0;
volp->cbServerpRO = NULL;
+ volp->volumeSizeRO = 0;
+ _InterlockedAnd(&volp->volumeSizeRO, ~CM_VOLUMEFLAG_RO_SIZE_VALID);
}
}
osi_EndOnce(&once);
cm_req_t req;
struct rx_connection * rxconnp;
char volName[32];
+ afs_uint32 volType;
char offLineMsg[256];
char motd[256];
long alldown, alldeleted;
OfflineMsg = offLineMsg;
MOTD = motd;
+ volType = cm_VolumeType(volp, volID);
+
if (statep->ID != 0 && (!volID || volID == statep->ID)) {
/* create fid for volume root so that VNOVOL and VMOVED errors can be processed */
cm_SetFid(&vfid, volp->cellp->cellID, statep->ID, 1, 1);
rx_PutConnection(rxconnp);
} while (cm_Analyze(connp, cm_rootUserp, &req, &vfid, NULL, 0, NULL, NULL, NULL, NULL, code));
code = cm_MapRPCError(code, &req);
+
+ if (code == 0 && volType == ROVOL)
+ {
+
+ lock_ObtainWrite(&volp->rw);
+ volp->volumeSizeRO = volStat.BlocksInUse * 1024;
+ _InterlockedOr(&volp->flags, CM_VOLUMEFLAG_RO_SIZE_VALID);
+ lock_ReleaseWrite(&volp->rw);
+ }
}
lock_ObtainWrite(&vscp->rw);