Commit 55e301fd57a6239ec14b91a1cf2e70b3dd135194

Authored by Filipe Brandenburger
Committed by Josef Bacik
1 parent 82b22ac8f6

Btrfs: move fs/btrfs/ioctl.h to include/uapi/linux/btrfs.h

The header file will then be installed under /usr/include/linux so that
userspace applications can refer to Btrfs ioctls by name and use the same
structs used internally in the kernel.

Signed-off-by: Filipe Brandenburger <filbranden@google.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>

Showing 12 changed files with 518 additions and 510 deletions Side-by-side Diff

... ... @@ -19,7 +19,7 @@
19 19 #ifndef __BTRFS_BACKREF__
20 20 #define __BTRFS_BACKREF__
21 21  
22   -#include "ioctl.h"
  22 +#include <linux/btrfs.h>
23 23 #include "ulist.h"
24 24 #include "extent_io.h"
25 25  
... ... @@ -31,10 +31,10 @@
31 31 #include <trace/events/btrfs.h>
32 32 #include <asm/kmap_types.h>
33 33 #include <linux/pagemap.h>
  34 +#include <linux/btrfs.h>
34 35 #include "extent_io.h"
35 36 #include "extent_map.h"
36 37 #include "async-thread.h"
37   -#include "ioctl.h"
38 38  
39 39 struct btrfs_trans_handle;
40 40 struct btrfs_transaction;
... ... @@ -30,11 +30,11 @@
30 30 #include <linux/statfs.h>
31 31 #include <linux/compat.h>
32 32 #include <linux/slab.h>
  33 +#include <linux/btrfs.h>
33 34 #include "ctree.h"
34 35 #include "disk-io.h"
35 36 #include "transaction.h"
36 37 #include "btrfs_inode.h"
37   -#include "ioctl.h"
38 38 #include "print-tree.h"
39 39 #include "tree-log.h"
40 40 #include "locking.h"
... ... @@ -39,12 +39,12 @@
39 39 #include <linux/slab.h>
40 40 #include <linux/ratelimit.h>
41 41 #include <linux/mount.h>
  42 +#include <linux/btrfs.h>
42 43 #include "compat.h"
43 44 #include "ctree.h"
44 45 #include "disk-io.h"
45 46 #include "transaction.h"
46 47 #include "btrfs_inode.h"
47   -#include "ioctl.h"
48 48 #include "print-tree.h"
49 49 #include "ordered-data.h"
50 50 #include "xattr.h"
... ... @@ -42,12 +42,12 @@
42 42 #include <linux/slab.h>
43 43 #include <linux/blkdev.h>
44 44 #include <linux/uuid.h>
  45 +#include <linux/btrfs.h>
