The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/vfs/hammer/hammer_ioctl.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 2008 The DragonFly Project.  All rights reserved.
    3  * 
    4  * This code is derived from software contributed to The DragonFly Project
    5  * by Matthew Dillon <dillon@backplane.com>
    6  * 
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in
   15  *    the documentation and/or other materials provided with the
   16  *    distribution.
   17  * 3. Neither the name of The DragonFly Project nor the names of its
   18  *    contributors may be used to endorse or promote products derived
   19  *    from this software without specific, prior written permission.
   20  * 
   21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   22  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
   25  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
   26  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
   27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
   29  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   31  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   32  * SUCH DAMAGE.
   33  * 
   34  * $DragonFly: src/sys/vfs/hammer/hammer_ioctl.h,v 1.23 2008/11/13 02:18:43 dillon Exp $
   35  */
   36 /*
   37  * HAMMER ioctl's.  This file can be #included from userland
   38  */
   39 
   40 #ifndef VFS_HAMMER_IOCTL_H_
   41 #define VFS_HAMMER_IOCTL_H_
   42 
   43 #include <sys/types.h>
   44 #include <sys/ioccom.h>
   45 #include "hammer_disk.h"
   46 
   47 /*
   48  * Common HAMMER ioctl header
   49  *
   50  * Global flags are stored in the upper 16 bits.
   51  */
   52 struct hammer_ioc_head {
   53         int32_t         flags;
   54         int32_t         error;
   55         int32_t         reserved02[4];
   56 };
   57 
   58 #define HAMMER_IOC_HEAD_ERROR   0x00008000
   59 #define HAMMER_IOC_HEAD_INTR    0x00010000
   60 #define HAMMER_IOC_DO_BTREE     0x00020000      /* reblocker */
   61 #define HAMMER_IOC_DO_INODES    0x00040000      /* reblocker */
   62 #define HAMMER_IOC_DO_DATA      0x00080000      /* reblocker */
   63 #define HAMMER_IOC_DO_DIRS      0x00100000      /* reblocker */
   64 
   65 #define HAMMER_IOC_DO_FLAGS     (HAMMER_IOC_DO_BTREE |  \
   66                                  HAMMER_IOC_DO_INODES | \
   67                                  HAMMER_IOC_DO_DATA |   \
   68                                  HAMMER_IOC_DO_DIRS)
   69 
   70 /*
   71  * HAMMERIOC_PRUNE
   72  *
   73  * beg/end TID ranges in the element array must be sorted in descending
   74  * order, with the most recent (highest) range at elms[0].
   75  */
   76 struct hammer_ioc_prune_elm {
   77         hammer_tid_t    beg_tid;        /* starting tid */
   78         hammer_tid_t    end_tid;        /* ending tid (non inclusive) */
   79         hammer_tid_t    mod_tid;        /* modulo */
   80 };
   81 
   82 #define HAMMER_MAX_PRUNE_ELMS   (1024*1024/24)
   83 
   84 struct hammer_ioc_prune {
   85         struct hammer_ioc_head head;
   86         int             nelms;
   87         int             reserved01;
   88 
   89         struct hammer_base_elm key_beg; /* stop forward scan (reverse scan) */
   90         struct hammer_base_elm key_end; /* start forward scan (reverse scan) */
   91         struct hammer_base_elm key_cur; /* scan interruption point */
   92 
   93         int64_t         stat_scanrecords;/* number of records scanned */
   94         int64_t         stat_rawrecords; /* number of raw records pruned */
   95         int64_t         stat_dirrecords; /* number of dir records pruned */
   96         int64_t         stat_bytes;      /* number of data bytes pruned */
   97         int64_t         stat_realignments; /* number of raw records realigned */
   98         hammer_tid_t    stat_oldest_tid; /* oldest create_tid encountered */
   99         int64_t         reserved02[6];
  100         struct hammer_ioc_prune_elm *elms; /* user supplied array */
  101 };
  102 
  103 #define HAMMER_IOC_PRUNE_ALL    0x0001
  104 
  105 /*
  106  * HAMMERIOC_REPACK
  107  *
  108  * Forward scan leaf-up B-Tree packing.  The saturation point is typically
  109  * set to HAMMER_BTREE_LEAF_ELMS * 2 / 3 for 2/3rds fill.  Referenced nodes
  110  * have to be skipped, we can't track cursors through pack ops.
  111  */
  112 struct hammer_ioc_rebalance {
  113         struct hammer_ioc_head head;
  114         int             saturation;     /* saturation pt elements/node */
  115         int             reserved02;
  116 
  117         struct hammer_base_elm key_beg; /* start forward scan */
  118         struct hammer_base_elm key_end; /* stop forward scan (inclusive) */
  119         struct hammer_base_elm key_cur; /* current scan index */
  120 
  121         int64_t         stat_ncount;    /* number of nodes scanned */
  122         int64_t         stat_deletions; /* number of nodes deleted */
  123         int64_t         stat_collisions;/* number of collision retries */
  124         int64_t         stat_nrebal;    /* number of btree-nodes rebalanced */
  125         int64_t         stat_unused04;
  126 };
  127 
  128 /*
  129  * HAMMERIOC_GETHISTORY
  130  *
  131  * Retrieve an array of ordered transaction ids >= beg and < end indicating
  132  * all changes made to the specified object's inode up to the
  133  * maximum.
  134  *
  135  * If ATKEY is set the key field indicates a particular key within the
  136  * inode to retrieve the history for.
  137  *
  138  * On return count is set to the number of elements returned, nxt_tid is
  139  * set to the tid the caller should store in beg_tid to continue the
  140  * iteration, and nxt_key is set to the nearest key boundary > key
  141  * indicating the range key - nxt_key (nxt_key non-inclusive) the tid
  142  * array represents.  Also obj_id is set to the object's inode number.
  143  *
  144  * nxt_key can be used to iterate the contents of a single file but should
  145  * not be stored in key until all modifications at key have been retrieved.
  146  * To work properly nxt_key should be initialized to HAMMER_MAX_KEY.
  147  * Successive ioctl() calls will reduce nxt_key as appropriate so at the
  148  * end of your iterating for 'key', key to nxt_key will represent the
  149  * shortest range of keys that all returned TIDs apply to.
  150  */
  151 
  152 #define HAMMER_MAX_HISTORY_ELMS 64
  153 
  154 typedef struct hammer_ioc_hist_entry {
  155         hammer_tid_t    tid;
  156         u_int32_t       time32;
  157         u_int32_t       unused;
  158 } *hammer_ioc_hist_entry_t;
  159 
  160 struct hammer_ioc_history {
  161         struct hammer_ioc_head head;
  162         int64_t         obj_id;
  163         hammer_tid_t    beg_tid;
  164         hammer_tid_t    nxt_tid;
  165         hammer_tid_t    end_tid;
  166         int64_t         key;
  167         int64_t         nxt_key;
  168         int             count;
  169         int             reserve01;
  170         struct hammer_ioc_hist_entry hist_ary[HAMMER_MAX_HISTORY_ELMS];
  171 };
  172 
  173 #define HAMMER_IOC_HISTORY_ATKEY        0x0001
  174 #define HAMMER_IOC_HISTORY_NEXT_TID     0x0002  /* iterate via nxt_tid */
  175 #define HAMMER_IOC_HISTORY_NEXT_KEY     0x0004  /* iterate via nxt_key */
  176 #define HAMMER_IOC_HISTORY_EOF          0x0008  /* no more keys */
  177 #define HAMMER_IOC_HISTORY_UNSYNCED     0x0010  /* unsynced info in inode */
  178 
  179 /*
  180  * Reblock request
  181  */
  182 struct hammer_ioc_reblock {
  183         struct hammer_ioc_head head;
  184         int32_t         free_level;             /* 0 for maximum compaction */
  185         u_int32_t       reserved01;
  186 
  187         struct hammer_base_elm key_beg;         /* start forward scan */
  188         struct hammer_base_elm key_end;         /* stop forward scan */
  189         struct hammer_base_elm key_cur;         /* scan interruption point */
  190 
  191         int64_t         btree_count;            /* B-Tree nodes checked */
  192         int64_t         record_count;           /* Records checked */
  193         int64_t         data_count;             /* Data segments checked */
  194         int64_t         data_byte_count;        /* Data bytes checked */
  195 
  196         int64_t         btree_moves;            /* B-Tree nodes moved */
  197         int64_t         record_moves;           /* Records moved */
  198         int64_t         data_moves;             /* Data segments moved */
  199         int64_t         data_byte_moves;        /* Data bytes moved */
  200 
  201         int32_t         unused02;
  202         int32_t         unused03;
  203 };
  204 
  205 /*
  206  * HAMMERIOC_SYNCTID
  207  */
  208 enum hammer_synctid_op {
  209         HAMMER_SYNCTID_NONE,    /* no sync (TID will not be accurate) */
  210         HAMMER_SYNCTID_ASYNC,   /* async (TID will not be accurate) */
  211         HAMMER_SYNCTID_SYNC1,   /* single sync - might undo after crash */
  212         HAMMER_SYNCTID_SYNC2    /* double sync - guarantee no undo */
  213 };
  214 
  215 struct hammer_ioc_synctid {
  216         struct hammer_ioc_head  head;
  217         enum hammer_synctid_op  op;
  218         hammer_tid_t            tid;
  219 };
  220 
  221 /*
  222  * HAMMERIOC_GET_INFO
  223  */
  224 struct hammer_ioc_info {
  225         struct hammer_ioc_head          head;
  226 
  227         char            vol_name[64];
  228         uuid_t          vol_fsid;
  229         uuid_t          vol_fstype;
  230 
  231         int             version;
  232         int             nvolumes;
  233         int             reserved01;
  234         int             reserved02;
  235 
  236         int64_t         bigblocks;
  237         int64_t         freebigblocks;
  238         int64_t         rsvbigblocks;
  239         int64_t         inodes;
  240 
  241         int64_t         reservedext[16];
  242 };
  243 
  244 /*
  245  * HAMMERIOC_PFS_ITERATE
  246  */
  247 struct hammer_ioc_pfs_iterate {
  248         struct hammer_ioc_head  head;
  249         uint32_t pos;
  250         struct hammer_pseudofs_data *ondisk;
  251 };
  252 
  253 /*
  254  * HAMMERIOC_GET_PSEUDOFS
  255  * HAMMERIOC_SET_PSEUDOFS
  256  */
  257 struct hammer_ioc_pseudofs_rw {
  258         struct hammer_ioc_head  head;
  259         int                     pfs_id;
  260         u_int32_t               bytes;
  261         u_int32_t               version;
  262         u_int32_t               flags;
  263         struct hammer_pseudofs_data *ondisk;
  264 };
  265 
  266 #define HAMMER_IOC_PSEUDOFS_VERSION     1
  267 
  268 #define HAMMER_IOC_PFS_SYNC_BEG         0x0001
  269 #define HAMMER_IOC_PFS_SYNC_END         0x0002
  270 #define HAMMER_IOC_PFS_SHARED_UUID      0x0004
  271 #define HAMMER_IOC_PFS_MIRROR_UUID      0x0008
  272 #define HAMMER_IOC_PFS_MASTER_ID        0x0010
  273 #define HAMMER_IOC_PFS_MIRROR_FLAGS     0x0020
  274 #define HAMMER_IOC_PFS_LABEL            0x0040
  275 
  276 #define HAMMER_MAX_PFS                  65536
  277 
  278 /*
  279  * HAMMERIOC_MIRROR_READ/WRITE
  280  */
  281 struct hammer_ioc_mirror_rw {
  282         struct hammer_ioc_head  head;
  283         struct hammer_base_elm  key_beg;        /* start forward scan */
  284         struct hammer_base_elm  key_end;        /* stop forward scan */
  285         struct hammer_base_elm  key_cur;        /* interruption point */
  286         hammer_tid_t            tid_beg;        /* filter modification range */
  287         hammer_tid_t            tid_end;        /* filter modification range */
  288         void                    *ubuf;          /* user buffer */
  289         int                     count;          /* current size */
  290         int                     size;           /* max size */
  291         int                     pfs_id;         /* PFS id being read/written */
  292         int                     reserved01;
  293         uuid_t                  shared_uuid;    /* validator for safety */
  294 };
  295 
  296 #define HAMMER_IOC_MIRROR_NODATA        0x0001  /* do not include bulk data */
  297 
  298 /*
  299  * NOTE: crc is for the data block starting at rec_size, not including the
  300  * data[] array.
  301  */
  302 struct hammer_ioc_mrecord_head {
  303         u_int32_t               signature;      /* signature for byte order */
  304         u_int32_t               rec_crc;
  305         u_int32_t               rec_size;
  306         u_int32_t               type;
  307         /* extended */
  308 };
  309 
  310 typedef struct hammer_ioc_mrecord_head *hammer_ioc_mrecord_head_t;
  311 
  312 struct hammer_ioc_mrecord_rec {
  313         struct hammer_ioc_mrecord_head  head;
  314         struct hammer_btree_leaf_elm    leaf;
  315         /* extended by data */
  316 };
  317 
  318 struct hammer_ioc_mrecord_skip {
  319         struct hammer_ioc_mrecord_head  head;
  320         struct hammer_base_elm          skip_beg;
  321         struct hammer_base_elm          skip_end;
  322 };
  323 
  324 struct hammer_ioc_mrecord_update {
  325         struct hammer_ioc_mrecord_head  head;
  326         hammer_tid_t                    tid;
  327 };
  328 
  329 struct hammer_ioc_mrecord_sync {
  330         struct hammer_ioc_mrecord_head  head;
  331 };
  332 
  333 struct hammer_ioc_mrecord_pfs {
  334         struct hammer_ioc_mrecord_head  head;
  335         u_int32_t                       version;
  336         u_int32_t                       reserved01;
  337         struct hammer_pseudofs_data     pfsd;
  338 };
  339 
  340 struct hammer_ioc_version {
  341         struct hammer_ioc_head head;
  342         u_int32_t               cur_version;
  343         u_int32_t               min_version;
  344         u_int32_t               wip_version;
  345         u_int32_t               max_version;
  346         char                    description[64];
  347 };
  348 
  349 struct hammer_ioc_volume {
  350         struct hammer_ioc_head head;
  351         char                    device_name[MAXPATHLEN];
  352         int64_t                 vol_size;
  353         int64_t                 boot_area_size;
  354         int64_t                 mem_area_size;
  355 };
  356 
  357 struct hammer_ioc_volume_list {
  358         struct hammer_ioc_volume *vols;
  359         int nvols;
  360 };
  361 
  362 union hammer_ioc_mrecord_any {
  363         struct hammer_ioc_mrecord_head  head;
  364         struct hammer_ioc_mrecord_rec   rec;
  365         struct hammer_ioc_mrecord_skip  skip;
  366         struct hammer_ioc_mrecord_update update;
  367         struct hammer_ioc_mrecord_update sync;
  368         struct hammer_ioc_mrecord_pfs   pfs;
  369         struct hammer_ioc_version       version;
  370 };
  371 
  372 typedef union hammer_ioc_mrecord_any *hammer_ioc_mrecord_any_t;
  373 
  374 /*
  375  * MREC types.  Flags are in the upper 16 bits but some are also included
  376  * in the type mask to force them into any switch() on the type.
  377  *
  378  * NOTE: Any record whos data is CRC-errored will have HAMMER_MRECF_CRC set,
  379  *       and the bit is also part of the type mask.
  380  */
  381 #define HAMMER_MREC_TYPE_RESERVED       0
  382 #define HAMMER_MREC_TYPE_REC            1       /* record w/ data */
  383 #define HAMMER_MREC_TYPE_PFSD           2       /* (userland only) */
  384 #define HAMMER_MREC_TYPE_UPDATE         3       /* (userland only) */
  385 #define HAMMER_MREC_TYPE_SYNC           4       /* (userland only) */
  386 #define HAMMER_MREC_TYPE_SKIP           5       /* skip-range */
  387 #define HAMMER_MREC_TYPE_PASS           6       /* record for cmp only (pass) */
  388 #define HAMMER_MREC_TYPE_TERM           7       /* (userland only) */
  389 #define HAMMER_MREC_TYPE_IDLE           8       /* (userland only) */
  390 
  391 #define HAMMER_MREC_TYPE_REC_BADCRC     (HAMMER_MREC_TYPE_REC | \
  392                                          HAMMER_MRECF_CRC_ERROR)
  393 #define HAMMER_MREC_TYPE_REC_NODATA     (HAMMER_MREC_TYPE_REC | \
  394                                          HAMMER_MRECF_NODATA)
  395 
  396 #define HAMMER_MRECF_TYPE_LOMASK        0x000000FF
  397 #define HAMMER_MRECF_TYPE_MASK          0x800000FF
  398 #define HAMMER_MRECF_CRC_ERROR          0x80000000
  399 
  400 #define HAMMER_MRECF_DATA_CRC_BAD       0x40000000
  401 #define HAMMER_MRECF_RECD_CRC_BAD       0x20000000
  402 #define HAMMER_MRECF_NODATA             0x10000000
  403 
  404 #define HAMMER_MREC_CRCOFF      (offsetof(struct hammer_ioc_mrecord_head, rec_size))
  405 #define HAMMER_MREC_HEADSIZE    sizeof(struct hammer_ioc_mrecord_head)
  406 
  407 #define HAMMER_IOC_MIRROR_SIGNATURE     0x4dd97272U
  408 #define HAMMER_IOC_MIRROR_SIGNATURE_REV 0x7272d94dU
  409 
  410 /*
  411  * HAMMERIOC_ADD_SNAPSHOT - Add snapshot tid(s).
  412  * HAMMERIOC_DEL_SNAPSHOT - Delete snapshot tids.
  413  * HAMMERIOC_GET_SNAPSHOT - Get/continue retrieving snapshot tids.
  414  *                          (finds restart point based on last snaps[] entry)
  415  *
  416  * These are per-PFS operations.
  417  *
  418  * NOTE: There is no limit on the number of snapshots, but there is a limit
  419  *       on how many can be set or returned in each ioctl.
  420  *
  421  * NOTE: ADD and DEL start at snap->index.  If an error occurs the index will
  422  *       point at the errored record.  snap->index must be set to 0 for GET.
  423  */
  424 #define HAMMER_SNAPS_PER_IOCTL          16
  425 
  426 #define HAMMER_IOC_SNAPSHOT_EOF         0x0008  /* no more keys */
  427 
  428 struct hammer_ioc_snapshot {
  429         struct hammer_ioc_head  head;
  430         int                     unused01;
  431         u_int32_t               index;
  432         u_int32_t               count;
  433         struct hammer_snapshot_data snaps[HAMMER_SNAPS_PER_IOCTL];
  434 };
  435 
  436 /*
  437  * HAMMERIOC_GET_CONFIG
  438  * HAMMERIOC_SET_CONFIG
  439  *
  440  * The configuration space is a freeform nul-terminated string, typically
  441  * a text file.  It is per-PFS and used by the 'hammer cleanup' utility.
  442  *
  443  * The configuration space is NOT mirrored.  mirror-write will ignore
  444  * configuration space records.
  445  */
  446 struct hammer_ioc_config {
  447         struct hammer_ioc_head  head;
  448         u_int32_t               reserved01;
  449         u_int32_t               reserved02;
  450         u_int64_t               reserved03[4];
  451         struct hammer_config_data config;
  452 };
  453 
  454 /*
  455  * HAMMERIOC_DEDUP
  456  */
  457 struct hammer_ioc_dedup {
  458         struct hammer_ioc_head  head;
  459         struct hammer_base_elm  elm1;
  460         struct hammer_base_elm  elm2; /* candidate for dedup */
  461 };
  462 
  463 #define HAMMER_IOC_DEDUP_CMP_FAILURE    0x0001 /* verification failed */
  464 #define HAMMER_IOC_DEDUP_UNDERFLOW      0x0002 /* bigblock underflow */
  465 #define HAMMER_IOC_DEDUP_INVALID_ZONE   0x0004 /* we can't dedup all zones */
  466 
  467 /*
  468  * HAMMERIOC_GET_DATA
  469  */
  470 struct hammer_ioc_data {
  471         struct hammer_ioc_head          head;
  472         struct hammer_base_elm          elm;    /* btree key to lookup */
  473         struct hammer_btree_leaf_elm    leaf;
  474         void                            *ubuf;  /* user buffer */
  475         int                             size;   /* max size */
  476 };
  477 
  478 /*
  479  * Ioctl cmd ids
  480  */
  481 #define HAMMERIOC_PRUNE         _IOWR('h',1,struct hammer_ioc_prune)
  482 #define HAMMERIOC_GETHISTORY    _IOWR('h',2,struct hammer_ioc_history)
  483 #define HAMMERIOC_REBLOCK       _IOWR('h',3,struct hammer_ioc_reblock)
  484 #define HAMMERIOC_SYNCTID       _IOWR('h',4,struct hammer_ioc_synctid)
  485 #define HAMMERIOC_SET_PSEUDOFS  _IOWR('h',5,struct hammer_ioc_pseudofs_rw)
  486 #define HAMMERIOC_GET_PSEUDOFS  _IOWR('h',6,struct hammer_ioc_pseudofs_rw)
  487 #define HAMMERIOC_MIRROR_READ   _IOWR('h',7,struct hammer_ioc_mirror_rw)
  488 #define HAMMERIOC_MIRROR_WRITE  _IOWR('h',8,struct hammer_ioc_mirror_rw)
  489 #define HAMMERIOC_UPG_PSEUDOFS  _IOWR('h',9,struct hammer_ioc_pseudofs_rw)
  490 #define HAMMERIOC_DGD_PSEUDOFS  _IOWR('h',10,struct hammer_ioc_pseudofs_rw)
  491 #define HAMMERIOC_RMR_PSEUDOFS  _IOWR('h',11,struct hammer_ioc_pseudofs_rw)
  492 #define HAMMERIOC_WAI_PSEUDOFS  _IOWR('h',12,struct hammer_ioc_pseudofs_rw)
  493 #define HAMMERIOC_GET_VERSION   _IOWR('h',13,struct hammer_ioc_version)
  494 #define HAMMERIOC_SET_VERSION   _IOWR('h',14,struct hammer_ioc_version)
  495 #define HAMMERIOC_REBALANCE     _IOWR('h',15,struct hammer_ioc_rebalance)
  496 #define HAMMERIOC_GET_INFO      _IOR('h',16,struct hammer_ioc_info)
  497 #define HAMMERIOC_ADD_VOLUME    _IOWR('h',17,struct hammer_ioc_volume)
  498 #define HAMMERIOC_ADD_SNAPSHOT  _IOWR('h',18,struct hammer_ioc_snapshot)
  499 #define HAMMERIOC_DEL_SNAPSHOT  _IOWR('h',19,struct hammer_ioc_snapshot)
  500 #define HAMMERIOC_GET_SNAPSHOT  _IOWR('h',20,struct hammer_ioc_snapshot)
  501 #define HAMMERIOC_GET_CONFIG    _IOWR('h',21,struct hammer_ioc_config)
  502 #define HAMMERIOC_SET_CONFIG    _IOWR('h',22,struct hammer_ioc_config)
  503 #define HAMMERIOC_DEL_VOLUME    _IOWR('h',24,struct hammer_ioc_volume)
  504 #define HAMMERIOC_DEDUP         _IOWR('h',25,struct hammer_ioc_dedup)
  505 #define HAMMERIOC_GET_DATA      _IOWR('h',26,struct hammer_ioc_data)
  506 #define HAMMERIOC_LIST_VOLUMES  _IOWR('h',27,struct hammer_ioc_volume_list)
  507 #define HAMMERIOC_PFS_ITERATE   _IOWR('h',28,struct hammer_ioc_pfs_iterate)
  508 
  509 #endif
  510 

Cache object: 9d24c6164ddf410151729d8909841166


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.