• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * ioctl.h - f2fs ioctl header
3  *
4  * Authors: Jaegeuk Kim <jaegeuk@kernel.org>
5  */
6 
7 #include <sys/types.h>
8 #include <sys/ioctl.h>
9 
10 #ifdef HAVE_LINUX_TYPES_H
11 #include <linux/types.h>
12 #endif
13 #ifdef HAVE_LINUX_FIEMAP_H
14 #include <linux/fiemap.h>
15 #endif
16 #ifdef HAVE_LINUX_FS_H
17 #include <linux/fs.h>
18 #endif
19 
20 #include <sys/types.h>
21 
22 #ifdef UNUSED
23 #elif defined(__GNUC__)
24 # define UNUSED(x) UNUSED_ ## x __attribute__((unused))
25 #elif defined(__LCLINT__)
26 # define UNUSED(x) x
27 #elif defined(__cplusplus)
28 # define UNUSED(x)
29 #else
30 # define UNUSED(x) x
31 #endif
32 
33 typedef uint64_t	u64;
34 typedef uint32_t	u32;
35 typedef uint16_t	u16;
36 typedef uint8_t		u8;
37 
38 #ifndef HAVE_LINUX_TYPES_H
39 typedef u8	__u8;
40 typedef u16	__u16;
41 typedef u32	__u32;
42 typedef u16	__le16;
43 typedef u32	__le32;
44 typedef u16	__be16;
45 typedef u32	__be32;
46 #endif
47 
48 #define F2FS_BLKSIZE	4096
49 #define NEW_ADDR	0xFFFFFFFF
50 
51 #ifndef FS_IOC_GETFLAGS
52 #define FS_IOC_GETFLAGS			_IOR('f', 1, long)
53 #endif
54 #ifndef FS_IOC_SETFLAGS
55 #define FS_IOC_SETFLAGS			_IOW('f', 2, long)
56 #endif
57 
58 #define F2FS_IOCTL_MAGIC		0xf5
59 #define F2FS_IOC_GETFLAGS		FS_IOC_GETFLAGS
60 #define F2FS_IOC_SETFLAGS		FS_IOC_SETFLAGS
61 
62 #define F2FS_IOC_START_ATOMIC_WRITE	_IO(F2FS_IOCTL_MAGIC, 1)
63 #define F2FS_IOC_COMMIT_ATOMIC_WRITE	_IO(F2FS_IOCTL_MAGIC, 2)
64 #define F2FS_IOC_START_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 3)
65 #define F2FS_IOC_RELEASE_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 4)
66 #define F2FS_IOC_ABORT_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 5)
67 #define F2FS_IOC_GARBAGE_COLLECT	_IOW(F2FS_IOCTL_MAGIC, 6, __u32)
68 #define F2FS_IOC_WRITE_CHECKPOINT	_IO(F2FS_IOCTL_MAGIC, 7)
69 #define F2FS_IOC_DEFRAGMENT		_IOWR(F2FS_IOCTL_MAGIC, 8,	\
70 						struct f2fs_defragment)
71 #define F2FS_IOC_MOVE_RANGE		_IOWR(F2FS_IOCTL_MAGIC, 9,	\
72 						struct f2fs_move_range)
73 #define F2FS_IOC_FLUSH_DEVICE		_IOW(F2FS_IOCTL_MAGIC, 10,	\
74 						struct f2fs_flush_device)
75 #define F2FS_IOC_GARBAGE_COLLECT_RANGE	_IOW(F2FS_IOCTL_MAGIC, 11,	\
76 						struct f2fs_gc_range)
77 #define F2FS_IOC_GET_FEATURES		_IOR(F2FS_IOCTL_MAGIC, 12, __u32)
78 #define F2FS_IOC_SET_PIN_FILE		_IOW(F2FS_IOCTL_MAGIC, 13, __u32)
79 #define F2FS_IOC_GET_PIN_FILE		_IOR(F2FS_IOCTL_MAGIC, 14, __u32)
80 #define F2FS_IOC_PRECACHE_EXTENTS	_IO(F2FS_IOCTL_MAGIC, 15)
81 #define F2FS_IOC_RESIZE_FS		_IOW(F2FS_IOCTL_MAGIC, 16, __u64)
82 #define F2FS_IOC_GET_COMPRESS_BLOCKS	_IOR(F2FS_IOCTL_MAGIC, 17, __u64)
83 #define F2FS_IOC_RELEASE_COMPRESS_BLOCKS				\
84 					_IOR(F2FS_IOCTL_MAGIC, 18, __u64)
85 #define F2FS_IOC_RESERVE_COMPRESS_BLOCKS				\
86 					_IOR(F2FS_IOCTL_MAGIC, 19, __u64)
87 #define F2FS_IOC_GET_COMPRESS_OPTION    _IOR(F2FS_IOCTL_MAGIC, 21,      \
88 						struct f2fs_comp_option)
89 #define F2FS_IOC_SET_COMPRESS_OPTION    _IOW(F2FS_IOCTL_MAGIC, 22,      \
90 						struct f2fs_comp_option)
91 #define F2FS_IOC_DECOMPRESS_FILE        _IO(F2FS_IOCTL_MAGIC, 23)
92 #define F2FS_IOC_COMPRESS_FILE          _IO(F2FS_IOCTL_MAGIC, 24)
93 #define F2FS_IOC_START_ATOMIC_REPLACE	_IO(F2FS_IOCTL_MAGIC, 25)
94 
95 #ifndef FSCRYPT_POLICY_V1
96 #define FSCRYPT_POLICY_V1		0
97 #define FSCRYPT_KEY_DESCRIPTOR_SIZE	8
98 struct fscrypt_policy_v1 {
99 	__u8 version;
100 	__u8 contents_encryption_mode;
101 	__u8 filenames_encryption_mode;
102 	__u8 flags;
103 	__u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
104 };
105 #endif
106 #ifndef FS_IOC_GET_ENCRYPTION_POLICY
107 #define FS_IOC_GET_ENCRYPTION_POLICY		_IOW('f', 21, struct fscrypt_policy_v1)
108 #endif
109 
110 #ifndef FSCRYPT_POLICY_V2
111 #define FSCRYPT_POLICY_V2		2
112 #define FSCRYPT_KEY_IDENTIFIER_SIZE	16
113 struct fscrypt_policy_v2 {
114 	__u8 version;
115 	__u8 contents_encryption_mode;
116 	__u8 filenames_encryption_mode;
117 	__u8 flags;
118 	__u8 __reserved[4];
119 	__u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE];
120 };
121 /* Struct passed to FS_IOC_GET_ENCRYPTION_POLICY_EX */
122 struct fscrypt_get_policy_ex_arg {
123 	__u64 policy_size; /* input/output */
124 	union {
125 		__u8 version;
126 		struct fscrypt_policy_v1 v1;
127 		struct fscrypt_policy_v2 v2;
128 	} policy; /* output */
129 };
130 #endif
131 #ifndef FS_IOC_GET_ENCRYPTION_POLICY_EX
132 #define FS_IOC_GET_ENCRYPTION_POLICY_EX		_IOWR('f', 22, __u8[9]) /* size + version */
133 #endif
134 
135 #define F2FS_IOC_SET_ENCRYPTION_POLICY	FS_IOC_SET_ENCRYPTION_POLICY
136 #define F2FS_IOC_GET_ENCRYPTION_POLICY	FS_IOC_GET_ENCRYPTION_POLICY
137 #define F2FS_IOC_GET_ENCRYPTION_PWSALT	FS_IOC_GET_ENCRYPTION_PWSALT
138 
139 #define FS_IOC_ENABLE_VERITY		_IO('f', 133)
140 
141 /*
142  * Inode flags
143  */
144 #define F2FS_NOCOW_FL			0x00800000 /* Do not cow file */
145 
146 /*
147  * should be same as XFS_IOC_GOINGDOWN.
148  * Flags for going down operation used by FS_IOC_GOINGDOWN
149  */
150 #define F2FS_IOC_SHUTDOWN	_IOR('X', 125, __u32)	/* Shutdown */
151 #define F2FS_GOING_DOWN_FULLSYNC	0x0	/* going down with full sync */
152 #define F2FS_GOING_DOWN_METASYNC	0x1	/* going down with metadata */
153 #define F2FS_GOING_DOWN_NOSYNC		0x2	/* going down */
154 #define F2FS_GOING_DOWN_METAFLUSH	0x3	/* going down with meta flush */
155 #define F2FS_GOING_DOWN_NEED_FSCK	0x4	/* going down to trigger fsck */
156 #define F2FS_GOING_DOWN_MAX		0x5
157 
158 #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
159 /*
160  * ioctl commands in 32 bit emulation
161  */
162 #define F2FS_IOC32_GETFLAGS		FS_IOC32_GETFLAGS
163 #define F2FS_IOC32_SETFLAGS		FS_IOC32_SETFLAGS
164 #define F2FS_IOC32_GETVERSION		FS_IOC32_GETVERSION
165 #endif
166 
167 #define F2FS_IOC_FSGETXATTR		FS_IOC_FSGETXATTR
168 #define F2FS_IOC_FSSETXATTR		FS_IOC_FSSETXATTR
169 
170 #ifndef FS_ENCRYPT_FL
171 #define FS_ENCRYPT_FL			0x00000800 /* Encrypted file */
172 #endif
173 #ifndef FS_VERITY_FL
174 #define FS_VERITY_FL			0x00100000 /* Verity protected inode */
175 #endif
176 #ifndef FS_INLINE_DATA_FL
177 #define FS_INLINE_DATA_FL		0x10000000 /* Inline data for regular/symlink files */
178 #endif
179 #ifndef FS_NOCOW_FL
180 #define FS_NOCOW_FL			0x00800000 /* Do not cow file */
181 #endif
182 #ifndef FS_NOCOMP_FL
183 #define FS_NOCOMP_FL			0x00000400 /* Don't compress */
184 #endif
185 #ifndef FS_COMPR_FL
186 #define FS_COMPR_FL			0x00000004 /* Compress file */
187 #endif
188 #ifndef FS_CASEFOLD_FL
189 #define FS_CASEFOLD_FL			0x40000000 /* Folder is case insensitive */
190 #endif
191 
192 struct f2fs_gc_range {
193 	u32 sync;
194 	u64 start;
195 	u64 len;
196 };
197 
198 struct f2fs_defragment {
199 	u64 start;
200 	u64 len;
201 };
202 
203 struct f2fs_move_range {
204 	u32 dst_fd;		/* destination fd */
205 	u64 pos_in;		/* start position in src_fd */
206 	u64 pos_out;		/* start position in dst_fd */
207 	u64 len;		/* size to move */
208 };
209 
210 struct f2fs_flush_device {
211 	u32 dev_num;		/* device number to flush */
212 	u32 segments;		/* # of segments to flush */
213 };
214 
215 struct f2fs_comp_option {
216 	u8 algorithm;
217 	u8 log_cluster_size;
218 };
219