int didLock;
long trights;
int release = 0; /* Used to avoid a call to cm_HoldSCache in the directory case */
- cm_volume_t *volp = cm_GetVolumeByFID(&scp->fid);
+ cm_volume_t *volp = cm_FindVolumeByFID(&scp->fid, userp, reqp);
didLock = 0;
if (scp->fileType == CM_SCACHETYPE_DIRECTORY ||
cm_fid_t tfid;
cm_scache_t *aclScp = NULL;
int got_cb = 0;
- cm_volume_t * volp = cm_GetVolumeByFID(&scp->fid);
+ cm_volume_t * volp = cm_FindVolumeByFID(&scp->fid, userp, reqp);
/* pretty easy: just force a pass through the fetch status code */
afs_uint32 dirty;
cm_volume_t * volp;
- volp = cm_GetVolumeByFID(&bp->fid);
+ volp = cm_FindVolumeByFID(&bp->fid, bp->userp, &req);
switch (cm_GetVolumeStatus(volp, bp->fid.volume)) {
case vl_online:
case vl_unknown:
char volstr[VL_MAXNAMELEN+12]="";
char *ext = "";
- volp = cm_GetVolumeByFID(&bp->fid);
+ volp = cm_GetVolumeByFID(&bp->fid);
if (volp) {
cellp = volp->cellp;
if (bp->fid.volume == volp->vol[RWVOL].ID)
if (!fidp) { /* vldb */
retry = 1;
} else { /* file */
- cm_volume_t *volp = cm_GetVolumeByFID(fidp);
+ cm_volume_t *volp = cm_FindVolumeByFID(fidp, userp, reqp);
if (volp) {
if (fidp->volume == cm_GetROVolumeID(volp))
retry = 1;
goto _done;
}
- volp = cm_GetVolumeByFID(fidp);
+ volp = cm_FindVolumeByFID(fidp, userp, reqp);
if (!volp) {
spaceAvail = 0;
goto _done;
return volp;
}
+cm_volume_t *cm_FindVolumeByFID(cm_fid_t *fidp, cm_user_t *userp, cm_req_t *reqp)
+{
+ cm_volume_t *volp = NULL;
+ cm_cell_t *cellp;
+ long code;
+
+ cellp = cm_FindCellByID(fidp->cell, CM_FLAG_NOPROBE);
+ if (!cellp) {
+ return NULL;
+ }
+
+ code = cm_FindVolumeByID(cellp, fidp->volume, userp, reqp, CM_GETVOL_FLAG_CREATE, &volp);
+ if (code)
+ return NULL;
+
+ return volp;
+}
+
long cm_FindVolumeByID(cm_cell_t *cellp, afs_uint32 volumeID, cm_user_t *userp,
cm_req_t *reqp, afs_uint32 flags, cm_volume_t **outVolpp)
{
cm_user_t *userp, cm_req_t *reqp,
afs_uint32 flags, cm_volume_t **outVolpp);
+extern cm_volume_t *cm_FindVolumeByFID(cm_fid_t *fidp,
+ cm_user_t *userp, cm_req_t *reqp);
+
#define CM_GETVOL_FLAG_CREATE 1
#define CM_GETVOL_FLAG_NO_LRU_UPDATE 2
#define CM_GETVOL_FLAG_NO_RESET 4
if ( pResultCB->CellLength )
pResultCB->CellLength--;
} else {
- volp = cm_GetVolumeByFID(&scp->fid);
- if (!volp) {
+ volp = cm_FindVolumeByFID(&scp->fid, userp, &req);
+ if (!volp) {
code = CM_ERROR_NOSUCHVOLUME;
goto _done;
}
+
volType = cm_VolumeType(volp, scp->fid.volume);
if (cm_volumeInfoReadOnlyFlag && (volType == ROVOL || volType == BACKVOL))
pResultCB->TotalAllocationUnits.QuadPart = 100;
pResultCB->AvailableAllocationUnits.QuadPart = 0;
} else {
- volp = cm_GetVolumeByFID(&scp->fid);
- if (!volp) {
+ volp = cm_FindVolumeByFID(&scp->fid, userp, &req);
+ if (!volp) {
code = CM_ERROR_NOSUCHVOLUME;
goto _done;
}