Author: pschweitzer Date: Sun Apr 10 10:29:28 2016 New Revision: 71137
URL: http://svn.reactos.org/svn/reactos?rev=71137&view=rev Log: [NTOSKRNL] In FsRtlAddBaseMcbEntry(): only merge runs if LBNs are consistent.
This fixes a few failing tests.
CORE-11002
Modified: trunk/reactos/ntoskrnl/fsrtl/largemcb.c
Modified: trunk/reactos/ntoskrnl/fsrtl/largemcb.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/fsrtl/largemcb.c?r... ============================================================================== --- trunk/reactos/ntoskrnl/fsrtl/largemcb.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/fsrtl/largemcb.c [iso-8859-1] Sun Apr 10 10:29:28 2016 @@ -171,7 +171,8 @@ NeedleRun.RunEndVbn.QuadPart = NeedleRun.RunStartVbn.QuadPart + 1; NeedleRun.StartingLbn.QuadPart = ~0ULL; Mcb->Mapping->Table.CompareRoutine = McbMappingIntersectCompare; - if ((LowerRun = RtlLookupElementGenericTable(&Mcb->Mapping->Table, &NeedleRun))) + if ((LowerRun = RtlLookupElementGenericTable(&Mcb->Mapping->Table, &NeedleRun)) && + (LowerRun->StartingLbn.QuadPart < Node.StartingLbn.QuadPart)) { ASSERT(LowerRun->RunEndVbn.QuadPart == Node.RunStartVbn.QuadPart); Node.RunStartVbn.QuadPart = LowerRun->RunStartVbn.QuadPart; @@ -185,7 +186,8 @@ NeedleRun.RunStartVbn.QuadPart = Node.RunEndVbn.QuadPart; NeedleRun.RunEndVbn.QuadPart = NeedleRun.RunStartVbn.QuadPart + 1; Mcb->Mapping->Table.CompareRoutine = McbMappingIntersectCompare; - if ((HigherRun = RtlLookupElementGenericTable(&Mcb->Mapping->Table, &NeedleRun))) + if ((HigherRun = RtlLookupElementGenericTable(&Mcb->Mapping->Table, &NeedleRun)) && + (Node.StartingLbn.QuadPart <= HigherRun->StartingLbn.QuadPart)) { ASSERT(HigherRun->RunStartVbn.QuadPart == Node.RunEndVbn.QuadPart); Node.RunEndVbn.QuadPart = HigherRun->RunEndVbn.QuadPart;