[NTOS:CC] Fix Vacb size usage & check

This commit is contained in:
Jérôme Gardou 2020-12-02 12:39:58 +01:00
parent c74cbf0c0b
commit 70c62aa2c9

View file

@ -388,7 +388,6 @@ CcRosMarkDirtyVacb (
{ {
KIRQL oldIrql; KIRQL oldIrql;
PROS_SHARED_CACHE_MAP SharedCacheMap; PROS_SHARED_CACHE_MAP SharedCacheMap;
ULONG Length = VACB_MAPPING_GRANULARITY;
SharedCacheMap = Vacb->SharedCacheMap; SharedCacheMap = Vacb->SharedCacheMap;
@ -398,12 +397,9 @@ CcRosMarkDirtyVacb (
ASSERT(!Vacb->Dirty); ASSERT(!Vacb->Dirty);
InsertTailList(&DirtyVacbListHead, &Vacb->DirtyVacbListEntry); InsertTailList(&DirtyVacbListHead, &Vacb->DirtyVacbListEntry);
#if 0 /* FIXME: There is no reason to account for the whole VACB. */
if (Vacb->FileOffset.QuadPart + Length > SharedCacheMap->SectionSize.QuadPart) CcTotalDirtyPages += VACB_MAPPING_GRANULARITY / PAGE_SIZE;
Length = SharedCacheMap->SectionSize.QuadPart - Vacb->FileOffset.QuadPart; Vacb->SharedCacheMap->DirtyPages += VACB_MAPPING_GRANULARITY / PAGE_SIZE;
#endif
CcTotalDirtyPages += PAGE_ROUND_UP(Length) / PAGE_SIZE;
Vacb->SharedCacheMap->DirtyPages += PAGE_ROUND_UP(Length) / PAGE_SIZE;
CcRosVacbIncRefCount(Vacb); CcRosVacbIncRefCount(Vacb);
/* Move to the tail of the LRU list */ /* Move to the tail of the LRU list */
@ -430,7 +426,6 @@ CcRosUnmarkDirtyVacb (
{ {
KIRQL oldIrql; KIRQL oldIrql;
PROS_SHARED_CACHE_MAP SharedCacheMap; PROS_SHARED_CACHE_MAP SharedCacheMap;
ULONG Length = VACB_MAPPING_GRANULARITY;
SharedCacheMap = Vacb->SharedCacheMap; SharedCacheMap = Vacb->SharedCacheMap;
@ -447,12 +442,8 @@ CcRosUnmarkDirtyVacb (
RemoveEntryList(&Vacb->DirtyVacbListEntry); RemoveEntryList(&Vacb->DirtyVacbListEntry);
InitializeListHead(&Vacb->DirtyVacbListEntry); InitializeListHead(&Vacb->DirtyVacbListEntry);
#if 0 CcTotalDirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
if (Vacb->FileOffset.QuadPart + Length > SharedCacheMap->SectionSize.QuadPart) Vacb->SharedCacheMap->DirtyPages -= VACB_MAPPING_GRANULARITY / PAGE_SIZE;
Length = SharedCacheMap->SectionSize.QuadPart - Vacb->FileOffset.QuadPart;
#endif
CcTotalDirtyPages -= PAGE_ROUND_UP(Length) / PAGE_SIZE;
Vacb->SharedCacheMap->DirtyPages -= PAGE_ROUND_UP(Length) / PAGE_SIZE;
CcRosVacbDecRefCount(Vacb); CcRosVacbDecRefCount(Vacb);
@ -718,8 +709,11 @@ CcRosEnsureVacbResident(
ASSERT((Offset + Length) <= VACB_MAPPING_GRANULARITY); ASSERT((Offset + Length) <= VACB_MAPPING_GRANULARITY);
if ((Vacb->FileOffset.QuadPart + Offset) > Vacb->SharedCacheMap->FileSize.QuadPart) if ((Vacb->FileOffset.QuadPart + Offset) > Vacb->SharedCacheMap->SectionSize.QuadPart)
{
DPRINT1("Vacb read beyond the file size!\n");
return FALSE; return FALSE;
}
BaseAddress = (PVOID)((ULONG_PTR)Vacb->BaseAddress + Offset); BaseAddress = (PVOID)((ULONG_PTR)Vacb->BaseAddress + Offset);