Ticket #8762: 0001-Single-values-are-allowed-in-regular-duplicate-nodes.patch

File 0001-Single-values-are-allowed-in-regular-duplicate-nodes.patch, 1.5 KB (added by ahenriksson, 12 years ago)
  • src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp

    From 2e6ebc597b2d268da34188cf2a7ed4646f28e819 Mon Sep 17 00:00:00 2001
    From: ahenriksson <sausageboy@gmail.com>
    Date: Tue, 24 Jul 2012 12:37:53 +0200
    Subject: [PATCH] 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.
    ---
     src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp | 5 ++++-
     1 fil ändrad, 4 tillägg(+), 1 borttagning(-)
    
    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 b BPlusTree::_ValidateChildren(TreeCheck& check, uint32 level, off_t offset,  
    23502350                    check.SetVisitedFragment(duplicateOffset);
    23512351
    23522352                duplicate_array* array;
     2353                int32 minSize;
    23532354                int32 maxSize;
    23542355                if (isFragmentNode) {
    23552356                    array = node->FragmentAt(
    23562357                        bplustree_node::FragmentIndex(childOffset));
     2358                    minSize = 2;
    23572359                    maxSize = NUM_FRAGMENT_VALUES;
    23582360                } else {
    23592361                    array = node->DuplicateArray();
     2362                    minSize = 1;
    23602363                    maxSize = NUM_DUPLICATE_VALUES;
    23612364                }
    23622365                int32 arrayCount = array->Count();
    23632366
    2364                 if (arrayCount <= 1 || arrayCount > maxSize) {
     2367                if (arrayCount < minSize || arrayCount > maxSize) {
    23652368                    dprintf("inode %" B_PRIdOFF ": duplicate at %" B_PRIdOFF
    23662369                        " has invalid array size %" B_PRId32 "!\n",
    23672370                        fStream->ID(), duplicateOffset, arrayCount);