statep = &volp->ro;
else if (fidp->volume == volp->bk.ID)
statep = &volp->bk;
+
+ cm_UpdateVolumeStatus(volp, statep->ID);
}
cm_PutVolume(volp);
/* REDIRECT */
if (errorCode == VMOVED) {
tsrp->status = srv_deleted;
- if (fidp) {
+ if (fidp)
cm_ForceUpdateVolume(fidp, userp, reqp);
- }
- } else
+ } else {
tsrp->status = srv_offline;
+ }
+
+ if (fidp) { /* File Server query */
+ code = cm_GetVolumeByID(cellp, fidp->volume, userp, reqp,
+ CM_GETVOL_FLAG_NO_LRU_UPDATE,
+ &volp);
+ if (code == 0) {
+ if (fidp->volume == volp->rw.ID)
+ statep = &volp->rw;
+ else if (fidp->volume == volp->ro.ID)
+ statep = &volp->ro;
+ else if (fidp->volume == volp->bk.ID)
+ statep = &volp->bk;
+
+ cm_UpdateVolumeStatus(volp, statep->ID);
+ }
+ cm_PutVolume(volp);
+ }
}
}
if (free_svr_list) {
serversp->status = srv_not_busy;
}
- lock_ReleaseMutex(&volp->mx);
+ lock_ReleaseMutex(&volp->mx);
do {
code = cm_ConnFromVolume(volp, volp->rw.ID, cm_rootUserp, &req, &connp);
if (code)
} while (cm_Analyze(connp, cm_rootUserp, &req, NULL, NULL, NULL, NULL, code));
code = cm_MapRPCError(code, &req);
- lock_ObtainMutex(&volp->mx);
+ lock_ObtainMutex(&volp->mx);
if (code == 0 && volStat.Online) {
cm_VolumeStatusNotification(volp, volp->rw.ID, volp->rw.state, vl_online);
volp->rw.state = vl_online;
serversp->status = srv_not_busy;
}
- lock_ReleaseMutex(&volp->mx);
+ lock_ReleaseMutex(&volp->mx);
do {
code = cm_ConnFromVolume(volp, volp->ro.ID, cm_rootUserp, &req, &connp);
if (code)
} while (cm_Analyze(connp, cm_rootUserp, &req, NULL, NULL, NULL, NULL, code));
code = cm_MapRPCError(code, &req);
- lock_ObtainMutex(&volp->mx);
+ lock_ObtainMutex(&volp->mx);
if (code == 0 && volStat.Online) {
cm_VolumeStatusNotification(volp, volp->ro.ID, volp->ro.state, vl_online);
volp->ro.state = vl_online;
serversp->status = srv_not_busy;
}
- lock_ReleaseMutex(&volp->mx);
+ lock_ReleaseMutex(&volp->mx);
do {
code = cm_ConnFromVolume(volp, volp->bk.ID, cm_rootUserp, &req, &connp);
if (code)
} while (cm_Analyze(connp, cm_rootUserp, &req, NULL, NULL, NULL, NULL, code));
code = cm_MapRPCError(code, &req);
- lock_ObtainMutex(&volp->mx);
+ lock_ObtainMutex(&volp->mx);
if (code == 0 && volStat.Online) {
cm_VolumeStatusNotification(volp, volp->bk.ID, volp->bk.state, vl_online);
volp->bk.state = vl_online;