linux-headers (unknown)

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