mirror of
https://github.com/reactos/reactos.git
synced 2025-05-31 06:58:10 +00:00
[NTOSKRNL] Add an helper for marking a VACB clean (ie, not dirty).
CORE-14263
This commit is contained in:
parent
a13c998183
commit
3f8788d6e5
3 changed files with 44 additions and 18 deletions
|
@ -233,9 +233,7 @@ CcPurgeCacheSection (
|
||||||
RemoveEntryList(&Vacb->VacbLruListEntry);
|
RemoveEntryList(&Vacb->VacbLruListEntry);
|
||||||
if (Vacb->Dirty)
|
if (Vacb->Dirty)
|
||||||
{
|
{
|
||||||
RemoveEntryList(&Vacb->DirtyVacbListEntry);
|
CcRosUnmarkDirtyVacb(Vacb, FALSE);
|
||||||
CcTotalDirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
|
|
||||||
Vacb->SharedCacheMap->DirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
|
|
||||||
}
|
}
|
||||||
RemoveEntryList(&Vacb->CacheMapVacbListEntry);
|
RemoveEntryList(&Vacb->CacheMapVacbListEntry);
|
||||||
InsertHeadList(&FreeList, &Vacb->CacheMapVacbListEntry);
|
InsertHeadList(&FreeList, &Vacb->CacheMapVacbListEntry);
|
||||||
|
|
|
@ -167,22 +167,11 @@ CcRosFlushVacb (
|
||||||
PROS_VACB Vacb)
|
PROS_VACB Vacb)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
KIRQL oldIrql;
|
|
||||||
|
|
||||||
Status = CcWriteVirtualAddress(Vacb);
|
Status = CcWriteVirtualAddress(Vacb);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
KeAcquireGuardedMutex(&ViewLock);
|
CcRosUnmarkDirtyVacb(Vacb, TRUE);
|
||||||
KeAcquireSpinLock(&Vacb->SharedCacheMap->CacheMapLock, &oldIrql);
|
|
||||||
|
|
||||||
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);
|
|
||||||
KeReleaseGuardedMutex(&ViewLock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -619,6 +608,39 @@ CcRosMarkDirtyVacb (
|
||||||
KeReleaseGuardedMutex(&ViewLock);
|
KeReleaseGuardedMutex(&ViewLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
CcRosUnmarkDirtyVacb (
|
||||||
|
PROS_VACB Vacb,
|
||||||
|
BOOLEAN LockViews)
|
||||||
|
{
|
||||||
|
KIRQL oldIrql;
|
||||||
|
PROS_SHARED_CACHE_MAP SharedCacheMap;
|
||||||
|
|
||||||
|
SharedCacheMap = Vacb->SharedCacheMap;
|
||||||
|
|
||||||
|
if (LockViews)
|
||||||
|
{
|
||||||
|
KeAcquireGuardedMutex(&ViewLock);
|
||||||
|
KeAcquireSpinLock(&SharedCacheMap->CacheMapLock, &oldIrql);
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT(Vacb->Dirty);
|
||||||
|
|
||||||
|
Vacb->Dirty = FALSE;
|
||||||
|
|
||||||
|
RemoveEntryList(&Vacb->DirtyVacbListEntry);
|
||||||
|
CcTotalDirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
|
||||||
|
Vacb->SharedCacheMap->DirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
|
||||||
|
CcRosVacbDecRefCount(Vacb);
|
||||||
|
|
||||||
|
if (LockViews)
|
||||||
|
{
|
||||||
|
KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, oldIrql);
|
||||||
|
KeReleaseGuardedMutex(&ViewLock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
CcRosMarkDirtyFile (
|
CcRosMarkDirtyFile (
|
||||||
|
@ -1132,9 +1154,9 @@ CcRosDeleteFileCache (
|
||||||
RemoveEntryList(¤t->VacbLruListEntry);
|
RemoveEntryList(¤t->VacbLruListEntry);
|
||||||
if (current->Dirty)
|
if (current->Dirty)
|
||||||
{
|
{
|
||||||
RemoveEntryList(¤t->DirtyVacbListEntry);
|
KeAcquireSpinLock(&SharedCacheMap->CacheMapLock, &oldIrql);
|
||||||
CcTotalDirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
|
CcRosUnmarkDirtyVacb(current, FALSE);
|
||||||
current->SharedCacheMap->DirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
|
KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, oldIrql);
|
||||||
DPRINT1("Freeing dirty VACB\n");
|
DPRINT1("Freeing dirty VACB\n");
|
||||||
}
|
}
|
||||||
InsertHeadList(&FreeList, ¤t->CacheMapVacbListEntry);
|
InsertHeadList(&FreeList, ¤t->CacheMapVacbListEntry);
|
||||||
|
|
|
@ -300,6 +300,12 @@ NTAPI
|
||||||
CcRosMarkDirtyVacb(
|
CcRosMarkDirtyVacb(
|
||||||
PROS_VACB Vacb);
|
PROS_VACB Vacb);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
CcRosUnmarkDirtyVacb(
|
||||||
|
PROS_VACB Vacb,
|
||||||
|
BOOLEAN LockViews);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
CcRosFlushDirtyPages(
|
CcRosFlushDirtyPages(
|
||||||
|
|
Loading…
Reference in a new issue