brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · d30f9bb Raw
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