45 46 #include "compat.h"
46 47 #include "ctree.h"
47 48 #include "disk-io.h"
48 49 #include "transaction.h"
49 50 #include "btrfs_inode.h"
50   -#include "ioctl.h"
51 51 #include "print-tree.h"
52 52 #include "volumes.h"
53 53 #include "locking.h"
fs/btrfs/ioctl.h
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_DEVICE_PATH_NAME_MAX 1024
34   -
35   -#define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
36   -#define BTRFS_SUBVOL_RDONLY (1ULL << 1)
37   -#define BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
38   -#define BTRFS_FSID_SIZE 16
39   -#define BTRFS_UUID_SIZE 16
40   -
41   -#define BTRFS_QGROUP_INHERIT_SET_LIMITS (1ULL << 0)
42   -
43   -struct btrfs_qgroup_limit {
44   - __u64 flags;
45   - __u64 max_rfer;
46   - __u64 max_excl;
47   - __u64 rsv_rfer;
48   - __u64 rsv_excl;
49   -};
50   -
51   -struct btrfs_qgroup_inherit {
52   - __u64 flags;
53   - __u64 num_qgroups;
54   - __u64 num_ref_copies;
55   - __u64 num_excl_copies;
56   - struct btrfs_qgroup_limit lim;
57   - __u64 qgroups[0];
58   -};
59   -
60   -struct btrfs_ioctl_qgroup_limit_args {
61   - __u64 qgroupid;
62   - struct btrfs_qgroup_limit lim;
63   -};
64   -
65   -#define BTRFS_SUBVOL_NAME_MAX 4039
66   -struct btrfs_ioctl_vol_args_v2 {
67   - __s64 fd;
68   - __u64 transid;
69   - __u64 flags;
70   - union {
71   - struct {
72   - __u64 size;
73   - struct btrfs_qgroup_inherit __user *qgroup_inherit;
74   - };
75   - __u64 unused[4];
76   - };
77   - char name[BTRFS_SUBVOL_NAME_MAX + 1];
78   -};
79   -
80   -/*
81   - * structure to report errors and progress to userspace, either as a
82   - * result of a finished scrub, a canceled scrub or a progress inquiry
83   - */
84   -struct btrfs_scrub_progress {
85   - __u64 data_extents_scrubbed; /* # of data extents scrubbed */
86   - __u64 tree_extents_scrubbed; /* # of tree extents scrubbed */
87   - __u64 data_bytes_scrubbed; /* # of data bytes scrubbed */
88   - __u64 tree_bytes_scrubbed; /* # of tree bytes scrubbed */
89   - __u64 read_errors; /* # of read errors encountered (EIO) */
90   - __u64 csum_errors; /* # of failed csum checks */
91   - __u64 verify_errors; /* # of occurences, where the metadata
92   - * of a tree block did not match the
93   - * expected values, like generation or
94   - * logical */
95   - __u64 no_csum; /* # of 4k data block for which no csum
96   - * is present, probably the result of
97   - * data written with nodatasum */
98   - __u64 csum_discards; /* # of csum for which no data was found
99   - * in the extent tree. */
100   - __u64 super_errors; /* # of bad super blocks encountered */
101   - __u64 malloc_errors; /* # of internal kmalloc errors. These
102   - * will likely cause an incomplete
103   - * scrub */
104   - __u64 uncorrectable_errors; /* # of errors where either no intact
105   - * copy was found or the writeback
106   - * failed */
107   - __u64 corrected_errors; /* # of errors corrected */
108   - __u64 last_physical; /* last physical address scrubbed. In
109   - * case a scrub was aborted, this can
110   - * be used to restart the scrub */
111   - __u64 unverified_errors; /* # of occurences where a read for a
112   - * full (64k) bio failed, but the re-
113   - * check succeeded for each 4k piece.
114   - * Intermittent error. */
115   -};
116   -
117   -#define BTRFS_SCRUB_READONLY 1
118   -struct btrfs_ioctl_scrub_args {
119   - __u64 devid; /* in */
120   - __u64 start; /* in */
121   - __u64 end; /* in */
122   - __u64 flags; /* in */
123   - struct btrfs_scrub_progress progress; /* out */
124   - /* pad to 1k */
125   - __u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
126   -};
127   -
128   -#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS 0
129   -#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID 1
130   -struct btrfs_ioctl_dev_replace_start_params {
131   - __u64 srcdevid; /* in, if 0, use srcdev_name instead */
132   - __u64 cont_reading_from_srcdev_mode; /* in, see #define
133   - * above */
134   - __u8 srcdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1]; /* in */
135   - __u8 tgtdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1]; /* in */
136   -};
137   -
138   -#define BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED 0
139   -#define BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED 1
140   -#define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED 2
141   -#define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED 3
142   -#define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED 4
143   -struct btrfs_ioctl_dev_replace_status_params {
144   - __u64 replace_state; /* out, see #define above */
145   - __u64 progress_1000; /* out, 0 <= x <= 1000 */
146   - __u64 time_started; /* out, seconds since 1-Jan-1970 */
147   - __u64 time_stopped; /* out, seconds since 1-Jan-1970 */
148   - __u64 num_write_errors; /* out */
149   - __u64 num_uncorrectable_read_errors; /* out */
150   -};
151   -
152   -#define BTRFS_IOCTL_DEV_REPLACE_CMD_START 0
153   -#define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS 1
154   -#define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL 2
155   -#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR 0
156   -#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED 1
157   -#define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED 2
158   -struct btrfs_ioctl_dev_replace_args {
159   - __u64 cmd; /* in */
160   - __u64 result; /* out */
161   -
162   - union {
163   - struct btrfs_ioctl_dev_replace_start_params start;
164   - struct btrfs_ioctl_dev_replace_status_params status;
165   - }; /* in/out */
166   -
167   - __u64 spare[64];
168   -};
169   -
170   -struct btrfs_ioctl_dev_info_args {
171   - __u64 devid; /* in/out */
172   - __u8 uuid[BTRFS_UUID_SIZE]; /* in/out */
173   - __u64 bytes_used; /* out */
174   - __u64 total_bytes; /* out */
175   - __u64 unused[379]; /* pad to 4k */
176   - __u8 path[BTRFS_DEVICE_PATH_NAME_MAX]; /* out */
177   -};
178   -
179   -struct btrfs_ioctl_fs_info_args {
180   - __u64 max_id; /* out */
181   - __u64 num_devices; /* out */
182   - __u8 fsid[BTRFS_FSID_SIZE]; /* out */
183   - __u64 reserved[124]; /* pad to 1k */
184   -};
185   -
186   -/* balance control ioctl modes */
187   -#define BTRFS_BALANCE_CTL_PAUSE 1
188   -#define BTRFS_BALANCE_CTL_CANCEL 2
189   -
190   -/*
191   - * this is packed, because it should be exactly the same as its disk
192   - * byte order counterpart (struct btrfs_disk_balance_args)
193   - */
194   -struct btrfs_balance_args {
195   - __u64 profiles;
196   - __u64 usage;
197   - __u64 devid;
198   - __u64 pstart;
199   - __u64 pend;
200   - __u64 vstart;
201   - __u64 vend;
202   -
203   - __u64 target;
204   -
205   - __u64 flags;
206   -
207   - __u64 unused[8];
208   -} __attribute__ ((__packed__));
209   -
210   -/* report balance progress to userspace */
211   -struct btrfs_balance_progress {
212   - __u64 expected; /* estimated # of chunks that will be
213   - * relocated to fulfill the request */
214   - __u64 considered; /* # of chunks we have considered so far */
215   - __u64 completed; /* # of chunks relocated so far */
216   -};
217   -
218   -#define BTRFS_BALANCE_STATE_RUNNING (1ULL << 0)
219   -#define BTRFS_BALANCE_STATE_PAUSE_REQ (1ULL << 1)
220   -#define BTRFS_BALANCE_STATE_CANCEL_REQ (1ULL << 2)
221   -
222   -struct btrfs_ioctl_balance_args {
223   - __u64 flags; /* in/out */
224   - __u64 state; /* out */
225   -
226   - struct btrfs_balance_args data; /* in/out */
227   - struct btrfs_balance_args meta; /* in/out */
228   - struct btrfs_balance_args sys; /* in/out */
229   -
230   - struct btrfs_balance_progress stat; /* out */
231   -
232   - __u64 unused[72]; /* pad to 1k */
233   -};
234   -
235   -#define BTRFS_INO_LOOKUP_PATH_MAX 4080
236   -struct btrfs_ioctl_ino_lookup_args {
237   - __u64 treeid;
238   - __u64 objectid;
239   - char name[BTRFS_INO_LOOKUP_PATH_MAX];
240   -};
241   -
242   -struct btrfs_ioctl_search_key {
243   - /* which root are we searching. 0 is the tree of tree roots */
244   - __u64 tree_id;
245   -
246   - /* keys returned will be >= min and <= max */
247   - __u64 min_objectid;
248   - __u64 max_objectid;
249   -
250   - /* keys returned will be >= min and <= max */
251   - __u64 min_offset;
252   - __u64 max_offset;
253   -
254   - /* max and min transids to search for */
255   - __u64 min_transid;
256   - __u64 max_transid;
257   -
258   - /* keys returned will be >= min and <= max */
259   - __u32 min_type;
260   - __u32 max_type;
261   -
262   - /*
263   - * how many items did userland ask for, and how many are we
264   - * returning
265   - */
266   - __u32 nr_items;
267   -
268   - /* align to 64 bits */
269   - __u32 unused;
270   -
271   - /* some extra for later */
272   - __u64 unused1;
273   - __u64 unused2;
274   - __u64 unused3;
275   - __u64 unused4;
276   -};
277   -
278   -struct btrfs_ioctl_search_header {
279   - __u64 transid;
280   - __u64 objectid;
281   - __u64 offset;
282   - __u32 type;
283   - __u32 len;
284   -};
285   -
286   -#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
287   -/*
288   - * the buf is an array of search headers where
289   - * each header is followed by the actual item
290   - * the type field is expanded to 32 bits for alignment
291   - */
292   -struct btrfs_ioctl_search_args {
293   - struct btrfs_ioctl_search_key key;
294   - char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
295   -};
296   -
297   -struct btrfs_ioctl_clone_range_args {
298   - __s64 src_fd;
299   - __u64 src_offset, src_length;
300   - __u64 dest_offset;
301   -};
302   -
303   -/* flags for the defrag range ioctl */
304   -#define BTRFS_DEFRAG_RANGE_COMPRESS 1
305   -#define BTRFS_DEFRAG_RANGE_START_IO 2
306   -
307   -struct btrfs_ioctl_space_info {
308   - __u64 flags;
309   - __u64 total_bytes;
310   - __u64 used_bytes;
311   -};
312   -
313   -struct btrfs_ioctl_space_args {
314   - __u64 space_slots;
315   - __u64 total_spaces;
316   - struct btrfs_ioctl_space_info spaces[0];
317   -};
318   -
319   -struct btrfs_data_container {
320   - __u32 bytes_left; /* out -- bytes not needed to deliver output */
321   - __u32 bytes_missing; /* out -- additional bytes needed for result */
322   - __u32 elem_cnt; /* out */
323   - __u32 elem_missed; /* out */
324   - __u64 val[0]; /* out */
325   -};
326   -
327   -struct btrfs_ioctl_ino_path_args {
328   - __u64 inum; /* in */
329   - __u64 size; /* in */
330   - __u64 reserved[4];
331   - /* struct btrfs_data_container *fspath; out */
332   - __u64 fspath; /* out */
333   -};
334   -
335   -struct btrfs_ioctl_logical_ino_args {
336   - __u64 logical; /* in */
337   - __u64 size; /* in */
338   - __u64 reserved[4];
339   - /* struct btrfs_data_container *inodes; out */
340   - __u64 inodes;
341   -};
342   -
343   -enum btrfs_dev_stat_values {
344   - /* disk I/O failure stats */
345   - BTRFS_DEV_STAT_WRITE_ERRS, /* EIO or EREMOTEIO from lower layers */
346   - BTRFS_DEV_STAT_READ_ERRS, /* EIO or EREMOTEIO from lower layers */
347   - BTRFS_DEV_STAT_FLUSH_ERRS, /* EIO or EREMOTEIO from lower layers */
348   -
349   - /* stats for indirect indications for I/O failures */
350   - BTRFS_DEV_STAT_CORRUPTION_ERRS, /* checksum error, bytenr error or
351   - * contents is illegal: this is an
352   - * indication that the block was damaged
353   - * during read or write, or written to
354   - * wrong location or read from wrong
355   - * location */
356   - BTRFS_DEV_STAT_GENERATION_ERRS, /* an indication that blocks have not
357   - * been written */
358   -
359   - BTRFS_DEV_STAT_VALUES_MAX
360   -};
361   -
362   -/* Reset statistics after reading; needs SYS_ADMIN capability */
363   -#define BTRFS_DEV_STATS_RESET (1ULL << 0)
364   -
365   -struct btrfs_ioctl_get_dev_stats {
366   - __u64 devid; /* in */
367   - __u64 nr_items; /* in/out */
368   - __u64 flags; /* in/out */
369   -
370   - /* out values: */
371   - __u64 values[BTRFS_DEV_STAT_VALUES_MAX];
372   -
373   - __u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX]; /* pad to 1k */
374   -};
375   -
376   -#define BTRFS_QUOTA_CTL_ENABLE 1
377   -#define BTRFS_QUOTA_CTL_DISABLE 2
378   -#define BTRFS_QUOTA_CTL_RESCAN 3
379   -struct btrfs_ioctl_quota_ctl_args {
380   - __u64 cmd;
381   - __u64 status;
382   -};
383   -
384   -struct btrfs_ioctl_qgroup_assign_args {
385   - __u64 assign;
386   - __u64 src;
387   - __u64 dst;
388   -};
389   -
390   -struct btrfs_ioctl_qgroup_create_args {
391   - __u64 create;
392   - __u64 qgroupid;
393   -};
394   -struct btrfs_ioctl_timespec {
395   - __u64 sec;
396   - __u32 nsec;
397   -};
398   -
399   -struct btrfs_ioctl_received_subvol_args {
400   - char uuid[BTRFS_UUID_SIZE]; /* in */
401   - __u64 stransid; /* in */
402   - __u64 rtransid; /* out */
403   - struct btrfs_ioctl_timespec stime; /* in */
404   - struct btrfs_ioctl_timespec rtime; /* out */
405   - __u64 flags; /* in */
406   - __u64 reserved[16]; /* in */
407   -};
408   -
409   -struct btrfs_ioctl_send_args {
410   - __s64 send_fd; /* in */
411   - __u64 clone_sources_count; /* in */
412   - __u64 __user *clone_sources; /* in */
413   - __u64 parent_root; /* in */
414   - __u64 flags; /* in */
415   - __u64 reserved[4]; /* in */
416   -};
417   -
418   -#define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
419   - struct btrfs_ioctl_vol_args)
420   -#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
421   - struct btrfs_ioctl_vol_args)
422   -#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
423   - struct btrfs_ioctl_vol_args)
424   -#define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
425   - struct btrfs_ioctl_vol_args)
426   -/* trans start and trans end are dangerous, and only for
427   - * use by applications that know how to avoid the
428   - * resulting deadlocks
429   - */
430   -#define BTRFS_IOC_TRANS_START _IO(BTRFS_IOCTL_MAGIC, 6)
431   -#define BTRFS_IOC_TRANS_END _IO(BTRFS_IOCTL_MAGIC, 7)
432   -#define BTRFS_IOC_SYNC _IO(BTRFS_IOCTL_MAGIC, 8)
433   -
434   -#define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int)
435   -#define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
436   - struct btrfs_ioctl_vol_args)
437   -#define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
438   - struct btrfs_ioctl_vol_args)
439   -#define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
440   - struct btrfs_ioctl_vol_args)
441   -
442   -#define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
443   - struct btrfs_ioctl_clone_range_args)
444   -
445   -#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
446   - struct btrfs_ioctl_vol_args)
447   -#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
448   - struct btrfs_ioctl_vol_args)
449   -#define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
450   - struct btrfs_ioctl_defrag_range_args)
451   -#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
452   - struct btrfs_ioctl_search_args)
453   -#define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
454   - struct btrfs_ioctl_ino_lookup_args)
455   -#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, u64)
456   -#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
457   - struct btrfs_ioctl_space_args)
458   -#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
459   -#define BTRFS_IOC_WAIT_SYNC _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
460   -#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
461   - struct btrfs_ioctl_vol_args_v2)
462   -#define BTRFS_IOC_SUBVOL_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 24, \
463   - struct btrfs_ioctl_vol_args_v2)
464   -#define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)
465   -#define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
466   -#define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
467   - struct btrfs_ioctl_scrub_args)
468   -#define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
469   -#define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
470   - struct btrfs_ioctl_scrub_args)
471   -#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
472   - struct btrfs_ioctl_dev_info_args)
473   -#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
474   - struct btrfs_ioctl_fs_info_args)
475   -#define BTRFS_IOC_BALANCE_V2 _IOWR(BTRFS_IOCTL_MAGIC, 32, \
476   - struct btrfs_ioctl_balance_args)
477   -#define BTRFS_IOC_BALANCE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)
478   -#define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \
479   - struct btrfs_ioctl_balance_args)
480   -#define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \
481   - struct btrfs_ioctl_ino_path_args)
482   -#define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \
483   - struct btrfs_ioctl_ino_path_args)
484   -#define BTRFS_IOC_SET_RECEIVED_SUBVOL _IOWR(BTRFS_IOCTL_MAGIC, 37, \
485   - struct btrfs_ioctl_received_subvol_args)
486   -#define BTRFS_IOC_SEND _IOW(BTRFS_IOCTL_MAGIC, 38, struct btrfs_ioctl_send_args)
487   -#define BTRFS_IOC_DEVICES_READY _IOR(BTRFS_IOCTL_MAGIC, 39, \
488   - struct btrfs_ioctl_vol_args)
489   -#define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \
490   - struct btrfs_ioctl_quota_ctl_args)
491   -#define BTRFS_IOC_QGROUP_ASSIGN _IOW(BTRFS_IOCTL_MAGIC, 41, \
492   - struct btrfs_ioctl_qgroup_assign_args)
493   -#define BTRFS_IOC_QGROUP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 42, \
494   - struct btrfs_ioctl_qgroup_create_args)
495   -#define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \
496   - struct btrfs_ioctl_qgroup_limit_args)
497   -#define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \
498   - struct btrfs_ioctl_get_dev_stats)
499   -#define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \
500   - struct btrfs_ioctl_dev_replace_args)
501   -
502   -#endif
... ... @@ -23,13 +23,13 @@
23 23 #include <linux/rbtree.h>
24 24 #include <linux/slab.h>
25 25 #include <linux/workqueue.h>
  26 +#include <linux/btrfs.h>
