linux/fs/xfs/libxfs/xfs_shared.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
   3 * Copyright (c) 2013 Red Hat, Inc.
   4 * All Rights Reserved.
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License as
   8 * published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it would be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write the Free Software Foundation,
  17 * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  18 */
  19#ifndef __XFS_SHARED_H__
  20#define __XFS_SHARED_H__
  21
  22/*
  23 * Definitions shared between kernel and userspace that don't fit into any other
  24 * header file that is shared with userspace.
  25 */
  26struct xfs_ifork;
  27struct xfs_buf;
  28struct xfs_buf_ops;
  29struct xfs_mount;
  30struct xfs_trans;
  31struct xfs_inode;
  32
  33/*
  34 * Buffer verifier operations are widely used, including userspace tools
  35 */
  36extern const struct xfs_buf_ops xfs_agf_buf_ops;
  37extern const struct xfs_buf_ops xfs_agi_buf_ops;
  38extern const struct xfs_buf_ops xfs_agf_buf_ops;
  39extern const struct xfs_buf_ops xfs_agfl_buf_ops;
  40extern const struct xfs_buf_ops xfs_allocbt_buf_ops;
  41extern const struct xfs_buf_ops xfs_attr3_leaf_buf_ops;
  42extern const struct xfs_buf_ops xfs_attr3_rmt_buf_ops;
  43extern const struct xfs_buf_ops xfs_bmbt_buf_ops;
  44extern const struct xfs_buf_ops xfs_da3_node_buf_ops;
  45extern const struct xfs_buf_ops xfs_dquot_buf_ops;
  46extern const struct xfs_buf_ops xfs_symlink_buf_ops;
  47extern const struct xfs_buf_ops xfs_agi_buf_ops;
  48extern const struct xfs_buf_ops xfs_inobt_buf_ops;
  49extern const struct xfs_buf_ops xfs_inode_buf_ops;
  50extern const struct xfs_buf_ops xfs_inode_buf_ra_ops;
  51extern const struct xfs_buf_ops xfs_dquot_buf_ops;
  52extern const struct xfs_buf_ops xfs_dquot_buf_ra_ops;
  53extern const struct xfs_buf_ops xfs_sb_buf_ops;
  54extern const struct xfs_buf_ops xfs_sb_quiet_buf_ops;
  55extern const struct xfs_buf_ops xfs_symlink_buf_ops;
  56extern const struct xfs_buf_ops xfs_rtbuf_ops;
  57
  58/*
  59 * Transaction types.  Used to distinguish types of buffers. These never reach
  60 * the log.
  61 */
  62#define XFS_TRANS_SETATTR_NOT_SIZE      1
  63#define XFS_TRANS_SETATTR_SIZE          2
  64#define XFS_TRANS_INACTIVE              3
  65#define XFS_TRANS_CREATE                4
  66#define XFS_TRANS_CREATE_TRUNC          5
  67#define XFS_TRANS_TRUNCATE_FILE         6
  68#define XFS_TRANS_REMOVE                7
  69#define XFS_TRANS_LINK                  8
  70#define XFS_TRANS_RENAME                9
  71#define XFS_TRANS_MKDIR                 10
  72#define XFS_TRANS_RMDIR                 11
  73#define XFS_TRANS_SYMLINK               12
  74#define XFS_TRANS_SET_DMATTRS           13
  75#define XFS_TRANS_GROWFS                14
  76#define XFS_TRANS_STRAT_WRITE           15
  77#define XFS_TRANS_DIOSTRAT              16
  78/* 17 was XFS_TRANS_WRITE_SYNC */
  79#define XFS_TRANS_WRITEID               18
  80#define XFS_TRANS_ADDAFORK              19
  81#define XFS_TRANS_ATTRINVAL             20
  82#define XFS_TRANS_ATRUNCATE             21
  83#define XFS_TRANS_ATTR_SET              22
  84#define XFS_TRANS_ATTR_RM               23
  85#define XFS_TRANS_ATTR_FLAG             24
  86#define XFS_TRANS_CLEAR_AGI_BUCKET      25
  87#define XFS_TRANS_SB_CHANGE             26
  88/*
  89 * Dummy entries since we use the transaction type to index into the
  90 * trans_type[] in xlog_recover_print_trans_head()
  91 */
  92#define XFS_TRANS_DUMMY1                27
  93#define XFS_TRANS_DUMMY2                28
  94#define XFS_TRANS_QM_QUOTAOFF           29
  95#define XFS_TRANS_QM_DQALLOC            30
  96#define XFS_TRANS_QM_SETQLIM            31
  97#define XFS_TRANS_QM_DQCLUSTER          32
  98#define XFS_TRANS_QM_QINOCREATE         33
  99#define XFS_TRANS_QM_QUOTAOFF_END       34
 100#define XFS_TRANS_FSYNC_TS              35
 101#define XFS_TRANS_GROWFSRT_ALLOC        36
 102#define XFS_TRANS_GROWFSRT_ZERO         37
 103#define XFS_TRANS_GROWFSRT_FREE         38
 104#define XFS_TRANS_SWAPEXT               39
 105#define XFS_TRANS_CHECKPOINT            40
 106#define XFS_TRANS_ICREATE               41
 107#define XFS_TRANS_CREATE_TMPFILE        42
 108#define XFS_TRANS_TYPE_MAX              43
 109/* new transaction types need to be reflected in xfs_logprint(8) */
 110
 111#define XFS_TRANS_TYPES \
 112        { XFS_TRANS_SETATTR_NOT_SIZE,   "SETATTR_NOT_SIZE" }, \
 113        { XFS_TRANS_SETATTR_SIZE,       "SETATTR_SIZE" }, \
 114        { XFS_TRANS_INACTIVE,           "INACTIVE" }, \
 115        { XFS_TRANS_CREATE,             "CREATE" }, \
 116        { XFS_TRANS_CREATE_TRUNC,       "CREATE_TRUNC" }, \
 117        { XFS_TRANS_TRUNCATE_FILE,      "TRUNCATE_FILE" }, \
 118        { XFS_TRANS_REMOVE,             "REMOVE" }, \
 119        { XFS_TRANS_LINK,               "LINK" }, \
 120        { XFS_TRANS_RENAME,             "RENAME" }, \
 121        { XFS_TRANS_MKDIR,              "MKDIR" }, \
 122        { XFS_TRANS_RMDIR,              "RMDIR" }, \
 123        { XFS_TRANS_SYMLINK,            "SYMLINK" }, \
 124        { XFS_TRANS_SET_DMATTRS,        "SET_DMATTRS" }, \
 125        { XFS_TRANS_GROWFS,             "GROWFS" }, \
 126        { XFS_TRANS_STRAT_WRITE,        "STRAT_WRITE" }, \
 127        { XFS_TRANS_DIOSTRAT,           "DIOSTRAT" }, \
 128        { XFS_TRANS_WRITEID,            "WRITEID" }, \
 129        { XFS_TRANS_ADDAFORK,           "ADDAFORK" }, \
 130        { XFS_TRANS_ATTRINVAL,          "ATTRINVAL" }, \
 131        { XFS_TRANS_ATRUNCATE,          "ATRUNCATE" }, \
 132        { XFS_TRANS_ATTR_SET,           "ATTR_SET" }, \
 133        { XFS_TRANS_ATTR_RM,            "ATTR_RM" }, \
 134        { XFS_TRANS_ATTR_FLAG,          "ATTR_FLAG" }, \
 135        { XFS_TRANS_CLEAR_AGI_BUCKET,   "CLEAR_AGI_BUCKET" }, \
 136        { XFS_TRANS_SB_CHANGE,          "SBCHANGE" }, \
 137        { XFS_TRANS_DUMMY1,             "DUMMY1" }, \
 138        { XFS_TRANS_DUMMY2,             "DUMMY2" }, \
 139        { XFS_TRANS_QM_QUOTAOFF,        "QM_QUOTAOFF" }, \
 140        { XFS_TRANS_QM_DQALLOC,         "QM_DQALLOC" }, \
 141        { XFS_TRANS_QM_SETQLIM,         "QM_SETQLIM" }, \
 142        { XFS_TRANS_QM_DQCLUSTER,       "QM_DQCLUSTER" }, \
 143        { XFS_TRANS_QM_QINOCREATE,      "QM_QINOCREATE" }, \
 144        { XFS_TRANS_QM_QUOTAOFF_END,    "QM_QOFF_END" }, \
 145        { XFS_TRANS_FSYNC_TS,           "FSYNC_TS" }, \
 146        { XFS_TRANS_GROWFSRT_ALLOC,     "GROWFSRT_ALLOC" }, \
 147        { XFS_TRANS_GROWFSRT_ZERO,      "GROWFSRT_ZERO" }, \
 148        { XFS_TRANS_GROWFSRT_FREE,      "GROWFSRT_FREE" }, \
 149        { XFS_TRANS_SWAPEXT,            "SWAPEXT" }, \
 150        { XFS_TRANS_CHECKPOINT,         "CHECKPOINT" }, \
 151        { XFS_TRANS_ICREATE,            "ICREATE" }, \
 152        { XFS_TRANS_CREATE_TMPFILE,     "CREATE_TMPFILE" }, \
 153        { XLOG_UNMOUNT_REC_TYPE,        "UNMOUNT" }
 154
 155/*
 156 * This structure is used to track log items associated with
 157 * a transaction.  It points to the log item and keeps some
 158 * flags to track the state of the log item.  It also tracks
 159 * the amount of space needed to log the item it describes
 160 * once we get to commit processing (see xfs_trans_commit()).
 161 */
 162struct xfs_log_item_desc {
 163        struct xfs_log_item     *lid_item;
 164        struct list_head        lid_trans;
 165        unsigned char           lid_flags;
 166};
 167
 168#define XFS_LID_DIRTY           0x1
 169
 170/* log size calculation functions */
 171int     xfs_log_calc_unit_res(struct xfs_mount *mp, int unit_bytes);
 172int     xfs_log_calc_minimum_size(struct xfs_mount *);
 173
 174
 175/*
 176 * Values for t_flags.
 177 */
 178#define XFS_TRANS_DIRTY         0x01    /* something needs to be logged */
 179#define XFS_TRANS_SB_DIRTY      0x02    /* superblock is modified */
 180#define XFS_TRANS_PERM_LOG_RES  0x04    /* xact took a permanent log res */
 181#define XFS_TRANS_SYNC          0x08    /* make commit synchronous */
 182#define XFS_TRANS_DQ_DIRTY      0x10    /* at least one dquot in trx dirty */
 183#define XFS_TRANS_RESERVE       0x20    /* OK to use reserved data blocks */
 184#define XFS_TRANS_FREEZE_PROT   0x40    /* Transaction has elevated writer
 185                                           count in superblock */
 186/*
 187 * Field values for xfs_trans_mod_sb.
 188 */
 189#define XFS_TRANS_SB_ICOUNT             0x00000001
 190#define XFS_TRANS_SB_IFREE              0x00000002
 191#define XFS_TRANS_SB_FDBLOCKS           0x00000004
 192#define XFS_TRANS_SB_RES_FDBLOCKS       0x00000008
 193#define XFS_TRANS_SB_FREXTENTS          0x00000010
 194#define XFS_TRANS_SB_RES_FREXTENTS      0x00000020
 195#define XFS_TRANS_SB_DBLOCKS            0x00000040
 196#define XFS_TRANS_SB_AGCOUNT            0x00000080
 197#define XFS_TRANS_SB_IMAXPCT            0x00000100
 198#define XFS_TRANS_SB_REXTSIZE           0x00000200
 199#define XFS_TRANS_SB_RBMBLOCKS          0x00000400
 200#define XFS_TRANS_SB_RBLOCKS            0x00000800
 201#define XFS_TRANS_SB_REXTENTS           0x00001000
 202#define XFS_TRANS_SB_REXTSLOG           0x00002000
 203
 204/*
 205 * Here we centralize the specification of XFS meta-data buffer reference count
 206 * values.  This determines how hard the buffer cache tries to hold onto the
 207 * buffer.
 208 */
 209#define XFS_AGF_REF             4
 210#define XFS_AGI_REF             4
 211#define XFS_AGFL_REF            3
 212#define XFS_INO_BTREE_REF       3
 213#define XFS_ALLOC_BTREE_REF     2
 214#define XFS_BMAP_BTREE_REF      2
 215#define XFS_DIR_BTREE_REF       2
 216#define XFS_INO_REF             2
 217#define XFS_ATTR_BTREE_REF      1
 218#define XFS_DQUOT_REF           1
 219
 220/*
 221 * Flags for xfs_trans_ichgtime().
 222 */
 223#define XFS_ICHGTIME_MOD        0x1     /* data fork modification timestamp */
 224#define XFS_ICHGTIME_CHG        0x2     /* inode field change timestamp */
 225#define XFS_ICHGTIME_CREATE     0x4     /* inode create timestamp */
 226
 227
 228/*
 229 * Symlink decoding/encoding functions
 230 */
 231int xfs_symlink_blocks(struct xfs_mount *mp, int pathlen);
 232int xfs_symlink_hdr_set(struct xfs_mount *mp, xfs_ino_t ino, uint32_t offset,
 233                        uint32_t size, struct xfs_buf *bp);
 234bool xfs_symlink_hdr_ok(xfs_ino_t ino, uint32_t offset,
 235                        uint32_t size, struct xfs_buf *bp);
 236void xfs_symlink_local_to_remote(struct xfs_trans *tp, struct xfs_buf *bp,
 237                                 struct xfs_inode *ip, struct xfs_ifork *ifp);
 238
 239#endif /* __XFS_SHARED_H__ */
 240