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