root/fs/freevxfs/vxfs_inode.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. VXFS_INO

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

/* [<][>][^][v][top][bottom][index][help] */