summaryrefslogtreecommitdiff
path: root/btrfsck.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-03-24 15:04:37 -0400
committerDavid Woodhouse <dwmw2@hera.kernel.org>2008-03-24 15:04:37 -0400
commit1f3ba6a3f9440a40108273dbbe4f37306be8d9ad (patch)
treee21267495562680435b4f9dd4915f565f73511e6 /btrfsck.c
parentd12d4c7203a2ef08ef208a020471290cd1d42c35 (diff)
Btrfsck updates for multi-device filesystems
Diffstat (limited to 'btrfsck.c')
-rw-r--r--btrfsck.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/btrfsck.c b/btrfsck.c
index a3f803e9..aa2256ea 100644
--- a/btrfsck.c
+++ b/btrfsck.c
@@ -119,15 +119,23 @@ static int check_leaf(struct btrfs_root *root,
for (i = 0; nritems > 1 && i < nritems - 2; i++) {
btrfs_item_key(buf, &key, i);
btrfs_item_key_to_cpu(buf, &cpukey, i + 1);
- if (btrfs_comp_keys(&key, &cpukey) >= 0)
+ if (btrfs_comp_keys(&key, &cpukey) >= 0) {
+ fprintf(stderr, "bad key ordering %d %d\n", i, i+1);
return 1;
+ }
if (btrfs_item_offset_nr(buf, i) !=
- btrfs_item_end_nr(buf, i + 1))
+ btrfs_item_end_nr(buf, i + 1)) {
+ fprintf(stderr, "incorrect offsets %u %u\n",
+ btrfs_item_offset_nr(buf, i),
+ btrfs_item_end_nr(buf, i + 1));
+ return 1;
+ }
+ if (i == 0 && btrfs_item_end_nr(buf, i) !=
+ BTRFS_LEAF_DATA_SIZE(root)) {
+ fprintf(stderr, "bad item end %u wanted %lu\n",
+ btrfs_item_end_nr(buf, i),
+ BTRFS_LEAF_DATA_SIZE(root));
return 1;
- if (i == 0) {
- if (btrfs_item_end_nr(buf, i) !=
- BTRFS_LEAF_DATA_SIZE(root))
- return 1;
}
}
return 0;
@@ -755,6 +763,10 @@ int main(int ac, char **av) {
&extent_cache, &pending, &seen, &reada, &nodes,
root->fs_info->tree_root->root_key.objectid);
+ add_root_to_pending(root->fs_info->chunk_root->node, bits, bits_nr,
+ &extent_cache, &pending, &seen, &reada, &nodes,
+ root->fs_info->chunk_root->root_key.objectid);
+
btrfs_init_path(&path);
key.offset = 0;
key.objectid = 0;