diff options
Diffstat (limited to 'libbcachefs/fs.h')
-rw-r--r-- | libbcachefs/fs.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/libbcachefs/fs.h b/libbcachefs/fs.h new file mode 100644 index 00000000..f7cad296 --- /dev/null +++ b/libbcachefs/fs.h @@ -0,0 +1,65 @@ +#ifndef _BCACHE_FS_H +#define _BCACHE_FS_H + +#include "str_hash.h" + +#include <linux/seqlock.h> + +struct bch_inode_info { + struct inode vfs_inode; + + struct mutex update_lock; + u64 journal_seq; + + atomic_long_t i_size_dirty_count; + + /* + * these are updated whenever we update the inode in the btree - for + * e.g. fsync + */ + u64 i_size; + u32 i_flags; + + atomic_long_t i_sectors_dirty_count; + atomic64_t i_sectors; + + struct bch_hash_info str_hash; +}; + +#define to_bch_ei(_inode) \ + container_of(_inode, struct bch_inode_info, vfs_inode) + +static inline u8 mode_to_type(umode_t mode) +{ + return (mode >> 12) & 15; +} + +static inline unsigned nlink_bias(umode_t mode) +{ + return S_ISDIR(mode) ? 2 : 1; +} + +struct bch_inode_unpacked; + +#ifndef NO_BCACHE_FS + +/* returns 0 if we want to do the update, or error is passed up */ +typedef int (*inode_set_fn)(struct bch_inode_info *, + struct bch_inode_unpacked *, void *); + +int __must_check __bch2_write_inode(struct bch_fs *, struct bch_inode_info *, + inode_set_fn, void *); +int __must_check bch2_write_inode(struct bch_fs *, + struct bch_inode_info *); + +void bch2_vfs_exit(void); +int bch2_vfs_init(void); + +#else + +static inline void bch2_vfs_exit(void) {} +static inline int bch2_vfs_init(void) { return 0; } + +#endif + +#endif /* _BCACHE_FS_H */ |