Windows: AFSTearDownFcbExtents count extents properly
authorJeffrey Altman <jaltman@your-file-system.com>
Thu, 29 Nov 2012 08:02:48 +0000 (03:02 -0500)
committerJeffrey Altman <jaltman@your-file-system.com>
Mon, 3 Dec 2012 22:05:03 +0000 (14:05 -0800)
Fcb->Specific.File.ExtentsCount cannot be used directly
in the for loop conditional because each call to AFSFreeExtent()
decrements the value.  Instead, save the original value to
'lFcbExtentCount' and use that in the loop conditional.

Change-Id: I7b2dc0fbd1cbf0eec2f627f8caad8c973c3437c7
Reviewed-on: http://gerrit.openafs.org/8566
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Tested-by: Jeffrey Altman <jaltman@your-file-system.com>

src/WINNT/afsrdr/kernel/lib/AFSExtentsSupport.cpp

index 0390f23..078200e 100644 (file)
@@ -151,6 +151,7 @@ AFSTearDownFcbExtents( IN AFSFcb *Fcb,
     LIST_ENTRY          *le, *leNext;
     AFSExtent           *pEntry;
     LONG                 lExtentCount = 0, lProcessCount = 0;
+    LONG                 lFcbExtentCount;
     ULONG                ulReleaseCount = 0;
     size_t               sz;
     AFSReleaseExtentsCB *pRelease = NULL;
@@ -215,8 +216,9 @@ AFSTearDownFcbExtents( IN AFSFcb *Fcb,
                         TRUE);
 
         for( le = Fcb->Specific.File.ExtentsLists[AFS_EXTENTS_LIST].Flink,
-             lExtentCount = 0;
-             lExtentCount < Fcb->Specific.File.ExtentCount;
+             lExtentCount = 0,
+             lFcbExtentCount = Fcb->Specific.File.ExtentCount;
+             lExtentCount < lFcbExtentCount;
              lExtentCount += lProcessCount)
         {
 
@@ -227,7 +229,7 @@ AFSTearDownFcbExtents( IN AFSFcb *Fcb,
             for( lProcessCount = 0, ulReleaseCount = 0;
                  !IsListEmpty( le) &&
                  ulReleaseCount < AFS_MAXIMUM_EXTENT_RELEASE_COUNT &&
-                 lExtentCount + lProcessCount < Fcb->Specific.File.ExtentCount;
+                 lExtentCount + lProcessCount < lFcbExtentCount;
                  lProcessCount++, le = leNext)
             {