cm_scache_t *scp;
cm_cell_t *cellp;
cm_volume_t *tvp;
- cm_serverRef_t **tsrpp;
- unsigned long volume;
+ cm_vol_state_t *statep;
+ afs_uint32 volume;
cm_req_t req;
cm_InitReq(&req);
if (code)
return code;
- lock_ObtainMutex(&tvp->mx);
- tsrpp = cm_GetVolServers(tvp, volume);
- code = cm_CheckServersStatus(*tsrpp);
- cm_FreeServerList(tsrpp, 0);
- lock_ReleaseMutex(&tvp->mx);
+ if (volume == tvp->rw.ID)
+ statep = &tvp->rw;
+ else if (volume == tvp->ro.ID)
+ statep = &tvp->ro;
+ else
+ statep = &tvp->bk;
+
+ switch (statep->state) {
+ case vl_online:
+ case vl_unknown:
+ code = 0;
+ break;
+ case vl_busy:
+ code = CM_ERROR_ALLBUSY;
+ break;
+ case vl_offline:
+ code = CM_ERROR_ALLOFFLINE;
+ break;
+ case vl_alldown:
+ code = CM_ERROR_ALLDOWN;
+ break;
+ }
cm_PutVolume(tvp);
- return 0;
+ return code;
}
else if (code == ENODEV) {
fprintf(stderr,"%s: AFS service may not have started.\n", pn);
}
- else if (code == ESRCH) {
+ else if (code == ESRCH) { /* hack */
fprintf(stderr,"%s: Cell name not recognized.\n", pn);
}
- else if (code == EPIPE) {
+ else if (code == EPIPE) { /* hack */
fprintf(stderr,"%s: Volume name or ID not recognized.\n", pn);
}
else if (code == EFBIG) {
else
fprintf(stderr,"%s: Connection timed out", pn);
}
+ else if (code == EBUSY) {
+ if (filename)
+ fprintf(stderr,"%s: All servers are busy on which '%s' resides\n", pn, filename);
+ else
+ fprintf(stderr,"%s: All servers are busy\n", pn);
+ }
+ else if (code == ENXIO) {
+ if (filename)
+ fprintf(stderr,"%s: All volume instances are offline on which '%s' resides\n", pn, filename);
+ else
+ fprintf(stderr,"%s: All volume instances are offline\n", pn);
+ }
+ else if (code == ENOSYS) {
+ if (filename)
+ fprintf(stderr,"%s: All servers are down on which '%s' resides\n", pn, filename);
+ else
+ fprintf(stderr,"%s: All servers are down\n", pn);
+ }
else {
if (filename)
fprintf(stderr,"%s:'%s'", pn, filename);