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