26 27  
27 28 #include "ctree.h"
28 29 #include "transaction.h"
29 30 #include "disk-io.h"
30 31 #include "locking.h"
31 32 #include "ulist.h"
32   -#include "ioctl.h"
33 33 #include "backref.h"
34 34  
35 35 /* TODO XXX FIXME
... ... @@ -41,13 +41,13 @@
41 41 #include <linux/slab.h>
42 42 #include <linux/cleancache.h>
43 43 #include <linux/ratelimit.h>
  44 +#include <linux/btrfs.h>
44 45 #include "compat.h"
45 46 #include "delayed-inode.h"
46 47 #include "ctree.h"
47 48 #include "disk-io.h"
48 49 #include "transaction.h"
49 50 #include "btrfs_inode.h"
50   -#include "ioctl.h"
51 51 #include "print-tree.h"
52 52 #include "xattr.h"
53 53 #include "volumes.h"
... ... @@ -21,8 +21,8 @@
21 21  
22 22 #include <linux/bio.h>
23 23 #include <linux/sort.h>
  24 +#include <linux/btrfs.h>
24 25 #include "async-thread.h"
25   -#include "ioctl.h"
26 26  
27 27 #define BTRFS_STRIPE_LEN (64 * 1024)
28 28  
include/linux/btrfs.h
  1 +#ifndef _LINUX_BTRFS_H
  2 +#define _LINUX_BTRFS_H
  3 +
  4 +#include <uapi/linux/btrfs.h>
  5 +
  6 +#endif /* _LINUX_BTRFS_H */
