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);
}
/*