https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5cc0668b213b361f96ba7…
commit 5cc0668b213b361f96ba713ecaef5bc5274775d9
Author: Pierre Schweitzer <pierre(a)reactos.org>
AuthorDate: Fri Jan 26 10:40:05 2018 +0100
Commit: Pierre Schweitzer <pierre(a)reactos.org>
CommitDate: Fri Jan 26 10:42:09 2018 +0100
[NTOSKRNL] Store the total dirty pages per shared cache map in it.
---
ntoskrnl/cc/fs.c | 1 +
ntoskrnl/cc/view.c | 6 ++++++
ntoskrnl/include/internal/cc.h | 3 ++-
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/ntoskrnl/cc/fs.c b/ntoskrnl/cc/fs.c
index d068f96eb2..9e9ff1a4dc 100644
--- a/ntoskrnl/cc/fs.c
+++ b/ntoskrnl/cc/fs.c
@@ -235,6 +235,7 @@ CcPurgeCacheSection (
{
RemoveEntryList(&Vacb->DirtyVacbListEntry);
CcTotalDirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
+ Vacb->SharedCacheMap->DirtyPages -= VACB_MAPPING_GRANULARITY /
PAGE_SIZE;
}
RemoveEntryList(&Vacb->CacheMapVacbListEntry);
InsertHeadList(&FreeList, &Vacb->CacheMapVacbListEntry);
diff --git a/ntoskrnl/cc/view.c b/ntoskrnl/cc/view.c
index e8da9a51c8..b08210c241 100644
--- a/ntoskrnl/cc/view.c
+++ b/ntoskrnl/cc/view.c
@@ -175,6 +175,7 @@ CcRosFlushVacb (
Vacb->Dirty = FALSE;
RemoveEntryList(&Vacb->DirtyVacbListEntry);
CcTotalDirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
+ Vacb->SharedCacheMap->DirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
CcRosVacbDecRefCount(Vacb);
KeReleaseSpinLock(&Vacb->SharedCacheMap->CacheMapLock, oldIrql);
@@ -535,6 +536,7 @@ CcRosReleaseVacb (
{
InsertTailList(&DirtyVacbListHead, &Vacb->DirtyVacbListEntry);
CcTotalDirtyPages += VACB_MAPPING_GRANULARITY / PAGE_SIZE;
+ Vacb->SharedCacheMap->DirtyPages += VACB_MAPPING_GRANULARITY / PAGE_SIZE;
}
if (Mapped)
@@ -621,6 +623,7 @@ CcRosMarkDirtyVacb (
{
InsertTailList(&DirtyVacbListHead, &Vacb->DirtyVacbListEntry);
CcTotalDirtyPages += VACB_MAPPING_GRANULARITY / PAGE_SIZE;
+ Vacb->SharedCacheMap->DirtyPages += VACB_MAPPING_GRANULARITY / PAGE_SIZE;
}
else
{
@@ -698,6 +701,7 @@ CcRosUnmapVacb (
{
InsertTailList(&DirtyVacbListHead, &Vacb->DirtyVacbListEntry);
CcTotalDirtyPages += VACB_MAPPING_GRANULARITY / PAGE_SIZE;
+ Vacb->SharedCacheMap->DirtyPages += VACB_MAPPING_GRANULARITY / PAGE_SIZE;
}
CcRosVacbDecRefCount(Vacb);
@@ -1162,6 +1166,7 @@ CcRosDeleteFileCache (
{
RemoveEntryList(¤t->DirtyVacbListEntry);
CcTotalDirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
+ current->SharedCacheMap->DirtyPages -= VACB_MAPPING_GRANULARITY /
PAGE_SIZE;
DPRINT1("Freeing dirty VACB\n");
}
InsertHeadList(&FreeList, ¤t->CacheMapVacbListEntry);
@@ -1349,6 +1354,7 @@ CcRosInitializeFileCache (
SharedCacheMap->FileSize = FileSizes->FileSize;
SharedCacheMap->PinAccess = PinAccess;
SharedCacheMap->DirtyPageThreshold = 0;
+ SharedCacheMap->DirtyPages = 0;
KeInitializeSpinLock(&SharedCacheMap->CacheMapLock);
InitializeListHead(&SharedCacheMap->CacheMapVacbListHead);
FileObject->SectionObjectPointer->SharedCacheMap = SharedCacheMap;
diff --git a/ntoskrnl/include/internal/cc.h b/ntoskrnl/include/internal/cc.h
index 913517a762..a85df9da61 100644
--- a/ntoskrnl/include/internal/cc.h
+++ b/ntoskrnl/include/internal/cc.h
@@ -159,8 +159,9 @@ typedef struct _ROS_SHARED_CACHE_MAP
PVOID LazyWriteContext;
KSPIN_LOCK CacheMapLock;
ULONG OpenCount;
- ULONG DirtyPageThreshold;
+ ULONG DirtyPages;
LIST_ENTRY SharedCacheMapLinks;
+ ULONG DirtyPageThreshold;
#if DBG
BOOLEAN Trace; /* enable extra trace output for this cache map and it's VACBs */
#endif