Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright (c) 2000-2001 Christoph Hellwig.
0004  * Copyright (c) 2016 Krzysztof Blaszkowski
0005  */
0006 #ifndef _VXFS_INODE_H_
0007 #define _VXFS_INODE_H_
0008 
0009 /*
0010  * Veritas filesystem driver - inode structure.
0011  *
0012  * This file contains the definition of the disk and core
0013  * inodes of the Veritas Filesystem.
0014  */
0015 
0016 
0017 #define VXFS_ISIZE      0x100       /* Inode size */
0018 
0019 #define VXFS_NDADDR     10      /* Number of direct addrs in inode */
0020 #define VXFS_NIADDR     2       /* Number of indirect addrs in inode */
0021 #define VXFS_NIMMED     96      /* Size of immediate data in inode */
0022 #define VXFS_NTYPED     6       /* Num of typed extents */
0023 
0024 #define VXFS_TYPED_OFFSETMASK   (0x00FFFFFFFFFFFFFFULL)
0025 #define VXFS_TYPED_TYPEMASK (0xFF00000000000000ULL)
0026 #define VXFS_TYPED_TYPESHIFT    56
0027 
0028 #define VXFS_TYPED_PER_BLOCK(sbp) \
0029     ((sbp)->s_blocksize / sizeof(struct vxfs_typed))
0030 
0031 /*
0032  * Possible extent descriptor types for %VXFS_ORG_TYPED extents.
0033  */
0034 enum {
0035     VXFS_TYPED_INDIRECT     = 1,
0036     VXFS_TYPED_DATA         = 2,
0037     VXFS_TYPED_INDIRECT_DEV4    = 3,
0038     VXFS_TYPED_DATA_DEV4        = 4,
0039 };
0040 
0041 /*
0042  * Data stored immediately in the inode.
0043  */
0044 struct vxfs_immed {
0045     __u8            vi_immed[VXFS_NIMMED];
0046 };
0047 
0048 struct vxfs_ext4 {
0049     __fs32          ve4_spare;      /* ?? */
0050     __fs32          ve4_indsize;        /* Indirect extent size */
0051     __fs32          ve4_indir[VXFS_NIADDR]; /* Indirect extents */
0052     struct direct {                 /* Direct extents */
0053         __fs32      extent;         /* Extent number */
0054         __fs32      size;           /* Size of extent */
0055     } ve4_direct[VXFS_NDADDR];
0056 };
0057 
0058 struct vxfs_typed {
0059     __fs64      vt_hdr;     /* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */
0060     __fs32      vt_block;   /* Extent block */
0061     __fs32      vt_size;    /* Size in blocks */
0062 };
0063 
0064 struct vxfs_typed_dev4 {
0065     __fs64      vd4_hdr;    /* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */
0066     __fs64      vd4_block;  /* Extent block */
0067     __fs64      vd4_size;   /* Size in blocks */
0068     __fs32      vd4_dev;    /* Device ID */
0069     __u8        __pad1;
0070 };
0071 
0072 /*
0073  * The inode as contained on the physical device.
0074  */
0075 struct vxfs_dinode {
0076     __fs32      vdi_mode;
0077     __fs32      vdi_nlink;  /* Link count */
0078     __fs32      vdi_uid;    /* UID */
0079     __fs32      vdi_gid;    /* GID */
0080     __fs64      vdi_size;   /* Inode size in bytes */
0081     __fs32      vdi_atime;  /* Last time accessed - sec */
0082     __fs32      vdi_autime; /* Last time accessed - usec */
0083     __fs32      vdi_mtime;  /* Last modify time - sec */
0084     __fs32      vdi_mutime; /* Last modify time - usec */
0085     __fs32      vdi_ctime;  /* Create time - sec */
0086     __fs32      vdi_cutime; /* Create time - usec */
0087     __u8        vdi_aflags; /* Allocation flags */
0088     __u8        vdi_orgtype;    /* Organisation type */
0089     __fs16      vdi_eopflags;
0090     __fs32      vdi_eopdata;
0091     union {
0092         __fs32          rdev;
0093         __fs32          dotdot;
0094         struct {
0095             __u32       reserved;
0096             __fs32      fixextsize;
0097         } i_regular;
0098         struct {
0099             __fs32      matchino;
0100             __fs32      fsetindex;
0101         } i_vxspec;
0102         __u64           align;
0103     } vdi_ftarea;
0104     __fs32      vdi_blocks; /* How much blocks does inode occupy */
0105     __fs32      vdi_gen;    /* Inode generation */
0106     __fs64      vdi_version;    /* Version */
0107     union {
0108         struct vxfs_immed   immed;
0109         struct vxfs_ext4    ext4;
0110         struct vxfs_typed   typed[VXFS_NTYPED];
0111     } vdi_org;
0112     __fs32      vdi_iattrino;
0113 };
0114 
0115 #define vdi_rdev    vdi_ftarea.rdev
0116 #define vdi_dotdot  vdi_ftarea.dotdot
0117 #define vdi_fixextsize  vdi_ftarea.regular.fixextsize
0118 #define vdi_matchino    vdi_ftarea.vxspec.matchino
0119 #define vdi_fsetindex   vdi_ftarea.vxspec.fsetindex
0120 
0121 #define vdi_immed   vdi_org.immed
0122 #define vdi_ext4    vdi_org.ext4
0123 #define vdi_typed   vdi_org.typed
0124 
0125 
0126 /*
0127  * The inode as represented in the main memory.
0128  */
0129 struct vxfs_inode_info {
0130     struct inode    vfs_inode;
0131 
0132     __u32       vii_mode;
0133     __u32       vii_nlink;  /* Link count */
0134     __u32       vii_uid;    /* UID */
0135     __u32       vii_gid;    /* GID */
0136     __u64       vii_size;   /* Inode size in bytes */
0137     __u32       vii_atime;  /* Last time accessed - sec */
0138     __u32       vii_autime; /* Last time accessed - usec */
0139     __u32       vii_mtime;  /* Last modify time - sec */
0140     __u32       vii_mutime; /* Last modify time - usec */
0141     __u32       vii_ctime;  /* Create time - sec */
0142     __u32       vii_cutime; /* Create time - usec */
0143     __u8        vii_orgtype;    /* Organisation type */
0144     union {
0145         __u32           rdev;
0146         __u32           dotdot;
0147     } vii_ftarea;
0148     __u32       vii_blocks; /* How much blocks does inode occupy */
0149     __u32       vii_gen;    /* Inode generation */
0150     union {
0151         struct vxfs_immed   immed;
0152         struct vxfs_ext4    ext4;
0153         struct vxfs_typed   typed[VXFS_NTYPED];
0154     } vii_org;
0155 };
0156 
0157 #define vii_rdev    vii_ftarea.rdev
0158 #define vii_dotdot  vii_ftarea.dotdot
0159 
0160 #define vii_immed   vii_org.immed
0161 #define vii_ext4    vii_org.ext4
0162 #define vii_typed   vii_org.typed
0163 
0164 static inline struct vxfs_inode_info *VXFS_INO(struct inode *inode)
0165 {
0166     return container_of(inode, struct vxfs_inode_info, vfs_inode);
0167 }
0168 
0169 #endif /* _VXFS_INODE_H_ */