]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/fs-ioctl.h
Update bcachefs sources to 15f6e66e86 bcachefs: pass around bset_tree less
[bcachefs-tools-debian] / libbcachefs / fs-ioctl.h
1 #ifndef _BCACHEFS_FS_IOCTL_H
2 #define _BCACHEFS_FS_IOCTL_H
3
4 /* Inode flags: */
5
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,
12 };
13
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,
21 };
22
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;
31 };
32
33 #define set_flags(_map, _in, _out)                                      \
34 do {                                                                    \
35         unsigned _i;                                                    \
36                                                                         \
37         for (_i = 0; _i < ARRAY_SIZE(_map); _i++)                       \
38                 if ((_in) & (1 << _i))                                  \
39                         (_out) |= _map[_i];                             \
40                 else                                                    \
41                         (_out) &= ~_map[_i];                            \
42 } while (0)
43
44 #define map_flags(_map, _in)                                            \
45 ({                                                                      \
46         unsigned _out = 0;                                              \
47                                                                         \
48         set_flags(_map, _in, _out);                                     \
49         _out;                                                           \
50 })
51
52 #define map_flags_rev(_map, _in)                                        \
53 ({                                                                      \
54         unsigned _i, _out = 0;                                          \
55                                                                         \
56         for (_i = 0; _i < ARRAY_SIZE(_map); _i++)                       \
57                 if ((_in) & _map[_i]) {                                 \
58                         (_out) |= 1 << _i;                              \
59                         (_in) &= ~_map[_i];                             \
60                 }                                                       \
61         (_out);                                                         \
62 })
63
64 #define map_defined(_map)                                               \
65 ({                                                                      \
66         unsigned _in = ~0;                                              \
67                                                                         \
68         map_flags_rev(_map, _in);                                       \
69 })
70
71 /* Set VFS inode flags from bcachefs inode: */
72 static inline void bch2_inode_flags_to_vfs(struct bch_inode_info *inode)
73 {
74         set_flags(bch_flags_to_vfs, inode->ei_inode.bi_flags, inode->v.i_flags);
75 }
76
77 long bch2_fs_file_ioctl(struct file *, unsigned, unsigned long);
78 long bch2_compat_fs_ioctl(struct file *, unsigned, unsigned long);
79
80 #endif /* _BCACHEFS_FS_IOCTL_H */