cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

vxfs_inode.h (4519B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (c) 2000-2001 Christoph Hellwig.
      4 * Copyright (c) 2016 Krzysztof Blaszkowski
      5 */
      6#ifndef _VXFS_INODE_H_
      7#define _VXFS_INODE_H_
      8
      9/*
     10 * Veritas filesystem driver - inode structure.
     11 *
     12 * This file contains the definition of the disk and core
     13 * inodes of the Veritas Filesystem.
     14 */
     15
     16
     17#define VXFS_ISIZE		0x100		/* Inode size */
     18
     19#define VXFS_NDADDR		10		/* Number of direct addrs in inode */
     20#define VXFS_NIADDR		2		/* Number of indirect addrs in inode */
     21#define VXFS_NIMMED		96		/* Size of immediate data in inode */
     22#define VXFS_NTYPED		6		/* Num of typed extents */
     23
     24#define VXFS_TYPED_OFFSETMASK	(0x00FFFFFFFFFFFFFFULL)
     25#define VXFS_TYPED_TYPEMASK	(0xFF00000000000000ULL)
     26#define VXFS_TYPED_TYPESHIFT	56
     27
     28#define VXFS_TYPED_PER_BLOCK(sbp) \
     29	((sbp)->s_blocksize / sizeof(struct vxfs_typed))
     30
     31/*
     32 * Possible extent descriptor types for %VXFS_ORG_TYPED extents.
     33 */
     34enum {
     35	VXFS_TYPED_INDIRECT		= 1,
     36	VXFS_TYPED_DATA			= 2,
     37	VXFS_TYPED_INDIRECT_DEV4	= 3,
     38	VXFS_TYPED_DATA_DEV4		= 4,
     39};
     40
     41/*
     42 * Data stored immediately in the inode.
     43 */
     44struct vxfs_immed {
     45	__u8			vi_immed[VXFS_NIMMED];
     46};
     47
     48struct vxfs_ext4 {
     49	__fs32			ve4_spare;		/* ?? */
     50	__fs32			ve4_indsize;		/* Indirect extent size */
     51	__fs32			ve4_indir[VXFS_NIADDR];	/* Indirect extents */
     52	struct direct {					/* Direct extents */
     53		__fs32		extent;			/* Extent number */
     54		__fs32		size;			/* Size of extent */
     55	} ve4_direct[VXFS_NDADDR];
     56};
     57
     58struct vxfs_typed {
     59	__fs64		vt_hdr;		/* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */
     60	__fs32		vt_block;	/* Extent block */
     61	__fs32		vt_size;	/* Size in blocks */
     62};
     63
     64struct vxfs_typed_dev4 {
     65	__fs64		vd4_hdr;	/* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */
     66	__fs64		vd4_block;	/* Extent block */
     67	__fs64		vd4_size;	/* Size in blocks */
     68	__fs32		vd4_dev;	/* Device ID */
     69	__u8		__pad1;
     70};
     71
     72/*
     73 * The inode as contained on the physical device.
     74 */
     75struct vxfs_dinode {
     76	__fs32		vdi_mode;
     77	__fs32		vdi_nlink;	/* Link count */
     78	__fs32		vdi_uid;	/* UID */
     79	__fs32		vdi_gid;	/* GID */
     80	__fs64		vdi_size;	/* Inode size in bytes */
     81	__fs32		vdi_atime;	/* Last time accessed - sec */
     82	__fs32		vdi_autime;	/* Last time accessed - usec */
     83	__fs32		vdi_mtime;	/* Last modify time - sec */
     84	__fs32		vdi_mutime;	/* Last modify time - usec */
     85	__fs32		vdi_ctime;	/* Create time - sec */
     86	__fs32		vdi_cutime;	/* Create time - usec */
     87	__u8		vdi_aflags;	/* Allocation flags */
     88	__u8		vdi_orgtype;	/* Organisation type */
     89	__fs16		vdi_eopflags;
     90	__fs32		vdi_eopdata;
     91	union {
     92		__fs32			rdev;
     93		__fs32			dotdot;
     94		struct {
     95			__u32		reserved;
     96			__fs32		fixextsize;
     97		} i_regular;
     98		struct {
     99			__fs32		matchino;
    100			__fs32		fsetindex;
    101		} i_vxspec;
    102		__u64			align;
    103	} vdi_ftarea;
    104	__fs32		vdi_blocks;	/* How much blocks does inode occupy */
    105	__fs32		vdi_gen;	/* Inode generation */
    106	__fs64		vdi_version;	/* Version */
    107	union {
    108		struct vxfs_immed	immed;
    109		struct vxfs_ext4	ext4;
    110		struct vxfs_typed	typed[VXFS_NTYPED];
    111	} vdi_org;
    112	__fs32		vdi_iattrino;
    113};
    114
    115#define vdi_rdev	vdi_ftarea.rdev
    116#define vdi_dotdot	vdi_ftarea.dotdot
    117#define vdi_fixextsize	vdi_ftarea.regular.fixextsize
    118#define vdi_matchino	vdi_ftarea.vxspec.matchino
    119#define vdi_fsetindex	vdi_ftarea.vxspec.fsetindex
    120
    121#define vdi_immed	vdi_org.immed
    122#define vdi_ext4	vdi_org.ext4
    123#define vdi_typed	vdi_org.typed
    124
    125
    126/*
    127 * The inode as represented in the main memory.
    128 */
    129struct vxfs_inode_info {
    130	struct inode	vfs_inode;
    131
    132	__u32		vii_mode;
    133	__u32		vii_nlink;	/* Link count */
    134	__u32		vii_uid;	/* UID */
    135	__u32		vii_gid;	/* GID */
    136	__u64		vii_size;	/* Inode size in bytes */
    137	__u32		vii_atime;	/* Last time accessed - sec */
    138	__u32		vii_autime;	/* Last time accessed - usec */
    139	__u32		vii_mtime;	/* Last modify time - sec */
    140	__u32		vii_mutime;	/* Last modify time - usec */
    141	__u32		vii_ctime;	/* Create time - sec */
    142	__u32		vii_cutime;	/* Create time - usec */
    143	__u8		vii_orgtype;	/* Organisation type */
    144	union {
    145		__u32			rdev;
    146		__u32			dotdot;
    147	} vii_ftarea;
    148	__u32		vii_blocks;	/* How much blocks does inode occupy */
    149	__u32		vii_gen;	/* Inode generation */
    150	union {
    151		struct vxfs_immed	immed;
    152		struct vxfs_ext4	ext4;
    153		struct vxfs_typed	typed[VXFS_NTYPED];
    154	} vii_org;
    155};
    156
    157#define vii_rdev	vii_ftarea.rdev
    158#define vii_dotdot	vii_ftarea.dotdot
    159
    160#define vii_immed	vii_org.immed
    161#define vii_ext4	vii_org.ext4
    162#define vii_typed	vii_org.typed
    163
    164static inline struct vxfs_inode_info *VXFS_INO(struct inode *inode)
    165{
    166	return container_of(inode, struct vxfs_inode_info, vfs_inode);
    167}
    168
    169#endif /* _VXFS_INODE_H_ */