]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcache/inode.h
81dccf68357e6cf3a17b8e771a859e668f566f01
[bcachefs-tools-debian] / libbcache / inode.h
1 #ifndef _BCACHE_INODE_H
2 #define _BCACHE_INODE_H
3
4 extern const struct bkey_ops bch_bkey_inode_ops;
5
6 struct bch_inode_unpacked {
7         u64                     inum;
8         __le64                  i_hash_seed;
9         u32                     i_flags;
10         u16                     i_mode;
11
12 #define BCH_INODE_FIELD(_name, _bits)   u##_bits _name;
13         BCH_INODE_FIELDS()
14 #undef  BCH_INODE_FIELD
15 };
16
17 struct bkey_inode_buf {
18         struct bkey_i_inode     inode;
19
20 #define BCH_INODE_FIELD(_name, _bits)           + 8 + _bits / 8
21         u8              _pad[0 + BCH_INODE_FIELDS()];
22 #undef  BCH_INODE_FIELD
23 } __packed;
24
25 void bch_inode_pack(struct bkey_inode_buf *, const struct bch_inode_unpacked *);
26 int bch_inode_unpack(struct bkey_s_c_inode, struct bch_inode_unpacked *);
27
28 void bch_inode_init(struct cache_set *, struct bch_inode_unpacked *,
29                     uid_t, gid_t, umode_t, dev_t);
30 int bch_inode_create(struct cache_set *, struct bkey_i *, u64, u64, u64 *);
31 int bch_inode_truncate(struct cache_set *, u64, u64,
32                        struct extent_insert_hook *, u64 *);
33 int bch_inode_rm(struct cache_set *, u64);
34
35 int bch_inode_find_by_inum(struct cache_set *, u64,
36                            struct bch_inode_unpacked *);
37 int bch_cached_dev_inode_find_by_uuid(struct cache_set *, uuid_le *,
38                                       struct bkey_i_inode_blockdev *);
39
40 static inline struct timespec bch_time_to_timespec(struct cache_set *c, u64 time)
41 {
42         return ns_to_timespec(time * c->sb.time_precision + c->sb.time_base_lo);
43 }
44
45 static inline u64 timespec_to_bch_time(struct cache_set *c, struct timespec ts)
46 {
47         s64 ns = timespec_to_ns(&ts) - c->sb.time_base_lo;
48
49         if (c->sb.time_precision == 1)
50                 return ns;
51
52         return div_s64(ns, c->sb.time_precision);
53 }
54
55 #endif