]> 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)
committerRuss Allbery <rra@debian.org>
Mon, 30 Nov 2009 22:50:45 +0000 (14:50 -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 2d20c06864d34f08ffc6f3ca2b5423068f6599c6..887f8dd9ac07e93e176e8af310e37325b7976f17 100644 (file)
@@ -1099,7 +1099,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
@@ -1275,8 +1274,6 @@ VForceOffline_r(Volume * vp)
     LWP_NoYieldSignal(VPutVolume);
 #endif /* AFS_PTHREAD_ENV */
 
-    VReleaseVolumeHandles_r(vp);
-
 }
 
 void
@@ -1575,6 +1572,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);