File Index
Files and directories
Sign in
FILE

btrfs.h

File preview with syntax highlighting.

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