summaryrefslogtreecommitdiff
path: root/libbcachefs/inode.h
blob: 53c70617b2890f50f0cc235386d29428f8075fe4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef _BCACHEFS_INODE_H
#define _BCACHEFS_INODE_H

#include <linux/math64.h>

extern const struct bkey_ops bch2_bkey_inode_ops;

struct bch_inode_unpacked {
	u64			bi_inum;
	__le64			bi_hash_seed;
	u32			bi_flags;
	u16			bi_mode;

#define BCH_INODE_FIELD(_name, _bits)	u##_bits _name;
	BCH_INODE_FIELDS()
#undef  BCH_INODE_FIELD
};

struct bkey_inode_buf {
	struct bkey_i_inode	inode;

#define BCH_INODE_FIELD(_name, _bits)		+ 8 + _bits / 8
	u8		_pad[0 + BCH_INODE_FIELDS()];
#undef  BCH_INODE_FIELD
} __attribute__((packed, aligned(8)));

void bch2_inode_pack(struct bkey_inode_buf *, const struct bch_inode_unpacked *);
int bch2_inode_unpack(struct bkey_s_c_inode, struct bch_inode_unpacked *);

void bch2_inode_init(struct bch_fs *, struct bch_inode_unpacked *,
		    uid_t, gid_t, umode_t, dev_t);
int bch2_inode_create(struct bch_fs *, struct bch_inode_unpacked *,
		      u64, u64, u64 *);
int bch2_inode_truncate(struct bch_fs *, u64, u64,
		       struct extent_insert_hook *, u64 *);
int bch2_inode_rm(struct bch_fs *, u64);

int bch2_inode_find_by_inum(struct bch_fs *, u64,
			   struct bch_inode_unpacked *);
int bch2_cached_dev_inode_find_by_uuid(struct bch_fs *, uuid_le *,
				      struct bkey_i_inode_blockdev *);

static inline struct timespec bch2_time_to_timespec(struct bch_fs *c, u64 time)
{
	return ns_to_timespec(time * c->sb.time_precision + c->sb.time_base_lo);
}

static inline u64 timespec_to_bch2_time(struct bch_fs *c, struct timespec ts)
{
	s64 ns = timespec_to_ns(&ts) - c->sb.time_base_lo;

	if (c->sb.time_precision == 1)
		return ns;

	return div_s64(ns, c->sb.time_precision);
}

#ifdef CONFIG_BCACHEFS_DEBUG
void bch2_inode_pack_test(void);
#else
static inline void bch2_inode_pack_test(void) {}
#endif

#endif /* _BCACHEFS_INODE_H */