1 #ifndef _BCACHEFS_FS_IOCTL_H
2 #define _BCACHEFS_FS_IOCTL_H
6 /* bcachefs inode flags -> vfs inode flags: */
7 static const unsigned bch_flags_to_vfs[] = {
8 [__BCH_INODE_SYNC] = S_SYNC,
9 [__BCH_INODE_IMMUTABLE] = S_IMMUTABLE,
10 [__BCH_INODE_APPEND] = S_APPEND,
11 [__BCH_INODE_NOATIME] = S_NOATIME,
14 /* bcachefs inode flags -> FS_IOC_GETFLAGS: */
15 static const unsigned bch_flags_to_uflags[] = {
16 [__BCH_INODE_SYNC] = FS_SYNC_FL,
17 [__BCH_INODE_IMMUTABLE] = FS_IMMUTABLE_FL,
18 [__BCH_INODE_APPEND] = FS_APPEND_FL,
19 [__BCH_INODE_NODUMP] = FS_NODUMP_FL,
20 [__BCH_INODE_NOATIME] = FS_NOATIME_FL,
23 /* bcachefs inode flags -> FS_IOC_FSGETXATTR: */
24 static const unsigned bch_flags_to_xflags[] = {
25 [__BCH_INODE_SYNC] = FS_XFLAG_SYNC,
26 [__BCH_INODE_IMMUTABLE] = FS_XFLAG_IMMUTABLE,
27 [__BCH_INODE_APPEND] = FS_XFLAG_APPEND,
28 [__BCH_INODE_NODUMP] = FS_XFLAG_NODUMP,
29 [__BCH_INODE_NOATIME] = FS_XFLAG_NOATIME,
30 //[__BCH_INODE_PROJINHERIT] = FS_XFLAG_PROJINHERIT;
33 #define set_flags(_map, _in, _out) \
37 for (_i = 0; _i < ARRAY_SIZE(_map); _i++) \
38 if ((_in) & (1 << _i)) \
41 (_out) &= ~_map[_i]; \
44 #define map_flags(_map, _in) \
48 set_flags(_map, _in, _out); \
52 #define map_flags_rev(_map, _in) \
54 unsigned _i, _out = 0; \
56 for (_i = 0; _i < ARRAY_SIZE(_map); _i++) \
57 if ((_in) & _map[_i]) { \
64 #define map_defined(_map) \
68 map_flags_rev(_map, _in); \
71 /* Set VFS inode flags from bcachefs inode: */
72 static inline void bch2_inode_flags_to_vfs(struct bch_inode_info *inode)
74 set_flags(bch_flags_to_vfs, inode->ei_inode.bi_flags, inode->v.i_flags);
77 long bch2_fs_file_ioctl(struct file *, unsigned, unsigned long);
78 long bch2_compat_fs_ioctl(struct file *, unsigned, unsigned long);
80 #endif /* _BCACHEFS_FS_IOCTL_H */