1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _BCACHEFS_DIRENT_H |
3 | #define _BCACHEFS_DIRENT_H |
4 | |
5 | #include "str_hash.h" |
6 | |
7 | enum bkey_invalid_flags; |
8 | extern const struct bch_hash_desc bch2_dirent_hash_desc; |
9 | |
10 | int bch2_dirent_invalid(struct bch_fs *, struct bkey_s_c, |
11 | enum bkey_invalid_flags, struct printbuf *); |
12 | void bch2_dirent_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c); |
13 | |
14 | #define bch2_bkey_ops_dirent ((struct bkey_ops) { \ |
15 | .key_invalid = bch2_dirent_invalid, \ |
16 | .val_to_text = bch2_dirent_to_text, \ |
17 | .min_val_size = 16, \ |
18 | }) |
19 | |
20 | struct qstr; |
21 | struct file; |
22 | struct dir_context; |
23 | struct bch_fs; |
24 | struct bch_hash_info; |
25 | struct bch_inode_info; |
26 | |
27 | struct qstr bch2_dirent_get_name(struct bkey_s_c_dirent d); |
28 | |
29 | static inline unsigned dirent_val_u64s(unsigned len) |
30 | { |
31 | return DIV_ROUND_UP(offsetof(struct bch_dirent, d_name) + len, |
32 | sizeof(u64)); |
33 | } |
34 | |
35 | int bch2_dirent_read_target(struct btree_trans *, subvol_inum, |
36 | struct bkey_s_c_dirent, subvol_inum *); |
37 | |
38 | int bch2_dirent_create_snapshot(struct btree_trans *, u32, u64, u32, |
39 | const struct bch_hash_info *, u8, |
40 | const struct qstr *, u64, u64 *, |
41 | bch_str_hash_flags_t); |
42 | int bch2_dirent_create(struct btree_trans *, subvol_inum, |
43 | const struct bch_hash_info *, u8, |
44 | const struct qstr *, u64, u64 *, |
45 | bch_str_hash_flags_t); |
46 | |
47 | static inline unsigned vfs_d_type(unsigned type) |
48 | { |
49 | return type == DT_SUBVOL ? DT_DIR : type; |
50 | } |
51 | |
52 | enum bch_rename_mode { |
53 | BCH_RENAME, |
54 | BCH_RENAME_OVERWRITE, |
55 | BCH_RENAME_EXCHANGE, |
56 | }; |
57 | |
58 | int bch2_dirent_rename(struct btree_trans *, |
59 | subvol_inum, struct bch_hash_info *, |
60 | subvol_inum, struct bch_hash_info *, |
61 | const struct qstr *, subvol_inum *, u64 *, |
62 | const struct qstr *, subvol_inum *, u64 *, |
63 | enum bch_rename_mode); |
64 | |
65 | int bch2_dirent_lookup_trans(struct btree_trans *, struct btree_iter *, |
66 | subvol_inum, const struct bch_hash_info *, |
67 | const struct qstr *, subvol_inum *, unsigned); |
68 | u64 bch2_dirent_lookup(struct bch_fs *, subvol_inum, |
69 | const struct bch_hash_info *, |
70 | const struct qstr *, subvol_inum *); |
71 | |
72 | int bch2_empty_dir_snapshot(struct btree_trans *, u64, u32, u32); |
73 | int bch2_empty_dir_trans(struct btree_trans *, subvol_inum); |
74 | int bch2_readdir(struct bch_fs *, subvol_inum, struct dir_context *); |
75 | |
76 | #endif /* _BCACHEFS_DIRENT_H */ |
77 | |