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