windows-linked-cells-20081103
[openafs.git] / src / WINNT / afsd / cm_volume.c
index 7d23c0a..dfee587 100644 (file)
@@ -750,7 +750,15 @@ long cm_FindVolumeByID(cm_cell_t *cellp, afs_uint32 volumeID, cm_user_t *userp,
     /* otherwise, we didn't find it so consult the VLDB */
     sprintf(volNameString, "%u", volumeID);
     code = cm_FindVolumeByName(cellp, volNameString, userp, reqp,
-                             flags, outVolpp);
+                             flags | CM_GETVOL_FLAG_IGNORE_LINKED_CELL, outVolpp);
+
+    if (code == CM_ERROR_NOSUCHVOLUME && cellp->linkedName[0] && 
+        !(flags & CM_GETVOL_FLAG_IGNORE_LINKED_CELL)) {
+        cm_cell_t *linkedCellp = cm_GetCell(cellp->linkedName, flags);
+
+        if (linkedCellp)
+            code = cm_FindVolumeByID(linkedCellp, volumeID, userp, reqp, flags, outVolpp);
+    }
     return code;
 }
 
@@ -920,6 +928,14 @@ long cm_FindVolumeByName(struct cm_cell *cellp, char *volumeNamep,
         cm_PutVolume(volp);
         lock_ReleaseRead(&cm_volumeLock);
     }
+
+    if (code == CM_ERROR_NOSUCHVOLUME && cellp->linkedName[0] && 
+        !(flags & CM_GETVOL_FLAG_IGNORE_LINKED_CELL)) {
+        cm_cell_t *linkedCellp = cm_GetCell(cellp->linkedName, flags);
+
+        if (linkedCellp)
+            code = cm_FindVolumeByName(linkedCellp, volumeNamep, userp, reqp, flags, outVolpp);
+    }
     return code;
 }