From 277ab38c907de0c96fc71d27480fce305e9cc8c6 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 10 Apr 2016 10:29:28 +0000 Subject: [PATCH 1/1] [NTOSKRNL] In FsRtlAddBaseMcbEntry(): only merge runs if LBNs are consistent. This fixes a few failing tests. CORE-11002 svn path=/trunk/; revision=71137 --- reactos/ntoskrnl/fsrtl/largemcb.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/fsrtl/largemcb.c b/reactos/ntoskrnl/fsrtl/largemcb.c index a6427814e4f..9f2e84063f4 100644 --- a/reactos/ntoskrnl/fsrtl/largemcb.c +++ b/reactos/ntoskrnl/fsrtl/largemcb.c @@ -171,7 +171,8 @@ FsRtlAddBaseMcbEntry(IN PBASE_MCB OpaqueMcb, 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 @@ FsRtlAddBaseMcbEntry(IN PBASE_MCB OpaqueMcb, 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; -- 2.17.1