mirror of
https://github.com/torvalds/linux.git
synced 2024-09-25 01:13:04 +00:00
Btrfs: struct extent_item endian
Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
1d4f8a0c1e
commit
cf27e1eec0
|
@ -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 {
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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,
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user