mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[NTOSKRNL] Avoid private cache map allocation for the first handle
Standard shared cache map provides space for a private cache map, do the same and make it available for the first handle. It avoids two allocations in a row.
This commit is contained in:
parent
5d93941d31
commit
a6e080bd3d
2 changed files with 18 additions and 2 deletions
|
@ -1194,7 +1194,14 @@ CcRosReleaseFileCache (
|
|||
KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, OldIrql);
|
||||
|
||||
/* And free it. */
|
||||
ExFreePoolWithTag(PrivateMap, TAG_PRIVATE_CACHE_MAP);
|
||||
if (PrivateMap != &SharedCacheMap->PrivateCacheMap)
|
||||
{
|
||||
ExFreePoolWithTag(PrivateMap, TAG_PRIVATE_CACHE_MAP);
|
||||
}
|
||||
else
|
||||
{
|
||||
PrivateMap->NodeTypeCode = 0;
|
||||
}
|
||||
|
||||
if (SharedCacheMap->OpenCount > 0)
|
||||
{
|
||||
|
@ -1271,7 +1278,15 @@ CcRosInitializeFileCache (
|
|||
PPRIVATE_CACHE_MAP PrivateMap;
|
||||
|
||||
/* Allocate the private cache map for this handle */
|
||||
PrivateMap = ExAllocatePoolWithTag(NonPagedPool, sizeof(PRIVATE_CACHE_MAP), TAG_PRIVATE_CACHE_MAP);
|
||||
if (SharedCacheMap->PrivateCacheMap.NodeTypeCode != 0)
|
||||
{
|
||||
PrivateMap = ExAllocatePoolWithTag(NonPagedPool, sizeof(PRIVATE_CACHE_MAP), TAG_PRIVATE_CACHE_MAP);
|
||||
}
|
||||
else
|
||||
{
|
||||
PrivateMap = &SharedCacheMap->PrivateCacheMap;
|
||||
}
|
||||
|
||||
if (PrivateMap == NULL)
|
||||
{
|
||||
/* If we also allocated the shared cache map for this file, kill it */
|
||||
|
|
|
@ -169,6 +169,7 @@ typedef struct _ROS_SHARED_CACHE_MAP
|
|||
PVOID LazyWriteContext;
|
||||
LIST_ENTRY PrivateList;
|
||||
ULONG DirtyPageThreshold;
|
||||
PRIVATE_CACHE_MAP PrivateCacheMap;
|
||||
|
||||
/* ROS specific */
|
||||
LIST_ENTRY CacheMapVacbListHead;
|
||||
|
|
Loading…
Reference in a new issue