Commit cf27e1ee authored by Chris Mason's avatar Chris Mason Committed by David Woodhouse

Btrfs: struct extent_item endian

Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 1d4f8a0c
...@@ -136,8 +136,8 @@ struct node { ...@@ -136,8 +136,8 @@ struct node {
* owner of the block and the number of references * owner of the block and the number of references
*/ */
struct extent_item { struct extent_item {
u32 refs; __le32 refs;
u64 owner; __le64 owner;
} __attribute__ ((__packed__)); } __attribute__ ((__packed__));
/* /*
...@@ -153,6 +153,26 @@ struct ctree_path { ...@@ -153,6 +153,26 @@ struct ctree_path {
int slots[MAX_LEVEL]; int slots[MAX_LEVEL];
}; };
static inline u64 btrfs_extent_owner(struct extent_item *ei)
{
return le64_to_cpu(ei->owner);
}
static inline void btrfs_set_extent_owner(struct extent_item *ei, u64 val)
{
ei->owner = cpu_to_le64(val);
}
static inline u32 btrfs_extent_refs(struct extent_item *ei)
{
return le32_to_cpu(ei->refs);
}
static inline void btrfs_set_extent_refs(struct extent_item *ei, u32 val)
{
ei->refs = cpu_to_le32(val);
}
static inline u64 btrfs_node_blockptr(struct node *n, int nr) static inline u64 btrfs_node_blockptr(struct node *n, int nr)
{ {
return le64_to_cpu(n->blockptrs[nr]); return le64_to_cpu(n->blockptrs[nr]);
......
...@@ -29,6 +29,7 @@ static int inc_block_ref(struct ctree_root *root, u64 blocknr) ...@@ -29,6 +29,7 @@ static int inc_block_ref(struct ctree_root *root, u64 blocknr)
struct leaf *l; struct leaf *l;
struct extent_item *item; struct extent_item *item;
struct btrfs_key ins; struct btrfs_key ins;
u32 refs;
find_free_extent(root->extent_root, 0, 0, (u64)-1, &ins); find_free_extent(root->extent_root, 0, 0, (u64)-1, &ins);
init_path(&path); init_path(&path);
...@@ -42,7 +43,8 @@ static int inc_block_ref(struct ctree_root *root, u64 blocknr) ...@@ -42,7 +43,8 @@ static int inc_block_ref(struct ctree_root *root, u64 blocknr)
l = &path.nodes[0]->leaf; l = &path.nodes[0]->leaf;
item = (struct extent_item *)(l->data + btrfs_item_offset(l->items + item = (struct extent_item *)(l->data + btrfs_item_offset(l->items +
path.slots[0])); path.slots[0]));
item->refs++; refs = btrfs_extent_refs(item);
btrfs_set_extent_refs(item, refs + 1);
BUG_ON(list_empty(&path.nodes[0]->dirty)); BUG_ON(list_empty(&path.nodes[0]->dirty));
release_path(root->extent_root, &path); release_path(root->extent_root, &path);
...@@ -69,7 +71,7 @@ static int lookup_block_ref(struct ctree_root *root, u64 blocknr, u32 *refs) ...@@ -69,7 +71,7 @@ static int lookup_block_ref(struct ctree_root *root, u64 blocknr, u32 *refs)
item = (struct extent_item *)(l->data + item = (struct extent_item *)(l->data +
btrfs_item_offset(l->items + btrfs_item_offset(l->items +
path.slots[0])); path.slots[0]));
*refs = item->refs; *refs = btrfs_extent_refs(item);
release_path(root->extent_root, &path); release_path(root->extent_root, &path);
return 0; return 0;
} }
...@@ -120,9 +122,9 @@ static int finish_current_insert(struct ctree_root *extent_root) ...@@ -120,9 +122,9 @@ static int finish_current_insert(struct ctree_root *extent_root)
int i; int i;
int ret; int ret;
extent_item.refs = 1; btrfs_set_extent_refs(&extent_item, 1);
extent_item.owner = btrfs_set_extent_owner(&extent_item,
btrfs_header_parentid(&extent_root->node->node.header); btrfs_header_parentid(&extent_root->node->node.header));
ins.offset = 1; ins.offset = 1;
ins.flags = 0; ins.flags = 0;
...@@ -148,6 +150,7 @@ int __free_extent(struct ctree_root *root, u64 blocknr, u64 num_blocks) ...@@ -148,6 +150,7 @@ int __free_extent(struct ctree_root *root, u64 blocknr, u64 num_blocks)
struct btrfs_item *item; struct btrfs_item *item;
struct extent_item *ei; struct extent_item *ei;
struct btrfs_key ins; struct btrfs_key ins;
u32 refs;
key.objectid = blocknr; key.objectid = blocknr;
key.flags = 0; key.flags = 0;
...@@ -166,8 +169,9 @@ int __free_extent(struct ctree_root *root, u64 blocknr, u64 num_blocks) ...@@ -166,8 +169,9 @@ int __free_extent(struct ctree_root *root, u64 blocknr, u64 num_blocks)
ei = (struct extent_item *)(path.nodes[0]->leaf.data + ei = (struct extent_item *)(path.nodes[0]->leaf.data +
btrfs_item_offset(item)); btrfs_item_offset(item));
BUG_ON(ei->refs == 0); BUG_ON(ei->refs == 0);
ei->refs--; refs = btrfs_extent_refs(ei) - 1;
if (ei->refs == 0) { btrfs_set_extent_refs(ei, refs);
if (refs == 0) {
if (root == extent_root) { if (root == extent_root) {
int err; int err;
radix_tree_preload(GFP_KERNEL); radix_tree_preload(GFP_KERNEL);
...@@ -368,8 +372,8 @@ int alloc_extent(struct ctree_root *root, u64 num_blocks, u64 search_start, ...@@ -368,8 +372,8 @@ int alloc_extent(struct ctree_root *root, u64 num_blocks, u64 search_start,
struct ctree_root *extent_root = root->extent_root; struct ctree_root *extent_root = root->extent_root;
struct extent_item extent_item; struct extent_item extent_item;
extent_item.refs = 1; btrfs_set_extent_refs(&extent_item, 1);
extent_item.owner = owner; btrfs_set_extent_owner(&extent_item, owner);
if (root == extent_root) { if (root == extent_root) {
BUG_ON(extent_root->current_insert.offset == 0); BUG_ON(extent_root->current_insert.offset == 0);
......
...@@ -51,8 +51,8 @@ int mkfs(int fd) ...@@ -51,8 +51,8 @@ int mkfs(int fd)
btrfs_set_item_offset(&item, btrfs_set_item_offset(&item,
LEAF_DATA_SIZE - sizeof(struct extent_item)); LEAF_DATA_SIZE - sizeof(struct extent_item));
btrfs_set_item_size(&item, sizeof(struct extent_item)); btrfs_set_item_size(&item, sizeof(struct extent_item));
extent_item.refs = 1; btrfs_set_extent_refs(&extent_item, 1);
extent_item.owner = 0; btrfs_set_extent_owner(&extent_item, 0);
memcpy(empty_leaf.items, &item, sizeof(item)); memcpy(empty_leaf.items, &item, sizeof(item));
memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item, memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item,
btrfs_item_size(&item)); btrfs_item_size(&item));
...@@ -62,7 +62,7 @@ int mkfs(int fd) ...@@ -62,7 +62,7 @@ int mkfs(int fd)
btrfs_set_key_offset(&item.key, 1); btrfs_set_key_offset(&item.key, 1);
btrfs_set_item_offset(&item, btrfs_set_item_offset(&item,
LEAF_DATA_SIZE - sizeof(struct extent_item) * 2); LEAF_DATA_SIZE - sizeof(struct extent_item) * 2);
extent_item.owner = 1; btrfs_set_extent_owner(&extent_item, 1);
memcpy(empty_leaf.items + 1, &item, sizeof(item)); memcpy(empty_leaf.items + 1, &item, sizeof(item));
memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item, memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item,
btrfs_item_size(&item)); btrfs_item_size(&item));
...@@ -72,7 +72,7 @@ int mkfs(int fd) ...@@ -72,7 +72,7 @@ int mkfs(int fd)
btrfs_set_key_offset(&item.key, 1); btrfs_set_key_offset(&item.key, 1);
btrfs_set_item_offset(&item, btrfs_set_item_offset(&item,
LEAF_DATA_SIZE - sizeof(struct extent_item) * 3); LEAF_DATA_SIZE - sizeof(struct extent_item) * 3);
extent_item.owner = 2; btrfs_set_extent_owner(&extent_item, 2);
memcpy(empty_leaf.items + 2, &item, sizeof(item)); memcpy(empty_leaf.items + 2, &item, sizeof(item));
memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item, memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item,
btrfs_item_size(&item)); btrfs_item_size(&item));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment