hrev44480 adds 1 changeset to branch 'master' old head: 4d99b24ded47a36bf813a71d1d658949daef4438 new head: 35dc734b484f6569be670a4c8a4f719b107cd6ed ---------------------------------------------------------------------------- 35dc734: Single values are allowed in regular duplicate nodes Not in duplicate fragments, however. This oversight in hrev44359 made checkfs incorrectly rebuild valid indices, causing #8762. Signed-off-by: Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> [ ahenriksson <sausageboy@xxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev44480 Commit: 35dc734b484f6569be670a4c8a4f719b107cd6ed URL: http://cgit.haiku-os.org/haiku/commit/?id=35dc734 Author: ahenriksson <sausageboy@xxxxxxxxx> Date: Tue Jul 24 10:37:53 2012 UTC Committer: Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> Commit-Date: Mon Aug 6 18:05:46 2012 UTC Ticket: https://dev.haiku-os.org/ticket/8762 ---------------------------------------------------------------------------- 1 file changed, 4 insertions(+), 1 deletion(-) src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp | 5 ++++- ---------------------------------------------------------------------------- diff --git a/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp b/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp index 51b896a..82b0046 100644 --- a/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp +++ b/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp @@ -2350,18 +2350,21 @@ BPlusTree::_ValidateChildren(TreeCheck& check, uint32 level, off_t offset, check.SetVisitedFragment(duplicateOffset); duplicate_array* array; + int32 minSize; int32 maxSize; if (isFragmentNode) { array = node->FragmentAt( bplustree_node::FragmentIndex(childOffset)); + minSize = 2; maxSize = NUM_FRAGMENT_VALUES; } else { array = node->DuplicateArray(); + minSize = 1; maxSize = NUM_DUPLICATE_VALUES; } int32 arrayCount = array->Count(); - if (arrayCount <= 1 || arrayCount > maxSize) { + if (arrayCount < minSize || arrayCount > maxSize) { dprintf("inode %" B_PRIdOFF ": duplicate at %" B_PRIdOFF " has invalid array size %" B_PRId32 "!\n", fStream->ID(), duplicateOffset, arrayCount);