lock_ReleaseWrite(&buf_globalLock);
}
-int buf_TryReserveBuffers(afs_uint64 nbuffers)
+afs_uint64
+buf_TryReserveBuffers(afs_uint64 nbuffers)
{
- int code;
+ afs_uint64 reserved;
lock_ObtainWrite(&buf_globalLock);
if (cm_data.buf_reservedBufs + nbuffers > cm_data.buf_maxReservedBufs) {
- code = 0;
+ reserved = 0;
}
else {
cm_data.buf_reservedBufs += nbuffers;
- code = 1;
+ reserved = nbuffers;
}
lock_ReleaseWrite(&buf_globalLock);
- return code;
+ return reserved;
}
/* called without global lock held, releases reservation held by
extern void buf_ReserveBuffers(afs_uint64);
-extern int buf_TryReserveBuffers(afs_uint64);
+extern afs_uint64 buf_TryReserveBuffers(afs_uint64);
extern void buf_UnreserveBuffers(afs_uint64);
/* reserve a chunk's worth of buffers */
lock_ReleaseWrite(&scp->rw);
- buf_ReserveBuffers(cm_chunkSize / cm_data.buf_blockSize);
+ biop->reserved = (cm_chunkSize / cm_data.buf_blockSize);
+ buf_ReserveBuffers(biop->reserved);
lock_ObtainWrite(&scp->rw);
bufp = NULL;
}
}
- biop->reserved = 1;
-
/* if we get here, if bufp is null, we didn't find any dirty buffers
* that weren't already being stored back, so we just quit now.
*/
/* Give back reserved buffers */
if (biop->reserved)
- buf_UnreserveBuffers(cm_chunkSize / cm_data.buf_blockSize);
+ buf_UnreserveBuffers(biop->reserved);
if (isStore)
flags = CM_SCACHESYNC_STOREDATA;
struct cm_user *userp; /* the user of the request */
struct cm_req *reqp; /* the request ptr */
osi_hyper_t offset; /* offset of buffers */
- long length; /* # of bytes to be transferred */
- int reserved; /* did we reserve multiple buffers? */
-
- /* all of these buffers are held */
- osi_queueData_t *bufListp; /* list of buffers involved in I/O */
+ afs_uint32 length; /* # of bytes to be transferred */
+ afs_uint64 reserved; /* # of reserved buffers? */
+
+ /*
+ * all of these buffers are held.
+ * the lowest offset buffer is at the end of the list.
+ */
+ osi_queueData_t *bufListp; /* list of buffers involved in I/O */
osi_queueData_t *bufListEndp; /* list of buffers involved in I/O */
} cm_bulkIO_t;