include/uapi/linux/Kbuild
... ... @@ -68,6 +68,7 @@
68 68 header-y += blktrace_api.h
69 69 header-y += bpqether.h
70 70 header-y += bsg.h
  71 +header-y += btrfs.h
71 72 header-y += can.h
72 73 header-y += capability.h
73 74 header-y += capi.h
include/uapi/linux/btrfs.h
  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 _UAPI_LINUX_BTRFS_H
  20 +#define _UAPI_LINUX_BTRFS_H
  21 +#include <linux/types.h>
  22 +#include <linux/ioctl.h>
  23 +
  24 +#define BTRFS_IOCTL_MAGIC 0x94
  25 +#define BTRFS_VOL_NAME_MAX 255
  26 +
  27 +/* this should be 4k */
  28 +#define BTRFS_PATH_NAME_MAX 4087
  29 +struct btrfs_ioctl_vol_args {
  30 + __s64 fd;
  31 + char name[BTRFS_PATH_NAME_MAX + 1];
  32 +};
  33 +
  34 +#define BTRFS_DEVICE_PATH_NAME_MAX 1024
  35 +
  36 +#define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
  37 +#define BTRFS_SUBVOL_RDONLY (1ULL << 1)
  38 +#define BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
  39 +#define BTRFS_FSID_SIZE 16
  40 +#define BTRFS_UUID_SIZE 16
  41 +
  42 +#define BTRFS_QGROUP_INHERIT_SET_LIMITS (1ULL << 0)
  43 +
  44 +struct btrfs_qgroup_limit {
  45 + __u64 flags;
  46 + __u64 max_rfer;
  47 + __u64 max_excl;
  48 + __u64 rsv_rfer;
  49 + __u64 rsv_excl;
  50 +};
  51 +
  52 +struct btrfs_qgroup_inherit {
  53 + __u64 flags;
  54 + __u64 num_qgroups;
  55 + __u64 num_ref_copies;
  56 + __u64 num_excl_copies;
  57 + struct btrfs_qgroup_limit lim;
  58 + __u64 qgroups[0];
  59 +};
  60 +
  61 +struct btrfs_ioctl_qgroup_limit_args {
  62 + __u64 qgroupid;
  63 + struct btrfs_qgroup_limit lim;
  64 +};
  65 +
  66 +#define BTRFS_SUBVOL_NAME_MAX 4039
  67 +struct btrfs_ioctl_vol_args_v2 {
  68 + __s64 fd;
  69 + __u64 transid;
  70 + __u64 flags;
  71 + union {
  72 + struct {
  73 + __u64 size;
  74 + struct btrfs_qgroup_inherit __user *qgroup_inherit;
  75 + };
  76 + __u64 unused[4];
  77 + };
  78 + char name[BTRFS_SUBVOL_NAME_MAX + 1];
  79 +};
  80 +
  81 +/*
  82 + * structure to report errors and progress to userspace, either as a
  83 + * result of a finished scrub, a canceled scrub or a progress inquiry
  84 + */
  85 +struct btrfs_scrub_progress {
  86 + __u64 data_extents_scrubbed; /* # of data extents scrubbed */
  87 + __u64 tree_extents_scrubbed; /* # of tree extents scrubbed */
  88 + __u64 data_bytes_scrubbed; /* # of data bytes scrubbed */
  89 + __u64 tree_bytes_scrubbed; /* # of tree bytes scrubbed */
  90 + __u64 read_errors; /* # of read errors encountered (EIO) */
  91 + __u64 csum_errors; /* # of failed csum checks */
  92 + __u64 verify_errors; /* # of occurences, where the metadata
  93 + * of a tree block did not match the
  94 + * expected values, like generation or
  95 + * logical */
  96 + __u64 no_csum; /* # of 4k data block for which no csum
  97 + * is present, probably the result of
  98 + * data written with nodatasum */
  99 + __u64 csum_discards; /* # of csum for which no data was found
  100 + * in the extent tree. */
  101 + __u64 super_errors; /* # of bad super blocks encountered */
  102 + __u64 malloc_errors; /* # of internal kmalloc errors. These
  103 + * will likely cause an incomplete
  104 + * scrub */
  105 + __u64 uncorrectable_errors; /* # of errors where either no intact
  106 + * copy was found or the writeback
  107 + * failed */
  108 + __u64 corrected_errors; /* # of errors corrected */
  109 + __u64 last_physical; /* last physical address scrubbed. In
  110 + * case a scrub was aborted, this can
  111 + * be used to restart the scrub */
  112 + __u64 unverified_errors; /* # of occurences where a read for a
  113 + * full (64k) bio failed, but the re-
  114 + * check succeeded for each 4k piece.
  115 + * Intermittent error. */
  116 +};
  117 +
  118 +#define BTRFS_SCRUB_READONLY 1
  119 +struct btrfs_ioctl_scrub_args {
  120 + __u64 devid; /* in */
  121 + __u64 start; /* in */
  122 + __u64 end; /* in */
  123 + __u64 flags; /* in */
  124 + struct btrfs_scrub_progress progress; /* out */
  125 + /* pad to 1k */
  126 + __u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
  127 +};
  128 +
  129 +#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS 0
  130 +#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID 1
  131 +struct btrfs_ioctl_dev_replace_start_params {
  132 + __u64 srcdevid; /* in, if 0, use srcdev_name instead */
  133 + __u64 cont_reading_from_srcdev_mode; /* in, see #define
  134 + * above */
  135 + __u8 srcdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1]; /* in */
  136 + __u8 tgtdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1]; /* in */
  137 +};
  138 +
  139 +#define BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED 0
  140 +#define BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED 1
  141 +#define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED 2
  142 +#define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED 3
  143 +#define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED 4
  144 +struct btrfs_ioctl_dev_replace_status_params {
  145 + __u64 replace_state; /* out, see #define above */
  146 + __u64 progress_1000; /* out, 0 <= x <= 1000 */
  147 + __u64 time_started; /* out, seconds since 1-Jan-1970 */
  148 + __u64 time_stopped; /* out, seconds since 1-Jan-1970 */
  149 + __u64 num_write_errors; /* out */
  150 + __u64 num_uncorrectable_read_errors; /* out */
  151 +};
  152 +
  153 +#define BTRFS_IOCTL_DEV_REPLACE_CMD_START 0
  154 +#define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS 1
  155 +#define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL 2
  156 +#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR 0
  157 +#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED 1
  158 +#define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED 2
  159 +struct btrfs_ioctl_dev_replace_args {
  160 + __u64 cmd; /* in */
  161 + __u64 result; /* out */
  162 +
  163 + union {
  164 + struct btrfs_ioctl_dev_replace_start_params start;
  165 + struct btrfs_ioctl_dev_replace_status_params status;
  166 + }; /* in/out */
  167 +
  168 + __u64 spare[64];
  169 +};
  170 +
  171 +struct btrfs_ioctl_dev_info_args {
  172 + __u64 devid; /* in/out */
  173 + __u8 uuid[BTRFS_UUID_SIZE]; /* in/out */
  174 + __u64 bytes_used; /* out */
  175 + __u64 total_bytes; /* out */
  176 + __u64 unused[379]; /* pad to 4k */
  177 + __u8 path[BTRFS_DEVICE_PATH_NAME_MAX]; /* out */
  178 +};
  179 +
  180 +struct btrfs_ioctl_fs_info_args {
  181 + __u64 max_id; /* out */
  182 + __u64 num_devices; /* out */
  183 + __u8 fsid[BTRFS_FSID_SIZE]; /* out */
  184 + __u64 reserved[124]; /* pad to 1k */
  185 +};
  186 +
  187 +/* balance control ioctl modes */
  188 +#define BTRFS_BALANCE_CTL_PAUSE 1
  189 +#define BTRFS_BALANCE_CTL_CANCEL 2
  190 +
  191 +/*
  192 + * this is packed, because it should be exactly the same as its disk
  193 + * byte order counterpart (struct btrfs_disk_balance_args)
  194 + */
  195 +struct btrfs_balance_args {
  196 + __u64 profiles;
  197 + __u64 usage;
  198 + __u64 devid;
  199 + __u64 pstart;
  200 + __u64 pend;
  201 + __u64 vstart;
  202 + __u64 vend;
  203 +
  204 + __u64 target;
  205 +
  206 + __u64 flags;
  207 +
  208 + __u64 unused[8];
  209 +} __attribute__ ((__packed__));
  210 +
  211 +/* report balance progress to userspace */
  212 +struct btrfs_balance_progress {
  213 + __u64 expected; /* estimated # of chunks that will be
  214 + * relocated to fulfill the request */
  215 + __u64 considered; /* # of chunks we have considered so far */
  216 + __u64 completed; /* # of chunks relocated so far */
  217 +};
  218 +
  219 +#define BTRFS_BALANCE_STATE_RUNNING (1ULL << 0)
  220 +#define BTRFS_BALANCE_STATE_PAUSE_REQ (1ULL << 1)
  221 +#define BTRFS_BALANCE_STATE_CANCEL_REQ (1ULL << 2)
  222 +
  223 +struct btrfs_ioctl_balance_args {
  224 + __u64 flags; /* in/out */
  225 + __u64 state; /* out */
  226 +
  227 + struct btrfs_balance_args data; /* in/out */
  228 + struct btrfs_balance_args meta; /* in/out */
  229 + struct btrfs_balance_args sys; /* in/out */
  230 +
  231 + struct btrfs_balance_progress stat; /* out */
  232 +
  233 + __u64 unused[72]; /* pad to 1k */
  234 +};
  235 +
  236 +#define BTRFS_INO_LOOKUP_PATH_MAX 4080
  237 +struct btrfs_ioctl_ino_lookup_args {
  238 + __u64 treeid;
  239 + __u64 objectid;
  240 + char name[BTRFS_INO_LOOKUP_PATH_MAX];
  241 +};
  242 +
  243 +struct btrfs_ioctl_search_key {
  244 + /* which root are we searching. 0 is the tree of tree roots */
  245 + __u64 tree_id;
  246 +
  247 + /* keys returned will be >= min and <= max */
  248 + __u64 min_objectid;
  249 + __u64 max_objectid;
  250 +
  251 + /* keys returned will be >= min and <= max */
  252 + __u64 min_offset;
  253 + __u64 max_offset;
  254 +
  255 + /* max and min transids to search for */
  256 + __u64 min_transid;
  257 + __u64 max_transid;
  258 +
  259 + /* keys returned will be >= min and <= max */
  260 + __u32 min_type;
  261 + __u32 max_type;
  262 +
  263 + /*
  264 + * how many items did userland ask for, and how many are we
  265 + * returning
  266 + */
  267 + __u32 nr_items;
  268 +
  269 + /* align to 64 bits */
  270 + __u32 unused;
  271 +
  272 + /* some extra for later */
  273 + __u64 unused1;
  274 + __u64 unused2;
  275 + __u64 unused3;
  276 + __u64 unused4;
  277 +};
  278 +
  279 +struct btrfs_ioctl_search_header {
  280 + __u64 transid;
  281 + __u64 objectid;
  282 + __u64 offset;
  283 + __u32 type;
  284 + __u32 len;
  285 +};
  286 +
  287 +#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
  288 +/*
  289 + * the buf is an array of search headers where
  290 + * each header is followed by the actual item
  291 + * the type field is expanded to 32 bits for alignment
  292 + */
  293 +struct btrfs_ioctl_search_args {
  294 + struct btrfs_ioctl_search_key key;
  295 + char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
  296 +};
  297 +
  298 +struct btrfs_ioctl_clone_range_args {
  299 + __s64 src_fd;
  300 + __u64 src_offset, src_length;
  301 + __u64 dest_offset;
  302 +};
  303 +
  304 +/* flags for the defrag range ioctl */
  305 +#define BTRFS_DEFRAG_RANGE_COMPRESS 1
  306 +#define BTRFS_DEFRAG_RANGE_START_IO 2
  307 +
  308 +struct btrfs_ioctl_space_info {
  309 + __u64 flags;
  310 + __u64 total_bytes;
  311 + __u64 used_bytes;
  312 +};
  313 +
  314 +struct btrfs_ioctl_space_args {
  315 + __u64 space_slots;
  316 + __u64 total_spaces;
  317 + struct btrfs_ioctl_space_info spaces[0];
  318 +};
  319 +
  320 +struct btrfs_data_container {
  321 + __u32 bytes_left; /* out -- bytes not needed to deliver output */
  322 + __u32 bytes_missing; /* out -- additional bytes needed for result */
  323 + __u32 elem_cnt; /* out */
  324 + __u32 elem_missed; /* out */
  325 + __u64 val[0]; /* out */
  326 +};
  327 +
  328 +struct btrfs_ioctl_ino_path_args {
  329 + __u64 inum; /* in */
  330 + __u64 size; /* in */
  331 + __u64 reserved[4];
  332 + /* struct btrfs_data_container *fspath; out */
  333 + __u64 fspath; /* out */
  334 +};
  335 +
  336 +struct btrfs_ioctl_logical_ino_args {
  337 + __u64 logical; /* in */
  338 + __u64 size; /* in */
  339 + __u64 reserved[4];
  340 + /* struct btrfs_data_container *inodes; out */
  341 + __u64 inodes;
  342 +};
  343 +
  344 +enum btrfs_dev_stat_values {
  345 + /* disk I/O failure stats */
  346 + BTRFS_DEV_STAT_WRITE_ERRS, /* EIO or EREMOTEIO from lower layers */
  347 + BTRFS_DEV_STAT_READ_ERRS, /* EIO or EREMOTEIO from lower layers */
  348 + BTRFS_DEV_STAT_FLUSH_ERRS, /* EIO or EREMOTEIO from lower layers */
  349 +
  350 + /* stats for indirect indications for I/O failures */
  351 + BTRFS_DEV_STAT_CORRUPTION_ERRS, /* checksum error, bytenr error or
  352 + * contents is illegal: this is an
  353 + * indication that the block was damaged
  354 + * during read or write, or written to
  355 + * wrong location or read from wrong
  356 + * location */
  357 + BTRFS_DEV_STAT_GENERATION_ERRS, /* an indication that blocks have not
  358 + * been written */
  359 +
  360 + BTRFS_DEV_STAT_VALUES_MAX
  361 +};
  362 +
  363 +/* Reset statistics after reading; needs SYS_ADMIN capability */
  364 +#define BTRFS_DEV_STATS_RESET (1ULL << 0)
  365 +
  366 +struct btrfs_ioctl_get_dev_stats {
  367 + __u64 devid; /* in */
  368 + __u64 nr_items; /* in/out */
  369 + __u64 flags; /* in/out */
  370 +
  371 + /* out values: */
  372 + __u64 values[BTRFS_DEV_STAT_VALUES_MAX];
  373 +
  374 + __u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX]; /* pad to 1k */
  375 +};
  376 +
  377 +#define BTRFS_QUOTA_CTL_ENABLE 1
  378 +#define BTRFS_QUOTA_CTL_DISABLE 2
  379 +#define BTRFS_QUOTA_CTL_RESCAN 3
  380 +struct btrfs_ioctl_quota_ctl_args {
  381 + __u64 cmd;
  382 + __u64 status;
  383 +};
  384 +
  385 +struct btrfs_ioctl_qgroup_assign_args {
  386 + __u64 assign;
  387 + __u64 src;
  388 + __u64 dst;
  389 +};
  390 +
  391 +struct btrfs_ioctl_qgroup_create_args {
  392 + __u64 create;
  393 + __u64 qgroupid;
  394 +};
  395 +struct btrfs_ioctl_timespec {
  396 + __u64 sec;
  397 + __u32 nsec;
  398 +};
  399 +
  400 +struct btrfs_ioctl_received_subvol_args {
  401 + char uuid[BTRFS_UUID_SIZE]; /* in */
  402 + __u64 stransid; /* in */
  403 + __u64 rtransid; /* out */
  404 + struct btrfs_ioctl_timespec stime; /* in */
  405 + struct btrfs_ioctl_timespec rtime; /* out */
  406 + __u64 flags; /* in */
  407 + __u64 reserved[16]; /* in */
  408 +};
  409 +
  410 +struct btrfs_ioctl_send_args {
  411 + __s64 send_fd; /* in */
  412 + __u64 clone_sources_count; /* in */
  413 + __u64 __user *clone_sources; /* in */
  414 + __u64 parent_root; /* in */
  415 + __u64 flags; /* in */
  416 + __u64 reserved[4]; /* in */
  417 +};
  418 +
  419 +#define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
  420 + struct btrfs_ioctl_vol_args)
  421 +#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
  422 + struct btrfs_ioctl_vol_args)
  423 +#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
  424 + struct btrfs_ioctl_vol_args)
  425 +#define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
  426 + struct btrfs_ioctl_vol_args)
  427 +/* trans start and trans end are dangerous, and only for
  428 + * use by applications that know how to avoid the
  429 + * resulting deadlocks
  430 + */
  431 +#define BTRFS_IOC_TRANS_START _IO(BTRFS_IOCTL_MAGIC, 6)
  432 +#define BTRFS_IOC_TRANS_END _IO(BTRFS_IOCTL_MAGIC, 7)
  433 +#define BTRFS_IOC_SYNC _IO(BTRFS_IOCTL_MAGIC, 8)
  434 +
  435 +#define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int)
  436 +#define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
  437 + struct btrfs_ioctl_vol_args)
  438 +#define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
  439 + struct btrfs_ioctl_vol_args)
  440 +#define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
  441 + struct btrfs_ioctl_vol_args)
  442 +
  443 +#define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
  444 + struct btrfs_ioctl_clone_range_args)
  445 +
  446 +#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
  447 + struct btrfs_ioctl_vol_args)
  448 +#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
  449 + struct btrfs_ioctl_vol_args)
  450 +#define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
  451 + struct btrfs_ioctl_defrag_range_args)
  452 +#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
  453 + struct btrfs_ioctl_search_args)
  454 +#define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
  455 + struct btrfs_ioctl_ino_lookup_args)
  456 +#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, u64)
  457 +#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
  458 + struct btrfs_ioctl_space_args)
  459 +#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
  460 +#define BTRFS_IOC_WAIT_SYNC _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
  461 +#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
  462 + struct btrfs_ioctl_vol_args_v2)
  463 +#define BTRFS_IOC_SUBVOL_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 24, \
  464 + struct btrfs_ioctl_vol_args_v2)
  465 +#define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)
  466 +#define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
  467 +#define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
  468 + struct btrfs_ioctl_scrub_args)
  469 +#define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
  470 +#define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
  471 + struct btrfs_ioctl_scrub_args)
  472 +#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
  473 + struct btrfs_ioctl_dev_info_args)
  474 +#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
  475 + struct btrfs_ioctl_fs_info_args)
  476 +#define BTRFS_IOC_BALANCE_V2 _IOWR(BTRFS_IOCTL_MAGIC, 32, \
  477 + struct btrfs_ioctl_balance_args)
  478 +#define BTRFS_IOC_BALANCE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)
  479 +#define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \
  480 + struct btrfs_ioctl_balance_args)
  481 +#define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \
  482 + struct btrfs_ioctl_ino_path_args)
  483 +#define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \
  484 + struct btrfs_ioctl_ino_path_args)
  485 +#define BTRFS_IOC_SET_RECEIVED_SUBVOL _IOWR(BTRFS_IOCTL_MAGIC, 37, \
  486 + struct btrfs_ioctl_received_subvol_args)
  487 +#define BTRFS_IOC_SEND _IOW(BTRFS_IOCTL_MAGIC, 38, struct btrfs_ioctl_send_args)
  488 +#define BTRFS_IOC_DEVICES_READY _IOR(BTRFS_IOCTL_MAGIC, 39, \
  489 + struct btrfs_ioctl_vol_args)
  490 +#define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \
  491 + struct btrfs_ioctl_quota_ctl_args)
  492 +#define BTRFS_IOC_QGROUP_ASSIGN _IOW(BTRFS_IOCTL_MAGIC, 41, \
  493 + struct btrfs_ioctl_qgroup_assign_args)
  494 +#define BTRFS_IOC_QGROUP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 42, \
  495 + struct btrfs_ioctl_qgroup_create_args)
  496 +#define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \
  497 + struct btrfs_ioctl_qgroup_limit_args)
  498 +#define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \
  499 + struct btrfs_ioctl_get_dev_stats)
  500 +#define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \
  501 + struct btrfs_ioctl_dev_replace_args)
  502 +
  503 +#endif /* _UAPI_LINUX_BTRFS_H */