linux/fs/freevxfs/vxfs_inode.h
<<
>>
Prefs
   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 */
  59enum {
  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 */
  69struct vxfs_immed {
  70        __u8                    vi_immed[VXFS_NIMMED];
  71};
  72
  73struct 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
  83struct 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
  89struct 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 */
 100struct 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 */
 154struct 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
 189static 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_ */
 195