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