tsp->downTime = osi_Time();
}
cm_ForceNewConnections(tsp);
+
/* Now update the volume status */
for (tsrvp = tsp->vols; tsrvp; tsrvp = tsrvp->nextp) {
for (i=0; i<NUM_SERVER_VOLS; i++) {
cm_InitReq(&req);
code = cm_GetVolumeByID(tsp->cellp, tsrvp->ids[i], cm_rootUserp,
- &req, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp);
+ &req, CM_GETVOL_FLAG_NO_LRU_UPDATE | CM_GETVOL_FLAG_NO_RESET, &volp);
if (code == 0) {
cm_UpdateVolumeStatus(volp, tsrvp->ids[i]);
cm_PutVolume(volp);
/* return it held */
if (volp) {
- lock_ObtainMutex(&volp->mx);
+ lock_ObtainMutex(&volp->mx);
- code = 0;
- if (volp->flags & CM_VOLUMEFLAG_RESET) {
- code = cm_UpdateVolume(cellp, userp, reqp, volp);
- if (code == 0)
- volp->flags &= ~CM_VOLUMEFLAG_RESET;
- }
- lock_ReleaseMutex(&volp->mx);
- if (code == 0) {
- *outVolpp = volp;
-
- lock_ObtainWrite(&cm_volumeLock);
- cm_AdjustVolumeLRU(volp);
- lock_ReleaseWrite(&cm_volumeLock);
+ code = 0;
+ if ((volp->flags & CM_VOLUMEFLAG_RESET) && !(flags & CM_GETVOL_FLAG_NO_RESET)) {
+ code = cm_UpdateVolume(cellp, userp, reqp, volp);
+ if (code == 0)
+ volp->flags &= ~CM_VOLUMEFLAG_RESET;
+ }
+ lock_ReleaseMutex(&volp->mx);
+ if (code == 0) {
+ *outVolpp = volp;
+
+ if (!(flags & CM_GETVOL_FLAG_NO_LRU_UPDATE)) {
+ lock_ObtainWrite(&cm_volumeLock);
+ cm_AdjustVolumeLRU(volp);
+ lock_ReleaseWrite(&cm_volumeLock);
+ }
} else
- cm_PutVolume(volp);
+ cm_PutVolume(volp);
- return code;
+ return code;
}
/* otherwise, we didn't find it so consult the VLDB */
}
/* if we get here we are holding the mutex */
- if (volp->flags & CM_VOLUMEFLAG_RESET) {
- code = cm_UpdateVolume(cellp, userp, reqp, volp);
- if (code == 0)
- volp->flags &= ~CM_VOLUMEFLAG_RESET;
+ if ((volp->flags & CM_VOLUMEFLAG_RESET) && !(flags & CM_GETVOL_FLAG_NO_RESET)) {
+ code = cm_UpdateVolume(cellp, userp, reqp, volp);
+ if (code == 0)
+ volp->flags &= ~CM_VOLUMEFLAG_RESET;
}
lock_ReleaseMutex(&volp->mx);
code = CM_ERROR_NOSUCHVOLUME;
if (code == 0) {
- *outVolpp = volp;
-
- lock_ObtainWrite(&cm_volumeLock);
- cm_AdjustVolumeLRU(volp);
- lock_ReleaseWrite(&cm_volumeLock);
+ *outVolpp = volp;
+
+ if (!(flags & CM_GETVOL_FLAG_NO_LRU_UPDATE)) {
+ lock_ObtainWrite(&cm_volumeLock);
+ cm_AdjustVolumeLRU(volp);
+ lock_ReleaseWrite(&cm_volumeLock);
+ }
} else
- cm_PutVolume(volp);
+ cm_PutVolume(volp);
return code;
}