82 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _BCACHEFS_FS_IOCTL_H3#define _BCACHEFS_FS_IOCTL_H4 5/* Inode flags: */6 7/* bcachefs inode flags -> vfs inode flags: */8static const __maybe_unused unsigned bch_flags_to_vfs[] = {9 [__BCH_INODE_sync] = S_SYNC,10 [__BCH_INODE_immutable] = S_IMMUTABLE,11 [__BCH_INODE_append] = S_APPEND,12 [__BCH_INODE_noatime] = S_NOATIME,13};14 15/* bcachefs inode flags -> FS_IOC_GETFLAGS: */16static const __maybe_unused unsigned bch_flags_to_uflags[] = {17 [__BCH_INODE_sync] = FS_SYNC_FL,18 [__BCH_INODE_immutable] = FS_IMMUTABLE_FL,19 [__BCH_INODE_append] = FS_APPEND_FL,20 [__BCH_INODE_nodump] = FS_NODUMP_FL,21 [__BCH_INODE_noatime] = FS_NOATIME_FL,22};23 24/* bcachefs inode flags -> FS_IOC_FSGETXATTR: */25static const __maybe_unused unsigned bch_flags_to_xflags[] = {26 [__BCH_INODE_sync] = FS_XFLAG_SYNC,27 [__BCH_INODE_immutable] = FS_XFLAG_IMMUTABLE,28 [__BCH_INODE_append] = FS_XFLAG_APPEND,29 [__BCH_INODE_nodump] = FS_XFLAG_NODUMP,30 [__BCH_INODE_noatime] = FS_XFLAG_NOATIME,31 //[__BCH_INODE_PROJINHERIT] = FS_XFLAG_PROJINHERIT;32};33 34#define set_flags(_map, _in, _out) \35do { \36 unsigned _i; \37 \38 for (_i = 0; _i < ARRAY_SIZE(_map); _i++) \39 if ((_in) & (1 << _i)) \40 (_out) |= _map[_i]; \41 else \42 (_out) &= ~_map[_i]; \43} while (0)44 45#define map_flags(_map, _in) \46({ \47 unsigned _out = 0; \48 \49 set_flags(_map, _in, _out); \50 _out; \51})52 53#define map_flags_rev(_map, _in) \54({ \55 unsigned _i, _out = 0; \56 \57 for (_i = 0; _i < ARRAY_SIZE(_map); _i++) \58 if ((_in) & _map[_i]) { \59 (_out) |= 1 << _i; \60 (_in) &= ~_map[_i]; \61 } \62 (_out); \63})64 65#define map_defined(_map) \66({ \67 unsigned _in = ~0; \68 \69 map_flags_rev(_map, _in); \70})71 72/* Set VFS inode flags from bcachefs inode: */73static inline void bch2_inode_flags_to_vfs(struct bch_inode_info *inode)74{75 set_flags(bch_flags_to_vfs, inode->ei_inode.bi_flags, inode->v.i_flags);76}77 78long bch2_fs_file_ioctl(struct file *, unsigned, unsigned long);79long bch2_compat_fs_ioctl(struct file *, unsigned, unsigned long);80 81#endif /* _BCACHEFS_FS_IOCTL_H */82