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_rmapbt_buf_ops;
  42extern const struct xfs_buf_ops xfs_refcountbt_buf_ops;
  43extern const struct xfs_buf_ops xfs_attr3_leaf_buf_ops;
  44extern const struct xfs_buf_ops xfs_attr3_rmt_buf_ops;
  45extern const struct xfs_buf_ops xfs_bmbt_buf_ops;
  46extern const struct xfs_buf_ops xfs_da3_node_buf_ops;
  47extern const struct xfs_buf_ops xfs_dquot_buf_ops;
  48extern const struct xfs_buf_ops xfs_symlink_buf_ops;
  49extern const struct xfs_buf_ops xfs_agi_buf_ops;
  50extern const struct xfs_buf_ops xfs_inobt_buf_ops;
  51extern const struct xfs_buf_ops xfs_inode_buf_ops;
  52extern const struct xfs_buf_ops xfs_inode_buf_ra_ops;
  53extern const struct xfs_buf_ops xfs_dquot_buf_ops;
  54extern const struct xfs_buf_ops xfs_dquot_buf_ra_ops;
  55extern const struct xfs_buf_ops xfs_sb_buf_ops;
  56extern const struct xfs_buf_ops xfs_sb_quiet_buf_ops;
  57extern const struct xfs_buf_ops xfs_symlink_buf_ops;
  58extern const struct xfs_buf_ops xfs_rtbuf_ops;
  59
  60/*
  61 * This structure is used to track log items associated with
  62 * a transaction.  It points to the log item and keeps some
  63 * flags to track the state of the log item.  It also tracks
  64 * the amount of space needed to log the item it describes
  65 * once we get to commit processing (see xfs_trans_commit()).
  66 */
  67struct xfs_log_item_desc {
  68        struct xfs_log_item     *lid_item;
  69        struct list_head        lid_trans;
  70        unsigned char           lid_flags;
  71};
  72
  73#define XFS_LID_DIRTY           0x1
  74
  75/* log size calculation functions */
  76int     xfs_log_calc_unit_res(struct xfs_mount *mp, int unit_bytes);
  77int     xfs_log_calc_minimum_size(struct xfs_mount *);
  78
  79
  80/*
  81 * Values for t_flags.
  82 */
  83#define XFS_TRANS_DIRTY         0x01    /* something needs to be logged */
  84#define XFS_TRANS_SB_DIRTY      0x02    /* superblock is modified */
  85#define XFS_TRANS_PERM_LOG_RES  0x04    /* xact took a permanent log res */
  86#define XFS_TRANS_SYNC          0x08    /* make commit synchronous */
  87#define XFS_TRANS_DQ_DIRTY      0x10    /* at least one dquot in trx dirty */
  88#define XFS_TRANS_RESERVE       0x20    /* OK to use reserved data blocks */
  89#define XFS_TRANS_NO_WRITECOUNT 0x40    /* do not elevate SB writecount */
  90#define XFS_TRANS_NOFS          0x80    /* pass KM_NOFS to kmem_alloc */
  91
  92/*
  93 * Field values for xfs_trans_mod_sb.
  94 */
  95#define XFS_TRANS_SB_ICOUNT             0x00000001
  96#define XFS_TRANS_SB_IFREE              0x00000002
  97#define XFS_TRANS_SB_FDBLOCKS           0x00000004
  98#define XFS_TRANS_SB_RES_FDBLOCKS       0x00000008
  99#define XFS_TRANS_SB_FREXTENTS          0x00000010
 100#define XFS_TRANS_SB_RES_FREXTENTS      0x00000020
 101#define XFS_TRANS_SB_DBLOCKS            0x00000040
 102#define XFS_TRANS_SB_AGCOUNT            0x00000080
 103#define XFS_TRANS_SB_IMAXPCT            0x00000100
 104#define XFS_TRANS_SB_REXTSIZE           0x00000200
 105#define XFS_TRANS_SB_RBMBLOCKS          0x00000400
 106#define XFS_TRANS_SB_RBLOCKS            0x00000800
 107#define XFS_TRANS_SB_REXTENTS           0x00001000
 108#define XFS_TRANS_SB_REXTSLOG           0x00002000
 109
 110/*
 111 * Here we centralize the specification of XFS meta-data buffer reference count
 112 * values.  This determines how hard the buffer cache tries to hold onto the
 113 * buffer.
 114 */
 115#define XFS_AGF_REF             4
 116#define XFS_AGI_REF             4
 117#define XFS_AGFL_REF            3
 118#define XFS_INO_BTREE_REF       3
 119#define XFS_ALLOC_BTREE_REF     2
 120#define XFS_BMAP_BTREE_REF      2
 121#define XFS_RMAP_BTREE_REF      2
 122#define XFS_DIR_BTREE_REF       2
 123#define XFS_INO_REF             2
 124#define XFS_ATTR_BTREE_REF      1
 125#define XFS_DQUOT_REF           1
 126#define XFS_REFC_BTREE_REF      1
 127
 128/*
 129 * Flags for xfs_trans_ichgtime().
 130 */
 131#define XFS_ICHGTIME_MOD        0x1     /* data fork modification timestamp */
 132#define XFS_ICHGTIME_CHG        0x2     /* inode field change timestamp */
 133#define XFS_ICHGTIME_CREATE     0x4     /* inode create timestamp */
 134
 135
 136/*
 137 * Symlink decoding/encoding functions
 138 */
 139int xfs_symlink_blocks(struct xfs_mount *mp, int pathlen);
 140int xfs_symlink_hdr_set(struct xfs_mount *mp, xfs_ino_t ino, uint32_t offset,
 141                        uint32_t size, struct xfs_buf *bp);
 142bool xfs_symlink_hdr_ok(xfs_ino_t ino, uint32_t offset,
 143                        uint32_t size, struct xfs_buf *bp);
 144void xfs_symlink_local_to_remote(struct xfs_trans *tp, struct xfs_buf *bp,
 145                                 struct xfs_inode *ip, struct xfs_ifork *ifp);
 146
 147#endif /* __XFS_SHARED_H__ */
 148