mirror of
https://github.com/reactos/reactos.git
synced 2024-07-01 10:20:03 +00:00
[NTOS:CC]
- Remove CacheSegmentSize - Misc simplifications and style improvements CORE-7491 svn path=/trunk/; revision=60484
This commit is contained in:
parent
5dafa70a30
commit
dca12046f3
|
@ -19,6 +19,7 @@ static PFN_NUMBER CcZeroPage = 0;
|
||||||
|
|
||||||
#define MAX_ZERO_LENGTH (256 * 1024)
|
#define MAX_ZERO_LENGTH (256 * 1024)
|
||||||
#define MAX_RW_LENGTH (256 * 1024)
|
#define MAX_RW_LENGTH (256 * 1024)
|
||||||
|
C_ASSERT(MAX_RW_LENGTH <= VACB_MAPPING_GRANULARITY);
|
||||||
|
|
||||||
ULONG CcFastMdlReadWait;
|
ULONG CcFastMdlReadWait;
|
||||||
ULONG CcFastMdlReadNotPossible;
|
ULONG CcFastMdlReadNotPossible;
|
||||||
|
@ -88,7 +89,7 @@ ReadCacheSegmentChain (
|
||||||
if (current->Valid)
|
if (current->Valid)
|
||||||
{
|
{
|
||||||
TempLength = min(VACB_MAPPING_GRANULARITY, Length);
|
TempLength = min(VACB_MAPPING_GRANULARITY, Length);
|
||||||
memcpy(Buffer, current->BaseAddress, TempLength);
|
RtlCopyMemory(Buffer, current->BaseAddress, TempLength);
|
||||||
|
|
||||||
Buffer = (PVOID)((ULONG_PTR)Buffer + TempLength);
|
Buffer = (PVOID)((ULONG_PTR)Buffer + TempLength);
|
||||||
|
|
||||||
|
@ -130,7 +131,7 @@ ReadCacheSegmentChain (
|
||||||
while ((current2 != NULL) && !current2->Valid && (current_size < MAX_RW_LENGTH))
|
while ((current2 != NULL) && !current2->Valid && (current_size < MAX_RW_LENGTH))
|
||||||
{
|
{
|
||||||
PVOID address = current2->BaseAddress;
|
PVOID address = current2->BaseAddress;
|
||||||
for (i = 0; i < (VACB_MAPPING_GRANULARITY / PAGE_SIZE); i++, address = RVA(address, PAGE_SIZE))
|
for (i = 0; i < VACB_MAPPING_GRANULARITY / PAGE_SIZE; i++, address = RVA(address, PAGE_SIZE))
|
||||||
{
|
{
|
||||||
*MdlPages++ = MmGetPfnForProcess(NULL, address);
|
*MdlPages++ = MmGetPfnForProcess(NULL, address);
|
||||||
}
|
}
|
||||||
|
@ -173,7 +174,7 @@ ReadCacheSegmentChain (
|
||||||
previous = current;
|
previous = current;
|
||||||
current = current->NextInChain;
|
current = current->NextInChain;
|
||||||
TempLength = min(VACB_MAPPING_GRANULARITY, Length);
|
TempLength = min(VACB_MAPPING_GRANULARITY, Length);
|
||||||
memcpy(Buffer, previous->BaseAddress, TempLength);
|
RtlCopyMemory(Buffer, previous->BaseAddress, TempLength);
|
||||||
|
|
||||||
Buffer = (PVOID)((ULONG_PTR)Buffer + TempLength);
|
Buffer = (PVOID)((ULONG_PTR)Buffer + TempLength);
|
||||||
|
|
||||||
|
@ -229,7 +230,7 @@ ReadCacheSegment (
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VACB_MAPPING_GRANULARITY > Size)
|
if (Size < VACB_MAPPING_GRANULARITY)
|
||||||
{
|
{
|
||||||
RtlZeroMemory((char*)CacheSeg->BaseAddress + Size,
|
RtlZeroMemory((char*)CacheSeg->BaseAddress + Size,
|
||||||
VACB_MAPPING_GRANULARITY - Size);
|
VACB_MAPPING_GRANULARITY - Size);
|
||||||
|
@ -381,10 +382,10 @@ CcCopyRead (
|
||||||
TempLength = ReadOffset % VACB_MAPPING_GRANULARITY;
|
TempLength = ReadOffset % VACB_MAPPING_GRANULARITY;
|
||||||
if (TempLength != 0)
|
if (TempLength != 0)
|
||||||
{
|
{
|
||||||
TempLength = min (Length, VACB_MAPPING_GRANULARITY - TempLength);
|
TempLength = min(Length, VACB_MAPPING_GRANULARITY - TempLength);
|
||||||
Status = CcRosRequestCacheSegment(Bcb,
|
Status = CcRosRequestCacheSegment(Bcb,
|
||||||
ROUND_DOWN(ReadOffset,
|
ROUND_DOWN(ReadOffset,
|
||||||
VACB_MAPPING_GRANULARITY),
|
VACB_MAPPING_GRANULARITY),
|
||||||
&BaseAddress, &Valid, &CacheSeg);
|
&BaseAddress, &Valid, &CacheSeg);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -404,8 +405,9 @@ CcCopyRead (
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
memcpy (Buffer, (char*)BaseAddress + ReadOffset % VACB_MAPPING_GRANULARITY,
|
RtlCopyMemory(Buffer,
|
||||||
TempLength);
|
(char*)BaseAddress + ReadOffset % VACB_MAPPING_GRANULARITY,
|
||||||
|
TempLength);
|
||||||
CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, FALSE);
|
CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, FALSE);
|
||||||
ReadLength += TempLength;
|
ReadLength += TempLength;
|
||||||
Length -= TempLength;
|
Length -= TempLength;
|
||||||
|
@ -415,7 +417,7 @@ CcCopyRead (
|
||||||
|
|
||||||
while (Length > 0)
|
while (Length > 0)
|
||||||
{
|
{
|
||||||
TempLength = min(max(VACB_MAPPING_GRANULARITY, MAX_RW_LENGTH), Length);
|
TempLength = min(VACB_MAPPING_GRANULARITY, Length);
|
||||||
Status = ReadCacheSegmentChain(Bcb, ReadOffset, TempLength, Buffer);
|
Status = ReadCacheSegmentChain(Bcb, ReadOffset, TempLength, Buffer);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -498,7 +500,7 @@ CcCopyWrite (
|
||||||
{
|
{
|
||||||
ULONG ROffset;
|
ULONG ROffset;
|
||||||
ROffset = ROUND_DOWN(WriteOffset, VACB_MAPPING_GRANULARITY);
|
ROffset = ROUND_DOWN(WriteOffset, VACB_MAPPING_GRANULARITY);
|
||||||
TempLength = min (Length, VACB_MAPPING_GRANULARITY - TempLength);
|
TempLength = min(Length, VACB_MAPPING_GRANULARITY - TempLength);
|
||||||
Status = CcRosRequestCacheSegment(Bcb, ROffset,
|
Status = CcRosRequestCacheSegment(Bcb, ROffset,
|
||||||
&BaseAddress, &Valid, &CacheSeg);
|
&BaseAddress, &Valid, &CacheSeg);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
@ -512,8 +514,9 @@ CcCopyWrite (
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
memcpy ((char*)BaseAddress + WriteOffset % VACB_MAPPING_GRANULARITY,
|
RtlCopyMemory((char*)BaseAddress + WriteOffset % VACB_MAPPING_GRANULARITY,
|
||||||
Buffer, TempLength);
|
Buffer,
|
||||||
|
TempLength);
|
||||||
CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, TRUE, FALSE);
|
CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, TRUE, FALSE);
|
||||||
|
|
||||||
Length -= TempLength;
|
Length -= TempLength;
|
||||||
|
@ -524,7 +527,7 @@ CcCopyWrite (
|
||||||
|
|
||||||
while (Length > 0)
|
while (Length > 0)
|
||||||
{
|
{
|
||||||
TempLength = min (VACB_MAPPING_GRANULARITY, Length);
|
TempLength = min(VACB_MAPPING_GRANULARITY, Length);
|
||||||
Status = CcRosRequestCacheSegment(Bcb,
|
Status = CcRosRequestCacheSegment(Bcb,
|
||||||
WriteOffset,
|
WriteOffset,
|
||||||
&BaseAddress,
|
&BaseAddress,
|
||||||
|
@ -542,7 +545,7 @@ CcCopyWrite (
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
memcpy (BaseAddress, Buffer, TempLength);
|
RtlCopyMemory(BaseAddress, Buffer, TempLength);
|
||||||
CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, TRUE, FALSE);
|
CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, TRUE, FALSE);
|
||||||
Length -= TempLength;
|
Length -= TempLength;
|
||||||
WriteOffset += TempLength;
|
WriteOffset += TempLength;
|
||||||
|
@ -749,13 +752,14 @@ CcZeroData (
|
||||||
Status);
|
Status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TempLength = min (CurrentLength, VACB_MAPPING_GRANULARITY - Offset);
|
TempLength = min(CurrentLength, VACB_MAPPING_GRANULARITY - Offset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TempLength = VACB_MAPPING_GRANULARITY;
|
TempLength = VACB_MAPPING_GRANULARITY;
|
||||||
}
|
}
|
||||||
memset ((PUCHAR)current->BaseAddress + Offset, 0, TempLength);
|
RtlZeroMemory((PUCHAR)current->BaseAddress + Offset,
|
||||||
|
TempLength);
|
||||||
|
|
||||||
WriteOffset.QuadPart += TempLength;
|
WriteOffset.QuadPart += TempLength;
|
||||||
CurrentLength -= TempLength;
|
CurrentLength -= TempLength;
|
||||||
|
|
|
@ -87,7 +87,7 @@ CcInitializeCacheMap (
|
||||||
|
|
||||||
/* Call old ROS cache init function */
|
/* Call old ROS cache init function */
|
||||||
CcRosInitializeFileCache(FileObject,
|
CcRosInitializeFileCache(FileObject,
|
||||||
/*PAGE_SIZE*/ VACB_MAPPING_GRANULARITY, CallBacks,
|
CallBacks,
|
||||||
LazyWriterContext);
|
LazyWriterContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ CcMapData (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*pBuffer = (PVOID)((ULONG_PTR)(*pBuffer) + (ReadOffset % VACB_MAPPING_GRANULARITY));
|
*pBuffer = (PVOID)((ULONG_PTR)(*pBuffer) + ReadOffset % VACB_MAPPING_GRANULARITY);
|
||||||
iBcb = ExAllocateFromNPagedLookasideList(&iBcbLookasideList);
|
iBcb = ExAllocateFromNPagedLookasideList(&iBcbLookasideList);
|
||||||
if (iBcb == NULL)
|
if (iBcb == NULL)
|
||||||
{
|
{
|
||||||
|
@ -96,7 +96,7 @@ CcMapData (
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(iBcb, 0, sizeof(INTERNAL_BCB));
|
RtlZeroMemory(iBcb, sizeof(*iBcb));
|
||||||
iBcb->PFCB.NodeTypeCode = 0xDE45; /* Undocumented (CAPTIVE_PUBLIC_BCB_NODETYPECODE) */
|
iBcb->PFCB.NodeTypeCode = 0xDE45; /* Undocumented (CAPTIVE_PUBLIC_BCB_NODETYPECODE) */
|
||||||
iBcb->PFCB.NodeByteSize = sizeof(PUBLIC_BCB);
|
iBcb->PFCB.NodeByteSize = sizeof(PUBLIC_BCB);
|
||||||
iBcb->PFCB.MappedLength = Length;
|
iBcb->PFCB.MappedLength = Length;
|
||||||
|
|
|
@ -53,7 +53,7 @@ static LIST_ENTRY DirtySegmentListHead;
|
||||||
static LIST_ENTRY CacheSegmentListHead;
|
static LIST_ENTRY CacheSegmentListHead;
|
||||||
static LIST_ENTRY CacheSegmentLRUListHead;
|
static LIST_ENTRY CacheSegmentLRUListHead;
|
||||||
static LIST_ENTRY ClosedListHead;
|
static LIST_ENTRY ClosedListHead;
|
||||||
ULONG DirtyPageCount=0;
|
ULONG DirtyPageCount = 0;
|
||||||
|
|
||||||
KGUARDED_MUTEX ViewLock;
|
KGUARDED_MUTEX ViewLock;
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ CcRosFlushCacheSegment (
|
||||||
KeReleaseGuardedMutex(&ViewLock);
|
KeReleaseGuardedMutex(&ViewLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(Status);
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -273,7 +273,7 @@ CcRosFlushDirtyPages (
|
||||||
KeLeaveCriticalRegion();
|
KeLeaveCriticalRegion();
|
||||||
|
|
||||||
DPRINT("CcRosFlushDirtyPages() finished\n");
|
DPRINT("CcRosFlushDirtyPages() finished\n");
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -396,7 +396,7 @@ retry:
|
||||||
|
|
||||||
DPRINT("Evicted %lu cache pages\n", (*NrFreed));
|
DPRINT("Evicted %lu cache pages\n", (*NrFreed));
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -448,7 +448,7 @@ CcRosReleaseCacheSegment (
|
||||||
KeReleaseGuardedMutex(&ViewLock);
|
KeReleaseGuardedMutex(&ViewLock);
|
||||||
KeReleaseMutex(&CacheSeg->Mutex, FALSE);
|
KeReleaseMutex(&CacheSeg->Mutex, FALSE);
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns with Cache Segment Lock Held! */
|
/* Returns with Cache Segment Lock Held! */
|
||||||
|
@ -540,7 +540,7 @@ CcRosMarkDirtyCacheSegment (
|
||||||
KeReleaseGuardedMutex(&ViewLock);
|
KeReleaseGuardedMutex(&ViewLock);
|
||||||
KeReleaseMutex(&CacheSeg->Mutex, FALSE);
|
KeReleaseMutex(&CacheSeg->Mutex, FALSE);
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -562,7 +562,7 @@ CcRosUnmapCacheSegment (
|
||||||
CacheSeg = CcRosLookupCacheSegment(Bcb, FileOffset);
|
CacheSeg = CcRosLookupCacheSegment(Bcb, FileOffset);
|
||||||
if (CacheSeg == NULL)
|
if (CacheSeg == NULL)
|
||||||
{
|
{
|
||||||
return(STATUS_UNSUCCESSFUL);
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
KeAcquireGuardedMutex(&ViewLock);
|
KeAcquireGuardedMutex(&ViewLock);
|
||||||
|
@ -593,7 +593,7 @@ CcRosUnmapCacheSegment (
|
||||||
KeReleaseGuardedMutex(&ViewLock);
|
KeReleaseGuardedMutex(&ViewLock);
|
||||||
KeReleaseMutex(&CacheSeg->Mutex, FALSE);
|
KeReleaseMutex(&CacheSeg->Mutex, FALSE);
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
@ -713,7 +713,9 @@ CcRosCreateCacheSegment (
|
||||||
#ifdef CACHE_BITMAP
|
#ifdef CACHE_BITMAP
|
||||||
KeAcquireSpinLock(&CiCacheSegMappingRegionLock, &oldIrql);
|
KeAcquireSpinLock(&CiCacheSegMappingRegionLock, &oldIrql);
|
||||||
|
|
||||||
StartingOffset = RtlFindClearBitsAndSet(&CiCacheSegMappingRegionAllocMap, VACB_MAPPING_GRANULARITY / PAGE_SIZE, CiCacheSegMappingRegionHint);
|
StartingOffset = RtlFindClearBitsAndSet(&CiCacheSegMappingRegionAllocMap,
|
||||||
|
VACB_MAPPING_GRANULARITY / PAGE_SIZE,
|
||||||
|
CiCacheSegMappingRegionHint);
|
||||||
|
|
||||||
if (StartingOffset == 0xffffffff)
|
if (StartingOffset == 0xffffffff)
|
||||||
{
|
{
|
||||||
|
@ -764,7 +766,7 @@ CcRosCreateCacheSegment (
|
||||||
MmMapMemoryArea(current->BaseAddress, VACB_MAPPING_GRANULARITY,
|
MmMapMemoryArea(current->BaseAddress, VACB_MAPPING_GRANULARITY,
|
||||||
MC_CACHE, PAGE_READWRITE);
|
MC_CACHE, PAGE_READWRITE);
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -815,7 +817,7 @@ CcRosGetCacheSegmentChain (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < (Length / VACB_MAPPING_GRANULARITY); i++)
|
for (i = 0; i < Length / VACB_MAPPING_GRANULARITY; i++)
|
||||||
{
|
{
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
{
|
{
|
||||||
|
@ -831,7 +833,7 @@ CcRosGetCacheSegmentChain (
|
||||||
ASSERT(Previous);
|
ASSERT(Previous);
|
||||||
Previous->NextInChain = NULL;
|
Previous->NextInChain = NULL;
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -883,7 +885,7 @@ CcRosGetCacheSegment (
|
||||||
DPRINT("*BaseAddress %p\n", *BaseAddress);
|
DPRINT("*BaseAddress %p\n", *BaseAddress);
|
||||||
*CacheSeg = current;
|
*CacheSeg = current;
|
||||||
*BaseOffset = current->FileOffset;
|
*BaseOffset = current->FileOffset;
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -902,19 +904,19 @@ CcRosRequestCacheSegment (
|
||||||
|
|
||||||
ASSERT(Bcb);
|
ASSERT(Bcb);
|
||||||
|
|
||||||
if ((FileOffset % VACB_MAPPING_GRANULARITY) != 0)
|
if (FileOffset % VACB_MAPPING_GRANULARITY != 0)
|
||||||
{
|
{
|
||||||
DPRINT1("Bad fileoffset %x should be multiple of %x",
|
DPRINT1("Bad fileoffset %x should be multiple of %x",
|
||||||
FileOffset, VACB_MAPPING_GRANULARITY);
|
FileOffset, VACB_MAPPING_GRANULARITY);
|
||||||
KeBugCheck(CACHE_MANAGER);
|
KeBugCheck(CACHE_MANAGER);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(CcRosGetCacheSegment(Bcb,
|
return CcRosGetCacheSegment(Bcb,
|
||||||
FileOffset,
|
FileOffset,
|
||||||
&BaseOffset,
|
&BaseOffset,
|
||||||
BaseAddress,
|
BaseAddress,
|
||||||
UptoDate,
|
UptoDate,
|
||||||
CacheSeg));
|
CacheSeg);
|
||||||
}
|
}
|
||||||
#ifdef CACHE_BITMAP
|
#ifdef CACHE_BITMAP
|
||||||
#else
|
#else
|
||||||
|
@ -977,7 +979,7 @@ CcRosInternalFreeCacheSegment (
|
||||||
|
|
||||||
RtlClearBits(&CiCacheSegMappingRegionAllocMap, Base, RegionSize);
|
RtlClearBits(&CiCacheSegMappingRegionAllocMap, Base, RegionSize);
|
||||||
|
|
||||||
CiCacheSegMappingRegionHint = min (CiCacheSegMappingRegionHint, Base);
|
CiCacheSegMappingRegionHint = min(CiCacheSegMappingRegionHint, Base);
|
||||||
|
|
||||||
KeReleaseSpinLock(&CiCacheSegMappingRegionLock, oldIrql);
|
KeReleaseSpinLock(&CiCacheSegMappingRegionLock, oldIrql);
|
||||||
#else
|
#else
|
||||||
|
@ -989,7 +991,7 @@ CcRosInternalFreeCacheSegment (
|
||||||
MmUnlockAddressSpace(MmGetKernelAddressSpace());
|
MmUnlockAddressSpace(MmGetKernelAddressSpace());
|
||||||
#endif
|
#endif
|
||||||
ExFreeToNPagedLookasideList(&CacheSegLookasideList, CacheSeg);
|
ExFreeToNPagedLookasideList(&CacheSegLookasideList, CacheSeg);
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1143,7 +1145,7 @@ CcRosDeleteFileCache (
|
||||||
ExFreeToNPagedLookasideList(&BcbLookasideList, Bcb);
|
ExFreeToNPagedLookasideList(&BcbLookasideList, Bcb);
|
||||||
KeAcquireGuardedMutex(&ViewLock);
|
KeAcquireGuardedMutex(&ViewLock);
|
||||||
}
|
}
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
@ -1243,7 +1245,7 @@ CcRosReleaseFileCache (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
KeReleaseGuardedMutex(&ViewLock);
|
KeReleaseGuardedMutex(&ViewLock);
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -1286,7 +1288,6 @@ NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
CcRosInitializeFileCache (
|
CcRosInitializeFileCache (
|
||||||
PFILE_OBJECT FileObject,
|
PFILE_OBJECT FileObject,
|
||||||
ULONG CacheSegmentSize,
|
|
||||||
PCACHE_MANAGER_CALLBACKS CallBacks,
|
PCACHE_MANAGER_CALLBACKS CallBacks,
|
||||||
PVOID LazyWriterContext)
|
PVOID LazyWriterContext)
|
||||||
/*
|
/*
|
||||||
|
@ -1296,8 +1297,8 @@ CcRosInitializeFileCache (
|
||||||
PBCB Bcb;
|
PBCB Bcb;
|
||||||
|
|
||||||
Bcb = FileObject->SectionObjectPointer->SharedCacheMap;
|
Bcb = FileObject->SectionObjectPointer->SharedCacheMap;
|
||||||
DPRINT("CcRosInitializeFileCache(FileObject 0x%p, Bcb 0x%p, CacheSegmentSize %lu)\n",
|
DPRINT("CcRosInitializeFileCache(FileObject 0x%p, Bcb 0x%p)\n",
|
||||||
FileObject, Bcb, CacheSegmentSize);
|
FileObject, Bcb);
|
||||||
|
|
||||||
KeAcquireGuardedMutex(&ViewLock);
|
KeAcquireGuardedMutex(&ViewLock);
|
||||||
if (Bcb == NULL)
|
if (Bcb == NULL)
|
||||||
|
@ -1306,15 +1307,14 @@ CcRosInitializeFileCache (
|
||||||
if (Bcb == NULL)
|
if (Bcb == NULL)
|
||||||
{
|
{
|
||||||
KeReleaseGuardedMutex(&ViewLock);
|
KeReleaseGuardedMutex(&ViewLock);
|
||||||
return(STATUS_UNSUCCESSFUL);
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
memset(Bcb, 0, sizeof(BCB));
|
RtlZeroMemory(Bcb, sizeof(*Bcb));
|
||||||
ObReferenceObjectByPointer(FileObject,
|
ObReferenceObjectByPointer(FileObject,
|
||||||
FILE_ALL_ACCESS,
|
FILE_ALL_ACCESS,
|
||||||
NULL,
|
NULL,
|
||||||
KernelMode);
|
KernelMode);
|
||||||
Bcb->FileObject = FileObject;
|
Bcb->FileObject = FileObject;
|
||||||
Bcb->CacheSegmentSize = CacheSegmentSize;
|
|
||||||
Bcb->Callbacks = CallBacks;
|
Bcb->Callbacks = CallBacks;
|
||||||
Bcb->LazyWriteContext = LazyWriterContext;
|
Bcb->LazyWriteContext = LazyWriterContext;
|
||||||
if (FileObject->FsContext)
|
if (FileObject->FsContext)
|
||||||
|
@ -1340,7 +1340,7 @@ CcRosInitializeFileCache (
|
||||||
}
|
}
|
||||||
KeReleaseGuardedMutex(&ViewLock);
|
KeReleaseGuardedMutex(&ViewLock);
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1396,13 +1396,17 @@ CcInitView (
|
||||||
KeBugCheck(CACHE_MANAGER);
|
KeBugCheck(CACHE_MANAGER);
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer = ExAllocatePool(NonPagedPool, CI_CACHESEG_MAPPING_REGION_SIZE / (PAGE_SIZE * 8));
|
Buffer = ExAllocatePoolWithTag(NonPagedPool,
|
||||||
|
CI_CACHESEG_MAPPING_REGION_SIZE / (PAGE_SIZE * 8),
|
||||||
|
TAG_CC);
|
||||||
if (!Buffer)
|
if (!Buffer)
|
||||||
{
|
{
|
||||||
KeBugCheck(CACHE_MANAGER);
|
KeBugCheck(CACHE_MANAGER);
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlInitializeBitMap(&CiCacheSegMappingRegionAllocMap, Buffer, CI_CACHESEG_MAPPING_REGION_SIZE / PAGE_SIZE);
|
RtlInitializeBitMap(&CiCacheSegMappingRegionAllocMap,
|
||||||
|
Buffer,
|
||||||
|
CI_CACHESEG_MAPPING_REGION_SIZE / PAGE_SIZE);
|
||||||
RtlClearAllBits(&CiCacheSegMappingRegionAllocMap);
|
RtlClearAllBits(&CiCacheSegMappingRegionAllocMap);
|
||||||
|
|
||||||
KeInitializeSpinLock(&CiCacheSegMappingRegionLock);
|
KeInitializeSpinLock(&CiCacheSegMappingRegionLock);
|
||||||
|
@ -1441,11 +1445,3 @@ CcInitView (
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -108,7 +108,6 @@ typedef struct _BCB
|
||||||
BOOLEAN RemoveOnClose;
|
BOOLEAN RemoveOnClose;
|
||||||
ULONG TimeStamp;
|
ULONG TimeStamp;
|
||||||
PFILE_OBJECT FileObject;
|
PFILE_OBJECT FileObject;
|
||||||
ULONG CacheSegmentSize;
|
|
||||||
LARGE_INTEGER AllocationSize;
|
LARGE_INTEGER AllocationSize;
|
||||||
LARGE_INTEGER FileSize;
|
LARGE_INTEGER FileSize;
|
||||||
PCACHE_MANAGER_CALLBACKS Callbacks;
|
PCACHE_MANAGER_CALLBACKS Callbacks;
|
||||||
|
@ -294,7 +293,6 @@ NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
CcRosInitializeFileCache(
|
CcRosInitializeFileCache(
|
||||||
PFILE_OBJECT FileObject,
|
PFILE_OBJECT FileObject,
|
||||||
ULONG CacheSegmentSize,
|
|
||||||
PCACHE_MANAGER_CALLBACKS CallBacks,
|
PCACHE_MANAGER_CALLBACKS CallBacks,
|
||||||
PVOID LazyWriterContext
|
PVOID LazyWriterContext
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
/* formerly located in cc/view.c */
|
/* formerly located in cc/view.c */
|
||||||
|
#define TAG_CC ' cC'
|
||||||
#define TAG_CSEG 'GESC'
|
#define TAG_CSEG 'GESC'
|
||||||
#define TAG_BCB ' BCB'
|
#define TAG_BCB ' BCB'
|
||||||
#define TAG_IBCB 'BCBi'
|
#define TAG_IBCB 'BCBi'
|
||||||
|
|
Loading…
Reference in a new issue