Windows: Fix cm_UpdateVolumeStatusInt log message
[openafs.git] / src / WINNT / afsd / cm_volume.c
index e41d05a..fe84a41 100644 (file)
@@ -72,6 +72,7 @@ cm_ShutdownVolume(void)
                 cm_VolumeStatusNotification(volp, volp->vol[volType].ID, volp->vol[volType].state, vl_alldown);
         }
         volp->cbExpiresRO = 0;
+        volp->cbServerpRO = NULL;
         lock_FinalizeRWLock(&volp->rw);
     }
 
@@ -110,6 +111,7 @@ void cm_InitVolume(int newFile, long maxVols)
                         cm_VolumeStatusNotification(volp, volp->vol[volType].ID, vl_unknown, volp->vol[volType].state);
                 }
                 volp->cbExpiresRO = 0;
+                volp->cbServerpRO = NULL;
             }
         }
         osi_EndOnce(&once);
@@ -450,6 +452,12 @@ long cm_UpdateVolumeLocation(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *
             cm_AddVolumeToNameHashTable(volp);
         }
 
+        if (flags & VLF_DFSFILESET) {
+            volp->flags |= CM_VOLUMEFLAG_DFS_VOLUME;
+            osi_Log1(afsd_logp, "cm_UpdateVolume Volume Group '%s' is a DFS File Set.  Correct behavior is not implemented.",
+                     osi_LogSaveString(afsd_logp, volp->namep));
+        }
+
         if (flags & VLF_RWEXISTS) {
             if (volp->vol[RWVOL].ID != rwID) {
                 if (volp->vol[RWVOL].flags & CM_VOLUMEFLAG_IN_HASH)
@@ -927,6 +935,7 @@ long cm_FindVolumeByName(struct cm_cell *cellp, char *volumeNamep,
             volp->vol[volType].flags = 0;
         }
         volp->cbExpiresRO = 0;
+        volp->cbServerpRO = NULL;
         cm_AddVolumeToNameHashTable(volp);
         lock_ReleaseWrite(&cm_volumeLock);
     }
@@ -1289,14 +1298,21 @@ cm_CheckOfflineVolume(cm_volume_t *volp, afs_uint32 volID)
 }
 
 
-/* called from the Daemon thread */
+/* 
+ * called from the Daemon thread.
+ * when checking the offline status, check those of the most recently used volumes first.
+ */
 void cm_CheckOfflineVolumes(void)
 {
     cm_volume_t *volp;
     afs_int32 refCount;
+    extern int daemon_ShutdownFlag;
+    extern int powerStateSuspended;
 
     lock_ObtainRead(&cm_volumeLock);
-    for (volp = cm_data.allVolumesp; volp; volp=volp->allNextp) {
+    for (volp = cm_data.volumeLRULastp; 
+         volp && !daemon_ShutdownFlag && !powerStateSuspended; 
+         volp=(cm_volume_t *) osi_QPrev(&volp->q)) {
         if (volp->flags & CM_VOLUMEFLAG_IN_HASH) {
             InterlockedIncrement(&volp->refCount);
             lock_ReleaseRead(&cm_volumeLock);
@@ -1361,7 +1377,7 @@ cm_UpdateVolumeStatusInt(cm_volume_t *volp, struct cm_vol_state *statep)
                     allBusy = 0;
                 }
             } else {
-                osi_Log2(afsd_logp, "cm_UpdateVolumeStatusInt volume %d server reference %s online", 
+                osi_Log2(afsd_logp, "cm_UpdateVolumeStatusInt volume %d server reference %s down", 
                           statep->ID, osi_LogSaveString(afsd_logp,addr));
             }
             cm_PutServerNoLock(tsp);