Windows: refactor cm_GetBuffer avoid BIOD construction
authorJeffrey Altman <jaltman@your-file-system.com>
Wed, 2 May 2012 21:52:44 +0000 (17:52 -0400)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 4 May 2012 17:25:53 +0000 (10:25 -0700)
commita7fec07348889e9455ccec3b5028aec385b83e5f
treec03dea496ccac8de67410392ad3902dcd9496ca9
parent6b602e59af8d360f7ca2c48734477c21a94396af
Windows: refactor cm_GetBuffer avoid BIOD construction

Constructing a BIOD is a very expensive operation as it requires
obtaining exclusive locks on each and every buffer that in the
collection.  The prior code would construct a BIOD for a chunk
worth of buffers and then check to see if the current buffer is
beyond the serverLength or the truncation position.  If so, the
buffer is cleared and the buffer is returned as current after
releasing the BIOD.  This is very wasteful.  Instead, check every
buffer in the BIOD to see if it should be made current or not.
If yes, do so before releasing the BIOD.  This permits the construction
of the BIOD to be avoided for the rest of the buffers in the chunk.

Change-Id: I0a413f8be9686cd0e326a3ea3608ca954cdf4370
Reviewed-on: http://gerrit.openafs.org/7314
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>
src/WINNT/afsd/cm_dcache.c