summaryrefslogtreecommitdiff
path: root/utils.c
diff options
context:
space:
mode:
authorZheng Yan <zheng.yan@oracle.com>2008-09-23 12:29:10 -0400
committerDavid Woodhouse <dwmw2@hera.kernel.org>2008-09-23 12:29:10 -0400
commit428b7fa6302c97f5a79f4864a448f481b08a0dfe (patch)
tree59cdff5184e68da4bb3bd59c1737beea2b6c677d /utils.c
parentcea88ec1d7c61684b39a383996606b6e2f83bc21 (diff)
Full back reference support
This patch makes the back reference system to explicit record the location of parent node for all types of extents. The location of parent node is placed into the offset field of backref key. Every time a tree block is balanced, the back references for the affected lower level extents are updated.
Diffstat (limited to 'utils.c')
-rw-r--r--utils.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/utils.c b/utils.c
index 24b885e2..99223fb5 100644
--- a/utils.c
+++ b/utils.c
@@ -74,9 +74,7 @@ int make_btrfs(int fd, const char *device, const char *label,
int ret;
u32 itemoff;
u32 nritems = 0;
- u64 hash;
u64 first_free;
- u64 ref_gen;
u64 ref_root;
u32 array_size;
u32 item_size;
@@ -213,15 +211,9 @@ int make_btrfs(int fd, const char *device, const char *label,
/* create extent ref */
ref_root = reference_root_table[i];
- if (ref_root == BTRFS_FS_TREE_OBJECTID)
- ref_gen = 1;
- else
- ref_gen = 0;
-
- hash = btrfs_hash_extent_ref(ref_root, ref_gen, 0, 0);
itemoff = itemoff - sizeof(struct btrfs_extent_ref);
btrfs_set_disk_key_objectid(&disk_key, blocks[i]);
- btrfs_set_disk_key_offset(&disk_key, hash);
+ btrfs_set_disk_key_offset(&disk_key, blocks[i]);
btrfs_set_disk_key_type(&disk_key, BTRFS_EXTENT_REF_KEY);
btrfs_set_item_key(buf, &disk_key, nritems);
btrfs_set_item_offset(buf, btrfs_item_nr(buf, nritems),
@@ -231,9 +223,10 @@ int make_btrfs(int fd, const char *device, const char *label,
extent_ref = btrfs_item_ptr(buf, nritems,
struct btrfs_extent_ref);
btrfs_set_ref_root(buf, extent_ref, ref_root);
- btrfs_set_ref_generation(buf, extent_ref, ref_gen);
+ btrfs_set_ref_generation(buf, extent_ref, 1);
btrfs_set_ref_objectid(buf, extent_ref, 0);
btrfs_set_ref_offset(buf, extent_ref, 0);
+ btrfs_set_ref_num_refs(buf, extent_ref, 1);
nritems++;
}
btrfs_set_header_bytenr(buf, blocks[2]);