Btrfs: create a logical->phsyical block number mapping scheme
Signed-off-by: Chris Mason <chris.mason@oracle.com>
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
index f31ac84..e2fc6f0 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -66,21 +66,21 @@
if (buf->b_size != root->blocksize || cow->b_size != root->blocksize)
WARN_ON(1);
memcpy(cow_node, btrfs_buffer_node(buf), root->blocksize);
- btrfs_set_header_blocknr(&cow_node->header, cow->b_blocknr);
+ btrfs_set_header_blocknr(&cow_node->header, bh_blocknr(cow));
btrfs_set_header_generation(&cow_node->header, trans->transid);
btrfs_inc_ref(trans, root, buf);
if (buf == root->node) {
root->node = cow;
get_bh(cow);
if (buf != root->commit_root) {
- btrfs_free_extent(trans, root, buf->b_blocknr, 1, 1);
+ btrfs_free_extent(trans, root, bh_blocknr(buf), 1, 1);
}
btrfs_block_release(root, buf);
} else {
btrfs_set_node_blockptr(btrfs_buffer_node(parent), parent_slot,
- cow->b_blocknr);
+ bh_blocknr(cow));
btrfs_mark_buffer_dirty(parent);
- btrfs_free_extent(trans, root, buf->b_blocknr, 1, 1);
+ btrfs_free_extent(trans, root, bh_blocknr(buf), 1, 1);
}
btrfs_block_release(root, buf);
mark_buffer_dirty(cow);
@@ -312,7 +312,7 @@
*/
if (!parent_buf) {
struct buffer_head *child;
- u64 blocknr = mid_buf->b_blocknr;
+ u64 blocknr = bh_blocknr(mid_buf);
if (btrfs_header_nritems(&mid->header) != 1)
return 0;
@@ -361,7 +361,7 @@
if (wret < 0)
ret = wret;
if (btrfs_header_nritems(&right->header) == 0) {
- u64 blocknr = right_buf->b_blocknr;
+ u64 blocknr = bh_blocknr(right_buf);
clean_tree_block(trans, root, right_buf);
wait_on_buffer(right_buf);
btrfs_block_release(root, right_buf);
@@ -400,7 +400,7 @@
}
if (btrfs_header_nritems(&mid->header) == 0) {
/* we've managed to empty the middle node, drop it */
- u64 blocknr = mid_buf->b_blocknr;
+ u64 blocknr = bh_blocknr(mid_buf);
clean_tree_block(trans, root, mid_buf);
wait_on_buffer(mid_buf);
btrfs_block_release(root, mid_buf);
@@ -686,7 +686,7 @@
memset(c, 0, root->blocksize);
btrfs_set_header_nritems(&c->header, 1);
btrfs_set_header_level(&c->header, level);
- btrfs_set_header_blocknr(&c->header, t->b_blocknr);
+ btrfs_set_header_blocknr(&c->header, bh_blocknr(t));
btrfs_set_header_generation(&c->header, trans->transid);
lower = btrfs_buffer_node(path->nodes[level-1]);
memcpy(c->header.fsid, root->fs_info->disk_super->fsid,
@@ -697,7 +697,7 @@
lower_key = &lower->ptrs[0].key;
btrfs_memcpy(root, c, &c->ptrs[0].key, lower_key,
sizeof(struct btrfs_disk_key));
- btrfs_set_node_blockptr(c, 0, path->nodes[level - 1]->b_blocknr);
+ btrfs_set_node_blockptr(c, 0, bh_blocknr(path->nodes[level - 1]));
btrfs_mark_buffer_dirty(t);
@@ -780,7 +780,7 @@
split = btrfs_buffer_node(split_buffer);
btrfs_set_header_flags(&split->header, btrfs_header_flags(&c->header));
btrfs_set_header_level(&split->header, btrfs_header_level(&c->header));
- btrfs_set_header_blocknr(&split->header, split_buffer->b_blocknr);
+ btrfs_set_header_blocknr(&split->header, bh_blocknr(split_buffer));
btrfs_set_header_generation(&split->header, trans->transid);
memcpy(split->header.fsid, root->fs_info->disk_super->fsid,
sizeof(split->header.fsid));
@@ -794,7 +794,7 @@
btrfs_mark_buffer_dirty(t);
btrfs_mark_buffer_dirty(split_buffer);
wret = insert_ptr(trans, root, path, &split->ptrs[0].key,
- split_buffer->b_blocknr, path->slots[level + 1] + 1,
+ bh_blocknr(split_buffer), path->slots[level + 1] + 1,
level + 1);
if (wret)
ret = wret;
@@ -1138,7 +1138,7 @@
BUG_ON(!right_buffer);
right = btrfs_buffer_leaf(right_buffer);
memset(&right->header, 0, sizeof(right->header));
- btrfs_set_header_blocknr(&right->header, right_buffer->b_blocknr);
+ btrfs_set_header_blocknr(&right->header, bh_blocknr(right_buffer));
btrfs_set_header_generation(&right->header, trans->transid);
btrfs_set_header_level(&right->header, 0);
memcpy(right->header.fsid, root->fs_info->disk_super->fsid,
@@ -1152,7 +1152,7 @@
btrfs_set_header_nritems(&right->header, 0);
wret = insert_ptr(trans, root, path,
&disk_key,
- right_buffer->b_blocknr,
+ bh_blocknr(right_buffer),
path->slots[1] + 1, 1);
if (wret)
ret = wret;
@@ -1173,7 +1173,7 @@
btrfs_set_header_nritems(&right->header, 0);
wret = insert_ptr(trans, root, path,
&disk_key,
- right_buffer->b_blocknr,
+ bh_blocknr(right_buffer),
path->slots[1] - 1, 1);
if (wret)
ret = wret;
@@ -1207,7 +1207,7 @@
btrfs_set_header_nritems(&l->header, mid);
ret = 0;
wret = insert_ptr(trans, root, path, &right->items[0].key,
- right_buffer->b_blocknr, path->slots[1] + 1, 1);
+ bh_blocknr(right_buffer), path->slots[1] + 1, 1);
if (wret)
ret = wret;
btrfs_mark_buffer_dirty(right_buffer);
@@ -1228,7 +1228,7 @@
BUG_ON(!right_buffer);
right = btrfs_buffer_leaf(right_buffer);
memset(&right->header, 0, sizeof(right->header));
- btrfs_set_header_blocknr(&right->header, right_buffer->b_blocknr);
+ btrfs_set_header_blocknr(&right->header, bh_blocknr(right_buffer));
btrfs_set_header_generation(&right->header, trans->transid);
btrfs_set_header_level(&right->header, 0);
memcpy(right->header.fsid, root->fs_info->disk_super->fsid,
@@ -1237,7 +1237,7 @@
btrfs_set_header_nritems(&right->header, 0);
wret = insert_ptr(trans, root, path,
&disk_key,
- right_buffer->b_blocknr,
+ bh_blocknr(right_buffer),
path->slots[1], 1);
if (wret)
ret = wret;
@@ -1456,7 +1456,7 @@
if (wret)
ret = wret;
wret = btrfs_free_extent(trans, root,
- leaf_buf->b_blocknr, 1, 1);
+ bh_blocknr(leaf_buf), 1, 1);
if (wret)
ret = wret;
}
@@ -1487,7 +1487,7 @@
ret = wret;
}
if (btrfs_header_nritems(&leaf->header) == 0) {
- u64 blocknr = leaf_buf->b_blocknr;
+ u64 blocknr = bh_blocknr(leaf_buf);
clean_tree_block(trans, root, leaf_buf);
wait_on_buffer(leaf_buf);
wret = del_ptr(trans, root, path, 1, slot);