Windows: buffers whose offsets are beyond EOF should be zero filled and locally allocated

When a buffer is being allocated for an offset that exceeds the
file length as known to the file server, that buffer should be zero
filled and it does not require server validation.

Previously all buffers were populated with a FetchData call.
This is wasteful of time and server resources when there is a
valid callback registration because the serverLength is known
to be valid.

LICENSE MIT

Change-Id: I13f9a8dbd6387c3ba71638a682e995d7a7d0862f
Reviewed-on: http://gerrit.openafs.org/1664
Tested-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Asanka Herath <asanka@secure-endpoints.com>
Reviewed-by: Asanka Herath <asanka@secure-endpoints.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
This commit is contained in:
Jeffrey Altman 2010-03-27 16:13:27 -04:00 committed by Jeffrey Altman
parent 1bb3522983
commit 5d5da6eb4d

View File

@ -457,7 +457,7 @@ long cm_StoreMini(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
long cm_BufRead(cm_buf_t *bufp, long nbytes, long *bytesReadp, cm_user_t *userp)
{
*bytesReadp = cm_data.buf_blockSize;
*bytesReadp = 0;
/* now return a code that means that I/O is done */
return 0;
@ -535,6 +535,8 @@ int cm_HaveBuffer(cm_scache_t *scp, cm_buf_t *bufp, int isBufLocked)
return 1;
if (bufp->dataVersion <= scp->dataVersion && bufp->dataVersion >= scp->bufDataVersionLow)
return 1;
if (bufp->offset.QuadPart >= scp->serverLength.QuadPart)
return 1;
if (!isBufLocked) {
code = lock_TryMutex(&bufp->mx);
if (code == 0) {