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_FSID_SIZE 16
  36#define BTRFS_UUID_SIZE 16
  37
  38#define BTRFS_SUBVOL_NAME_MAX 4039
  39struct btrfs_ioctl_vol_args_v2 {
  40        __s64 fd;
  41        __u64 transid;
  42        __u64 flags;
  43        __u64 unused[4];
  44        char name[BTRFS_SUBVOL_NAME_MAX + 1];
  45};
  46
  47/*
  48 * structure to report errors and progress to userspace, either as a
  49 * result of a finished scrub, a canceled scrub or a progress inquiry
  50 */
  51struct btrfs_scrub_progress {
  52        __u64 data_extents_scrubbed;    /* # of data extents scrubbed */
  53        __u64 tree_extents_scrubbed;    /* # of tree extents scrubbed */
  54        __u64 data_bytes_scrubbed;      /* # of data bytes scrubbed */
  55        __u64 tree_bytes_scrubbed;      /* # of tree bytes scrubbed */
  56        __u64 read_errors;              /* # of read errors encountered (EIO) */
  57        __u64 csum_errors;              /* # of failed csum checks */
  58        __u64 verify_errors;            /* # of occurences, where the metadata
  59                                         * of a tree block did not match the
  60                                         * expected values, like generation or
  61                                         * logical */
  62        __u64 no_csum;                  /* # of 4k data block for which no csum
  63                                         * is present, probably the result of
  64                                         * data written with nodatasum */
  65        __u64 csum_discards;            /* # of csum for which no data was found
  66                                         * in the extent tree. */
  67        __u64 super_errors;             /* # of bad super blocks encountered */
  68        __u64 malloc_errors;            /* # of internal kmalloc errors. These
  69                                         * will likely cause an incomplete
  70                                         * scrub */
  71        __u64 uncorrectable_errors;     /* # of errors where either no intact
  72                                         * copy was found or the writeback
  73                                         * failed */
  74        __u64 corrected_errors;         /* # of errors corrected */
  75        __u64 last_physical;            /* last physical address scrubbed. In
  76                                         * case a scrub was aborted, this can
  77                                         * be used to restart the scrub */
  78        __u64 unverified_errors;        /* # of occurences where a read for a
  79                                         * full (64k) bio failed, but the re-
  80                                         * check succeeded for each 4k piece.
  81                                         * Intermittent error. */
  82};
  83
  84#define BTRFS_SCRUB_READONLY    1
  85struct btrfs_ioctl_scrub_args {
  86        __u64 devid;                            /* in */
  87        __u64 start;                            /* in */
  88        __u64 end;                              /* in */
  89        __u64 flags;                            /* in */
  90        struct btrfs_scrub_progress progress;   /* out */
  91        /* pad to 1k */
  92        __u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
  93};
  94
  95#define BTRFS_DEVICE_PATH_NAME_MAX 1024
  96struct btrfs_ioctl_dev_info_args {
  97        __u64 devid;                            /* in/out */
  98        __u8 uuid[BTRFS_UUID_SIZE];             /* in/out */
  99        __u64 bytes_used;                       /* out */
 100        __u64 total_bytes;                      /* out */
 101        __u64 unused[379];                      /* pad to 4k */
 102        __u8 path[BTRFS_DEVICE_PATH_NAME_MAX];  /* out */
 103};
 104
 105struct btrfs_ioctl_fs_info_args {
 106        __u64 max_id;                           /* out */
 107        __u64 num_devices;                      /* out */
 108        __u8 fsid[BTRFS_FSID_SIZE];             /* out */
 109        __u64 reserved[124];                    /* pad to 1k */
 110};
 111
 112#define BTRFS_INO_LOOKUP_PATH_MAX 4080
 113struct btrfs_ioctl_ino_lookup_args {
 114        __u64 treeid;
 115        __u64 objectid;
 116        char name[BTRFS_INO_LOOKUP_PATH_MAX];
 117};
 118
 119struct btrfs_ioctl_search_key {
 120        /* which root are we searching.  0 is the tree of tree roots */
 121        __u64 tree_id;
 122
 123        /* keys returned will be >= min and <= max */
 124        __u64 min_objectid;
 125        __u64 max_objectid;
 126
 127        /* keys returned will be >= min and <= max */
 128        __u64 min_offset;
 129        __u64 max_offset;
 130
 131        /* max and min transids to search for */
 132        __u64 min_transid;
 133        __u64 max_transid;
 134
 135        /* keys returned will be >= min and <= max */
 136        __u32 min_type;
 137        __u32 max_type;
 138
 139        /*
 140         * how many items did userland ask for, and how many are we
 141         * returning
 142         */
 143        __u32 nr_items;
 144
 145        /* align to 64 bits */
 146        __u32 unused;
 147
 148        /* some extra for later */
 149        __u64 unused1;
 150        __u64 unused2;
 151        __u64 unused3;
 152        __u64 unused4;
 153};
 154
 155struct btrfs_ioctl_search_header {
 156        __u64 transid;
 157        __u64 objectid;
 158        __u64 offset;
 159        __u32 type;
 160        __u32 len;
 161};
 162
 163#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
 164/*
 165 * the buf is an array of search headers where
 166 * each header is followed by the actual item
 167 * the type field is expanded to 32 bits for alignment
 168 */
 169struct btrfs_ioctl_search_args {
 170        struct btrfs_ioctl_search_key key;
 171        char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
 172};
 173
 174struct btrfs_ioctl_clone_range_args {
 175  __s64 src_fd;
 176  __u64 src_offset, src_length;
 177  __u64 dest_offset;
 178};
 179
 180/* flags for the defrag range ioctl */
 181#define BTRFS_DEFRAG_RANGE_COMPRESS 1
 182#define BTRFS_DEFRAG_RANGE_START_IO 2
 183
 184struct btrfs_ioctl_space_info {
 185        __u64 flags;
 186        __u64 total_bytes;
 187        __u64 used_bytes;
 188};
 189
 190struct btrfs_ioctl_space_args {
 191        __u64 space_slots;
 192        __u64 total_spaces;
 193        struct btrfs_ioctl_space_info spaces[0];
 194};
 195
 196#define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
 197                                   struct btrfs_ioctl_vol_args)
 198#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
 199                                   struct btrfs_ioctl_vol_args)
 200#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
 201                                   struct btrfs_ioctl_vol_args)
 202#define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
 203                                   struct btrfs_ioctl_vol_args)
 204/* trans start and trans end are dangerous, and only for
 205 * use by applications that know how to avoid the
 206 * resulting deadlocks
 207 */
 208#define BTRFS_IOC_TRANS_START  _IO(BTRFS_IOCTL_MAGIC, 6)
 209#define BTRFS_IOC_TRANS_END    _IO(BTRFS_IOCTL_MAGIC, 7)
 210#define BTRFS_IOC_SYNC         _IO(BTRFS_IOCTL_MAGIC, 8)
 211
 212#define BTRFS_IOC_CLONE        _IOW(BTRFS_IOCTL_MAGIC, 9, int)
 213#define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
 214                                   struct btrfs_ioctl_vol_args)
 215#define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
 216                                   struct btrfs_ioctl_vol_args)
 217#define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
 218                                   struct btrfs_ioctl_vol_args)
 219
 220#define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
 221                                  struct btrfs_ioctl_clone_range_args)
 222
 223#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
 224                                   struct btrfs_ioctl_vol_args)
 225#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
 226                                struct btrfs_ioctl_vol_args)
 227#define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
 228                                struct btrfs_ioctl_defrag_range_args)
 229#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
 230                                   struct btrfs_ioctl_search_args)
 231#define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
 232                                   struct btrfs_ioctl_ino_lookup_args)
 233#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, u64)
 234#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
 235                                    struct btrfs_ioctl_space_args)
 236#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
 237#define BTRFS_IOC_WAIT_SYNC  _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
 238#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
 239                                   struct btrfs_ioctl_vol_args_v2)
 240#define BTRFS_IOC_SUBVOL_GETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 25, __u64)
 241#define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
 242#define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
 243                              struct btrfs_ioctl_scrub_args)
 244#define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
 245#define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
 246                                       struct btrfs_ioctl_scrub_args)
 247#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
 248                                 struct btrfs_ioctl_dev_info_args)
 249#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
 250                               struct btrfs_ioctl_fs_info_args)
 251#endif
 252