brintos

brintos / linux-shallow public Read only

0
0
Text · 4.4 KiB · 1e9e138 Raw
170 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (c) 2000-2001 Christoph Hellwig.4 * Copyright (c) 2016 Krzysztof Blaszkowski5 */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 core13 * 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	5627 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.rdev116#define vdi_dotdot	vdi_ftarea.dotdot117#define vdi_fixextsize	vdi_ftarea.regular.fixextsize118#define vdi_matchino	vdi_ftarea.vxspec.matchino119#define vdi_fsetindex	vdi_ftarea.vxspec.fsetindex120 121#define vdi_immed	vdi_org.immed122#define vdi_ext4	vdi_org.ext4123#define vdi_typed	vdi_org.typed124 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.rdev158#define vii_dotdot	vii_ftarea.dotdot159 160#define vii_immed	vii_org.immed161#define vii_ext4	vii_org.ext4162#define vii_typed	vii_org.typed163 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_ */170