1
2
3
4
5
6
7
8
9
10
11
12
13 #ifndef __LINUX_UFS_FS_H
14 #define __LINUX_UFS_FS_H
15
16 #include <linux/types.h>
17 #include <linux/kernel.h>
18 #include <linux/time.h>
19 #include <linux/stat.h>
20
21 #define UFS_BBLOCK 0
22 #define UFS_BBSIZE 8192
23 #define UFS_SBLOCK 8192
24 #define UFS_SBSIZE 8192
25
26 #define UFS_MAGIC 0x00011954
27
28 #define UFS_FSIZE 1024
29 #define UFS_BSIZE 8192
30
31 #define UFS_NDADDR 12
32 #define UFS_NINDIR 3
33
34 #define UFS_ROOTINO 2
35
36 #define UFS_USEEFT ((__u16)65535)
37
38 #define UFS_FSOK 0x7c269d38
39 #define UFS_FSACTIVE ((char)0x00)
40 #define UFS_FSCLEAN ((char)0x01)
41 #define UFS_FSSTABLE ((char)0x02)
42 #define UFS_FSBAD ((char)0xff)
43
44
45 #define UFS_DEBUG 0x00000001
46 #define UFS_DEBUG_INODE 0x00000002
47 #define UFS_DEBUG_NAMEI 0x00000004
48 #define UFS_DEBUG_LINKS 0x00000008
49
50
51
52 #define ufs_ino_ok(inode) ((inode->i_ino < 2) && \
53 (inode->i_ino > (inode->i_sb->u.ufs_sb.s_ncg * inode->i_sb->u.ufs_sb.s_ipg - 1)))
54
55
56 #define ufs_cgstart(sb, cg) \
57 (((sb)->u.ufs_sb.s_fpg * (cg)) + (sb)->u.ufs_sb.s_cgoffset * ((cg) & ~((sb)->u.ufs_sb.s_cgmask)))
58
59
60 #define ufs_cgimin(sb, cg) (ufs_cgstart((sb), (cg)) + (sb)->u.ufs_sb.s_iblkno)
61 #define ufs_cgdmin(sb, cg) (ufs_cgstart((sb), (cg)) + (sb)->u.ufs_sb.s_dblkno)
62
63
64
65 #define ufs_ino2cg(inode) ((inode)->i_ino/(inode)->i_sb->u.ufs_sb.s_ipg)
66
67 #define MAXNAMLEN 255
68
69 struct direct {
70 __u32 d_ino;
71 __u16 d_reclen;
72 __u16 d_namlen;
73 char d_name[MAXNAMLEN + 1];
74 };
75
76 #define MAXMNTLEN 512
77 #define MAXCSBUFS 32
78
79 struct csum {
80 __u32 cs_ndir;
81 __u32 cs_nbfree;
82 __u32 cs_nifree;
83 __u32 cs_nffree;
84 };
85
86 typedef struct _ufsquad {
87 __u32 val[2];
88 } ufsquad;
89
90
91
92
93 struct ufs_superblock {
94 __u32 fs_link;
95 __u32 fs_rlink;
96 __u32 fs_sblkno;
97 __u32 fs_cblkno;
98 __u32 fs_iblkno;
99 __u32 fs_dblkno;
100 __u32 fs_cgoffset;
101 __u32 fs_cgmask;
102 time_t fs_time;
103 __u32 fs_size;
104 __u32 fs_dsize;
105 __u32 fs_ncg;
106 __u32 fs_bsize;
107 __u32 fs_fsize;
108 __u32 fs_frag;
109 __u32 fs_minfree;
110 __u32 fs_rotdelay;
111 __u32 fs_rps;
112 __u32 fs_bmask;
113 __u32 fs_fmask;
114 __u32 fs_bshift;
115 __u32 fs_fshift;
116 __u32 fs_maxcontig;
117 __u32 fs_maxbpg;
118 __u32 fs_fragshift;
119 __u32 fs_fsbtodb;
120 __u32 fs_sbsize;
121 __u32 fs_csmask;
122 __u32 fs_csshift;
123 __u32 fs_nindir;
124 __u32 fs_inopb;
125 __u32 fs_nspf;
126 __u32 fs_optim;
127 __u32 fs_XXX1;
128 __u32 fs_interleave;
129 __u32 fs_trackskew;
130 __u32 fs_id[2];
131 __u32 fs_csaddr;
132 __u32 fs_cssize;
133 __u32 fs_cgsize;
134 __u32 fs_ntrak;
135 __u32 fs_nsect;
136 __u32 fs_spc;
137 __u32 fs_ncyl;
138 __u32 fs_cpg;
139 __u32 fs_ipg;
140 __u32 fs_fpg;
141 struct csum fs_cstotal;
142 __u8 fs_fmod;
143 __u8 fs_clean;
144 __u8 fs_ronly;
145 __u8 fs_flags;
146 __u8 fs_fsmnt[MAXMNTLEN];
147 __u32 fs_cgrotor;
148 struct csum * fs_csp[MAXCSBUFS];
149 __u32 fs_cpc;
150 __u16 fs_opostbl[16][8];
151 __s32 fs_sparecon[55];
152 __s32 fs_state;
153 ufsquad fs_qbmask;
154 ufsquad fs_qfmask;
155 __s32 fs_postblformat;
156 __s32 fs_nrpos;
157 __s32 fs_postbloff;
158 __s32 fs_rotbloff;
159 __s32 fs_magic;
160 __u8 fs_space[1];
161
162 };
163
164
165
166
167 struct ufs_inode {
168 __u16 ui_mode;
169 __u16 ui_nlink;
170 __u16 ui_suid;
171 __u16 ui_sgid;
172 ufsquad ui_size;
173 struct timeval ui_atime;
174 struct timeval ui_mtime;
175 struct timeval ui_ctime;
176 __u32 ui_db[UFS_NDADDR];
177 __u32 ui_ib[UFS_NINDIR];
178 __u32 ui_flags;
179 __u32 ui_blocks;
180 __u32 ui_gen;
181 __u32 ui_shadow;
182 __u32 ui_uid;
183 __u32 ui_gid;
184 __u32 ui_oeftflag;
185 };
186
187 extern int init_ufs_fs(void);
188
189 #endif
190
191
192
193
194
195
196
197
198