]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-windows-vnovol-20080214
authorJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 14 Feb 2008 19:20:32 +0000 (19:20 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 14 Feb 2008 19:20:32 +0000 (19:20 +0000)
LICENSE MIT

avoid a crash when logging VNOVOL errors returned from cm_CheckOfflineVolume

(cherry picked from commit 1133cc441862f3f0d44f0ab380a7274ead672b0f)

src/WINNT/afsd/cm_conn.c

index 5f877f7fd561382f03f809c471686f4800c0de90..05498dd95b5da258ec2fb2e9e52beeeddd15a20c 100644 (file)
@@ -291,7 +291,7 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp,
                 else if (fidp->volume == volp->bk.ID)
                     statep = &volp->bk;
 
-                if (statep->state != vl_offline) {
+                if (statep->state != vl_offline && statep->state != vl_unknown) {
                     retry = 1;
                 } else {
                     if (cm_CheckOfflineVolume(volp, statep->ID))
@@ -323,7 +323,9 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp,
                     else if (fidp->volume == volp->bk.ID)
                         statep = &volp->bk;
 
-                    if (statep->state != vl_offline && statep->state != vl_busy) {
+                    if (statep->state != vl_offline && 
+                        statep->state != vl_busy &&
+                        statep->state != vl_unknown) {
                         retry = 1;
                     } else {
                         if (!serversp) {
@@ -457,17 +459,19 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp,
             break;
         }
 
-        /* Log server being offline for this volume */
-        sprintf(addr, "%d.%d.%d.%d", 
-                 ((serverp->addr.sin_addr.s_addr & 0xff)),
-                 ((serverp->addr.sin_addr.s_addr & 0xff00)>> 8),
-                 ((serverp->addr.sin_addr.s_addr & 0xff0000)>> 16),
-                 ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24)); 
+        if (serverp && fidp) {
+            /* Log server being offline for this volume */
+            sprintf(addr, "%d.%d.%d.%d", 
+                    ((serverp->addr.sin_addr.s_addr & 0xff)),
+                    ((serverp->addr.sin_addr.s_addr & 0xff00)>> 8),
+                    ((serverp->addr.sin_addr.s_addr & 0xff0000)>> 16),
+                    ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24)); 
 
-       osi_Log2(afsd_logp, format, osi_LogSaveString(afsd_logp,addr), fidp->volume);
+            osi_Log2(afsd_logp, format, osi_LogSaveString(afsd_logp,addr), fidp->volume);
 #ifndef DJGPP
-       LogEvent(EVENTLOG_WARNING_TYPE, msgID, addr, fidp->volume);
+            LogEvent(EVENTLOG_WARNING_TYPE, msgID, addr, fidp->volume);
 #endif
+        }
 
         /* Mark server offline for this volume */
         if (!serversp && fidp) {
@@ -477,6 +481,7 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp,
                 free_svr_list = 1;
             }
         }
+
         lock_ObtainWrite(&cm_serverLock);
         for (tsrp = serversp; tsrp; tsrp=tsrp->next) {
             if (tsrp->server == serverp) {