Author: tfaber Date: Mon Apr 17 18:13:17 2017 New Revision: 74357
URL: http://svn.reactos.org/svn/reactos?rev=74357&view=rev Log: [NTOS:CC] - Simplify CcSetFileSizes by using CcPurgeCacheSection CORE-12893
Modified: trunk/reactos/ntoskrnl/cc/fs.c
Modified: trunk/reactos/ntoskrnl/cc/fs.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/cc/fs.c?rev=74357&... ============================================================================== --- trunk/reactos/ntoskrnl/cc/fs.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/cc/fs.c [iso-8859-1] Mon Apr 17 18:13:17 2017 @@ -225,10 +225,6 @@ { 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 @@
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); }
/*