mirror of
https://github.com/kdave/btrfs-progs
synced 2025-04-01 22:48:06 +00:00
btrfs-progs new dir index support
This commit is contained in:
parent
9864c90760
commit
059c20b384
4
ctree.h
4
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,
|
||||
|
@ -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);
|
||||
|
2
mkfs.c
2
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;
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user