brintos

brintos / linux-shallow public Read only

0
0
Text · 36.3 KiB · cdf6ad8 Raw
1190 lines · 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/or6 * modify it under the terms of the GNU General Public7 * 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 of11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU12 * General Public License for more details.13 *14 * You should have received a copy of the GNU General Public15 * License along with this program; if not, write to the16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,17 * Boston, MA 021110-1307, USA.18 */19 20#ifndef _UAPI_LINUX_BTRFS_H21#define _UAPI_LINUX_BTRFS_H22 23#ifdef __cplusplus24extern "C" {25#endif26 27#include <linux/types.h>28#include <linux/ioctl.h>29#include <linux/fs.h>30 31#define BTRFS_IOCTL_MAGIC 0x9432#define BTRFS_VOL_NAME_MAX 25533#define BTRFS_LABEL_SIZE 25634 35/* this should be 4k */36#define BTRFS_PATH_NAME_MAX 408737struct btrfs_ioctl_vol_args {38	__s64 fd;39	char name[BTRFS_PATH_NAME_MAX + 1];40};41 42#define BTRFS_DEVICE_PATH_NAME_MAX	102443#define BTRFS_SUBVOL_NAME_MAX 		403944 45#ifndef __KERNEL__46/* Deprecated since 5.7 */47# define BTRFS_SUBVOL_CREATE_ASYNC	(1ULL << 0)48#endif49#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 1663#define BTRFS_UUID_SIZE 1664#define BTRFS_UUID_UNPARSED_SIZE	3765 66/*67 * flags definition for qgroup limits68 *69 * Used by:70 * struct btrfs_qgroup_limit.flags71 * struct btrfs_qgroup_limit_item.flags72 */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 inheritance90 *91 * Used by:92 * struct btrfs_qgroup_inherit.flags93 */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 or113 * by-id and flags114 *115 * The set of supported flags depends on the ioctl116 *117 * BTRFS_SUBVOL_RDONLY is also provided/consumed by the following ioctls:118 * - BTRFS_IOC_SUBVOL_GETFLAGS119 * - BTRFS_IOC_SUBVOL_SETFLAGS120 */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 a155 * result of a finished scrub, a canceled scrub or a progress inquiry156 */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 metadata165					 * of a tree block did not match the166					 * expected values, like generation or167					 * logical */168	__u64 no_csum;			/* # of 4k data block for which no csum169					 * is present, probably the result of170					 * data written with nodatasum */171	__u64 csum_discards;		/* # of csum for which no data was found172					 * in the extent tree. */173	__u64 super_errors;		/* # of bad super blocks encountered */174	__u64 malloc_errors;		/* # of internal kmalloc errors. These175					 * will likely cause an incomplete176					 * scrub */177	__u64 uncorrectable_errors;	/* # of errors where either no intact178					 * copy was found or the writeback179					 * failed */180	__u64 corrected_errors;		/* # of errors corrected */181	__u64 last_physical;		/* last physical address scrubbed. In182					 * case a scrub was aborted, this can183					 * be used to restart the scrub */184	__u64 unverified_errors;	/* # of occurrences where a read for a185					 * full (64k) bio failed, but the re-186					 * check succeeded for each 4k piece.187					 * Intermittent error. */188};189 190#define BTRFS_SCRUB_READONLY	1191#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	0203#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID	1204struct 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 #define207						 * 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	0213#define BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED		1214#define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED		2215#define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED		3216#define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED		4217struct 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			0227#define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS			1228#define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL			2229#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR			0230#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED		1231#define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED		2232#define BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS		3233struct 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 this254	 * device is a seeding one.255	 *256	 * Introduced in v6.3, thus user space still needs to check if kernel257	 * 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 filesystem266 */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 flags294 *295 * Used by:296 * struct btrfs_ioctl_feature_flags297 */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 tree301 * bitmaps, and btrfs-progs also used to corrupt the free space tree (versions302 * < 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 to304 * rebuild the free space tree, however this might not work on older kernels305 * that do not know about this bit. If not sure, clear the cache manually on306 * 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, greatly313 * 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 the325 * 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		1348#define BTRFS_BALANCE_CTL_CANCEL	2349 350/*351 * this is packed, because it should be exactly the same as its disk352 * byte order counterpart (struct btrfs_disk_balance_args)353 */354struct btrfs_balance_args {355	__u64 profiles;356 357	/*358	 * usage filter359	 * BTRFS_BALANCE_ARGS_USAGE with a single value means '0..N'360	 * BTRFS_BALANCE_ARGS_USAGE_RANGE - range syntax, min..max361	 */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 minimum382	 * and maximum383	 */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_RANGE395	 */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 be405				 * 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 balance412 *413 * Restriper's general type filter414 *415 * Used by:416 * btrfs_ioctl_balance_args.flags417 * 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 args432 *433 * Balance filters434 *435 * Used by:436 * struct btrfs_balance_args437 */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 if461 * it already has the target profile (even though it may be462 * 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 state470 *471 * Used by:472 * struct btrfs_ioctl_balance_args.state473 */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 4080492struct 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 is508	 * called to dirid509	 */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 the517	 * extent tree, etc...518	 *519	 * A special tree_id value of 0 will cause a search in the subvolume520	 * 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 a526	 * linear search space of 136-bit keys.527	 *528	 * A full 136-bit tree key is composed as:529	 *   (objectid << 72) + (type << 64) + offset530	 *531	 * The individual min and max values for objectid, type and offset532	 * define the min_key and max_key values for the search range. All533	 * metadata items with a key in the interval [min_key, max_key] will be534	 * returned.535	 *536	 * Additionally, we can filter the items returned on transaction id of537	 * the metadata block they're stored in by specifying a transid range.538	 * Be aware that this transaction id only denotes when the metadata539	 * page that currently contains the item got written the last time as540	 * result of a COW operation.  The number does not have any meaning541	 * related to the transaction in which an individual item that is being542	 * 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 range557	 *  - reaching the input nr_items amount of items558	 *  - completely filling the supplied memory buffer559	 */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 where583 * each header is followed by the actual item584 * the type field is expanded to 32 bits for alignment585 */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 buffer598					    * out - on EOVERFLOW: needed size599					    *       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 ioctl612 *613 * Used by:614 * struct btrfs_ioctl_defrag_range_args.flags615 */616#define BTRFS_DEFRAG_RANGE_COMPRESS 1617#define BTRFS_DEFRAG_RANGE_START_IO 2618#define BTRFS_DEFRAG_RANGE_FLAGS_SUPP	(BTRFS_DEFRAG_RANGE_COMPRESS |		\619					 BTRFS_DEFRAG_RANGE_START_IO)620 621struct btrfs_ioctl_defrag_range_args {622	/* start of the defrag operation */623	__u64 start;624 625	/* number of bytes to defrag, use (u64)-1 to say all */626	__u64 len;627 628	/*629	 * flags for the operation, which can include turning630	 * on compression for this one defrag631	 */632	__u64 flags;633 634	/*635	 * any extent bigger than this will be considered636	 * already defragged.  Use 0 to take the kernel default637	 * Use 1 to say every single extent must be rewritten638	 */639	__u32 extent_thresh;640 641	/*642	 * which compression method to use if turning on compression643	 * for this defrag operation.  If unspecified, zlib will644	 * be used645	 */646	__u32 compress_type;647 648	/* spare for later */649	__u32 unused[4];650};651 652 653#define BTRFS_SAME_DATA_DIFFERS	1654/* For extent-same ioctl */655struct btrfs_ioctl_same_extent_info {656	__s64 fd;		/* in - destination file */657	__u64 logical_offset;	/* in - start of extent in destination */658	__u64 bytes_deduped;	/* out - total # of bytes we were able659				 * to dedupe from this file */660	/* status of this dedupe operation:661	 * 0 if dedup succeeds662	 * < 0 for error663	 * == BTRFS_SAME_DATA_DIFFERS if data differs664	 */665	__s32 status;		/* out - see above description */666	__u32 reserved;667};668 669struct btrfs_ioctl_same_args {670	__u64 logical_offset;	/* in - start of extent in source */671	__u64 length;		/* in - length of extent */672	__u16 dest_count;	/* in - total elements in info array */673	__u16 reserved1;674	__u32 reserved2;675	struct btrfs_ioctl_same_extent_info info[];676};677 678struct btrfs_ioctl_space_info {679	__u64 flags;680	__u64 total_bytes;681	__u64 used_bytes;682};683 684struct btrfs_ioctl_space_args {685	__u64 space_slots;686	__u64 total_spaces;687	struct btrfs_ioctl_space_info spaces[];688};689 690struct btrfs_data_container {691	__u32	bytes_left;	/* out -- bytes not needed to deliver output */692	__u32	bytes_missing;	/* out -- additional bytes needed for result */693	__u32	elem_cnt;	/* out */694	__u32	elem_missed;	/* out */695	__u64	val[];		/* out */696};697 698struct btrfs_ioctl_ino_path_args {699	__u64				inum;		/* in */700	__u64				size;		/* in */701	__u64				reserved[4];702	/* struct btrfs_data_container	*fspath;	   out */703	__u64				fspath;		/* out */704};705 706struct btrfs_ioctl_logical_ino_args {707	__u64				logical;	/* in */708	__u64				size;		/* in */709	__u64				reserved[3];	/* must be 0 for now */710	__u64				flags;		/* in, v2 only */711	/* struct btrfs_data_container	*inodes;	out   */712	__u64				inodes;713};714 715/*716 * Return every ref to the extent, not just those containing logical block.717 * Requires logical == extent bytenr.718 */719#define BTRFS_LOGICAL_INO_ARGS_IGNORE_OFFSET	(1ULL << 0)720 721enum btrfs_dev_stat_values {722	/* disk I/O failure stats */723	BTRFS_DEV_STAT_WRITE_ERRS, /* EIO or EREMOTEIO from lower layers */724	BTRFS_DEV_STAT_READ_ERRS, /* EIO or EREMOTEIO from lower layers */725	BTRFS_DEV_STAT_FLUSH_ERRS, /* EIO or EREMOTEIO from lower layers */726 727	/* stats for indirect indications for I/O failures */728	BTRFS_DEV_STAT_CORRUPTION_ERRS, /* checksum error, bytenr error or729					 * contents is illegal: this is an730					 * indication that the block was damaged731					 * during read or write, or written to732					 * wrong location or read from wrong733					 * location */734	BTRFS_DEV_STAT_GENERATION_ERRS, /* an indication that blocks have not735					 * been written */736 737	BTRFS_DEV_STAT_VALUES_MAX738};739 740/* Reset statistics after reading; needs SYS_ADMIN capability */741#define	BTRFS_DEV_STATS_RESET		(1ULL << 0)742 743struct btrfs_ioctl_get_dev_stats {744	__u64 devid;				/* in */745	__u64 nr_items;				/* in/out */746	__u64 flags;				/* in/out */747 748	/* out values: */749	__u64 values[BTRFS_DEV_STAT_VALUES_MAX];750 751	/*752	 * This pads the struct to 1032 bytes. It was originally meant to pad to753	 * 1024 bytes, but when adding the flags field, the padding calculation754	 * was not adjusted.755	 */756	__u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX];757};758 759#define BTRFS_QUOTA_CTL_ENABLE	1760#define BTRFS_QUOTA_CTL_DISABLE	2761#define BTRFS_QUOTA_CTL_RESCAN__NOTUSED	3762#define BTRFS_QUOTA_CTL_ENABLE_SIMPLE_QUOTA 4763struct btrfs_ioctl_quota_ctl_args {764	__u64 cmd;765	__u64 status;766};767 768struct btrfs_ioctl_quota_rescan_args {769	__u64	flags;770	__u64   progress;771	__u64   reserved[6];772};773 774struct btrfs_ioctl_qgroup_assign_args {775	__u64 assign;776	__u64 src;777	__u64 dst;778};779 780struct btrfs_ioctl_qgroup_create_args {781	__u64 create;782	__u64 qgroupid;783};784struct btrfs_ioctl_timespec {785	__u64 sec;786	__u32 nsec;787};788 789struct btrfs_ioctl_received_subvol_args {790	char	uuid[BTRFS_UUID_SIZE];	/* in */791	__u64	stransid;		/* in */792	__u64	rtransid;		/* out */793	struct btrfs_ioctl_timespec stime; /* in */794	struct btrfs_ioctl_timespec rtime; /* out */795	__u64	flags;			/* in */796	__u64	reserved[16];		/* in */797};798 799/*800 * Caller doesn't want file data in the send stream, even if the801 * search of clone sources doesn't find an extent. UPDATE_EXTENT802 * commands will be sent instead of WRITE commands.803 */804#define BTRFS_SEND_FLAG_NO_FILE_DATA		0x1805 806/*807 * Do not add the leading stream header. Used when multiple snapshots808 * are sent back to back.809 */810#define BTRFS_SEND_FLAG_OMIT_STREAM_HEADER	0x2811 812/*813 * Omit the command at the end of the stream that indicated the end814 * of the stream. This option is used when multiple snapshots are815 * sent back to back.816 */817#define BTRFS_SEND_FLAG_OMIT_END_CMD		0x4818 819/*820 * Read the protocol version in the structure821 */822#define BTRFS_SEND_FLAG_VERSION			0x8823 824/*825 * Send compressed data using the ENCODED_WRITE command instead of decompressing826 * the data and sending it with the WRITE command. This requires protocol827 * version >= 2.828 */829#define BTRFS_SEND_FLAG_COMPRESSED		0x10830 831#define BTRFS_SEND_FLAG_MASK \832	(BTRFS_SEND_FLAG_NO_FILE_DATA | \833	 BTRFS_SEND_FLAG_OMIT_STREAM_HEADER | \834	 BTRFS_SEND_FLAG_OMIT_END_CMD | \835	 BTRFS_SEND_FLAG_VERSION | \836	 BTRFS_SEND_FLAG_COMPRESSED)837 838struct btrfs_ioctl_send_args {839	__s64 send_fd;			/* in */840	__u64 clone_sources_count;	/* in */841	__u64 __user *clone_sources;	/* in */842	__u64 parent_root;		/* in */843	__u64 flags;			/* in */844	__u32 version;			/* in */845	__u8  reserved[28];		/* in */846};847 848/*849 * Information about a fs tree root.850 *851 * All items are filled by the ioctl852 */853struct btrfs_ioctl_get_subvol_info_args {854	/* Id of this subvolume */855	__u64 treeid;856 857	/* Name of this subvolume, used to get the real name at mount point */858	char name[BTRFS_VOL_NAME_MAX + 1];859 860	/*861	 * Id of the subvolume which contains this subvolume.862	 * Zero for top-level subvolume or a deleted subvolume.863	 */864	__u64 parent_id;865 866	/*867	 * Inode number of the directory which contains this subvolume.868	 * Zero for top-level subvolume or a deleted subvolume869	 */870	__u64 dirid;871 872	/* Latest transaction id of this subvolume */873	__u64 generation;874 875	/* Flags of this subvolume */876	__u64 flags;877 878	/* UUID of this subvolume */879	__u8 uuid[BTRFS_UUID_SIZE];880 881	/*882	 * UUID of the subvolume of which this subvolume is a snapshot.883	 * All zero for a non-snapshot subvolume.884	 */885	__u8 parent_uuid[BTRFS_UUID_SIZE];886 887	/*888	 * UUID of the subvolume from which this subvolume was received.889	 * All zero for non-received subvolume.890	 */891	__u8 received_uuid[BTRFS_UUID_SIZE];892 893	/* Transaction id indicating when change/create/send/receive happened */894	__u64 ctransid;895	__u64 otransid;896	__u64 stransid;897	__u64 rtransid;898	/* Time corresponding to c/o/s/rtransid */899	struct btrfs_ioctl_timespec ctime;900	struct btrfs_ioctl_timespec otime;901	struct btrfs_ioctl_timespec stime;902	struct btrfs_ioctl_timespec rtime;903 904	/* Must be zero */905	__u64 reserved[8];906};907 908#define BTRFS_MAX_ROOTREF_BUFFER_NUM 255909struct btrfs_ioctl_get_subvol_rootref_args {910		/* in/out, minimum id of rootref's treeid to be searched */911		__u64 min_treeid;912 913		/* out */914		struct {915			__u64 treeid;916			__u64 dirid;917		} rootref[BTRFS_MAX_ROOTREF_BUFFER_NUM];918 919		/* out, number of found items */920		__u8 num_items;921		__u8 align[7];922};923 924/*925 * Data and metadata for an encoded read or write.926 *927 * Encoded I/O bypasses any encoding automatically done by the filesystem (e.g.,928 * compression). This can be used to read the compressed contents of a file or929 * write pre-compressed data directly to a file.930 *931 * BTRFS_IOC_ENCODED_READ and BTRFS_IOC_ENCODED_WRITE are essentially932 * preadv/pwritev with additional metadata about how the data is encoded and the933 * size of the unencoded data.934 *935 * BTRFS_IOC_ENCODED_READ fills the given iovecs with the encoded data, fills936 * the metadata fields, and returns the size of the encoded data. It reads one937 * extent per call. It can also read data which is not encoded.938 *939 * BTRFS_IOC_ENCODED_WRITE uses the metadata fields, writes the encoded data940 * from the iovecs, and returns the size of the encoded data. Note that the941 * encoded data is not validated when it is written; if it is not valid (e.g.,942 * it cannot be decompressed), then a subsequent read may return an error.943 *944 * Since the filesystem page cache contains decoded data, encoded I/O bypasses945 * the page cache. Encoded I/O requires CAP_SYS_ADMIN.946 */947struct btrfs_ioctl_encoded_io_args {948	/* Input parameters for both reads and writes. */949 950	/*951	 * iovecs containing encoded data.952	 *953	 * For reads, if the size of the encoded data is larger than the sum of954	 * iov[n].iov_len for 0 <= n < iovcnt, then the ioctl fails with955	 * ENOBUFS.956	 *957	 * For writes, the size of the encoded data is the sum of iov[n].iov_len958	 * for 0 <= n < iovcnt. This must be less than 128 KiB (this limit may959	 * increase in the future). This must also be less than or equal to960	 * unencoded_len.961	 */962	const struct iovec __user *iov;963	/* Number of iovecs. */964	unsigned long iovcnt;965	/*966	 * Offset in file.967	 *968	 * For writes, must be aligned to the sector size of the filesystem.969	 */970	__s64 offset;971	/* Currently must be zero. */972	__u64 flags;973 974	/*975	 * For reads, the following members are output parameters that will976	 * contain the returned metadata for the encoded data.977	 * For writes, the following members must be set to the metadata for the978	 * encoded data.979	 */980 981	/*982	 * Length of the data in the file.983	 *984	 * Must be less than or equal to unencoded_len - unencoded_offset. For985	 * writes, must be aligned to the sector size of the filesystem unless986	 * the data ends at or beyond the current end of the file.987	 */988	__u64 len;989	/*990	 * Length of the unencoded (i.e., decrypted and decompressed) data.991	 *992	 * For writes, must be no more than 128 KiB (this limit may increase in993	 * the future). If the unencoded data is actually longer than994	 * unencoded_len, then it is truncated; if it is shorter, then it is995	 * extended with zeroes.996	 */997	__u64 unencoded_len;998	/*999	 * Offset from the first byte of the unencoded data to the first byte of1000	 * logical data in the file.1001	 *1002	 * Must be less than unencoded_len.1003	 */1004	__u64 unencoded_offset;1005	/*1006	 * BTRFS_ENCODED_IO_COMPRESSION_* type.1007	 *1008	 * For writes, must not be BTRFS_ENCODED_IO_COMPRESSION_NONE.1009	 */1010	__u32 compression;1011	/* Currently always BTRFS_ENCODED_IO_ENCRYPTION_NONE. */1012	__u32 encryption;1013	/*1014	 * Reserved for future expansion.1015	 *1016	 * For reads, always returned as zero. Users should check for non-zero1017	 * bytes. If there are any, then the kernel has a newer version of this1018	 * structure with additional information that the user definition is1019	 * missing.1020	 *1021	 * For writes, must be zeroed.1022	 */1023	__u8 reserved[64];1024};1025 1026/* Data is not compressed. */1027#define BTRFS_ENCODED_IO_COMPRESSION_NONE 01028/* Data is compressed as a single zlib stream. */1029#define BTRFS_ENCODED_IO_COMPRESSION_ZLIB 11030/*1031 * Data is compressed as a single zstd frame with the windowLog compression1032 * parameter set to no more than 17.1033 */1034#define BTRFS_ENCODED_IO_COMPRESSION_ZSTD 21035/*1036 * Data is compressed sector by sector (using the sector size indicated by the1037 * name of the constant) with LZO1X and wrapped in the format documented in1038 * fs/btrfs/lzo.c. For writes, the compression sector size must match the1039 * filesystem sector size.1040 */1041#define BTRFS_ENCODED_IO_COMPRESSION_LZO_4K 31042#define BTRFS_ENCODED_IO_COMPRESSION_LZO_8K 41043#define BTRFS_ENCODED_IO_COMPRESSION_LZO_16K 51044#define BTRFS_ENCODED_IO_COMPRESSION_LZO_32K 61045#define BTRFS_ENCODED_IO_COMPRESSION_LZO_64K 71046#define BTRFS_ENCODED_IO_COMPRESSION_TYPES 81047 1048/* Data is not encrypted. */1049#define BTRFS_ENCODED_IO_ENCRYPTION_NONE 01050#define BTRFS_ENCODED_IO_ENCRYPTION_TYPES 11051 1052/* Error codes as returned by the kernel */1053enum btrfs_err_code {1054	BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,1055	BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET,1056	BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET,1057	BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET,1058	BTRFS_ERROR_DEV_TGT_REPLACE,1059	BTRFS_ERROR_DEV_MISSING_NOT_FOUND,1060	BTRFS_ERROR_DEV_ONLY_WRITABLE,1061	BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS,1062	BTRFS_ERROR_DEV_RAID1C3_MIN_NOT_MET,1063	BTRFS_ERROR_DEV_RAID1C4_MIN_NOT_MET,1064};1065 1066#define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \1067				   struct btrfs_ioctl_vol_args)1068#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \1069				   struct btrfs_ioctl_vol_args)1070#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \1071				   struct btrfs_ioctl_vol_args)1072#define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \1073				   struct btrfs_ioctl_vol_args)1074#define BTRFS_IOC_FORGET_DEV _IOW(BTRFS_IOCTL_MAGIC, 5, \1075				   struct btrfs_ioctl_vol_args)1076/* trans start and trans end are dangerous, and only for1077 * use by applications that know how to avoid the1078 * resulting deadlocks1079 */1080#define BTRFS_IOC_TRANS_START  _IO(BTRFS_IOCTL_MAGIC, 6)1081#define BTRFS_IOC_TRANS_END    _IO(BTRFS_IOCTL_MAGIC, 7)1082#define BTRFS_IOC_SYNC         _IO(BTRFS_IOCTL_MAGIC, 8)1083 1084#define BTRFS_IOC_CLONE        _IOW(BTRFS_IOCTL_MAGIC, 9, int)1085#define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \1086				   struct btrfs_ioctl_vol_args)1087#define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \1088				   struct btrfs_ioctl_vol_args)1089#define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \1090				   struct btrfs_ioctl_vol_args)1091 1092#define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \1093				  struct btrfs_ioctl_clone_range_args)1094 1095#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \1096				   struct btrfs_ioctl_vol_args)1097#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \1098				struct btrfs_ioctl_vol_args)1099#define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \1100				struct btrfs_ioctl_defrag_range_args)1101#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \1102				   struct btrfs_ioctl_search_args)1103#define BTRFS_IOC_TREE_SEARCH_V2 _IOWR(BTRFS_IOCTL_MAGIC, 17, \1104					   struct btrfs_ioctl_search_args_v2)1105#define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \1106				   struct btrfs_ioctl_ino_lookup_args)1107#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64)1108#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \1109				    struct btrfs_ioctl_space_args)1110#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)1111#define BTRFS_IOC_WAIT_SYNC  _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)1112#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \1113				   struct btrfs_ioctl_vol_args_v2)1114#define BTRFS_IOC_SUBVOL_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 24, \1115				   struct btrfs_ioctl_vol_args_v2)1116#define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)1117#define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)1118#define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \1119			      struct btrfs_ioctl_scrub_args)1120#define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)1121#define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \1122				       struct btrfs_ioctl_scrub_args)1123#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \1124				 struct btrfs_ioctl_dev_info_args)1125#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \1126			       struct btrfs_ioctl_fs_info_args)1127#define BTRFS_IOC_BALANCE_V2 _IOWR(BTRFS_IOCTL_MAGIC, 32, \1128				   struct btrfs_ioctl_balance_args)1129#define BTRFS_IOC_BALANCE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)1130#define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \1131					struct btrfs_ioctl_balance_args)1132#define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \1133					struct btrfs_ioctl_ino_path_args)1134#define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \1135					struct btrfs_ioctl_logical_ino_args)1136#define BTRFS_IOC_SET_RECEIVED_SUBVOL _IOWR(BTRFS_IOCTL_MAGIC, 37, \1137				struct btrfs_ioctl_received_subvol_args)1138#define BTRFS_IOC_SEND _IOW(BTRFS_IOCTL_MAGIC, 38, struct btrfs_ioctl_send_args)1139#define BTRFS_IOC_DEVICES_READY _IOR(BTRFS_IOCTL_MAGIC, 39, \1140				     struct btrfs_ioctl_vol_args)1141#define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \1142			       struct btrfs_ioctl_quota_ctl_args)1143#define BTRFS_IOC_QGROUP_ASSIGN _IOW(BTRFS_IOCTL_MAGIC, 41, \1144			       struct btrfs_ioctl_qgroup_assign_args)1145#define BTRFS_IOC_QGROUP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 42, \1146			       struct btrfs_ioctl_qgroup_create_args)1147#define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \1148			       struct btrfs_ioctl_qgroup_limit_args)1149#define BTRFS_IOC_QUOTA_RESCAN _IOW(BTRFS_IOCTL_MAGIC, 44, \1150			       struct btrfs_ioctl_quota_rescan_args)1151#define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \1152			       struct btrfs_ioctl_quota_rescan_args)1153#define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)1154#define BTRFS_IOC_GET_FSLABEL 	FS_IOC_GETFSLABEL1155#define BTRFS_IOC_SET_FSLABEL	FS_IOC_SETFSLABEL1156#define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \1157				      struct btrfs_ioctl_get_dev_stats)1158#define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \1159				    struct btrfs_ioctl_dev_replace_args)1160#define BTRFS_IOC_FILE_EXTENT_SAME _IOWR(BTRFS_IOCTL_MAGIC, 54, \1161					 struct btrfs_ioctl_same_args)1162#define BTRFS_IOC_GET_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \1163				   struct btrfs_ioctl_feature_flags)1164#define BTRFS_IOC_SET_FEATURES _IOW(BTRFS_IOCTL_MAGIC, 57, \1165				   struct btrfs_ioctl_feature_flags[2])1166#define BTRFS_IOC_GET_SUPPORTED_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \1167				   struct btrfs_ioctl_feature_flags[3])1168#define BTRFS_IOC_RM_DEV_V2 _IOW(BTRFS_IOCTL_MAGIC, 58, \1169				   struct btrfs_ioctl_vol_args_v2)1170#define BTRFS_IOC_LOGICAL_INO_V2 _IOWR(BTRFS_IOCTL_MAGIC, 59, \1171					struct btrfs_ioctl_logical_ino_args)1172#define BTRFS_IOC_GET_SUBVOL_INFO _IOR(BTRFS_IOCTL_MAGIC, 60, \1173				struct btrfs_ioctl_get_subvol_info_args)1174#define BTRFS_IOC_GET_SUBVOL_ROOTREF _IOWR(BTRFS_IOCTL_MAGIC, 61, \1175				struct btrfs_ioctl_get_subvol_rootref_args)1176#define BTRFS_IOC_INO_LOOKUP_USER _IOWR(BTRFS_IOCTL_MAGIC, 62, \1177				struct btrfs_ioctl_ino_lookup_user_args)1178#define BTRFS_IOC_SNAP_DESTROY_V2 _IOW(BTRFS_IOCTL_MAGIC, 63, \1179				struct btrfs_ioctl_vol_args_v2)1180#define BTRFS_IOC_ENCODED_READ _IOR(BTRFS_IOCTL_MAGIC, 64, \1181				    struct btrfs_ioctl_encoded_io_args)1182#define BTRFS_IOC_ENCODED_WRITE _IOW(BTRFS_IOCTL_MAGIC, 64, \1183				     struct btrfs_ioctl_encoded_io_args)1184 1185#ifdef __cplusplus1186}1187#endif1188 1189#endif /* _UAPI_LINUX_BTRFS_H */1190