Author: arty
Date: Fri Nov 20 06:22:32 2009
New Revision: 44231
URL:
http://svn.reactos.org/svn/reactos?rev=44231&view=rev
Log:
We don't use MaximumPairCount to determine where the memory came from.
Modified:
branches/arty-newcc/ntoskrnl/fsrtl/largemcb.c
Modified: branches/arty-newcc/ntoskrnl/fsrtl/largemcb.c
URL:
http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/fsrtl/large…
==============================================================================
--- branches/arty-newcc/ntoskrnl/fsrtl/largemcb.c [iso-8859-1] (original)
+++ branches/arty-newcc/ntoskrnl/fsrtl/largemcb.c [iso-8859-1] Fri Nov 20 06:22:32 2009
@@ -266,19 +266,22 @@
if (PoolType == PagedPool)
{
Mcb->Mapping =
ExAllocateFromPagedLookasideList(&FsRtlFirstMappingLookasideList);
+ DPRINT("Get from lookaside list\n");
}
else
{
Mcb->Mapping = ExAllocatePoolWithTag(PoolType |
POOL_RAISE_IF_ALLOCATION_FAILURE,
sizeof(RTL_GENERIC_TABLE) + sizeof(LIST_ENTRY),
'FSBC');
+ DPRINT("Allocate\n");
}
+ DPRINT("Mcb->Mapping %x\n", Mcb->Mapping);
Mcb->PoolType = PoolType;
Mcb->MaximumPairCount = MAXIMUM_PAIR_COUNT;
RtlInitializeGenericTable
(Mcb->Mapping,
- (PRTL_GENERIC_COMPARE_ROUTINE)McbMappingCompare,
+ McbMappingCompare,
McbMappingAllocate,
McbMappingFree,
Mcb);
@@ -683,14 +686,17 @@
{
PLARGE_MCB_MAPPING_ENTRY Element;
+ DPRINT("Reset MCB %x\n", Mcb);
while (RtlNumberGenericTableElements(Mcb->Mapping) &&
(Element = (PLARGE_MCB_MAPPING_ENTRY)RtlGetElementGenericTable(Mcb->Mapping,
0)))
{
+ DPRINT("Deleting %x\n", Element);
RtlDeleteElementGenericTable(Mcb->Mapping, Element);
}
Mcb->PairCount = 0;
Mcb->MaximumPairCount = 0;
+ DPRINT("Done\n");
}
/*
@@ -860,8 +866,10 @@
FsRtlTruncateBaseMcb(IN PBASE_MCB Mcb,
IN LONGLONG Vbn)
{
+ DPRINT("FsRtlTruncateBaseMcb(%x,%x)\n", Mcb, (ULONG)Vbn);
if (!Vbn)
{
+ DPRINT("Resetting\n");
FsRtlResetBaseMcb(Mcb);
}
else
@@ -872,11 +880,13 @@
Truncate.SectorCount.QuadPart = (1ull<<62) - Truncate.RunStartVbn.QuadPart;
while ((Found = RtlLookupElementGenericTable(Mcb->Mapping, &Truncate)))
{
+ DPRINT("Deleting %x\n", Found);
RemoveEntryList(&Found->Sequence);
RtlDeleteElementGenericTable(Mcb->Mapping, Found);
Mcb->PairCount--;
}
}
+ DPRINT("Done\n");
}
/*
@@ -902,17 +912,23 @@
NTAPI
FsRtlUninitializeBaseMcb(IN PBASE_MCB Mcb)
{
+ DPRINT("FsRtlUninitializeBaseMcb(%x)\n", Mcb);
FsRtlResetBaseMcb(Mcb);
- if ((Mcb->PoolType == PagedPool) && (Mcb->MaximumPairCount ==
MAXIMUM_PAIR_COUNT))
+ DPRINT("Mcb->Mapping %x\n", Mcb->Mapping);
+ if (Mcb->PoolType == PagedPool)
{
+ DPRINT("Deallocate to lookaside list\n");
ExFreeToPagedLookasideList(&FsRtlFirstMappingLookasideList,
Mcb->Mapping);
}
else
{
+ DPRINT("Deallocate\n");
ExFreePoolWithTag(Mcb->Mapping, 'FSBC');
}
+ Mcb->Mapping = NULL;
+ DPRINT("Done\n");
}
/*
@@ -926,6 +942,7 @@
{
ExFreeToNPagedLookasideList(&FsRtlFastMutexLookasideList,
Mcb->GuardedMutex);
+ Mcb->GuardedMutex = NULL;
FsRtlUninitializeBaseMcb(&(Mcb->BaseMcb));
}
}