mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 21:05:43 +00:00
[NTOS:CC]
- Respect the TruncateSize parameter in CcUninitializeCacheMap. Avoids "freeing dirty VACB" messages for cache views beyond the end of the file. CORE-12893 #resolve svn path=/trunk/; revision=74358
This commit is contained in:
parent
25db42d246
commit
4677d6bfe0
1 changed files with 21 additions and 0 deletions
|
@ -286,13 +286,34 @@ CcUninitializeCacheMap (
|
||||||
IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL)
|
IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
PROS_SHARED_CACHE_MAP SharedCacheMap;
|
||||||
|
KIRQL OldIrql;
|
||||||
|
|
||||||
CCTRACE(CC_API_DEBUG, "FileObject=%p TruncateSize=%p UninitializeCompleteEvent=%p\n",
|
CCTRACE(CC_API_DEBUG, "FileObject=%p TruncateSize=%p UninitializeCompleteEvent=%p\n",
|
||||||
FileObject, TruncateSize, UninitializeCompleteEvent);
|
FileObject, TruncateSize, UninitializeCompleteEvent);
|
||||||
|
|
||||||
|
if (TruncateSize != NULL &&
|
||||||
|
FileObject->SectionObjectPointer != NULL &&
|
||||||
|
FileObject->SectionObjectPointer->SharedCacheMap != NULL)
|
||||||
|
{
|
||||||
|
SharedCacheMap = FileObject->SectionObjectPointer->SharedCacheMap;
|
||||||
|
KeAcquireSpinLock(&SharedCacheMap->CacheMapLock, &OldIrql);
|
||||||
|
if (SharedCacheMap->FileSize.QuadPart > TruncateSize->QuadPart)
|
||||||
|
{
|
||||||
|
SharedCacheMap->FileSize = *TruncateSize;
|
||||||
|
}
|
||||||
|
KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, OldIrql);
|
||||||
|
CcPurgeCacheSection(FileObject->SectionObjectPointer,
|
||||||
|
TruncateSize,
|
||||||
|
0,
|
||||||
|
FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
Status = CcRosReleaseFileCache(FileObject);
|
Status = CcRosReleaseFileCache(FileObject);
|
||||||
if (UninitializeCompleteEvent)
|
if (UninitializeCompleteEvent)
|
||||||
|
{
|
||||||
KeSetEvent(&UninitializeCompleteEvent->Event, IO_NO_INCREMENT, FALSE);
|
KeSetEvent(&UninitializeCompleteEvent->Event, IO_NO_INCREMENT, FALSE);
|
||||||
|
}
|
||||||
return NT_SUCCESS(Status);
|
return NT_SUCCESS(Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue