]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * Copyright (c) 2000-2001 Christoph Hellwig. | |
3 | * All rights reserved. | |
4 | * | |
5 | * Redistribution and use in source and binary forms, with or without | |
6 | * modification, are permitted provided that the following conditions | |
7 | * are met: | |
8 | * 1. Redistributions of source code must retain the above copyright | |
9 | * notice, this list of conditions, and the following disclaimer, | |
10 | * without modification. | |
11 | * 2. The name of the author may not be used to endorse or promote products | |
12 | * derived from this software without specific prior written permission. | |
13 | * | |
14 | * Alternatively, this software may be distributed under the terms of the | |
15 | * GNU General Public License ("GPL"). | |
16 | * | |
17 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | |
18 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR | |
21 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
22 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
23 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
24 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
25 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
26 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
27 | * SUCH DAMAGE. | |
28 | * | |
29 | */ | |
30 | #ifndef _VXFS_INODE_H_ | |
31 | #define _VXFS_INODE_H_ | |
32 | ||
33 | /* | |
34 | * Veritas filesystem driver - inode structure. | |
35 | * | |
36 | * This file contains the definition of the disk and core | |
37 | * inodes of the Veritas Filesystem. | |
38 | */ | |
39 | ||
40 | ||
41 | #define VXFS_ISIZE 0x100 /* Inode size */ | |
42 | ||
43 | #define VXFS_NDADDR 10 /* Number of direct addrs in inode */ | |
44 | #define VXFS_NIADDR 2 /* Number of indirect addrs in inode */ | |
45 | #define VXFS_NIMMED 96 /* Size of immediate data in inode */ | |
46 | #define VXFS_NTYPED 6 /* Num of typed extents */ | |
47 | ||
48 | #define VXFS_TYPED_OFFSETMASK (0x00FFFFFFFFFFFFFFULL) | |
49 | #define VXFS_TYPED_TYPEMASK (0xFF00000000000000ULL) | |
50 | #define VXFS_TYPED_TYPESHIFT 56 | |
51 | ||
52 | #define VXFS_TYPED_PER_BLOCK(sbp) \ | |
53 | ((sbp)->s_blocksize / sizeof(struct vxfs_typed)) | |
54 | ||
55 | /* | |
56 | * Possible extent descriptor types for %VXFS_ORG_TYPED extents. | |
57 | */ | |
58 | enum { | |
59 | VXFS_TYPED_INDIRECT = 1, | |
60 | VXFS_TYPED_DATA = 2, | |
61 | VXFS_TYPED_INDIRECT_DEV4 = 3, | |
62 | VXFS_TYPED_DATA_DEV4 = 4, | |
63 | }; | |
64 | ||
65 | /* | |
66 | * Data stored immediately in the inode. | |
67 | */ | |
68 | struct vxfs_immed { | |
69 | u_int8_t vi_immed[VXFS_NIMMED]; | |
70 | }; | |
71 | ||
72 | struct vxfs_ext4 { | |
73 | u_int32_t ve4_spare; /* ?? */ | |
74 | u_int32_t ve4_indsize; /* Indirect extent size */ | |
75 | vx_daddr_t ve4_indir[VXFS_NIADDR]; /* Indirect extents */ | |
76 | struct direct { /* Direct extents */ | |
77 | vx_daddr_t extent; /* Extent number */ | |
78 | int32_t size; /* Size of extent */ | |
79 | } ve4_direct[VXFS_NDADDR]; | |
80 | }; | |
81 | ||
82 | struct vxfs_typed { | |
83 | u_int64_t vt_hdr; /* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */ | |
84 | vx_daddr_t vt_block; /* Extent block */ | |
85 | int32_t vt_size; /* Size in blocks */ | |
86 | }; | |
87 | ||
88 | struct vxfs_typed_dev4 { | |
89 | u_int64_t vd4_hdr; /* Header, 0xTTOOOOOOOOOOOOOO; T=type,O=offs */ | |
90 | u_int64_t vd4_block; /* Extent block */ | |
91 | u_int64_t vd4_size; /* Size in blocks */ | |
92 | int32_t vd4_dev; /* Device ID */ | |
93 | u_int32_t __pad1; | |
94 | }; | |
95 | ||
96 | /* | |
97 | * The inode as contained on the physical device. | |
98 | */ | |
99 | struct vxfs_dinode { | |
100 | int32_t vdi_mode; | |
101 | u_int32_t vdi_nlink; /* Link count */ | |
102 | u_int32_t vdi_uid; /* UID */ | |
103 | u_int32_t vdi_gid; /* GID */ | |
104 | u_int64_t vdi_size; /* Inode size in bytes */ | |
105 | u_int32_t vdi_atime; /* Last time accessed - sec */ | |
106 | u_int32_t vdi_autime; /* Last time accessed - usec */ | |
107 | u_int32_t vdi_mtime; /* Last modify time - sec */ | |
108 | u_int32_t vdi_mutime; /* Last modify time - usec */ | |
109 | u_int32_t vdi_ctime; /* Create time - sec */ | |
110 | u_int32_t vdi_cutime; /* Create time - usec */ | |
111 | u_int8_t vdi_aflags; /* Allocation flags */ | |
112 | u_int8_t vdi_orgtype; /* Organisation type */ | |
113 | u_int16_t vdi_eopflags; | |
114 | u_int32_t vdi_eopdata; | |
115 | union { | |
116 | u_int32_t rdev; | |
117 | u_int32_t dotdot; | |
118 | struct { | |
119 | u_int32_t reserved; | |
120 | u_int32_t fixextsize; | |
121 | } i_regular; | |
122 | struct { | |
123 | u_int32_t matchino; | |
124 | u_int32_t fsetindex; | |
125 | } i_vxspec; | |
126 | u_int64_t align; | |
127 | } vdi_ftarea; | |
128 | u_int32_t vdi_blocks; /* How much blocks does inode occupy */ | |
129 | u_int32_t vdi_gen; /* Inode generation */ | |
130 | u_int64_t vdi_version; /* Version */ | |
131 | union { | |
132 | struct vxfs_immed immed; | |
133 | struct vxfs_ext4 ext4; | |
134 | struct vxfs_typed typed[VXFS_NTYPED]; | |
135 | } vdi_org; | |
136 | u_int32_t vdi_iattrino; | |
137 | }; | |
138 | ||
139 | #define vdi_rdev vdi_ftarea.rdev | |
140 | #define vdi_dotdot vdi_ftarea.dotdot | |
141 | #define vdi_fixextsize vdi_ftarea.regular.fixextsize | |
142 | #define vdi_matchino vdi_ftarea.vxspec.matchino | |
143 | #define vdi_fsetindex vdi_ftarea.vxspec.fsetindex | |
144 | ||
145 | #define vdi_immed vdi_org.immed | |
146 | #define vdi_ext4 vdi_org.ext4 | |
147 | #define vdi_typed vdi_org.typed | |
148 | ||
149 | ||
150 | /* | |
151 | * The inode as represented in the main memory. | |
152 | * | |
153 | * TBD: This should become a separate structure... | |
154 | */ | |
155 | #define vxfs_inode_info vxfs_dinode | |
156 | ||
157 | #define vii_mode vdi_mode | |
158 | #define vii_uid vdi_uid | |
159 | #define vii_gid vdi_gid | |
160 | #define vii_nlink vdi_nlink | |
161 | #define vii_size vdi_size | |
162 | #define vii_atime vdi_atime | |
163 | #define vii_ctime vdi_ctime | |
164 | #define vii_mtime vdi_mtime | |
165 | #define vii_blocks vdi_blocks | |
166 | #define vii_org vdi_org | |
167 | #define vii_orgtype vdi_orgtype | |
168 | #define vii_gen vdi_gen | |
169 | ||
170 | #define vii_rdev vdi_ftarea.rdev | |
171 | #define vii_dotdot vdi_ftarea.dotdot | |
172 | #define vii_fixextsize vdi_ftarea.regular.fixextsize | |
173 | #define vii_matchino vdi_ftarea.vxspec.matchino | |
174 | #define vii_fsetindex vdi_ftarea.vxspec.fsetindex | |
175 | ||
176 | #define vii_immed vdi_org.immed | |
177 | #define vii_ext4 vdi_org.ext4 | |
178 | #define vii_typed vdi_org.typed | |
179 | ||
180 | #endif /* _VXFS_INODE_H_ */ |