]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Avoid IHandle leak when failing to attach volume
authorRainer Toebbicke <rtb@pclella.cern.ch>
Fri, 27 Nov 2009 14:03:25 +0000 (15:03 +0100)
committerDerrick Brashear <shadow|account-1000005@unknown>
Sat, 28 Nov 2009 17:05:44 +0000 (09:05 -0800)
When a volume fails to attach, ensure it's volume handles
get released before all traces of it are erased. Failure to do so
might cause problems once the volume is salvaged and re-attached.
VReleaseVolumeHandles_r is moved to FreeVolume and no longer called separately.

Change-Id: I2366f13fd9daa6eb8ce3b4240bb1534f14f706c4
Reviewed-on: http://gerrit.openafs.org/874
Tested-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/vol/volume.c

index 717524b9af1423d5c683c80164e0f8ea043c1b00..503dda23118d0dff74ca6d4fb757689b9d212a4f 100644 (file)
@@ -1097,7 +1097,6 @@ VPutVolume_r(register Volume * vp)
 #endif /* AFS_PTHREAD_ENV */
        }
        if (vp->shuttingDown) {
-           VReleaseVolumeHandles_r(vp);
            FreeVolume(vp);
            if (programType == fileServer)
 #ifdef AFS_PTHREAD_ENV
@@ -1273,8 +1272,6 @@ VForceOffline_r(Volume * vp)
     LWP_NoYieldSignal(VPutVolume);
 #endif /* AFS_PTHREAD_ENV */
 
-    VReleaseVolumeHandles_r(vp);
-
 }
 
 void
@@ -1573,6 +1570,7 @@ FreeVolume(Volume * vp)
     for (i = 0; i < nVNODECLASSES; i++)
        if (vp->vnodeIndex[i].bitmap)
            free(vp->vnodeIndex[i].bitmap);
+    VReleaseVolumeHandles_r(vp);
     FreeVolumeHeader(vp);
     DeleteVolumeFromHashTable(vp);
     free(vp);