11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 2000-2001 Christoph Hellwig. 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * All rights reserved. 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Redistribution and use in source and binary forms, with or without 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modification, are permitted provided that the following conditions 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * are met: 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 1. Redistributions of source code must retain the above copyright 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * notice, this list of conditions, and the following disclaimer, 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * without modification. 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 2. The name of the author may not be used to endorse or promote products 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * derived from this software without specific prior written permission. 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Alternatively, this software may be distributed under the terms of the 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License ("GPL"). 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * SUCH DAMAGE. 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _VXFS_INODE_H_ 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _VXFS_INODE_H_ 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Veritas filesystem driver - inode structure. 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This file contains the definition of the disk and core 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * inodes of the Veritas Filesystem. 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VXFS_ISIZE 0x100 /* Inode size */ 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VXFS_NDADDR 10 /* Number of direct addrs in inode */ 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VXFS_NIADDR 2 /* Number of indirect addrs in inode */ 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VXFS_NIMMED 96 /* Size of immediate data in inode */ 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VXFS_NTYPED 6 /* Num of typed extents */ 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VXFS_TYPED_OFFSETMASK (0x00FFFFFFFFFFFFFFULL) 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VXFS_TYPED_TYPEMASK (0xFF00000000000000ULL) 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VXFS_TYPED_TYPESHIFT 56 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VXFS_TYPED_PER_BLOCK(sbp) \ 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ((sbp)->s_blocksize / sizeof(struct vxfs_typed)) 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Possible extent descriptor types for %VXFS_ORG_TYPED extents. 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum { 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds VXFS_TYPED_INDIRECT = 1, 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds VXFS_TYPED_DATA = 2, 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds VXFS_TYPED_INDIRECT_DEV4 = 3, 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds VXFS_TYPED_DATA_DEV4 = 4, 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Data stored immediately in the inode. 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct vxfs_immed { 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int8_t vi_immed[VXFS_NIMMED]; 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct vxfs_ext4 { 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t ve4_spare; /* ?? */ 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t ve4_indsize; /* Indirect extent size */ 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds vx_daddr_t ve4_indir[VXFS_NIADDR]; /* Indirect extents */ 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct direct { /* Direct extents */ 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds vx_daddr_t extent; /* Extent number */ 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int32_t size; /* Size of extent */ 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } ve4_direct[VXFS_NDADDR]; 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct vxfs_typed { 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int64_t vt_hdr; /* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */ 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds vx_daddr_t vt_block; /* Extent block */ 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int32_t vt_size; /* Size in blocks */ 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct vxfs_typed_dev4 { 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int64_t vd4_hdr; /* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */ 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int64_t vd4_block; /* Extent block */ 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int64_t vd4_size; /* Size in blocks */ 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int32_t vd4_dev; /* Device ID */ 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t __pad1; 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The inode as contained on the physical device. 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct vxfs_dinode { 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int32_t vdi_mode; 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_nlink; /* Link count */ 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_uid; /* UID */ 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_gid; /* GID */ 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int64_t vdi_size; /* Inode size in bytes */ 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_atime; /* Last time accessed - sec */ 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_autime; /* Last time accessed - usec */ 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_mtime; /* Last modify time - sec */ 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_mutime; /* Last modify time - usec */ 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_ctime; /* Create time - sec */ 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_cutime; /* Create time - usec */ 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int8_t vdi_aflags; /* Allocation flags */ 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int8_t vdi_orgtype; /* Organisation type */ 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int16_t vdi_eopflags; 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_eopdata; 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds union { 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t rdev; 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t dotdot; 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct { 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t reserved; 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t fixextsize; 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } i_regular; 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct { 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t matchino; 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t fsetindex; 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } i_vxspec; 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int64_t align; 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } vdi_ftarea; 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_blocks; /* How much blocks does inode occupy */ 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_gen; /* Inode generation */ 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int64_t vdi_version; /* Version */ 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds union { 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct vxfs_immed immed; 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct vxfs_ext4 ext4; 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct vxfs_typed typed[VXFS_NTYPED]; 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } vdi_org; 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u_int32_t vdi_iattrino; 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vdi_rdev vdi_ftarea.rdev 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vdi_dotdot vdi_ftarea.dotdot 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vdi_fixextsize vdi_ftarea.regular.fixextsize 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vdi_matchino vdi_ftarea.vxspec.matchino 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vdi_fsetindex vdi_ftarea.vxspec.fsetindex 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vdi_immed vdi_org.immed 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vdi_ext4 vdi_org.ext4 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vdi_typed vdi_org.typed 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The inode as represented in the main memory. 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * TBD: This should become a separate structure... 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vxfs_inode_info vxfs_dinode 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_mode vdi_mode 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_uid vdi_uid 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_gid vdi_gid 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_nlink vdi_nlink 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_size vdi_size 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_atime vdi_atime 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_ctime vdi_ctime 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_mtime vdi_mtime 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_blocks vdi_blocks 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_org vdi_org 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_orgtype vdi_orgtype 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_gen vdi_gen 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_rdev vdi_ftarea.rdev 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_dotdot vdi_ftarea.dotdot 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_fixextsize vdi_ftarea.regular.fixextsize 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_matchino vdi_ftarea.vxspec.matchino 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_fsetindex vdi_ftarea.vxspec.fsetindex 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_immed vdi_org.immed 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_ext4 vdi_org.ext4 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define vii_typed vdi_org.typed 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _VXFS_INODE_H_ */ 181