1  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2  /*
3   * Copyright (C) 2007 Oracle.  All rights reserved.
4   *
5   * This program is free software; you can redistribute it and/or
6   * modify it under the terms of the GNU General Public
7   * License v2 as published by the Free Software Foundation.
8   *
9   * This program is distributed in the hope that it will be useful,
10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   * General Public License for more details.
13   *
14   * You should have received a copy of the GNU General Public
15   * License along with this program; if not, write to the
16   * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17   * Boston, MA 021110-1307, USA.
18   */
19  
20  #ifndef _UAPI_LINUX_BTRFS_H
21  #define _UAPI_LINUX_BTRFS_H
22  
23  #ifdef __cplusplus
24  extern "C" {
25  #endif
26  
27  #include <linux/types.h>
28  #include <linux/ioctl.h>
29  #include <linux/fs.h>
30  
31  #define BTRFS_IOCTL_MAGIC 0x94
32  #define BTRFS_VOL_NAME_MAX 255
33  #define BTRFS_LABEL_SIZE 256
34  
35  /* this should be 4k */
36  #define BTRFS_PATH_NAME_MAX 4087
37  struct btrfs_ioctl_vol_args {
38  	__s64 fd;
39  	char name[BTRFS_PATH_NAME_MAX + 1];
40  };
41  
42  #define BTRFS_DEVICE_PATH_NAME_MAX	1024
43  #define BTRFS_SUBVOL_NAME_MAX 		4039
44  
45  #ifndef __KERNEL__
46  /* Deprecated since 5.7 */
47  # define BTRFS_SUBVOL_CREATE_ASYNC	(1ULL << 0)
48  #endif
49  #define BTRFS_SUBVOL_RDONLY		(1ULL << 1)
50  #define BTRFS_SUBVOL_QGROUP_INHERIT	(1ULL << 2)
51  
52  #define BTRFS_DEVICE_SPEC_BY_ID		(1ULL << 3)
53  
54  #define BTRFS_SUBVOL_SPEC_BY_ID	(1ULL << 4)
55  
56  #define BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED		\
57  			(BTRFS_SUBVOL_RDONLY |		\
58  			BTRFS_SUBVOL_QGROUP_INHERIT |	\
59  			BTRFS_DEVICE_SPEC_BY_ID |	\
60  			BTRFS_SUBVOL_SPEC_BY_ID)
61  
62  #define BTRFS_FSID_SIZE 16
63  #define BTRFS_UUID_SIZE 16
64  #define BTRFS_UUID_UNPARSED_SIZE	37
65  
66  /*
67   * flags definition for qgroup limits
68   *
69   * Used by:
70   * struct btrfs_qgroup_limit.flags
71   * struct btrfs_qgroup_limit_item.flags
72   */
73  #define BTRFS_QGROUP_LIMIT_MAX_RFER	(1ULL << 0)
74  #define BTRFS_QGROUP_LIMIT_MAX_EXCL	(1ULL << 1)
75  #define BTRFS_QGROUP_LIMIT_RSV_RFER	(1ULL << 2)
76  #define BTRFS_QGROUP_LIMIT_RSV_EXCL	(1ULL << 3)
77  #define BTRFS_QGROUP_LIMIT_RFER_CMPR	(1ULL << 4)
78  #define BTRFS_QGROUP_LIMIT_EXCL_CMPR	(1ULL << 5)
79  
80  struct btrfs_qgroup_limit {
81  	__u64	flags;
82  	__u64	max_rfer;
83  	__u64	max_excl;
84  	__u64	rsv_rfer;
85  	__u64	rsv_excl;
86  };
87  
88  /*
89   * flags definition for qgroup inheritance
90   *
91   * Used by:
92   * struct btrfs_qgroup_inherit.flags
93   */
94  #define BTRFS_QGROUP_INHERIT_SET_LIMITS	(1ULL << 0)
95  #define BTRFS_QGROUP_INHERIT_FLAGS_SUPP (BTRFS_QGROUP_INHERIT_SET_LIMITS)
96  
97  struct btrfs_qgroup_inherit {
98  	__u64	flags;
99  	__u64	num_qgroups;
100  	__u64	num_ref_copies;
101  	__u64	num_excl_copies;
102  	struct btrfs_qgroup_limit lim;
103  	__u64	qgroups[];
104  };
105  
106  struct btrfs_ioctl_qgroup_limit_args {
107  	__u64	qgroupid;
108  	struct btrfs_qgroup_limit lim;
109  };
110  
111  /*
112   * Arguments for specification of subvolumes or devices, supporting by-name or
113   * by-id and flags
114   *
115   * The set of supported flags depends on the ioctl
116   *
117   * BTRFS_SUBVOL_RDONLY is also provided/consumed by the following ioctls:
118   * - BTRFS_IOC_SUBVOL_GETFLAGS
119   * - BTRFS_IOC_SUBVOL_SETFLAGS
120   */
121  
122  /* Supported flags for BTRFS_IOC_RM_DEV_V2 */
123  #define BTRFS_DEVICE_REMOVE_ARGS_MASK					\
124  	(BTRFS_DEVICE_SPEC_BY_ID)
125  
126  /* Supported flags for BTRFS_IOC_SNAP_CREATE_V2 and BTRFS_IOC_SUBVOL_CREATE_V2 */
127  #define BTRFS_SUBVOL_CREATE_ARGS_MASK					\
128  	 (BTRFS_SUBVOL_RDONLY |						\
129  	 BTRFS_SUBVOL_QGROUP_INHERIT)
130  
131  /* Supported flags for BTRFS_IOC_SNAP_DESTROY_V2 */
132  #define BTRFS_SUBVOL_DELETE_ARGS_MASK					\
133  	(BTRFS_SUBVOL_SPEC_BY_ID)
134  
135  struct btrfs_ioctl_vol_args_v2 {
136  	__s64 fd;
137  	__u64 transid;
138  	__u64 flags;
139  	union {
140  		struct {
141  			__u64 size;
142  			struct btrfs_qgroup_inherit __user *qgroup_inherit;
143  		};
144  		__u64 unused[4];
145  	};
146  	union {
147  		char name[BTRFS_SUBVOL_NAME_MAX + 1];
148  		__u64 devid;
149  		__u64 subvolid;
150  	};
151  };
152  
153  /*
154   * structure to report errors and progress to userspace, either as a
155   * result of a finished scrub, a canceled scrub or a progress inquiry
156   */
157  struct btrfs_scrub_progress {
158  	__u64 data_extents_scrubbed;	/* # of data extents scrubbed */
159  	__u64 tree_extents_scrubbed;	/* # of tree extents scrubbed */
160  	__u64 data_bytes_scrubbed;	/* # of data bytes scrubbed */
161  	__u64 tree_bytes_scrubbed;	/* # of tree bytes scrubbed */
162  	__u64 read_errors;		/* # of read errors encountered (EIO) */
163  	__u64 csum_errors;		/* # of failed csum checks */
164  	__u64 verify_errors;		/* # of occurrences, where the metadata
165  					 * of a tree block did not match the
166  					 * expected values, like generation or
167  					 * logical */
168  	__u64 no_csum;			/* # of 4k data block for which no csum
169  					 * is present, probably the result of
170  					 * data written with nodatasum */
171  	__u64 csum_discards;		/* # of csum for which no data was found
172  					 * in the extent tree. */
173  	__u64 super_errors;		/* # of bad super blocks encountered */
174  	__u64 malloc_errors;		/* # of internal kmalloc errors. These
175  					 * will likely cause an incomplete
176  					 * scrub */
177  	__u64 uncorrectable_errors;	/* # of errors where either no intact
178  					 * copy was found or the writeback
179  					 * failed */
180  	__u64 corrected_errors;		/* # of errors corrected */
181  	__u64 last_physical;		/* last physical address scrubbed. In
182  					 * case a scrub was aborted, this can
183  					 * be used to restart the scrub */
184  	__u64 unverified_errors;	/* # of occurrences where a read for a
185  					 * full (64k) bio failed, but the re-
186  					 * check succeeded for each 4k piece.
187  					 * Intermittent error. */
188  };
189  
190  #define BTRFS_SCRUB_READONLY	1
191  #define BTRFS_SCRUB_SUPPORTED_FLAGS	(BTRFS_SCRUB_READONLY)
192  struct btrfs_ioctl_scrub_args {
193  	__u64 devid;				/* in */
194  	__u64 start;				/* in */
195  	__u64 end;				/* in */
196  	__u64 flags;				/* in */
197  	struct btrfs_scrub_progress progress;	/* out */
198  	/* pad to 1k */
199  	__u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
200  };
201  
202  #define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS	0
203  #define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID	1
204  struct btrfs_ioctl_dev_replace_start_params {
205  	__u64 srcdevid;	/* in, if 0, use srcdev_name instead */
206  	__u64 cont_reading_from_srcdev_mode;	/* in, see #define
207  						 * above */
208  	__u8 srcdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];	/* in */
209  	__u8 tgtdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];	/* in */
210  };
211  
212  #define BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED	0
213  #define BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED		1
214  #define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED		2
215  #define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED		3
216  #define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED		4
217  struct btrfs_ioctl_dev_replace_status_params {
218  	__u64 replace_state;	/* out, see #define above */
219  	__u64 progress_1000;	/* out, 0 <= x <= 1000 */
220  	__u64 time_started;	/* out, seconds since 1-Jan-1970 */
221  	__u64 time_stopped;	/* out, seconds since 1-Jan-1970 */
222  	__u64 num_write_errors;	/* out */
223  	__u64 num_uncorrectable_read_errors;	/* out */
224  };
225  
226  #define BTRFS_IOCTL_DEV_REPLACE_CMD_START			0
227  #define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS			1
228  #define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL			2
229  #define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR			0
230  #define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED		1
231  #define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED		2
232  #define BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS		3
233  struct btrfs_ioctl_dev_replace_args {
234  	__u64 cmd;	/* in */
235  	__u64 result;	/* out */
236  
237  	union {
238  		struct btrfs_ioctl_dev_replace_start_params start;
239  		struct btrfs_ioctl_dev_replace_status_params status;
240  	};	/* in/out */
241  
242  	__u64 spare[64];
243  };
244  
245  struct btrfs_ioctl_dev_info_args {
246  	__u64 devid;				/* in/out */
247  	__u8 uuid[BTRFS_UUID_SIZE];		/* in/out */
248  	__u64 bytes_used;			/* out */
249  	__u64 total_bytes;			/* out */
250  	/*
251  	 * Optional, out.
252  	 *
253  	 * Showing the fsid of the device, allowing user space to check if this
254  	 * device is a seeding one.
255  	 *
256  	 * Introduced in v6.3, thus user space still needs to check if kernel
257  	 * changed this value.  Older kernel will not touch the values here.
258  	 */
259  	__u8 fsid[BTRFS_UUID_SIZE];
260  	__u64 unused[377];			/* pad to 4k */
261  	__u8 path[BTRFS_DEVICE_PATH_NAME_MAX];	/* out */
262  };
263  
264  /*
265   * Retrieve information about the filesystem
266   */
267  
268  /* Request information about checksum type and size */
269  #define BTRFS_FS_INFO_FLAG_CSUM_INFO			(1 << 0)
270  
271  /* Request information about filesystem generation */
272  #define BTRFS_FS_INFO_FLAG_GENERATION			(1 << 1)
273  /* Request information about filesystem metadata UUID */
274  #define BTRFS_FS_INFO_FLAG_METADATA_UUID		(1 << 2)
275  
276  struct btrfs_ioctl_fs_info_args {
277  	__u64 max_id;				/* out */
278  	__u64 num_devices;			/* out */
279  	__u8 fsid[BTRFS_FSID_SIZE];		/* out */
280  	__u32 nodesize;				/* out */
281  	__u32 sectorsize;			/* out */
282  	__u32 clone_alignment;			/* out */
283  	/* See BTRFS_FS_INFO_FLAG_* */
284  	__u16 csum_type;			/* out */
285  	__u16 csum_size;			/* out */
286  	__u64 flags;				/* in/out */
287  	__u64 generation;			/* out */
288  	__u8 metadata_uuid[BTRFS_FSID_SIZE];	/* out */
289  	__u8 reserved[944];			/* pad to 1k */
290  };
291  
292  /*
293   * feature flags
294   *
295   * Used by:
296   * struct btrfs_ioctl_feature_flags
297   */
298  #define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE		(1ULL << 0)
299  /*
300   * Older kernels (< 4.9) on big-endian systems produced broken free space tree
301   * bitmaps, and btrfs-progs also used to corrupt the free space tree (versions
302   * < 4.7.3).  If this bit is clear, then the free space tree cannot be trusted.
303   * btrfs-progs can also intentionally clear this bit to ask the kernel to
304   * rebuild the free space tree, however this might not work on older kernels
305   * that do not know about this bit. If not sure, clear the cache manually on
306   * first mount when booting older kernel versions.
307   */
308  #define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID	(1ULL << 1)
309  #define BTRFS_FEATURE_COMPAT_RO_VERITY			(1ULL << 2)
310  
311  /*
312   * Put all block group items into a dedicated block group tree, greatly
313   * reducing mount time for large filesystem due to better locality.
314   */
315  #define BTRFS_FEATURE_COMPAT_RO_BLOCK_GROUP_TREE	(1ULL << 3)
316  
317  #define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF	(1ULL << 0)
318  #define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL	(1ULL << 1)
319  #define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS	(1ULL << 2)
320  #define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO	(1ULL << 3)
321  #define BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD	(1ULL << 4)
322  
323  /*
324   * older kernels tried to do bigger metadata blocks, but the
325   * code was pretty buggy.  Lets not let them try anymore.
326   */
327  #define BTRFS_FEATURE_INCOMPAT_BIG_METADATA	(1ULL << 5)
328  
329  #define BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF	(1ULL << 6)
330  #define BTRFS_FEATURE_INCOMPAT_RAID56		(1ULL << 7)
331  #define BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA	(1ULL << 8)
332  #define BTRFS_FEATURE_INCOMPAT_NO_HOLES		(1ULL << 9)
333  #define BTRFS_FEATURE_INCOMPAT_METADATA_UUID	(1ULL << 10)
334  #define BTRFS_FEATURE_INCOMPAT_RAID1C34		(1ULL << 11)
335  #define BTRFS_FEATURE_INCOMPAT_ZONED		(1ULL << 12)
336  #define BTRFS_FEATURE_INCOMPAT_EXTENT_TREE_V2	(1ULL << 13)
337  #define BTRFS_FEATURE_INCOMPAT_RAID_STRIPE_TREE	(1ULL << 14)
338  #define BTRFS_FEATURE_INCOMPAT_SIMPLE_QUOTA	(1ULL << 16)
339  
340  struct btrfs_ioctl_feature_flags {
341  	__u64 compat_flags;
342  	__u64 compat_ro_flags;
343  	__u64 incompat_flags;
344  };
345  
346  /* balance control ioctl modes */
347  #define BTRFS_BALANCE_CTL_PAUSE		1
348  #define BTRFS_BALANCE_CTL_CANCEL	2
349  
350  /*
351   * this is packed, because it should be exactly the same as its disk
352   * byte order counterpart (struct btrfs_disk_balance_args)
353   */
354  struct btrfs_balance_args {
355  	__u64 profiles;
356  
357  	/*
358  	 * usage filter
359  	 * BTRFS_BALANCE_ARGS_USAGE with a single value means '0..N'
360  	 * BTRFS_BALANCE_ARGS_USAGE_RANGE - range syntax, min..max
361  	 */
362  	union {
363  		__u64 usage;
364  		struct {
365  			__u32 usage_min;
366  			__u32 usage_max;
367  		};
368  	};
369  	__u64 devid;
370  	__u64 pstart;
371  	__u64 pend;
372  	__u64 vstart;
373  	__u64 vend;
374  
375  	__u64 target;
376  
377  	__u64 flags;
378  
379  	/*
380  	 * BTRFS_BALANCE_ARGS_LIMIT with value 'limit'
381  	 * BTRFS_BALANCE_ARGS_LIMIT_RANGE - the extend version can use minimum
382  	 * and maximum
383  	 */
384  	union {
385  		__u64 limit;		/* limit number of processed chunks */
386  		struct {
387  			__u32 limit_min;
388  			__u32 limit_max;
389  		};
390  	};
391  
392  	/*
393  	 * Process chunks that cross stripes_min..stripes_max devices,
394  	 * BTRFS_BALANCE_ARGS_STRIPES_RANGE
395  	 */
396  	__u32 stripes_min;
397  	__u32 stripes_max;
398  
399  	__u64 unused[6];
400  } __attribute__ ((__packed__));
401  
402  /* report balance progress to userspace */
403  struct btrfs_balance_progress {
404  	__u64 expected;		/* estimated # of chunks that will be
405  				 * relocated to fulfill the request */
406  	__u64 considered;	/* # of chunks we have considered so far */
407  	__u64 completed;	/* # of chunks relocated so far */
408  };
409  
410  /*
411   * flags definition for balance
412   *
413   * Restriper's general type filter
414   *
415   * Used by:
416   * btrfs_ioctl_balance_args.flags
417   * btrfs_balance_control.flags (internal)
418   */
419  #define BTRFS_BALANCE_DATA		(1ULL << 0)
420  #define BTRFS_BALANCE_SYSTEM		(1ULL << 1)
421  #define BTRFS_BALANCE_METADATA		(1ULL << 2)
422  
423  #define BTRFS_BALANCE_TYPE_MASK		(BTRFS_BALANCE_DATA |	    \
424  					 BTRFS_BALANCE_SYSTEM |	    \
425  					 BTRFS_BALANCE_METADATA)
426  
427  #define BTRFS_BALANCE_FORCE		(1ULL << 3)
428  #define BTRFS_BALANCE_RESUME		(1ULL << 4)
429  
430  /*
431   * flags definitions for per-type balance args
432   *
433   * Balance filters
434   *
435   * Used by:
436   * struct btrfs_balance_args
437   */
438  #define BTRFS_BALANCE_ARGS_PROFILES	(1ULL << 0)
439  #define BTRFS_BALANCE_ARGS_USAGE	(1ULL << 1)
440  #define BTRFS_BALANCE_ARGS_DEVID	(1ULL << 2)
441  #define BTRFS_BALANCE_ARGS_DRANGE	(1ULL << 3)
442  #define BTRFS_BALANCE_ARGS_VRANGE	(1ULL << 4)
443  #define BTRFS_BALANCE_ARGS_LIMIT	(1ULL << 5)
444  #define BTRFS_BALANCE_ARGS_LIMIT_RANGE	(1ULL << 6)
445  #define BTRFS_BALANCE_ARGS_STRIPES_RANGE (1ULL << 7)
446  #define BTRFS_BALANCE_ARGS_USAGE_RANGE	(1ULL << 10)
447  
448  #define BTRFS_BALANCE_ARGS_MASK			\
449  	(BTRFS_BALANCE_ARGS_PROFILES |		\
450  	 BTRFS_BALANCE_ARGS_USAGE |		\
451  	 BTRFS_BALANCE_ARGS_DEVID | 		\
452  	 BTRFS_BALANCE_ARGS_DRANGE |		\
453  	 BTRFS_BALANCE_ARGS_VRANGE |		\
454  	 BTRFS_BALANCE_ARGS_LIMIT |		\
455  	 BTRFS_BALANCE_ARGS_LIMIT_RANGE |	\
456  	 BTRFS_BALANCE_ARGS_STRIPES_RANGE |	\
457  	 BTRFS_BALANCE_ARGS_USAGE_RANGE)
458  
459  /*
460   * Profile changing flags.  When SOFT is set we won't relocate chunk if
461   * it already has the target profile (even though it may be
462   * half-filled).
463   */
464  #define BTRFS_BALANCE_ARGS_CONVERT	(1ULL << 8)
465  #define BTRFS_BALANCE_ARGS_SOFT		(1ULL << 9)
466  
467  
468  /*
469   * flags definition for balance state
470   *
471   * Used by:
472   * struct btrfs_ioctl_balance_args.state
473   */
474  #define BTRFS_BALANCE_STATE_RUNNING	(1ULL << 0)
475  #define BTRFS_BALANCE_STATE_PAUSE_REQ	(1ULL << 1)
476  #define BTRFS_BALANCE_STATE_CANCEL_REQ	(1ULL << 2)
477  
478  struct btrfs_ioctl_balance_args {
479  	__u64 flags;				/* in/out */
480  	__u64 state;				/* out */
481  
482  	struct btrfs_balance_args data;		/* in/out */
483  	struct btrfs_balance_args meta;		/* in/out */
484  	struct btrfs_balance_args sys;		/* in/out */
485  
486  	struct btrfs_balance_progress stat;	/* out */
487  
488  	__u64 unused[72];			/* pad to 1k */
489  };
490  
491  #define BTRFS_INO_LOOKUP_PATH_MAX 4080
492  struct btrfs_ioctl_ino_lookup_args {
493  	__u64 treeid;
494  	__u64 objectid;
495  	char name[BTRFS_INO_LOOKUP_PATH_MAX];
496  };
497  
498  #define BTRFS_INO_LOOKUP_USER_PATH_MAX (4080 - BTRFS_VOL_NAME_MAX - 1)
499  struct btrfs_ioctl_ino_lookup_user_args {
500  	/* in, inode number containing the subvolume of 'subvolid' */
501  	__u64 dirid;
502  	/* in */
503  	__u64 treeid;
504  	/* out, name of the subvolume of 'treeid' */
505  	char name[BTRFS_VOL_NAME_MAX + 1];
506  	/*
507  	 * out, constructed path from the directory with which the ioctl is
508  	 * called to dirid
509  	 */
510  	char path[BTRFS_INO_LOOKUP_USER_PATH_MAX];
511  };
512  
513  /* Search criteria for the btrfs SEARCH ioctl family. */
514  struct btrfs_ioctl_search_key {
515  	/*
516  	 * The tree we're searching in. 1 is the tree of tree roots, 2 is the
517  	 * extent tree, etc...
518  	 *
519  	 * A special tree_id value of 0 will cause a search in the subvolume
520  	 * tree that the inode which is passed to the ioctl is part of.
521  	 */
522  	__u64 tree_id;		/* in */
523  
524  	/*
525  	 * When doing a tree search, we're actually taking a slice from a
526  	 * linear search space of 136-bit keys.
527  	 *
528  	 * A full 136-bit tree key is composed as:
529  	 *   (objectid << 72) + (type << 64) + offset
530  	 *
531  	 * The individual min and max values for objectid, type and offset
532  	 * define the min_key and max_key values for the search range. All
533  	 * metadata items with a key in the interval [min_key, max_key] will be
534  	 * returned.
535  	 *
536  	 * Additionally, we can filter the items returned on transaction id of
537  	 * the metadata block they're stored in by specifying a transid range.
538  	 * Be aware that this transaction id only denotes when the metadata
539  	 * page that currently contains the item got written the last time as
540  	 * result of a COW operation.  The number does not have any meaning
541  	 * related to the transaction in which an individual item that is being
542  	 * returned was created or changed.
543  	 */
544  	__u64 min_objectid;	/* in */
545  	__u64 max_objectid;	/* in */
546  	__u64 min_offset;	/* in */
547  	__u64 max_offset;	/* in */
548  	__u64 min_transid;	/* in */
549  	__u64 max_transid;	/* in */
550  	__u32 min_type;		/* in */
551  	__u32 max_type;		/* in */
552  
553  	/*
554  	 * input: The maximum amount of results desired.
555  	 * output: The actual amount of items returned, restricted by any of:
556  	 *  - reaching the upper bound of the search range
557  	 *  - reaching the input nr_items amount of items
558  	 *  - completely filling the supplied memory buffer
559  	 */
560  	__u32 nr_items;		/* in/out */
561  
562  	/* align to 64 bits */
563  	__u32 unused;
564  
565  	/* some extra for later */
566  	__u64 unused1;
567  	__u64 unused2;
568  	__u64 unused3;
569  	__u64 unused4;
570  };
571  
572  struct btrfs_ioctl_search_header {
573  	__u64 transid;
574  	__u64 objectid;
575  	__u64 offset;
576  	__u32 type;
577  	__u32 len;
578  } __attribute__ ((__may_alias__));
579  
580  #define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
581  /*
582   * the buf is an array of search headers where
583   * each header is followed by the actual item
584   * the type field is expanded to 32 bits for alignment
585   */
586  struct btrfs_ioctl_search_args {
587  	struct btrfs_ioctl_search_key key;
588  	char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
589  };
590  
591  /*
592   * Extended version of TREE_SEARCH ioctl that can return more than 4k of bytes.
593   * The allocated size of the buffer is set in buf_size.
594   */
595  struct btrfs_ioctl_search_args_v2 {
596  	struct btrfs_ioctl_search_key key; /* in/out - search parameters */
597  	__u64 buf_size;		   /* in - size of buffer
598  					    * out - on EOVERFLOW: needed size
599  					    *       to store item */
600  	__u64 buf[];                       /* out - found items */
601  };
602  
603  /* With a @src_length of zero, the range from @src_offset->EOF is cloned! */
604  struct btrfs_ioctl_clone_range_args {
605  	__s64 src_fd;
606  	__u64 src_offset, src_length;
607  	__u64 dest_offset;
608  };
609  
610  /*
611   * flags definition for the defrag range ioctl
612   *
613   * Used by:
614   * struct btrfs_ioctl_defrag_range_args.flags
615   */
616  #define BTRFS_DEFRAG_RANGE_COMPRESS 1
617  #define BTRFS_DEFRAG_RANGE_START_IO 2
618  #define BTRFS_DEFRAG_RANGE_FLAGS_SUPP	(BTRFS_DEFRAG_RANGE_COMPRESS |		\
619  					 BTRFS_DEFRAG_RANGE_START_IO)
620  
621  struct btrfs_ioctl_defrag_range_args {
622  	/* start of the defrag operation */
623  	__u64 start;
624  
625  	/* number of bytes to defrag, use (u64)-1 to say all */
626  	__u64 len;
627  
628  	/*
629  	 * flags for the operation, which can include turning
630  	 * on compression for this one defrag
631  	 */
632  	__u64 flags;
633  
634  	/*
635  	 * any extent bigger than this will be considered
636  	 * already defragged.  Use 0 to take the kernel default
637  	 * Use 1 to say every single extent must be rewritten
638  	 */
639  	__u32 extent_thresh;
640  
641  	/*
642  	 * which compression method to use if turning on compression
643  	 * for this defrag operation.  If unspecified, zlib will
644  	 * be used
645  	 */
646  	__u32 compress_type;
647  
648  	/* spare for later */
649  	__u32 unused[4];
650  };
651  
652  
653  #define BTRFS_SAME_DATA_DIFFERS	1
654  /* For extent-same ioctl */
655  struct btrfs_ioctl_same_extent_info {
656  	__s64 fd;		/* in - destination file */
657  	__u64 logical_offset;	/* in - start of extent in destination */
658  	__u64 bytes_deduped;	/* out - total # of bytes we were able
659  				 * to dedupe from this file */
660  	/* status of this dedupe operation:
661  	 * 0 if dedup succeeds
662  	 * < 0 for error
663  	 * == BTRFS_SAME_DATA_DIFFERS if data differs
664  	 */
665  	__s32 status;		/* out - see above description */
666  	__u32 reserved;
667  };
668  
669  struct btrfs_ioctl_same_args {
670  	__u64 logical_offset;	/* in - start of extent in source */
671  	__u64 length;		/* in - length of extent */
672  	__u16 dest_count;	/* in - total elements in info array */
673  	__u16 reserved1;
674  	__u32 reserved2;
675  	struct btrfs_ioctl_same_extent_info info[];
676  };
677  
678  struct btrfs_ioctl_space_info {
679  	__u64 flags;
680  	__u64 total_bytes;
681  	__u64 used_bytes;
682  };
683  
684  struct btrfs_ioctl_space_args {
685  	__u64 space_slots;
686  	__u64 total_spaces;
687  	struct btrfs_ioctl_space_info spaces[];
688  };
689  
690  struct btrfs_data_container {
691  	__u32	bytes_left;	/* out -- bytes not needed to deliver output */
692  	__u32	bytes_missing;	/* out -- additional bytes needed for result */
693  	__u32	elem_cnt;	/* out */
694  	__u32	elem_missed;	/* out */
695  	__u64	val[];		/* out */
696  };
697  
698  struct btrfs_ioctl_ino_path_args {
699  	__u64				inum;		/* in */
700  	__u64				size;		/* in */
701  	__u64				reserved[4];
702  	/* struct btrfs_data_container	*fspath;	   out */
703  	__u64				fspath;		/* out */
704  };
705  
706  struct btrfs_ioctl_logical_ino_args {
707  	__u64				logical;	/* in */
708  	__u64				size;		/* in */
709  	__u64				reserved[3];	/* must be 0 for now */
710  	__u64				flags;		/* in, v2 only */
711  	/* struct btrfs_data_container	*inodes;	out   */
712  	__u64				inodes;
713  };
714  
715  /*
716   * Return every ref to the extent, not just those containing logical block.
717   * Requires logical == extent bytenr.
718   */
719  #define BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET	(1ULL << 0)
720  
721  enum btrfs_dev_stat_values {
722  	/* disk I/O failure stats */
723  	BTRFS_DEV_STAT_WRITE_ERRS, /* EIO or EREMOTEIO from lower layers */
724  	BTRFS_DEV_STAT_READ_ERRS, /* EIO or EREMOTEIO from lower layers */
725  	BTRFS_DEV_STAT_FLUSH_ERRS, /* EIO or EREMOTEIO from lower layers */
726  
727  	/* stats for indirect indications for I/O failures */
728  	BTRFS_DEV_STAT_CORRUPTION_ERRS, /* checksum error, bytenr error or
729  					 * contents is illegal: this is an
730  					 * indication that the block was damaged
731  					 * during read or write, or written to
732  					 * wrong location or read from wrong
733  					 * location */
734  	BTRFS_DEV_STAT_GENERATION_ERRS, /* an indication that blocks have not
735  					 * been written */
736  
737  	BTRFS_DEV_STAT_VALUES_MAX
738  };
739  
740  /* Reset statistics after reading; needs SYS_ADMIN capability */
741  #define	BTRFS_DEV_STATS_RESET		(1ULL << 0)
742  
743  struct btrfs_ioctl_get_dev_stats {
744  	__u64 devid;				/* in */
745  	__u64 nr_items;				/* in/out */
746  	__u64 flags;				/* in/out */
747  
748  	/* out values: */
749  	__u64 values[BTRFS_DEV_STAT_VALUES_MAX];
750  
751  	/*
752  	 * This pads the struct to 1032 bytes. It was originally meant to pad to
753  	 * 1024 bytes, but when adding the flags field, the padding calculation
754  	 * was not adjusted.
755  	 */
756  	__u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX];
757  };
758  
759  #define BTRFS_QUOTA_CTL_ENABLE	1
760  #define BTRFS_QUOTA_CTL_DISABLE	2
761  #define BTRFS_QUOTA_CTL_RESCAN__NOTUSED	3
762  #define BTRFS_QUOTA_CTL_ENABLE_SIMPLE_QUOTA 4
763  struct btrfs_ioctl_quota_ctl_args {
764  	__u64 cmd;
765  	__u64 status;
766  };
767  
768  struct btrfs_ioctl_quota_rescan_args {
769  	__u64	flags;
770  	__u64   progress;
771  	__u64   reserved[6];
772  };
773  
774  struct btrfs_ioctl_qgroup_assign_args {
775  	__u64 assign;
776  	__u64 src;
777  	__u64 dst;
778  };
779  
780  struct btrfs_ioctl_qgroup_create_args {
781  	__u64 create;
782  	__u64 qgroupid;
783  };
784  struct btrfs_ioctl_timespec {
785  	__u64 sec;
786  	__u32 nsec;
787  };
788  
789  struct btrfs_ioctl_received_subvol_args {
790  	char	uuid[BTRFS_UUID_SIZE];	/* in */
791  	__u64	stransid;		/* in */
792  	__u64	rtransid;		/* out */
793  	struct btrfs_ioctl_timespec stime; /* in */
794  	struct btrfs_ioctl_timespec rtime; /* out */
795  	__u64	flags;			/* in */
796  	__u64	reserved[16];		/* in */
797  };
798  
799  /*
800   * Caller doesn't want file data in the send stream, even if the
801   * search of clone sources doesn't find an extent. UPDATE_EXTENT
802   * commands will be sent instead of WRITE commands.
803   */
804  #define BTRFS_SEND_FLAG_NO_FILE_DATA		0x1
805  
806  /*
807   * Do not add the leading stream header. Used when multiple snapshots
808   * are sent back to back.
809   */
810  #define BTRFS_SEND_FLAG_OMIT_STREAM_HEADER	0x2
811  
812  /*
813   * Omit the command at the end of the stream that indicated the end
814   * of the stream. This option is used when multiple snapshots are
815   * sent back to back.
816   */
817  #define BTRFS_SEND_FLAG_OMIT_END_CMD		0x4
818  
819  /*
820   * Read the protocol version in the structure
821   */
822  #define BTRFS_SEND_FLAG_VERSION			0x8
823  
824  /*
825   * Send compressed data using the ENCODED_WRITE command instead of decompressing
826   * the data and sending it with the WRITE command. This requires protocol
827   * version >= 2.
828   */
829  #define BTRFS_SEND_FLAG_COMPRESSED		0x10
830  
831  #define BTRFS_SEND_FLAG_MASK \
832  	(BTRFS_SEND_FLAG_NO_FILE_DATA | \
833  	 BTRFS_SEND_FLAG_OMIT_STREAM_HEADER | \
834  	 BTRFS_SEND_FLAG_OMIT_END_CMD | \
835  	 BTRFS_SEND_FLAG_VERSION | \
836  	 BTRFS_SEND_FLAG_COMPRESSED)
837  
838  struct btrfs_ioctl_send_args {
839  	__s64 send_fd;			/* in */
840  	__u64 clone_sources_count;	/* in */
841  	__u64 __user *clone_sources;	/* in */
842  	__u64 parent_root;		/* in */
843  	__u64 flags;			/* in */
844  	__u32 version;			/* in */
845  	__u8  reserved[28];		/* in */
846  };
847  
848  /*
849   * Information about a fs tree root.
850   *
851   * All items are filled by the ioctl
852   */
853  struct btrfs_ioctl_get_subvol_info_args {
854  	/* Id of this subvolume */
855  	__u64 treeid;
856  
857  	/* Name of this subvolume, used to get the real name at mount point */
858  	char name[BTRFS_VOL_NAME_MAX + 1];
859  
860  	/*
861  	 * Id of the subvolume which contains this subvolume.
862  	 * Zero for top-level subvolume or a deleted subvolume.
863  	 */
864  	__u64 parent_id;
865  
866  	/*
867  	 * Inode number of the directory which contains this subvolume.
868  	 * Zero for top-level subvolume or a deleted subvolume
869  	 */
870  	__u64 dirid;
871  
872  	/* Latest transaction id of this subvolume */
873  	__u64 generation;
874  
875  	/* Flags of this subvolume */
876  	__u64 flags;
877  
878  	/* UUID of this subvolume */
879  	__u8 uuid[BTRFS_UUID_SIZE];
880  
881  	/*
882  	 * UUID of the subvolume of which this subvolume is a snapshot.
883  	 * All zero for a non-snapshot subvolume.
884  	 */
885  	__u8 parent_uuid[BTRFS_UUID_SIZE];
886  
887  	/*
888  	 * UUID of the subvolume from which this subvolume was received.
889  	 * All zero for non-received subvolume.
890  	 */
891  	__u8 received_uuid[BTRFS_UUID_SIZE];
892  
893  	/* Transaction id indicating when change/create/send/receive happened */
894  	__u64 ctransid;
895  	__u64 otransid;
896  	__u64 stransid;
897  	__u64 rtransid;
898  	/* Time corresponding to c/o/s/rtransid */
899  	struct btrfs_ioctl_timespec ctime;
900  	struct btrfs_ioctl_timespec otime;
901  	struct btrfs_ioctl_timespec stime;
902  	struct btrfs_ioctl_timespec rtime;
903  
904  	/* Must be zero */
905  	__u64 reserved[8];
906  };
907  
908  #define BTRFS_MAX_ROOTREF_BUFFER_NUM 255
909  struct btrfs_ioctl_get_subvol_rootref_args {
910  		/* in/out, minimum id of rootref's treeid to be searched */
911  		__u64 min_treeid;
912  
913  		/* out */
914  		struct {
915  			__u64 treeid;
916  			__u64 dirid;
917  		} rootref[BTRFS_MAX_ROOTREF_BUFFER_NUM];
918  
919  		/* out, number of found items */
920  		__u8 num_items;
921  		__u8 align[7];
922  };
923  
924  /*
925   * Data and metadata for an encoded read or write.
926   *
927   * Encoded I/O bypasses any encoding automatically done by the filesystem (e.g.,
928   * compression). This can be used to read the compressed contents of a file or
929   * write pre-compressed data directly to a file.
930   *
931   * BTRFS_IOC_ENCODED_READ and BTRFS_IOC_ENCODED_WRITE are essentially
932   * preadv/pwritev with additional metadata about how the data is encoded and the
933   * size of the unencoded data.
934   *
935   * BTRFS_IOC_ENCODED_READ fills the given iovecs with the encoded data, fills
936   * the metadata fields, and returns the size of the encoded data. It reads one
937   * extent per call. It can also read data which is not encoded.
938   *
939   * BTRFS_IOC_ENCODED_WRITE uses the metadata fields, writes the encoded data
940   * from the iovecs, and returns the size of the encoded data. Note that the
941   * encoded data is not validated when it is written; if it is not valid (e.g.,
942   * it cannot be decompressed), then a subsequent read may return an error.
943   *
944   * Since the filesystem page cache contains decoded data, encoded I/O bypasses
945   * the page cache. Encoded I/O requires CAP_SYS_ADMIN.
946   */
947  struct btrfs_ioctl_encoded_io_args {
948  	/* Input parameters for both reads and writes. */
949  
950  	/*
951  	 * iovecs containing encoded data.
952  	 *
953  	 * For reads, if the size of the encoded data is larger than the sum of
954  	 * iov[n].iov_len for 0 <= n < iovcnt, then the ioctl fails with
955  	 * ENOBUFS.
956  	 *
957  	 * For writes, the size of the encoded data is the sum of iov[n].iov_len
958  	 * for 0 <= n < iovcnt. This must be less than 128 KiB (this limit may
959  	 * increase in the future). This must also be less than or equal to
960  	 * unencoded_len.
961  	 */
962  	const struct iovec __user *iov;
963  	/* Number of iovecs. */
964  	unsigned long iovcnt;
965  	/*
966  	 * Offset in file.
967  	 *
968  	 * For writes, must be aligned to the sector size of the filesystem.
969  	 */
970  	__s64 offset;
971  	/* Currently must be zero. */
972  	__u64 flags;
973  
974  	/*
975  	 * For reads, the following members are output parameters that will
976  	 * contain the returned metadata for the encoded data.
977  	 * For writes, the following members must be set to the metadata for the
978  	 * encoded data.
979  	 */
980  
981  	/*
982  	 * Length of the data in the file.
983  	 *
984  	 * Must be less than or equal to unencoded_len - unencoded_offset. For
985  	 * writes, must be aligned to the sector size of the filesystem unless
986  	 * the data ends at or beyond the current end of the file.
987  	 */
988  	__u64 len;
989  	/*
990  	 * Length of the unencoded (i.e., decrypted and decompressed) data.
991  	 *
992  	 * For writes, must be no more than 128 KiB (this limit may increase in
993  	 * the future). If the unencoded data is actually longer than
994  	 * unencoded_len, then it is truncated; if it is shorter, then it is
995  	 * extended with zeroes.
996  	 */
997  	__u64 unencoded_len;
998  	/*
999  	 * Offset from the first byte of the unencoded data to the first byte of
1000  	 * logical data in the file.
1001  	 *
1002  	 * Must be less than unencoded_len.
1003  	 */
1004  	__u64 unencoded_offset;
1005  	/*
1006  	 * BTRFS_ENCODED_IO_COMPRESSION_* type.
1007  	 *
1008  	 * For writes, must not be BTRFS_ENCODED_IO_COMPRESSION_NONE.
1009  	 */
1010  	__u32 compression;
1011  	/* Currently always BTRFS_ENCODED_IO_ENCRYPTION_NONE. */
1012  	__u32 encryption;
1013  	/*
1014  	 * Reserved for future expansion.
1015  	 *
1016  	 * For reads, always returned as zero. Users should check for non-zero
1017  	 * bytes. If there are any, then the kernel has a newer version of this
1018  	 * structure with additional information that the user definition is
1019  	 * missing.
1020  	 *
1021  	 * For writes, must be zeroed.
1022  	 */
1023  	__u8 reserved[64];
1024  };
1025  
1026  /* Data is not compressed. */
1027  #define BTRFS_ENCODED_IO_COMPRESSION_NONE 0
1028  /* Data is compressed as a single zlib stream. */
1029  #define BTRFS_ENCODED_IO_COMPRESSION_ZLIB 1
1030  /*
1031   * Data is compressed as a single zstd frame with the windowLog compression
1032   * parameter set to no more than 17.
1033   */
1034  #define BTRFS_ENCODED_IO_COMPRESSION_ZSTD 2
1035  /*
1036   * Data is compressed sector by sector (using the sector size indicated by the
1037   * name of the constant) with LZO1X and wrapped in the format documented in
1038   * fs/btrfs/lzo.c. For writes, the compression sector size must match the
1039   * filesystem sector size.
1040   */
1041  #define BTRFS_ENCODED_IO_COMPRESSION_LZO_4K 3
1042  #define BTRFS_ENCODED_IO_COMPRESSION_LZO_8K 4
1043  #define BTRFS_ENCODED_IO_COMPRESSION_LZO_16K 5
1044  #define BTRFS_ENCODED_IO_COMPRESSION_LZO_32K 6
1045  #define BTRFS_ENCODED_IO_COMPRESSION_LZO_64K 7
1046  #define BTRFS_ENCODED_IO_COMPRESSION_TYPES 8
1047  
1048  /* Data is not encrypted. */
1049  #define BTRFS_ENCODED_IO_ENCRYPTION_NONE 0
1050  #define BTRFS_ENCODED_IO_ENCRYPTION_TYPES 1
1051  
1052  /* Error codes as returned by the kernel */
1053  enum btrfs_err_code {
1054  	BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,
1055  	BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET,
1056  	BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET,
1057  	BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET,
1058  	BTRFS_ERROR_DEV_TGT_REPLACE,
1059  	BTRFS_ERROR_DEV_MISSING_NOT_FOUND,
1060  	BTRFS_ERROR_DEV_ONLY_WRITABLE,
1061  	BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS,
1062  	BTRFS_ERROR_DEV_RAID1C3_MIN_NOT_MET,
1063  	BTRFS_ERROR_DEV_RAID1C4_MIN_NOT_MET,
1064  };
1065  
1066  #define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
1067  				   struct btrfs_ioctl_vol_args)
1068  #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
1069  				   struct btrfs_ioctl_vol_args)
1070  #define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
1071  				   struct btrfs_ioctl_vol_args)
1072  #define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
1073  				   struct btrfs_ioctl_vol_args)
1074  #define BTRFS_IOC_FORGET_DEV _IOW(BTRFS_IOCTL_MAGIC, 5, \
1075  				   struct btrfs_ioctl_vol_args)
1076  /* trans start and trans end are dangerous, and only for
1077   * use by applications that know how to avoid the
1078   * resulting deadlocks
1079   */
1080  #define BTRFS_IOC_TRANS_START  _IO(BTRFS_IOCTL_MAGIC, 6)
1081  #define BTRFS_IOC_TRANS_END    _IO(BTRFS_IOCTL_MAGIC, 7)
1082  #define BTRFS_IOC_SYNC         _IO(BTRFS_IOCTL_MAGIC, 8)
1083  
1084  #define BTRFS_IOC_CLONE        _IOW(BTRFS_IOCTL_MAGIC, 9, int)
1085  #define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
1086  				   struct btrfs_ioctl_vol_args)
1087  #define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
1088  				   struct btrfs_ioctl_vol_args)
1089  #define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
1090  				   struct btrfs_ioctl_vol_args)
1091  
1092  #define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
1093  				  struct btrfs_ioctl_clone_range_args)
1094  
1095  #define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
1096  				   struct btrfs_ioctl_vol_args)
1097  #define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
1098  				struct btrfs_ioctl_vol_args)
1099  #define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
1100  				struct btrfs_ioctl_defrag_range_args)
1101  #define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
1102  				   struct btrfs_ioctl_search_args)
1103  #define BTRFS_IOC_TREE_SEARCH_V2 _IOWR(BTRFS_IOCTL_MAGIC, 17, \
1104  					   struct btrfs_ioctl_search_args_v2)
1105  #define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
1106  				   struct btrfs_ioctl_ino_lookup_args)
1107  #define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64)
1108  #define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
1109  				    struct btrfs_ioctl_space_args)
1110  #define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
1111  #define BTRFS_IOC_WAIT_SYNC  _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
1112  #define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
1113  				   struct btrfs_ioctl_vol_args_v2)
1114  #define BTRFS_IOC_SUBVOL_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 24, \
1115  				   struct btrfs_ioctl_vol_args_v2)
1116  #define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)
1117  #define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
1118  #define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
1119  			      struct btrfs_ioctl_scrub_args)
1120  #define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
1121  #define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
1122  				       struct btrfs_ioctl_scrub_args)
1123  #define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
1124  				 struct btrfs_ioctl_dev_info_args)
1125  #define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
1126  			       struct btrfs_ioctl_fs_info_args)
1127  #define BTRFS_IOC_BALANCE_V2 _IOWR(BTRFS_IOCTL_MAGIC, 32, \
1128  				   struct btrfs_ioctl_balance_args)
1129  #define BTRFS_IOC_BALANCE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)
1130  #define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \
1131  					struct btrfs_ioctl_balance_args)
1132  #define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \
1133  					struct btrfs_ioctl_ino_path_args)
1134  #define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \
1135  					struct btrfs_ioctl_logical_ino_args)
1136  #define BTRFS_IOC_SET_RECEIVED_SUBVOL _IOWR(BTRFS_IOCTL_MAGIC, 37, \
1137  				struct btrfs_ioctl_received_subvol_args)
1138  #define BTRFS_IOC_SEND _IOW(BTRFS_IOCTL_MAGIC, 38, struct btrfs_ioctl_send_args)
1139  #define BTRFS_IOC_DEVICES_READY _IOR(BTRFS_IOCTL_MAGIC, 39, \
1140  				     struct btrfs_ioctl_vol_args)
1141  #define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \
1142  			       struct btrfs_ioctl_quota_ctl_args)
1143  #define BTRFS_IOC_QGROUP_ASSIGN _IOW(BTRFS_IOCTL_MAGIC, 41, \
1144  			       struct btrfs_ioctl_qgroup_assign_args)
1145  #define BTRFS_IOC_QGROUP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 42, \
1146  			       struct btrfs_ioctl_qgroup_create_args)
1147  #define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \
1148  			       struct btrfs_ioctl_qgroup_limit_args)
1149  #define BTRFS_IOC_QUOTA_RESCAN _IOW(BTRFS_IOCTL_MAGIC, 44, \
1150  			       struct btrfs_ioctl_quota_rescan_args)
1151  #define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \
1152  			       struct btrfs_ioctl_quota_rescan_args)
1153  #define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)
1154  #define BTRFS_IOC_GET_FSLABEL 	FS_IOC_GETFSLABEL
1155  #define BTRFS_IOC_SET_FSLABEL	FS_IOC_SETFSLABEL
1156  #define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \
1157  				      struct btrfs_ioctl_get_dev_stats)
1158  #define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \
1159  				    struct btrfs_ioctl_dev_replace_args)
1160  #define BTRFS_IOC_FILE_EXTENT_SAME _IOWR(BTRFS_IOCTL_MAGIC, 54, \
1161  					 struct btrfs_ioctl_same_args)
1162  #define BTRFS_IOC_GET_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
1163  				   struct btrfs_ioctl_feature_flags)
1164  #define BTRFS_IOC_SET_FEATURES _IOW(BTRFS_IOCTL_MAGIC, 57, \
1165  				   struct btrfs_ioctl_feature_flags[2])
1166  #define BTRFS_IOC_GET_SUPPORTED_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
1167  				   struct btrfs_ioctl_feature_flags[3])
1168  #define BTRFS_IOC_RM_DEV_V2 _IOW(BTRFS_IOCTL_MAGIC, 58, \
1169  				   struct btrfs_ioctl_vol_args_v2)
1170  #define BTRFS_IOC_LOGICAL_INO_V2 _IOWR(BTRFS_IOCTL_MAGIC, 59, \
1171  					struct btrfs_ioctl_logical_ino_args)
1172  #define BTRFS_IOC_GET_SUBVOL_INFO _IOR(BTRFS_IOCTL_MAGIC, 60, \
1173  				struct btrfs_ioctl_get_subvol_info_args)
1174  #define BTRFS_IOC_GET_SUBVOL_ROOTREF _IOWR(BTRFS_IOCTL_MAGIC, 61, \
1175  				struct btrfs_ioctl_get_subvol_rootref_args)
1176  #define BTRFS_IOC_INO_LOOKUP_USER _IOWR(BTRFS_IOCTL_MAGIC, 62, \
1177  				struct btrfs_ioctl_ino_lookup_user_args)
1178  #define BTRFS_IOC_SNAP_DESTROY_V2 _IOW(BTRFS_IOCTL_MAGIC, 63, \
1179  				struct btrfs_ioctl_vol_args_v2)
1180  #define BTRFS_IOC_ENCODED_READ _IOR(BTRFS_IOCTL_MAGIC, 64, \
1181  				    struct btrfs_ioctl_encoded_io_args)
1182  #define BTRFS_IOC_ENCODED_WRITE _IOW(BTRFS_IOCTL_MAGIC, 64, \
1183  				     struct btrfs_ioctl_encoded_io_args)
1184  
1185  #ifdef __cplusplus
1186  }
1187  #endif
1188  
1189  #endif /* _UAPI_LINUX_BTRFS_H */
1190