1 /* 2 * Copyright (C) 2007 Oracle. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public 6 * License v2 as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public 14 * License along with this program; if not, write to the 15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 16 * Boston, MA 021110-1307, USA. 17 */ 18 19 #ifndef __IOCTL_ 20 #define __IOCTL_ 21 #include <linux/ioctl.h> 22 23 #define BTRFS_IOCTL_MAGIC 0x94 24 #define BTRFS_VOL_NAME_MAX 255 25 26 /* this should be 4k */ 27 #define BTRFS_PATH_NAME_MAX 4087 28 struct btrfs_ioctl_vol_args { 29 __s64 fd; 30 char name[BTRFS_PATH_NAME_MAX + 1]; 31 }; 32 33 #define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0) 34 #define BTRFS_SUBVOL_RDONLY (1ULL << 1) 35 36 #define BTRFS_SUBVOL_NAME_MAX 4039 37 struct btrfs_ioctl_vol_args_v2 { 38 __s64 fd; 39 __u64 transid; 40 __u64 flags; 41 __u64 unused[4]; 42 char name[BTRFS_SUBVOL_NAME_MAX + 1]; 43 }; 44 45 #define BTRFS_INO_LOOKUP_PATH_MAX 4080 46 struct btrfs_ioctl_ino_lookup_args { 47 __u64 treeid; 48 __u64 objectid; 49 char name[BTRFS_INO_LOOKUP_PATH_MAX]; 50 }; 51 52 struct btrfs_ioctl_search_key { 53 /* which root are we searching. 0 is the tree of tree roots */ 54 __u64 tree_id; 55 56 /* keys returned will be >= min and <= max */ 57 __u64 min_objectid; 58 __u64 max_objectid; 59 60 /* keys returned will be >= min and <= max */ 61 __u64 min_offset; 62 __u64 max_offset; 63 64 /* max and min transids to search for */ 65 __u64 min_transid; 66 __u64 max_transid; 67 68 /* keys returned will be >= min and <= max */ 69 __u32 min_type; 70 __u32 max_type; 71 72 /* 73 * how many items did userland ask for, and how many are we 74 * returning 75 */ 76 __u32 nr_items; 77 78 /* align to 64 bits */ 79 __u32 unused; 80 81 /* some extra for later */ 82 __u64 unused1; 83 __u64 unused2; 84 __u64 unused3; 85 __u64 unused4; 86 }; 87 88 struct btrfs_ioctl_search_header { 89 __u64 transid; 90 __u64 objectid; 91 __u64 offset; 92 __u32 type; 93 __u32 len; 94 }; 95 96 #define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key)) 97 /* 98 * the buf is an array of search headers where 99 * each header is followed by the actual item 100 * the type field is expanded to 32 bits for alignment 101 */ 102 struct btrfs_ioctl_search_args { 103 struct btrfs_ioctl_search_key key; 104 char buf[BTRFS_SEARCH_ARGS_BUFSIZE]; 105 }; 106 107 struct btrfs_ioctl_clone_range_args { 108 __s64 src_fd; 109 __u64 src_offset, src_length; 110 __u64 dest_offset; 111 }; 112 113 /* flags for the defrag range ioctl */ 114 #define BTRFS_DEFRAG_RANGE_COMPRESS 1 115 #define BTRFS_DEFRAG_RANGE_START_IO 2 116 117 struct btrfs_ioctl_defrag_range_args { 118 /* start of the defrag operation */ 119 __u64 start; 120 121 /* number of bytes to defrag, use (u64)-1 to say all */ 122 __u64 len; 123 124 /* 125 * flags for the operation, which can include turning 126 * on compression for this one defrag 127 */ 128 __u64 flags; 129 130 /* 131 * any extent bigger than this will be considered 132 * already defragged. Use 0 to take the kernel default 133 * Use 1 to say every single extent must be rewritten 134 */ 135 __u32 extent_thresh; 136 137 /* 138 * which compression method to use if turning on compression 139 * for this defrag operation. If unspecified, zlib will 140 * be used 141 */ 142 __u32 compress_type; 143 144 /* spare for later */ 145 __u32 unused[4]; 146 }; 147 148 struct btrfs_ioctl_space_info { 149 __u64 flags; 150 __u64 total_bytes; 151 __u64 used_bytes; 152 }; 153 154 struct btrfs_ioctl_space_args { 155 __u64 space_slots; 156 __u64 total_spaces; 157 struct btrfs_ioctl_space_info spaces[0]; 158 }; 159 160 #define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \ 161 struct btrfs_ioctl_vol_args) 162 #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \ 163 struct btrfs_ioctl_vol_args) 164 #define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \ 165 struct btrfs_ioctl_vol_args) 166 #define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \ 167 struct btrfs_ioctl_vol_args) 168 /* trans start and trans end are dangerous, and only for 169 * use by applications that know how to avoid the 170 * resulting deadlocks 171 */ 172 #define BTRFS_IOC_TRANS_START _IO(BTRFS_IOCTL_MAGIC, 6) 173 #define BTRFS_IOC_TRANS_END _IO(BTRFS_IOCTL_MAGIC, 7) 174 #define BTRFS_IOC_SYNC _IO(BTRFS_IOCTL_MAGIC, 8) 175 176 #define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int) 177 #define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \ 178 struct btrfs_ioctl_vol_args) 179 #define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \ 180 struct btrfs_ioctl_vol_args) 181 #define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \ 182 struct btrfs_ioctl_vol_args) 183 184 #define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \ 185 struct btrfs_ioctl_clone_range_args) 186 187 #define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \ 188 struct btrfs_ioctl_vol_args) 189 #define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \ 190 struct btrfs_ioctl_vol_args) 191 #define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \ 192 struct btrfs_ioctl_defrag_range_args) 193 #define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \ 194 struct btrfs_ioctl_search_args) 195 #define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \ 196 struct btrfs_ioctl_ino_lookup_args) 197 #define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, u64) 198 #define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \ 199 struct btrfs_ioctl_space_args) 200 #define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64) 201 #define BTRFS_IOC_WAIT_SYNC _IOW(BTRFS_IOCTL_MAGIC, 22, __u64) 202 #define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \ 203 struct btrfs_ioctl_vol_args_v2) 204 #define BTRFS_IOC_SUBVOL_GETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 25, __u64) 205 #define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64) 206 #endif 207