1 #include <linux/module.h>
5 #include "transaction.h"
7 int btrfs_insert_dir_item(struct btrfs_trans_handle
*trans
, struct btrfs_root
8 *root
, const char *name
, int name_len
, u64 dir
, u64
12 struct btrfs_path path
;
13 struct btrfs_dir_item
*dir_item
;
20 btrfs_set_key_type(&key
, BTRFS_DIR_ITEM_KEY
);
21 ret
= btrfs_name_hash(name
, name_len
, &key
.offset
);
23 btrfs_init_path(&path
);
24 data_size
= sizeof(*dir_item
) + name_len
;
25 ret
= btrfs_insert_empty_item(trans
, root
, &path
, &key
, data_size
);
29 dir_item
= btrfs_item_ptr(btrfs_buffer_leaf(path
.nodes
[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 btrfs_set_dir_name_len(dir_item
, name_len
);
36 name_ptr
= (char *)(dir_item
+ 1);
37 btrfs_memcpy(root
, path
.nodes
[0]->b_data
, name_ptr
, name
, name_len
);
38 btrfs_mark_buffer_dirty(path
.nodes
[0]);
40 btrfs_release_path(root
, &path
);
44 int btrfs_lookup_dir_item(struct btrfs_trans_handle
*trans
, struct btrfs_root
45 *root
, struct btrfs_path
*path
, u64 dir
,
46 const char *name
, int name_len
, int mod
)
50 int ins_len
= mod
< 0 ? -1 : 0;
55 btrfs_set_key_type(&key
, BTRFS_DIR_ITEM_KEY
);
56 ret
= btrfs_name_hash(name
, name_len
, &key
.offset
);
58 ret
= btrfs_search_slot(trans
, root
, &key
, path
, ins_len
, cow
);
62 int btrfs_match_dir_item_name(struct btrfs_root
*root
,
63 struct btrfs_path
*path
,
64 const char *name
, int name_len
)
66 struct btrfs_dir_item
*dir_item
;
69 dir_item
= btrfs_item_ptr(btrfs_buffer_leaf(path
->nodes
[0]),
71 struct btrfs_dir_item
);
72 if (btrfs_dir_name_len(dir_item
) != name_len
)
74 name_ptr
= (char *)(dir_item
+ 1);
75 if (memcmp(name_ptr
, name
, name_len
))
This page took 0.043638 seconds and 6 git commands to generate.