summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosef Bacik <jbacik@redhat.com>2008-07-24 12:13:32 -0400
committerDavid Woodhouse <dwmw2@hera.kernel.org>2008-07-24 12:13:32 -0400
commit059c20b3846fb02ce999265820a2c3856f3692aa (patch)
treefcf61abc3be4c546f4ed13fe4e040e05353fa205
parent9864c90760e7c0f287cc616d5f71a674efbbc5ea (diff)
btrfs-progs new dir index support
-rw-r--r--ctree.h4
-rw-r--r--inode-item.c4
-rw-r--r--mkfs.c2
-rw-r--r--print-tree.c6
-rw-r--r--utils.c2
5 files changed, 12 insertions, 6 deletions
diff --git a/ctree.h b/ctree.h
index a5a284c6..d6467f6f 100644
--- a/ctree.h
+++ b/ctree.h
@@ -349,6 +349,7 @@ struct btrfs_dev_extent {
} __attribute__ ((__packed__));
struct btrfs_inode_ref {
+ __le64 index;
__le16 name_len;
/* name goes here */
} __attribute__ ((__packed__));
@@ -795,6 +796,7 @@ BTRFS_SETGET_STACK_FUNCS(block_group_flags,
/* struct btrfs_inode_ref */
BTRFS_SETGET_FUNCS(inode_ref_name_len, struct btrfs_inode_ref, name_len, 16);
+BTRFS_SETGET_FUNCS(inode_ref_index, struct btrfs_inode_ref, index, 64);
/* struct btrfs_inode_item */
BTRFS_SETGET_FUNCS(inode_generation, struct btrfs_inode_item, generation, 64);
@@ -1461,7 +1463,7 @@ int btrfs_find_highest_inode(struct btrfs_root *fs_root, u64 *objectid);
int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
const char *name, int name_len,
- u64 inode_objectid, u64 ref_objectid);
+ u64 inode_objectid, u64 ref_objectid, u64 index);
int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
const char *name, int name_len,
diff --git a/inode-item.c b/inode-item.c
index 706cfce5..28865f7c 100644
--- a/inode-item.c
+++ b/inode-item.c
@@ -106,7 +106,7 @@ out:
int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
const char *name, int name_len,
- u64 inode_objectid, u64 ref_objectid)
+ u64 inode_objectid, u64 ref_objectid, u64 index)
{
struct btrfs_path *path;
struct btrfs_key key;
@@ -138,6 +138,7 @@ int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
struct btrfs_inode_ref);
ref = (struct btrfs_inode_ref *)((unsigned long)ref + old_size);
btrfs_set_inode_ref_name_len(path->nodes[0], ref, name_len);
+ btrfs_set_inode_ref_index(path->nodes[0], ref, index);
ptr = (unsigned long)(ref + 1);
ret = 0;
} else if (ret < 0) {
@@ -146,6 +147,7 @@ int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
ref = btrfs_item_ptr(path->nodes[0], path->slots[0],
struct btrfs_inode_ref);
btrfs_set_inode_ref_name_len(path->nodes[0], ref, name_len);
+ btrfs_set_inode_ref_index(path->nodes[0], ref, index);
ptr = (unsigned long)(ref + 1);
}
write_extent_buffer(path->nodes[0], name, ptr, name_len);
diff --git a/mkfs.c b/mkfs.c
index 6edc4c66..8d7071e7 100644
--- a/mkfs.c
+++ b/mkfs.c
@@ -138,7 +138,7 @@ static int make_root_dir(int fd, const char *device_name) {
ret = btrfs_insert_inode_ref(trans, root->fs_info->tree_root,
"default", 7, location.objectid,
- BTRFS_ROOT_TREE_DIR_OBJECTID);
+ BTRFS_ROOT_TREE_DIR_OBJECTID, 0);
if (ret)
goto err;
diff --git a/print-tree.c b/print-tree.c
index dd4fcf16..5914a6a6 100644
--- a/print-tree.c
+++ b/print-tree.c
@@ -61,14 +61,16 @@ static int print_inode_ref_item(struct extent_buffer *eb, struct btrfs_item *ite
u32 cur = 0;
u32 len;
u32 name_len;
+ u64 index;
char namebuf[BTRFS_NAME_LEN];
total = btrfs_item_size(eb, item);
while(cur < total) {
name_len = btrfs_inode_ref_name_len(eb, ref);
+ index = btrfs_inode_ref_index(eb, ref);
len = (name_len <= sizeof(namebuf))? name_len: sizeof(namebuf);
read_extent_buffer(eb, namebuf, (unsigned long)(ref + 1), len);
- printf("\t\tinode ref namelen %u name: %.*s\n",
- name_len, len, namebuf);
+ printf("\t\tinode ref index %llu namelen %u name: %.*s\n",
+ index, name_len, len, namebuf);
len = sizeof(*ref) + name_len;
ref = (struct btrfs_inode_ref *)((char *)ref + len);
cur += len;
diff --git a/utils.c b/utils.c
index 335c9cb7..24b885e2 100644
--- a/utils.c
+++ b/utils.c
@@ -561,7 +561,7 @@ int btrfs_make_root_dir(struct btrfs_trans_handle *trans,
if (ret)
goto error;
- ret = btrfs_insert_inode_ref(trans, root, "..", 2, objectid, objectid);
+ ret = btrfs_insert_inode_ref(trans, root, "..", 2, objectid, objectid, 0);
if (ret)
goto error;