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