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