[haiku-commits] haiku: hrev44480 - src/add-ons/kernel/file_systems/bfs

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 6 Aug 2012 20:07:42 +0200 (CEST)

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);


Other related posts:

  • » [haiku-commits] haiku: hrev44480 - src/add-ons/kernel/file_systems/bfs - axeld