From 723eafc64706679e8932b6cd2fb66005be4f7387 Mon Sep 17 00:00:00 2001 From: Chris Mason Date: Tue, 22 May 2007 09:17:08 -0400 Subject: reduce ram used by btrfsck --- btrfsck.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'btrfsck.c') diff --git a/btrfsck.c b/btrfsck.c index 39f41950..07ec8b6c 100644 --- a/btrfsck.c +++ b/btrfsck.c @@ -103,16 +103,22 @@ static int check_block(struct btrfs_root *root, struct btrfs_buffer *buf) { struct extent_record *rec; + int ret = 1; rec = radix_tree_lookup(extent_radix, buf->blocknr); if (!rec) return 1; if (btrfs_is_leaf(&buf->node)) { - return check_leaf(root, &rec->parent_key, &buf->leaf); + ret = check_leaf(root, &rec->parent_key, &buf->leaf); } else { - return check_node(root, &rec->parent_key, &buf->node); + ret = check_node(root, &rec->parent_key, &buf->node); } - return 1; + if (!ret && rec->extent_item_refs == rec->refs && rec->refs > 0) { + radix_tree_delete(extent_radix, rec->start); + free(rec); + return ret; + } + return ret; } static int add_extent_rec(struct radix_tree_root *extent_radix, @@ -131,8 +137,12 @@ static int add_extent_rec(struct radix_tree_root *extent_radix, rec->start, start); ret = 1; } - if (extent_item_refs) + if (extent_item_refs) { + if (rec->extent_item_refs) { + fprintf(stderr, "block %Lu rec extent_item_refs %u, passed %u\n", start, rec->extent_item_refs, extent_item_refs); + } rec->extent_item_refs = extent_item_refs; + } return ret; } rec = malloc(sizeof(*rec)); -- cgit v1.2.3