From 3fce5b3541d118bc452fe236e557acde57587462 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 2 Dec 2011 13:41:38 -0500 Subject: [PATCH] Windows: memset in RDR_RequestFileExtentsAsync 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 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsrdr/user/RDRFunction.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/WINNT/afsrdr/user/RDRFunction.c b/src/WINNT/afsrdr/user/RDRFunction.c index b2151d23e..d822abf70 100644 --- a/src/WINNT/afsrdr/user/RDRFunction.c +++ b/src/WINNT/afsrdr/user/RDRFunction.c @@ -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); } /* -- 2.39.5