11f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#ifndef SQUASHFS_FS_SB
21f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_FS_SB
31f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/*
41f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * Squashfs
51f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher *
6bc9fea01a42d4bc9a8e3349b22c92dfd96dc8abaplougher * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
7f6cd337f8de328e2b448b9f29c00d9132748f7feplougher * Phillip Lougher <phillip@lougher.demon.co.uk>
81f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher *
91f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * This program is free software; you can redistribute it and/or
101f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * modify it under the terms of the GNU General Public License
111f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * as published by the Free Software Foundation; either version 2,
121f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * or (at your option) any later version.
131f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher *
141f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * This program is distributed in the hope that it will be useful,
151f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * but WITHOUT ANY WARRANTY; without even the implied warranty of
161f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
171f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * GNU General Public License for more details.
181f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher *
191f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * You should have received a copy of the GNU General Public License
201f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * along with this program; if not, write to the Free Software
21a3e28ecaf227d2c03ec6724dd718e3c5a12b74efplougher * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
221f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher *
231f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * squashfs_fs_sb.h
241f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher */
251f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher
26a70c1cc4b995d559bcbdf2d3dda88c5bd1292c32plougher#include "squashfs_fs.h"
271f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher
28381c2c9226c527c2884c8bad943eed38e8dd9f06plougherstruct squashfs_cache_entry {
290ff97c20420ebf8daabb3303b92b3b275abe1866plougher	long long		block;
300ff97c20420ebf8daabb3303b92b3b275abe1866plougher	int			length;
310ff97c20420ebf8daabb3303b92b3b275abe1866plougher	int			locked;
320ff97c20420ebf8daabb3303b92b3b275abe1866plougher	long long		next_index;
330ff97c20420ebf8daabb3303b92b3b275abe1866plougher	char			pending;
340ff97c20420ebf8daabb3303b92b3b275abe1866plougher	char			error;
350ff97c20420ebf8daabb3303b92b3b275abe1866plougher	int			waiting;
36bc9fea01a42d4bc9a8e3349b22c92dfd96dc8abaplougher	wait_queue_head_t	wait_queue;
370ff97c20420ebf8daabb3303b92b3b275abe1866plougher	char			*data;
381f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher};
391f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher
40381c2c9226c527c2884c8bad943eed38e8dd9f06plougherstruct squashfs_cache {
410ff97c20420ebf8daabb3303b92b3b275abe1866plougher	char			*name;
420ff97c20420ebf8daabb3303b92b3b275abe1866plougher	int			entries;
430ff97c20420ebf8daabb3303b92b3b275abe1866plougher	int			block_size;
440ff97c20420ebf8daabb3303b92b3b275abe1866plougher	int			next_blk;
450ff97c20420ebf8daabb3303b92b3b275abe1866plougher	int			waiting;
460ff97c20420ebf8daabb3303b92b3b275abe1866plougher	int			unused;
470ff97c20420ebf8daabb3303b92b3b275abe1866plougher	int			use_vmalloc;
480ff97c20420ebf8daabb3303b92b3b275abe1866plougher	spinlock_t		lock;
490ff97c20420ebf8daabb3303b92b3b275abe1866plougher	wait_queue_head_t	wait_queue;
50381c2c9226c527c2884c8bad943eed38e8dd9f06plougher	struct squashfs_cache_entry entry[0];
51381c2c9226c527c2884c8bad943eed38e8dd9f06plougher};
52381c2c9226c527c2884c8bad943eed38e8dd9f06plougher
531f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_sb_info {
541f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher	int			devblksize;
551f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher	int			devblksize_log2;
561f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher	struct squashfs_cache	*block_cache;
57381c2c9226c527c2884c8bad943eed38e8dd9f06plougher	struct squashfs_cache	*fragment_cache;
58f9c72b137336d5c1d4bdf2792f2bc5142713676bplougher	int			next_meta_index;
59b4558d4ffb4c30c8b0ac12394996c7c77519b265plougher	__le64			*id_table;
60b4558d4ffb4c30c8b0ac12394996c7c77519b265plougher	__le64			*fragment_index;
6189014e7b564a1449f6c874329b1a8281836eb7f8plougher	unsigned int		*fragment_index_2;
621f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher	char			*read_page;
632e3c34dab37cab724a4c7163c1db6d07616fecd3plougher	struct mutex		read_data_mutex;
642e3c34dab37cab724a4c7163c1db6d07616fecd3plougher	struct mutex		read_page_mutex;
652e3c34dab37cab724a4c7163c1db6d07616fecd3plougher	struct mutex		meta_index_mutex;
66f9c72b137336d5c1d4bdf2792f2bc5142713676bplougher	struct meta_index	*meta_index;
674dd715b94c322cea9781d88218e2df2e4c20c1beplougher	z_stream		stream;
68b4558d4ffb4c30c8b0ac12394996c7c77519b265plougher	__le64			*inode_lookup_table;
691aef9e4f12365714fd95ac9a7a059ea4c7d6d846plougher	long long		inode_table;
701aef9e4f12365714fd95ac9a7a059ea4c7d6d846plougher	long long		directory_table;
71a79924528124a4d6368ffb11ffac3e76eb62b141plougher	unsigned int		block_size;
72a79924528124a4d6368ffb11ffac3e76eb62b141plougher	unsigned short		block_log;
73a79924528124a4d6368ffb11ffac3e76eb62b141plougher	long long		bytes_used;
74a79924528124a4d6368ffb11ffac3e76eb62b141plougher	unsigned int		inodes;
751f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher};
761f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#endif
77