From 25db42d246ea169d2252988b0a7daf73c25feb49 Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Mon, 17 Apr 2017 18:13:17 +0000 Subject: [PATCH] [NTOS:CC] - Simplify CcSetFileSizes by using CcPurgeCacheSection CORE-12893 svn path=/trunk/; revision=74357 --- reactos/ntoskrnl/cc/fs.c | 69 ++++++---------------------------------- 1 file changed, 9 insertions(+), 60 deletions(-) diff --git a/reactos/ntoskrnl/cc/fs.c b/reactos/ntoskrnl/cc/fs.c index 1bf5095aa98..d0f3a385dd1 100644 --- a/reactos/ntoskrnl/cc/fs.c +++ b/reactos/ntoskrnl/cc/fs.c @@ -225,10 +225,6 @@ CcSetFileSizes ( { KIRQL oldirql; PROS_SHARED_CACHE_MAP SharedCacheMap; - PLIST_ENTRY current_entry; - PROS_VACB current; - LIST_ENTRY FreeListHead; - NTSTATUS Status; CCTRACE(CC_API_DEBUG, "FileObject=%p FileSizes=%p\n", FileObject, FileSizes); @@ -251,63 +247,16 @@ CcSetFileSizes ( if (FileSizes->AllocationSize.QuadPart < SharedCacheMap->SectionSize.QuadPart) { - InitializeListHead(&FreeListHead); - KeAcquireGuardedMutex(&ViewLock); - KeAcquireSpinLock(&SharedCacheMap->CacheMapLock, &oldirql); - - current_entry = SharedCacheMap->CacheMapVacbListHead.Flink; - while (current_entry != &SharedCacheMap->CacheMapVacbListHead) - { - current = CONTAINING_RECORD(current_entry, - ROS_VACB, - CacheMapVacbListEntry); - current_entry = current_entry->Flink; - if (current->FileOffset.QuadPart >= FileSizes->AllocationSize.QuadPart) - { - if ((current->ReferenceCount == 0) || ((current->ReferenceCount == 1) && current->Dirty)) - { - RemoveEntryList(¤t->CacheMapVacbListEntry); - RemoveEntryList(¤t->VacbLruListEntry); - if (current->Dirty) - { - RemoveEntryList(¤t->DirtyVacbListEntry); - DirtyPageCount -= VACB_MAPPING_GRANULARITY / PAGE_SIZE; - } - InsertHeadList(&FreeListHead, ¤t->CacheMapVacbListEntry); - } - else - { - DPRINT1("Someone has referenced a VACB behind the new size.\n"); - KeBugCheck(CACHE_MANAGER); - } - } - } - - SharedCacheMap->SectionSize = FileSizes->AllocationSize; - SharedCacheMap->FileSize = FileSizes->FileSize; - KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, oldirql); - KeReleaseGuardedMutex(&ViewLock); - - current_entry = FreeListHead.Flink; - while(current_entry != &FreeListHead) - { - current = CONTAINING_RECORD(current_entry, ROS_VACB, CacheMapVacbListEntry); - current_entry = current_entry->Flink; - Status = CcRosInternalFreeVacb(current); - if (!NT_SUCCESS(Status)) - { - DPRINT1("CcRosInternalFreeVacb failed, status = %x\n", Status); - KeBugCheck(CACHE_MANAGER); - } - } - } - else - { - KeAcquireSpinLock(&SharedCacheMap->CacheMapLock, &oldirql); - SharedCacheMap->SectionSize = FileSizes->AllocationSize; - SharedCacheMap->FileSize = FileSizes->FileSize; - KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, oldirql); + CcPurgeCacheSection(FileObject->SectionObjectPointer, + &FileSizes->AllocationSize, + 0, + FALSE); } + + KeAcquireSpinLock(&SharedCacheMap->CacheMapLock, &oldirql); + SharedCacheMap->SectionSize = FileSizes->AllocationSize; + SharedCacheMap->FileSize = FileSizes->FileSize; + KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, oldirql); } /* -- 2.17.1