Windows: cm_SetupStoreBIOD use firstModOffset chunk
authorJeffrey Altman <jaltman@your-file-system.com>
Wed, 16 Nov 2011 00:00:05 +0000 (19:00 -0500)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 16 Nov 2011 14:06:08 +0000 (06:06 -0800)
When cm_SetupStoreBIOD attempts to store a chunk to the file
server it should not use *inOffsetp as the start of the range.
There is no guarantee that the buffer at *inOffsetp is dirty.
Instead use firstModOffset which refers to the first known
dirty buffer in the range specified by the caller.  Attempt
to fill a chunk of consecutive dirty buffers from that point.

Change-Id: I468e896b046192461d6fe0dc3669e5feeb7886ba
Reviewed-on: http://gerrit.openafs.org/6057
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>
Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>

src/WINNT/afsd/cm_dcache.c

index 1598714..9a7e82a 100644 (file)
@@ -1088,8 +1088,8 @@ long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize,
     biop->offset = firstModOffset;
     bufp = NULL;       /* this buffer and reference added to the queue */
 
-    /* compute the window surrounding *inOffsetp of size cm_chunkSize */
-    scanStart = *inOffsetp;
+    /* compute the window surrounding firstModOffset of size cm_chunkSize */
+    scanStart = firstModOffset;
     scanStart.LowPart &= (-cm_chunkSize);
     thyper = ConvertLongToLargeInteger(cm_chunkSize);
     scanEnd = LargeIntegerAdd(scanStart, thyper);