When running checkfs, BPlusTree::Validate() is now called.

This commit is contained in:
Axel Dörfler 2012-03-07 01:52:09 +01:00
parent 82e06fff68
commit 49a2067a17
2 changed files with 18 additions and 4 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2001-2010, Axel Dörfler, axeld@pinc-software.de.
* Copyright 2001-2012, Axel Dörfler, axeld@pinc-software.de.
* This file may be used under the terms of the MIT License.
*/
@ -1420,8 +1420,7 @@ BlockAllocator::CheckNextNode(check_control* control)
return B_OK;
}
// get iterator for the next directory
// Check directory
BPlusTree* tree = inode->Tree();
if (tree == NULL) {
FATAL(("check: could not open b+tree from inode at %" B_PRIdOFF
@ -1432,6 +1431,7 @@ BlockAllocator::CheckNextNode(check_control* control)
fCheckCookie->parent = inode;
fCheckCookie->parent_mode = inode->Mode();
// get iterator for the next directory
fCheckCookie->iterator = new(std::nothrow) TreeIterator(tree);
if (fCheckCookie->iterator == NULL)
RETURN_ERROR(B_NO_MEMORY);
@ -1917,6 +1917,18 @@ BlockAllocator::CheckInode(Inode* inode)
}
}
if (inode->IsContainer()) {
bool errorsFound = false;
status_t status = inode->Tree()->Validate(
(fCheckCookie->control.flags & BFS_FIX_BPLUSTREES) != 0,
errorsFound);
if (errorsFound)
fCheckCookie->control.errors |= BFS_INVALID_BPLUSTREE;
if (status != B_OK)
return status;
}
return B_OK;
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2001-2010, Axel Dörfler, axeld@pinc-software.de
* Copyright 2001-2012, Axel Dörfler, axeld@pinc-software.de
* This file may be used under the terms of the MIT License.
*/
#ifndef BFS_CONTROL_H
@ -78,6 +78,7 @@ struct check_control {
* Also requires the B_FIX_BITMAP_ERRORS to be set.
*/
#define BFS_FIX_NAME_MISMATCHES 8
#define BFS_FIX_BPLUSTREES 16
/* values for the errors field */
#define BFS_MISSING_BLOCKS 1
@ -86,6 +87,7 @@ struct check_control {
#define BFS_COULD_NOT_OPEN 8
#define BFS_WRONG_TYPE 16
#define BFS_NAMES_DONT_MATCH 32
#define BFS_INVALID_BPLUSTREE 64
/* check control magic value */
#define BFS_IOCTL_CHECK_MAGIC 'BChk'