diff options
-rw-r--r-- | fs/squashfs/squashfs.h | 90 | ||||
-rw-r--r-- | fs/squashfs/squashfs_fs.h | 381 | ||||
-rw-r--r-- | fs/squashfs/squashfs_fs_i.h | 45 | ||||
-rw-r--r-- | fs/squashfs/squashfs_fs_sb.h | 76 |
4 files changed, 592 insertions, 0 deletions
diff --git a/fs/squashfs/squashfs.h b/fs/squashfs/squashfs.h new file mode 100644 index 000000000000..6b2515d027d5 --- /dev/null +++ b/fs/squashfs/squashfs.h | |||
@@ -0,0 +1,90 @@ | |||
1 | /* | ||
2 | * Squashfs - a compressed read only filesystem for Linux | ||
3 | * | ||
4 | * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 | ||
5 | * Phillip Lougher <phillip@lougher.demon.co.uk> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License | ||
9 | * as published by the Free Software Foundation; either version 2, | ||
10 | * or (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
20 | * | ||
21 | * squashfs.h | ||
22 | */ | ||
23 | |||
24 | #define TRACE(s, args...) pr_debug("SQUASHFS: "s, ## args) | ||
25 | |||
26 | #define ERROR(s, args...) pr_err("SQUASHFS error: "s, ## args) | ||
27 | |||
28 | #define WARNING(s, args...) pr_warning("SQUASHFS: "s, ## args) | ||
29 | |||
30 | static inline struct squashfs_inode_info *squashfs_i(struct inode *inode) | ||
31 | { | ||
32 | return list_entry(inode, struct squashfs_inode_info, vfs_inode); | ||
33 | } | ||
34 | |||
35 | /* block.c */ | ||
36 | extern int squashfs_read_data(struct super_block *, void **, u64, int, u64 *, | ||
37 | int); | ||
38 | |||
39 | /* cache.c */ | ||
40 | extern struct squashfs_cache *squashfs_cache_init(char *, int, int); | ||
41 | extern void squashfs_cache_delete(struct squashfs_cache *); | ||
42 | extern struct squashfs_cache_entry *squashfs_cache_get(struct super_block *, | ||
43 | struct squashfs_cache *, u64, int); | ||
44 | extern void squashfs_cache_put(struct squashfs_cache_entry *); | ||
45 | extern int squashfs_copy_data(void *, struct squashfs_cache_entry *, int, int); | ||
46 | extern int squashfs_read_metadata(struct super_block *, void *, u64 *, | ||
47 | int *, int); | ||
48 | extern struct squashfs_cache_entry *squashfs_get_fragment(struct super_block *, | ||
49 | u64, int); | ||
50 | extern struct squashfs_cache_entry *squashfs_get_datablock(struct super_block *, | ||
51 | u64, int); | ||
52 | extern int squashfs_read_table(struct super_block *, void *, u64, int); | ||
53 | |||
54 | /* export.c */ | ||
55 | extern __le64 *squashfs_read_inode_lookup_table(struct super_block *, u64, | ||
56 | unsigned int); | ||
57 | |||
58 | /* fragment.c */ | ||
59 | extern int squashfs_frag_lookup(struct super_block *, unsigned int, u64 *); | ||
60 | extern __le64 *squashfs_read_fragment_index_table(struct super_block *, | ||
61 | u64, unsigned int); | ||
62 | |||
63 | /* id.c */ | ||
64 | extern int squashfs_get_id(struct super_block *, unsigned int, unsigned int *); | ||
65 | extern __le64 *squashfs_read_id_index_table(struct super_block *, u64, | ||
66 | unsigned short); | ||
67 | |||
68 | /* inode.c */ | ||
69 | extern struct inode *squashfs_iget(struct super_block *, long long, | ||
70 | unsigned int); | ||
71 | extern int squashfs_read_inode(struct inode *, long long); | ||
72 | |||
73 | /* | ||
74 | * Inodes and files operations | ||
75 | */ | ||
76 | |||
77 | /* dir.c */ | ||
78 | extern const struct file_operations squashfs_dir_ops; | ||
79 | |||
80 | /* export.c */ | ||
81 | extern const struct export_operations squashfs_export_ops; | ||
82 | |||
83 | /* file.c */ | ||
84 | extern const struct address_space_operations squashfs_aops; | ||
85 | |||
86 | /* namei.c */ | ||
87 | extern const struct inode_operations squashfs_dir_inode_ops; | ||
88 | |||
89 | /* symlink.c */ | ||
90 | extern const struct address_space_operations squashfs_symlink_aops; | ||
diff --git a/fs/squashfs/squashfs_fs.h b/fs/squashfs/squashfs_fs.h new file mode 100644 index 000000000000..6840da1bf21e --- /dev/null +++ b/fs/squashfs/squashfs_fs.h | |||
@@ -0,0 +1,381 @@ | |||
1 | #ifndef SQUASHFS_FS | ||
2 | #define SQUASHFS_FS | ||
3 | /* | ||
4 | * Squashfs | ||
5 | * | ||
6 | * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 | ||
7 | * Phillip Lougher <phillip@lougher.demon.co.uk> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License | ||
11 | * as published by the Free Software Foundation; either version 2, | ||
12 | * or (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
22 | * | ||
23 | * squashfs_fs.h | ||
24 | */ | ||
25 | |||
26 | #define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE | ||
27 | #define SQUASHFS_MAJOR 4 | ||
28 | #define SQUASHFS_MINOR 0 | ||
29 | #define SQUASHFS_MAGIC 0x73717368 | ||
30 | #define SQUASHFS_START 0 | ||
31 | |||
32 | /* size of metadata (inode and directory) blocks */ | ||
33 | #define SQUASHFS_METADATA_SIZE 8192 | ||
34 | #define SQUASHFS_METADATA_LOG 13 | ||
35 | |||
36 | /* default size of data blocks */ | ||
37 | #define SQUASHFS_FILE_SIZE 131072 | ||
38 | #define SQUASHFS_FILE_LOG 17 | ||
39 | |||
40 | #define SQUASHFS_FILE_MAX_SIZE 1048576 | ||
41 | #define SQUASHFS_FILE_MAX_LOG 20 | ||
42 | |||
43 | /* Max number of uids and gids */ | ||
44 | #define SQUASHFS_IDS 65536 | ||
45 | |||
46 | /* Max length of filename (not 255) */ | ||
47 | #define SQUASHFS_NAME_LEN 256 | ||
48 | |||
49 | #define SQUASHFS_INVALID_FRAG (0xffffffffU) | ||
50 | #define SQUASHFS_INVALID_BLK (-1LL) | ||
51 | |||
52 | /* Filesystem flags */ | ||
53 | #define SQUASHFS_NOI 0 | ||
54 | #define SQUASHFS_NOD 1 | ||
55 | #define SQUASHFS_NOF 3 | ||
56 | #define SQUASHFS_NO_FRAG 4 | ||
57 | #define SQUASHFS_ALWAYS_FRAG 5 | ||
58 | #define SQUASHFS_DUPLICATE 6 | ||
59 | #define SQUASHFS_EXPORT 7 | ||
60 | |||
61 | #define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1) | ||
62 | |||
63 | #define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \ | ||
64 | SQUASHFS_NOI) | ||
65 | |||
66 | #define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \ | ||
67 | SQUASHFS_NOD) | ||
68 | |||
69 | #define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ | ||
70 | SQUASHFS_NOF) | ||
71 | |||
72 | #define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ | ||
73 | SQUASHFS_NO_FRAG) | ||
74 | |||
75 | #define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ | ||
76 | SQUASHFS_ALWAYS_FRAG) | ||
77 | |||
78 | #define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \ | ||
79 | SQUASHFS_DUPLICATE) | ||
80 | |||
81 | #define SQUASHFS_EXPORTABLE(flags) SQUASHFS_BIT(flags, \ | ||
82 | SQUASHFS_EXPORT) | ||
83 | |||
84 | /* Max number of types and file types */ | ||
85 | #define SQUASHFS_DIR_TYPE 1 | ||
86 | #define SQUASHFS_REG_TYPE 2 | ||
87 | #define SQUASHFS_SYMLINK_TYPE 3 | ||
88 | #define SQUASHFS_BLKDEV_TYPE 4 | ||
89 | #define SQUASHFS_CHRDEV_TYPE 5 | ||
90 | #define SQUASHFS_FIFO_TYPE 6 | ||
91 | #define SQUASHFS_SOCKET_TYPE 7 | ||
92 | #define SQUASHFS_LDIR_TYPE 8 | ||
93 | #define SQUASHFS_LREG_TYPE 9 | ||
94 | #define SQUASHFS_LSYMLINK_TYPE 10 | ||
95 | #define SQUASHFS_LBLKDEV_TYPE 11 | ||
96 | #define SQUASHFS_LCHRDEV_TYPE 12 | ||
97 | #define SQUASHFS_LFIFO_TYPE 13 | ||
98 | #define SQUASHFS_LSOCKET_TYPE 14 | ||
99 | |||
100 | /* Flag whether block is compressed or uncompressed, bit is set if block is | ||
101 | * uncompressed */ | ||
102 | #define SQUASHFS_COMPRESSED_BIT (1 << 15) | ||
103 | |||
104 | #define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \ | ||
105 | (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT) | ||
106 | |||
107 | #define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT)) | ||
108 | |||
109 | #define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24) | ||
110 | |||
111 | #define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) ((B) & \ | ||
112 | ~SQUASHFS_COMPRESSED_BIT_BLOCK) | ||
113 | |||
114 | #define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) | ||
115 | |||
116 | /* | ||
117 | * Inode number ops. Inodes consist of a compressed block number, and an | ||
118 | * uncompressed offset within that block | ||
119 | */ | ||
120 | #define SQUASHFS_INODE_BLK(A) ((unsigned int) ((A) >> 16)) | ||
121 | |||
122 | #define SQUASHFS_INODE_OFFSET(A) ((unsigned int) ((A) & 0xffff)) | ||
123 | |||
124 | #define SQUASHFS_MKINODE(A, B) ((long long)(((long long) (A)\ | ||
125 | << 16) + (B))) | ||
126 | |||
127 | /* Translate between VFS mode and squashfs mode */ | ||
128 | #define SQUASHFS_MODE(A) ((A) & 0xfff) | ||
129 | |||
130 | /* fragment and fragment table defines */ | ||
131 | #define SQUASHFS_FRAGMENT_BYTES(A) \ | ||
132 | ((A) * sizeof(struct squashfs_fragment_entry)) | ||
133 | |||
134 | #define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \ | ||
135 | SQUASHFS_METADATA_SIZE) | ||
136 | |||
137 | #define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \ | ||
138 | SQUASHFS_METADATA_SIZE) | ||
139 | |||
140 | #define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \ | ||
141 | SQUASHFS_METADATA_SIZE - 1) / \ | ||
142 | SQUASHFS_METADATA_SIZE) | ||
143 | |||
144 | #define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\ | ||
145 | sizeof(u64)) | ||
146 | |||
147 | /* inode lookup table defines */ | ||
148 | #define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(u64)) | ||
149 | |||
150 | #define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \ | ||
151 | SQUASHFS_METADATA_SIZE) | ||
152 | |||
153 | #define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \ | ||
154 | SQUASHFS_METADATA_SIZE) | ||
155 | |||
156 | #define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \ | ||
157 | SQUASHFS_METADATA_SIZE - 1) / \ | ||
158 | SQUASHFS_METADATA_SIZE) | ||
159 | |||
160 | #define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(A) *\ | ||
161 | sizeof(u64)) | ||
162 | |||
163 | /* uid/gid lookup table defines */ | ||
164 | #define SQUASHFS_ID_BYTES(A) ((A) * sizeof(unsigned int)) | ||
165 | |||
166 | #define SQUASHFS_ID_BLOCK(A) (SQUASHFS_ID_BYTES(A) / \ | ||
167 | SQUASHFS_METADATA_SIZE) | ||
168 | |||
169 | #define SQUASHFS_ID_BLOCK_OFFSET(A) (SQUASHFS_ID_BYTES(A) % \ | ||
170 | SQUASHFS_METADATA_SIZE) | ||
171 | |||
172 | #define SQUASHFS_ID_BLOCKS(A) ((SQUASHFS_ID_BYTES(A) + \ | ||
173 | SQUASHFS_METADATA_SIZE - 1) / \ | ||
174 | SQUASHFS_METADATA_SIZE) | ||
175 | |||
176 | #define SQUASHFS_ID_BLOCK_BYTES(A) (SQUASHFS_ID_BLOCKS(A) *\ | ||
177 | sizeof(u64)) | ||
178 | |||
179 | /* cached data constants for filesystem */ | ||
180 | #define SQUASHFS_CACHED_BLKS 8 | ||
181 | |||
182 | #define SQUASHFS_MAX_FILE_SIZE_LOG 64 | ||
183 | |||
184 | #define SQUASHFS_MAX_FILE_SIZE (1LL << \ | ||
185 | (SQUASHFS_MAX_FILE_SIZE_LOG - 2)) | ||
186 | |||
187 | #define SQUASHFS_MARKER_BYTE 0xff | ||
188 | |||
189 | /* meta index cache */ | ||
190 | #define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int)) | ||
191 | #define SQUASHFS_META_ENTRIES 127 | ||
192 | #define SQUASHFS_META_SLOTS 8 | ||
193 | |||
194 | struct meta_entry { | ||
195 | u64 data_block; | ||
196 | unsigned int index_block; | ||
197 | unsigned short offset; | ||
198 | unsigned short pad; | ||
199 | }; | ||
200 | |||
201 | struct meta_index { | ||
202 | unsigned int inode_number; | ||
203 | unsigned int offset; | ||
204 | unsigned short entries; | ||
205 | unsigned short skip; | ||
206 | unsigned short locked; | ||
207 | unsigned short pad; | ||
208 | struct meta_entry meta_entry[SQUASHFS_META_ENTRIES]; | ||
209 | }; | ||
210 | |||
211 | |||
212 | /* | ||
213 | * definitions for structures on disk | ||
214 | */ | ||
215 | #define ZLIB_COMPRESSION 1 | ||
216 | |||
217 | struct squashfs_super_block { | ||
218 | __le32 s_magic; | ||
219 | __le32 inodes; | ||
220 | __le32 mkfs_time; | ||
221 | __le32 block_size; | ||
222 | __le32 fragments; | ||
223 | __le16 compression; | ||
224 | __le16 block_log; | ||
225 | __le16 flags; | ||
226 | __le16 no_ids; | ||
227 | __le16 s_major; | ||
228 | __le16 s_minor; | ||
229 | __le64 root_inode; | ||
230 | __le64 bytes_used; | ||
231 | __le64 id_table_start; | ||
232 | __le64 xattr_table_start; | ||
233 | __le64 inode_table_start; | ||
234 | __le64 directory_table_start; | ||
235 | __le64 fragment_table_start; | ||
236 | __le64 lookup_table_start; | ||
237 | }; | ||
238 | |||
239 | struct squashfs_dir_index { | ||
240 | __le32 index; | ||
241 | __le32 start_block; | ||
242 | __le32 size; | ||
243 | unsigned char name[0]; | ||
244 | }; | ||
245 | |||
246 | struct squashfs_base_inode { | ||
247 | __le16 inode_type; | ||
248 | __le16 mode; | ||
249 | __le16 uid; | ||
250 | __le16 guid; | ||
251 | __le32 mtime; | ||
252 | __le32 inode_number; | ||
253 | }; | ||
254 | |||
255 | struct squashfs_ipc_inode { | ||
256 | __le16 inode_type; | ||
257 | __le16 mode; | ||
258 | __le16 uid; | ||
259 | __le16 guid; | ||
260 | __le32 mtime; | ||
261 | __le32 inode_number; | ||
262 | __le32 nlink; | ||
263 | }; | ||
264 | |||
265 | struct squashfs_dev_inode { | ||
266 | __le16 inode_type; | ||
267 | __le16 mode; | ||
268 | __le16 uid; | ||
269 | __le16 guid; | ||
270 | __le32 mtime; | ||
271 | __le32 inode_number; | ||
272 | __le32 nlink; | ||
273 | __le32 rdev; | ||
274 | }; | ||
275 | |||
276 | struct squashfs_symlink_inode { | ||
277 | __le16 inode_type; | ||
278 | __le16 mode; | ||
279 | __le16 uid; | ||
280 | __le16 guid; | ||
281 | __le32 mtime; | ||
282 | __le32 inode_number; | ||
283 | __le32 nlink; | ||
284 | __le32 symlink_size; | ||
285 | char symlink[0]; | ||
286 | }; | ||
287 | |||
288 | struct squashfs_reg_inode { | ||
289 | __le16 inode_type; | ||
290 | __le16 mode; | ||
291 | __le16 uid; | ||
292 | __le16 guid; | ||
293 | __le32 mtime; | ||
294 | __le32 inode_number; | ||
295 | __le32 start_block; | ||
296 | __le32 fragment; | ||
297 | __le32 offset; | ||
298 | __le32 file_size; | ||
299 | __le16 block_list[0]; | ||
300 | }; | ||
301 | |||
302 | struct squashfs_lreg_inode { | ||
303 | __le16 inode_type; | ||
304 | __le16 mode; | ||
305 | __le16 uid; | ||
306 | __le16 guid; | ||
307 | __le32 mtime; | ||
308 | __le32 inode_number; | ||
309 | __le64 start_block; | ||
310 | __le64 file_size; | ||
311 | __le64 sparse; | ||
312 | __le32 nlink; | ||
313 | __le32 fragment; | ||
314 | __le32 offset; | ||
315 | __le32 xattr; | ||
316 | __le16 block_list[0]; | ||
317 | }; | ||
318 | |||
319 | struct squashfs_dir_inode { | ||
320 | __le16 inode_type; | ||
321 | __le16 mode; | ||
322 | __le16 uid; | ||
323 | __le16 guid; | ||
324 | __le32 mtime; | ||
325 | __le32 inode_number; | ||
326 | __le32 start_block; | ||
327 | __le32 nlink; | ||
328 | __le16 file_size; | ||
329 | __le16 offset; | ||
330 | __le32 parent_inode; | ||
331 | }; | ||
332 | |||
333 | struct squashfs_ldir_inode { | ||
334 | __le16 inode_type; | ||
335 | __le16 mode; | ||
336 | __le16 uid; | ||
337 | __le16 guid; | ||
338 | __le32 mtime; | ||
339 | __le32 inode_number; | ||
340 | __le32 nlink; | ||
341 | __le32 file_size; | ||
342 | __le32 start_block; | ||
343 | __le32 parent_inode; | ||
344 | __le16 i_count; | ||
345 | __le16 offset; | ||
346 | __le32 xattr; | ||
347 | struct squashfs_dir_index index[0]; | ||
348 | }; | ||
349 | |||
350 | union squashfs_inode { | ||
351 | struct squashfs_base_inode base; | ||
352 | struct squashfs_dev_inode dev; | ||
353 | struct squashfs_symlink_inode symlink; | ||
354 | struct squashfs_reg_inode reg; | ||
355 | struct squashfs_lreg_inode lreg; | ||
356 | struct squashfs_dir_inode dir; | ||
357 | struct squashfs_ldir_inode ldir; | ||
358 | struct squashfs_ipc_inode ipc; | ||
359 | }; | ||
360 | |||
361 | struct squashfs_dir_entry { | ||
362 | __le16 offset; | ||
363 | __le16 inode_number; | ||
364 | __le16 type; | ||
365 | __le16 size; | ||
366 | char name[0]; | ||
367 | }; | ||
368 | |||
369 | struct squashfs_dir_header { | ||
370 | __le32 count; | ||
371 | __le32 start_block; | ||
372 | __le32 inode_number; | ||
373 | }; | ||
374 | |||
375 | struct squashfs_fragment_entry { | ||
376 | __le64 start_block; | ||
377 | __le32 size; | ||
378 | unsigned int unused; | ||
379 | }; | ||
380 | |||
381 | #endif | ||
diff --git a/fs/squashfs/squashfs_fs_i.h b/fs/squashfs/squashfs_fs_i.h new file mode 100644 index 000000000000..fbfca30c0c68 --- /dev/null +++ b/fs/squashfs/squashfs_fs_i.h | |||
@@ -0,0 +1,45 @@ | |||
1 | #ifndef SQUASHFS_FS_I | ||
2 | #define SQUASHFS_FS_I | ||
3 | /* | ||
4 | * Squashfs | ||
5 | * | ||
6 | * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 | ||
7 | * Phillip Lougher <phillip@lougher.demon.co.uk> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License | ||
11 | * as published by the Free Software Foundation; either version 2, | ||
12 | * or (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
22 | * | ||
23 | * squashfs_fs_i.h | ||
24 | */ | ||
25 | |||
26 | struct squashfs_inode_info { | ||
27 | u64 start; | ||
28 | int offset; | ||
29 | union { | ||
30 | struct { | ||
31 | u64 fragment_block; | ||
32 | int fragment_size; | ||
33 | int fragment_offset; | ||
34 | u64 block_list_start; | ||
35 | }; | ||
36 | struct { | ||
37 | u64 dir_idx_start; | ||
38 | int dir_idx_offset; | ||
39 | int dir_idx_cnt; | ||
40 | int parent; | ||
41 | }; | ||
42 | }; | ||
43 | struct inode vfs_inode; | ||
44 | }; | ||
45 | #endif | ||
diff --git a/fs/squashfs/squashfs_fs_sb.h b/fs/squashfs/squashfs_fs_sb.h new file mode 100644 index 000000000000..c8c65614dd1c --- /dev/null +++ b/fs/squashfs/squashfs_fs_sb.h | |||
@@ -0,0 +1,76 @@ | |||
1 | #ifndef SQUASHFS_FS_SB | ||
2 | #define SQUASHFS_FS_SB | ||
3 | /* | ||
4 | * Squashfs | ||
5 | * | ||
6 | * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 | ||
7 | * Phillip Lougher <phillip@lougher.demon.co.uk> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License | ||
11 | * as published by the Free Software Foundation; either version 2, | ||
12 | * or (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
22 | * | ||
23 | * squashfs_fs_sb.h | ||
24 | */ | ||
25 | |||
26 | #include "squashfs_fs.h" | ||
27 | |||
28 | struct squashfs_cache { | ||
29 | char *name; | ||
30 | int entries; | ||
31 | int next_blk; | ||
32 | int num_waiters; | ||
33 | int unused; | ||
34 | int block_size; | ||
35 | int pages; | ||
36 | spinlock_t lock; | ||
37 | wait_queue_head_t wait_queue; | ||
38 | struct squashfs_cache_entry *entry; | ||
39 | }; | ||
40 | |||
41 | struct squashfs_cache_entry { | ||
42 | u64 block; | ||
43 | int length; | ||
44 | int refcount; | ||
45 | u64 next_index; | ||
46 | int pending; | ||
47 | int error; | ||
48 | int num_waiters; | ||
49 | wait_queue_head_t wait_queue; | ||
50 | struct squashfs_cache *cache; | ||
51 | void **data; | ||
52 | }; | ||
53 | |||
54 | struct squashfs_sb_info { | ||
55 | int devblksize; | ||
56 | int devblksize_log2; | ||
57 | struct squashfs_cache *block_cache; | ||
58 | struct squashfs_cache *fragment_cache; | ||
59 | struct squashfs_cache *read_page; | ||
60 | int next_meta_index; | ||
61 | __le64 *id_table; | ||
62 | __le64 *fragment_index; | ||
63 | unsigned int *fragment_index_2; | ||
64 | struct mutex read_data_mutex; | ||
65 | struct mutex meta_index_mutex; | ||
66 | struct meta_index *meta_index; | ||
67 | z_stream stream; | ||
68 | __le64 *inode_lookup_table; | ||
69 | u64 inode_table; | ||
70 | u64 directory_table; | ||
71 | unsigned int block_size; | ||
72 | unsigned short block_log; | ||
73 | long long bytes_used; | ||
74 | unsigned int inodes; | ||
75 | }; | ||
76 | #endif | ||