mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	 103ffe9aaf
			
		
	
	
		103ffe9aaf
		
	
	
	
	
		
			
			This lets us use bch2_prt_bitflags to print them out. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| #ifndef _BCACHEFS_FS_IOCTL_H
 | |
| #define _BCACHEFS_FS_IOCTL_H
 | |
| 
 | |
| /* Inode flags: */
 | |
| 
 | |
| /* bcachefs inode flags -> vfs inode flags: */
 | |
| static const __maybe_unused unsigned bch_flags_to_vfs[] = {
 | |
| 	[__BCH_INODE_sync]	= S_SYNC,
 | |
| 	[__BCH_INODE_immutable]	= S_IMMUTABLE,
 | |
| 	[__BCH_INODE_append]	= S_APPEND,
 | |
| 	[__BCH_INODE_noatime]	= S_NOATIME,
 | |
| };
 | |
| 
 | |
| /* bcachefs inode flags -> FS_IOC_GETFLAGS: */
 | |
| static const __maybe_unused unsigned bch_flags_to_uflags[] = {
 | |
| 	[__BCH_INODE_sync]	= FS_SYNC_FL,
 | |
| 	[__BCH_INODE_immutable]	= FS_IMMUTABLE_FL,
 | |
| 	[__BCH_INODE_append]	= FS_APPEND_FL,
 | |
| 	[__BCH_INODE_nodump]	= FS_NODUMP_FL,
 | |
| 	[__BCH_INODE_noatime]	= FS_NOATIME_FL,
 | |
| };
 | |
| 
 | |
| /* bcachefs inode flags -> FS_IOC_FSGETXATTR: */
 | |
| static const __maybe_unused unsigned bch_flags_to_xflags[] = {
 | |
| 	[__BCH_INODE_sync]	= FS_XFLAG_SYNC,
 | |
| 	[__BCH_INODE_immutable]	= FS_XFLAG_IMMUTABLE,
 | |
| 	[__BCH_INODE_append]	= FS_XFLAG_APPEND,
 | |
| 	[__BCH_INODE_nodump]	= FS_XFLAG_NODUMP,
 | |
| 	[__BCH_INODE_noatime]	= FS_XFLAG_NOATIME,
 | |
| 	//[__BCH_INODE_PROJINHERIT] = FS_XFLAG_PROJINHERIT;
 | |
| };
 | |
| 
 | |
| #define set_flags(_map, _in, _out)					\
 | |
| do {									\
 | |
| 	unsigned _i;							\
 | |
| 									\
 | |
| 	for (_i = 0; _i < ARRAY_SIZE(_map); _i++)			\
 | |
| 		if ((_in) & (1 << _i))					\
 | |
| 			(_out) |= _map[_i];				\
 | |
| 		else							\
 | |
| 			(_out) &= ~_map[_i];				\
 | |
| } while (0)
 | |
| 
 | |
| #define map_flags(_map, _in)						\
 | |
| ({									\
 | |
| 	unsigned _out = 0;						\
 | |
| 									\
 | |
| 	set_flags(_map, _in, _out);					\
 | |
| 	_out;								\
 | |
| })
 | |
| 
 | |
| #define map_flags_rev(_map, _in)					\
 | |
| ({									\
 | |
| 	unsigned _i, _out = 0;						\
 | |
| 									\
 | |
| 	for (_i = 0; _i < ARRAY_SIZE(_map); _i++)			\
 | |
| 		if ((_in) & _map[_i]) {					\
 | |
| 			(_out) |= 1 << _i;				\
 | |
| 			(_in) &= ~_map[_i];				\
 | |
| 		}							\
 | |
| 	(_out);								\
 | |
| })
 | |
| 
 | |
| #define map_defined(_map)						\
 | |
| ({									\
 | |
| 	unsigned _in = ~0;						\
 | |
| 									\
 | |
| 	map_flags_rev(_map, _in);					\
 | |
| })
 | |
| 
 | |
| /* Set VFS inode flags from bcachefs inode: */
 | |
| static inline void bch2_inode_flags_to_vfs(struct bch_inode_info *inode)
 | |
| {
 | |
| 	set_flags(bch_flags_to_vfs, inode->ei_inode.bi_flags, inode->v.i_flags);
 | |
| }
 | |
| 
 | |
| long bch2_fs_file_ioctl(struct file *, unsigned, unsigned long);
 | |
| long bch2_compat_fs_ioctl(struct file *, unsigned, unsigned long);
 | |
| 
 | |
| #endif /* _BCACHEFS_FS_IOCTL_H */
 |