linux/fs/freevxfs/vxfs_inode.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000-2001 Christoph Hellwig.
   3 * All rights reserved.
   4 *
   5 * Redistribution and use in source and binary forms, with or without
   6 * modification, are permitted provided that the following conditions
   7 * are met:
   8 * 1. Redistributions of source code must retain the above copyright
   9 *    notice, this list of conditions, and the following disclaimer,
  10 *    without modification.
  11 * 2. The name of the author may not be used to endorse or promote products
  12 *    derived from this software without specific prior written permission.
  13 *
  14 * Alternatively, this software may be distributed under the terms of the
  15 * GNU General Public License ("GPL").
  16 *
  17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
  21 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  27 * SUCH DAMAGE.
  28 *
  29 */
  30#ifndef _VXFS_INODE_H_
  31#define _VXFS_INODE_H_
  32
  33/*
  34 * Veritas filesystem driver - inode structure.
  35 *
  36 * This file contains the definition of the disk and core
  37 * inodes of the Veritas Filesystem.
  38 */
  39
  40
  41#define VXFS_ISIZE              0x100           /* Inode size */
  42
  43#define VXFS_NDADDR             10              /* Number of direct addrs in inode */
  44#define VXFS_NIADDR             2               /* Number of indirect addrs in inode */
  45#define VXFS_NIMMED             96              /* Size of immediate data in inode */
  46#define VXFS_NTYPED             6               /* Num of typed extents */
  47
  48#define VXFS_TYPED_OFFSETMASK   (0x00FFFFFFFFFFFFFFULL)
  49#define VXFS_TYPED_TYPEMASK     (0xFF00000000000000ULL)
  50#define VXFS_TYPED_TYPESHIFT    56
  51
  52#define VXFS_TYPED_PER_BLOCK(sbp) \
  53        ((sbp)->s_blocksize / sizeof(struct vxfs_typed))
  54
  55/*
  56 * Possible extent descriptor types for %VXFS_ORG_TYPED extents.
  57 */
  58enum {
  59        VXFS_TYPED_INDIRECT             = 1,
  60        VXFS_TYPED_DATA                 = 2,
  61        VXFS_TYPED_INDIRECT_DEV4        = 3,
  62        VXFS_TYPED_DATA_DEV4            = 4,
  63};
  64
  65/*
  66 * Data stored immediately in the inode.
  67 */
  68struct vxfs_immed {
  69        u_int8_t        vi_immed[VXFS_NIMMED];
  70};
  71
  72struct vxfs_ext4 {
  73        u_int32_t               ve4_spare;              /* ?? */
  74        u_int32_t               ve4_indsize;            /* Indirect extent size */
  75        vx_daddr_t              ve4_indir[VXFS_NIADDR]; /* Indirect extents */
  76        struct direct {                                 /* Direct extents */
  77                vx_daddr_t      extent;                 /* Extent number */
  78                int32_t         size;                   /* Size of extent */
  79        } ve4_direct[VXFS_NDADDR];
  80};
  81
  82struct vxfs_typed {
  83        u_int64_t       vt_hdr;         /* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */
  84        vx_daddr_t      vt_block;       /* Extent block */
  85        int32_t         vt_size;        /* Size in blocks */
  86};
  87
  88struct vxfs_typed_dev4 {
  89        u_int64_t       vd4_hdr;        /* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */
  90        u_int64_t       vd4_block;      /* Extent block */
  91        u_int64_t       vd4_size;       /* Size in blocks */
  92        int32_t         vd4_dev;        /* Device ID */
  93        u_int32_t       __pad1;
  94};
  95
  96/*
  97 * The inode as contained on the physical device.
  98 */
  99struct vxfs_dinode {
 100        int32_t         vdi_mode;
 101        u_int32_t       vdi_nlink;      /* Link count */
 102        u_int32_t       vdi_uid;        /* UID */
 103        u_int32_t       vdi_gid;        /* GID */
 104        u_int64_t       vdi_size;       /* Inode size in bytes */
 105        u_int32_t       vdi_atime;      /* Last time accessed - sec */
 106        u_int32_t       vdi_autime;     /* Last time accessed - usec */
 107        u_int32_t       vdi_mtime;      /* Last modify time - sec */
 108        u_int32_t       vdi_mutime;     /* Last modify time - usec */
 109        u_int32_t       vdi_ctime;      /* Create time - sec */
 110        u_int32_t       vdi_cutime;     /* Create time - usec */
 111        u_int8_t        vdi_aflags;     /* Allocation flags */
 112        u_int8_t        vdi_orgtype;    /* Organisation type */
 113        u_int16_t       vdi_eopflags;
 114        u_int32_t       vdi_eopdata;
 115        union {
 116                u_int32_t               rdev;
 117                u_int32_t               dotdot;
 118                struct {
 119                        u_int32_t       reserved;
 120                        u_int32_t       fixextsize;
 121                } i_regular;
 122                struct {
 123                        u_int32_t       matchino;
 124                        u_int32_t       fsetindex;
 125                } i_vxspec;
 126                u_int64_t               align;
 127        } vdi_ftarea;
 128        u_int32_t       vdi_blocks;     /* How much blocks does inode occupy */
 129        u_int32_t       vdi_gen;        /* Inode generation */
 130        u_int64_t       vdi_version;    /* Version */
 131        union {
 132                struct vxfs_immed       immed;
 133                struct vxfs_ext4        ext4;
 134                struct vxfs_typed       typed[VXFS_NTYPED];
 135        } vdi_org;
 136        u_int32_t       vdi_iattrino;
 137};
 138
 139#define vdi_rdev        vdi_ftarea.rdev
 140#define vdi_dotdot      vdi_ftarea.dotdot
 141#define vdi_fixextsize  vdi_ftarea.regular.fixextsize
 142#define vdi_matchino    vdi_ftarea.vxspec.matchino
 143#define vdi_fsetindex   vdi_ftarea.vxspec.fsetindex
 144
 145#define vdi_immed       vdi_org.immed
 146#define vdi_ext4        vdi_org.ext4
 147#define vdi_typed       vdi_org.typed
 148
 149
 150/*
 151 * The inode as represented in the main memory.
 152 *
 153 * TBD: This should become a separate structure...
 154 */
 155#define vxfs_inode_info vxfs_dinode
 156
 157#define vii_mode        vdi_mode
 158#define vii_uid         vdi_uid
 159#define vii_gid         vdi_gid
 160#define vii_nlink       vdi_nlink
 161#define vii_size        vdi_size
 162#define vii_atime       vdi_atime
 163#define vii_ctime       vdi_ctime
 164#define vii_mtime       vdi_mtime
 165#define vii_blocks      vdi_blocks
 166#define vii_org         vdi_org
 167#define vii_orgtype     vdi_orgtype
 168#define vii_gen         vdi_gen
 169
 170#define vii_rdev        vdi_ftarea.rdev
 171#define vii_dotdot      vdi_ftarea.dotdot
 172#define vii_fixextsize  vdi_ftarea.regular.fixextsize
 173#define vii_matchino    vdi_ftarea.vxspec.matchino
 174#define vii_fsetindex   vdi_ftarea.vxspec.fsetindex
 175
 176#define vii_immed       vdi_org.immed
 177#define vii_ext4        vdi_org.ext4
 178#define vii_typed       vdi_org.typed
 179
 180#endif /* _VXFS_INODE_H_ */
 181