Windows: memset in RDR_RequestFileExtentsAsync
authorJeffrey Altman <jaltman@your-file-system.com>
Fri, 2 Dec 2011 18:41:38 +0000 (13:41 -0500)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 2 Dec 2011 23:54:33 +0000 (15:54 -0800)
The logic in RDR_RequestFileExtentsAsync() made it possible
for memset() to be called multiple times on a buffer that
is already known to be up to date.  Restructure the code to
make things faster.

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

src/WINNT/afsrdr/user/RDRFunction.c

index b2151d2..d822abf 100644 (file)
@@ -3215,21 +3215,22 @@ RDR_RequestFileExtentsAsync( IN cm_user_t *userp,
                 else
                     minLength = scp->length;
 
-                if (LargeIntegerGreaterThanOrEqualTo(bufp->offset, minLength)) {
+                if (!bHaveBuffer &&
+                    LargeIntegerGreaterThanOrEqualTo(bufp->offset, minLength)) {
                     memset(bufp->datap, 0, cm_data.buf_blockSize);
                     bufp->dataVersion = scp->dataVersion;
                     bHaveBuffer = TRUE;
                 }
-                lock_ReleaseRead(&scp->rw);
-
-                if ((RequestExtentsCB->Flags & AFS_EXTENT_FLAG_CLEAN) &&
-                     ByteOffset.QuadPart <= bufp->offset.QuadPart &&
-                     EndOffset.QuadPart >= bufp->offset.QuadPart + cm_data.blockSize) {
+                else if ((RequestExtentsCB->Flags & AFS_EXTENT_FLAG_CLEAN) &&
+                         ByteOffset.QuadPart <= bufp->offset.QuadPart &&
+                         EndOffset.QuadPart >= bufp->offset.QuadPart + cm_data.blockSize)
+                {
                     memset(bufp->datap, 0, cm_data.blockSize);
                     bufp->dataVersion = scp->dataVersion;
                     buf_SetDirty(bufp, &req, 0, cm_data.blockSize, userp);
                     bHaveBuffer = TRUE;
                 }
+                lock_ReleaseRead(&scp->rw);
             }
 
             /*