IN BOOLEAN Wait,
IN BOOLEAN Retrying)
{
- KIRQL OldIrql;
- ULONG DirtyPages;
- PLIST_ENTRY ListEntry;
PFSRTL_COMMON_FCB_HEADER Fcb;
PROS_SHARED_CACHE_MAP SharedCacheMap;
return TRUE;
}
- /* There's a limit, start counting dirty pages */
- DirtyPages = 0;
- KeAcquireSpinLock(&SharedCacheMap->CacheMapLock, &OldIrql);
- for (ListEntry = SharedCacheMap->CacheMapVacbListHead.Flink;
- ListEntry != &SharedCacheMap->CacheMapVacbListHead;
- ListEntry = ListEntry->Flink)
- {
- PROS_VACB Vacb;
-
- Vacb = CONTAINING_RECORD(ListEntry,
- ROS_VACB,
- CacheMapVacbListEntry);
- if (Vacb->Dirty)
- {
- DirtyPages += VACB_MAPPING_GRANULARITY / PAGE_SIZE;
- }
- }
- KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, OldIrql);
-
/* Is dirty page count above local threshold? */
- if (DirtyPages > SharedCacheMap->DirtyPageThreshold)
+ if (SharedCacheMap->DirtyPages > SharedCacheMap->DirtyPageThreshold)
{
return FALSE;
}
/* We cannot write if dirty pages count will bring use above
* XXX: Might not be accurate
*/
- if (DirtyPages + (BytesToWrite / PAGE_SIZE) > SharedCacheMap->DirtyPageThreshold)
+ if (SharedCacheMap->DirtyPages + (BytesToWrite / PAGE_SIZE) > SharedCacheMap->DirtyPageThreshold)
{
return FALSE;
}
SharedCacheMap = CONTAINING_RECORD(ListEntry, ROS_SHARED_CACHE_MAP, SharedCacheMapLinks);
+ /* Dirty size */
+ Dirty = (SharedCacheMap->DirtyPages * PAGE_SIZE) / 1024;
+
/* First, count for all the associated VACB */
for (Vacbs = SharedCacheMap->CacheMapVacbListHead.Flink;
Vacbs != &SharedCacheMap->CacheMapVacbListHead;
PROS_VACB Vacb;
Vacb = CONTAINING_RECORD(Vacbs, ROS_VACB, CacheMapVacbListEntry);
- if (Vacb->Dirty)
- {
- Dirty += VACB_MAPPING_GRANULARITY / 1024;
- }
if (Vacb->Valid)
{
Valid += VACB_MAPPING_GRANULARITY / 1024;