3 #include "kerncompat.h"
4 #include "radix-tree.h"
9 int btrfs_insert_dir_item(struct btrfs_root
*root
, char *name
, int name_len
,
10 u64 dir
, u64 objectid
, u8 type
)
13 struct btrfs_path path
;
14 struct btrfs_dir_item
*dir_item
;
21 btrfs_set_key_type(&key
, BTRFS_DIR_ITEM_KEY
);
22 ret
= btrfs_name_hash(name
, name_len
, &key
.offset
);
24 btrfs_init_path(&path
);
25 data_size
= sizeof(*dir_item
) + name_len
;
26 ret
= btrfs_insert_empty_item(root
, &path
, &key
, data_size
);
30 dir_item
= btrfs_item_ptr(&path
.nodes
[0]->leaf
, path
.slots
[0],
31 struct btrfs_dir_item
);
32 btrfs_set_dir_objectid(dir_item
, objectid
);
33 btrfs_set_dir_type(dir_item
, type
);
34 btrfs_set_dir_flags(dir_item
, 0);
35 name_ptr
= (char *)(dir_item
+ 1);
36 memcpy(name_ptr
, name
, name_len
);
38 btrfs_release_path(root
, &path
);
42 int btrfs_lookup_dir_item(struct btrfs_root
*root
, struct btrfs_path
*path
,
43 u64 dir
, char *name
, int name_len
, int mod
)
47 int ins_len
= mod
< 0 ? -1 : 0;
52 btrfs_set_key_type(&key
, BTRFS_DIR_ITEM_KEY
);
53 ret
= btrfs_name_hash(name
, name_len
, &key
.offset
);
55 ret
= btrfs_search_slot(root
, &key
, path
, ins_len
, cow
);
59 int btrfs_match_dir_item_name(struct btrfs_root
*root
, struct btrfs_path
*path
,
60 char *name
, int name_len
)
62 struct btrfs_item
*item
;
63 struct btrfs_dir_item
*dir_item
;
66 item
= path
->nodes
[0]->leaf
.items
+ path
->slots
[0];
67 item_len
= btrfs_item_size(item
);
68 if (item_len
!= name_len
+ sizeof(struct btrfs_dir_item
)) {
71 dir_item
= btrfs_item_ptr(&path
->nodes
[0]->leaf
, path
->slots
[0],
72 struct btrfs_dir_item
);
73 name_ptr
= (char *)(dir_item
+ 1);
74 if (memcmp(name_ptr
, name
, name_len
)) {