[
  [
    "linux-2.6.23.orig/fs/Kconfig", 
    "linux-2.6.23/fs/Kconfig", 
    [
      "Index: linux-2.6.23/fs/Kconfig", 
      "===================================================================", 
      "--- linux-2.6.23.orig/fs/Kconfig", 
      "+++ linux-2.6.23/fs/Kconfig", 
      "@@ -1430,56 +1430,6 @@ config CRAMFS", 
      "", 
      "If unsure, say N.", 
      "", 
      "-config SQUASHFS", 
      "-\ttristate \"SquashFS 3.3 - Squashed file system support\"", 
      "-\tselect ZLIB_INFLATE", 
      "-\thelp", 
      "-\t  Saying Y here includes support for SquashFS 3.3 (a Compressed", 
      "-\t  Read-Only File System).  Squashfs is a highly compressed read-only", 
      "-\t  filesystem for Linux.  It uses zlib compression to compress both", 
      "-\t  files, inodes and directories.  Inodes in the system are very small", 
      "-\t  and all blocks are packed to minimise data overhead. Block sizes", 
      "-\t  greater than 4K are supported up to a maximum of 1 Mbytes (default", 
      "-\t  block size 128K).  SquashFS 3.3 supports 64 bit filesystems and files", 
      "-\t  (larger than 4GB), full uid/gid information, hard links and timestamps.", 
      "-", 
      "-\t  Squashfs is intended for general read-only filesystem use, for", 
      "-\t  archival use (i.e. in cases where a .tar.gz file may be used), and in", 
      "-\t  embedded systems where low overhead is needed.  Further information", 
      "-\t  and filesystem tools are available from http://squashfs.sourceforge.net.", 
      "-", 
      "-\t  If you want to compile this as a module ( = code which can be", 
      "-\t  inserted in and removed from the running kernel whenever you want),", 
      "-\t  say M here and read <file:Documentation/modules.txt>.  The module", 
      "-\t  will be called squashfs.  Note that the root file system (the one", 
      "-\t  containing the directory /) cannot be compiled as a module.", 
      "-", 
      "-\t  If unsure, say N.", 
      "-", 
      "-config SQUASHFS_EMBEDDED", 
      "-", 
      "-\tbool \"Additional option for memory-constrained systems\"", 
      "-\tdepends on SQUASHFS", 
      "-\tdefault n", 
      "-\thelp", 
      "-\t  Saying Y here allows you to specify cache size.", 
      "-", 
      "-\t  If unsure, say N.", 
      "-", 
      "-config SQUASHFS_FRAGMENT_CACHE_SIZE", 
      "-\tint \"Number of fragments cached\" if SQUASHFS_EMBEDDED", 
      "-\tdepends on SQUASHFS", 
      "-\tdefault \"3\"", 
      "-\thelp", 
      "-\t  By default SquashFS caches the last 3 fragments read from", 
      "-\t  the filesystem.  Increasing this amount may mean SquashFS", 
      "-\t  has to re-read fragments less often from disk, at the expense", 
      "-\t  of extra system memory.  Decreasing this amount will mean", 
      "-\t  SquashFS uses less memory at the expense of extra reads from disk.", 
      "-", 
      "-\t  Note there must be at least one cached fragment.  Anything", 
      "-\t  much more than three will probably not make much difference.", 
      "-", 
      "config VXFS_FS", 
      "tristate \"FreeVxFS file system support (VERITAS VxFS(TM) compatible)\"", 
      "depends on BLOCK"
    ]
  ], 
  [
    "linux-2.6.23.orig/fs/squashfs/Makefile", 
    "dev/null", 
    [
      "Index: linux-2.6.23/fs/squashfs/Makefile", 
      "===================================================================", 
      "--- linux-2.6.23.orig/fs/squashfs/Makefile", 
      "+++ dev/null", 
      "@@ -1,7 +0,0 @@", 
      "-#", 
      "-# Makefile for the linux squashfs routines.", 
      "-#", 
      "-", 
      "-obj-$(CONFIG_SQUASHFS) += squashfs.o", 
      "-squashfs-y += inode.o", 
      "-squashfs-y += squashfs2_0.o"
    ]
  ], 
  [
    "linux-2.6.23.orig/fs/squashfs/inode.c", 
    "dev/null", 
    [
      "Index: linux-2.6.23/fs/squashfs/inode.c", 
      "===================================================================", 
      "--- linux-2.6.23.orig/fs/squashfs/inode.c", 
      "+++ dev/null", 
      "@@ -1,2192 +0,0 @@", 
      "-/*", 
      "- * Squashfs - a compressed read only filesystem for Linux", 
      "- *", 
      "- * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007", 
      "- * Phillip Lougher <phillip@lougher.demon.co.uk>", 
      "- *", 
      "- * This program is free software; you can redistribute it and/or", 
      "- * modify it under the terms of the GNU General Public License", 
      "- * as published by the Free Software Foundation; either version 2,", 
      "- * or (at your option) any later version.", 
      "- *", 
      "- * This program is distributed in the hope that it will be useful,", 
      "- * but WITHOUT ANY WARRANTY; without even the implied warranty of", 
      "- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the", 
      "- * GNU General Public License for more details.", 
      "- *", 
      "- * You should have received a copy of the GNU General Public License", 
      "- * along with this program; if not, write to the Free Software", 
      "- * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.", 
      "- *", 
      "- * inode.c", 
      "- */", 
      "-", 
      "-#include <linux/squashfs_fs.h>", 
      "-#include <linux/module.h>", 
      "-#include <linux/zlib.h>", 
      "-#include <linux/fs.h>", 
      "-#include <linux/squashfs_fs_sb.h>", 
      "-#include <linux/squashfs_fs_i.h>", 
      "-#include <linux/buffer_head.h>", 
      "-#include <linux/vfs.h>", 
      "-#include <linux/vmalloc.h>", 
      "-#include <linux/smp_lock.h>", 
      "-#include <linux/exportfs.h>", 
      "-", 
      "-#include \"squashfs.h\"", 
      "-", 
      "-int squashfs_cached_blks;", 
      "-", 
      "-static void vfs_read_inode(struct inode *i);", 
      "-static struct dentry *squashfs_get_parent(struct dentry *child);", 
      "-static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode);", 
      "-static int squashfs_statfs(struct dentry *, struct kstatfs *);", 
      "-static int squashfs_symlink_readpage(struct file *file, struct page *page);", 
      "-static long long read_blocklist(struct inode *inode, int index,", 
      "-\t\t\t\tint readahead_blks, char *block_list,", 
      "-\t\t\t\tunsigned short **block_p, unsigned int *bsize);", 
      "-static int squashfs_readpage(struct file *file, struct page *page);", 
      "-static int squashfs_readdir(struct file *, void *, filldir_t);", 
      "-static struct dentry *squashfs_lookup(struct inode *, struct dentry *,", 
      "-\t\t\t\tstruct nameidata *);", 
      "-static int squashfs_remount(struct super_block *s, int *flags, char *data);", 
      "-static void squashfs_put_super(struct super_block *);", 
      "-static int squashfs_get_sb(struct file_system_type *,int, const char *, void *,", 
      "-\t\t\t\tstruct vfsmount *);", 
      "-static struct inode *squashfs_alloc_inode(struct super_block *sb);", 
      "-static void squashfs_destroy_inode(struct inode *inode);", 
      "-static int init_inodecache(void);", 
      "-static void destroy_inodecache(void);", 
      "-", 
      "-static struct file_system_type squashfs_fs_type = {", 
      "-\t.owner = THIS_MODULE,", 
      "-\t.name = \"squashfs\",", 
      "-\t.get_sb = squashfs_get_sb,", 
      "-\t.kill_sb = kill_block_super,", 
      "-\t.fs_flags = FS_REQUIRES_DEV", 
      "-};", 
      "-", 
      "-static const unsigned char squashfs_filetype_table[] = {", 
      "-\tDT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK", 
      "-};", 
      "-", 
      "-static struct super_operations squashfs_super_ops = {", 
      "-\t.alloc_inode = squashfs_alloc_inode,", 
      "-\t.destroy_inode = squashfs_destroy_inode,", 
      "-\t.statfs = squashfs_statfs,", 
      "-\t.put_super = squashfs_put_super,", 
      "-\t.remount_fs = squashfs_remount", 
      "-};", 
      "-", 
      "-static struct super_operations squashfs_export_super_ops = {", 
      "-\t.alloc_inode = squashfs_alloc_inode,", 
      "-\t.destroy_inode = squashfs_destroy_inode,", 
      "-\t.statfs = squashfs_statfs,", 
      "-\t.put_super = squashfs_put_super,", 
      "-\t.read_inode = vfs_read_inode", 
      "-};", 
      "-", 
      "-static struct export_operations squashfs_export_ops = {", 
      "-\t.get_parent = squashfs_get_parent", 
      "-};", 
      "-", 
      "-SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = {", 
      "-\t.readpage = squashfs_symlink_readpage", 
      "-};", 
      "-", 
      "-SQSH_EXTERN const struct address_space_operations squashfs_aops = {", 
      "-\t.readpage = squashfs_readpage", 
      "-};", 
      "-", 
      "-static const struct file_operations squashfs_dir_ops = {", 
      "-\t.read = generic_read_dir,", 
      "-\t.readdir = squashfs_readdir", 
      "-};", 
      "-", 
      "-SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {", 
      "-\t.lookup = squashfs_lookup", 
      "-};", 
      "-", 
      "-", 
      "-static struct buffer_head *get_block_length(struct super_block *s,", 
      "-\t\t\t\tint *cur_index, int *offset, int *c_byte)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tunsigned short temp;", 
      "-\tstruct buffer_head *bh;", 
      "-", 
      "-\tif (!(bh = sb_bread(s, *cur_index)))", 
      "-\t\tgoto out;", 
      "-", 
      "-\tif (msblk->devblksize - *offset == 1) {", 
      "-\t\tif (msblk->swap)", 
      "-\t\t\t((unsigned char *) &temp)[1] = *((unsigned char *)", 
      "-\t\t\t\t(bh->b_data + *offset));", 
      "-\t\telse", 
      "-\t\t\t((unsigned char *) &temp)[0] = *((unsigned char *)", 
      "-\t\t\t\t(bh->b_data + *offset));", 
      "-\t\tbrelse(bh);", 
      "-\t\tif (!(bh = sb_bread(s, ++(*cur_index))))", 
      "-\t\t\tgoto out;", 
      "-\t\tif (msblk->swap)", 
      "-\t\t\t((unsigned char *) &temp)[0] = *((unsigned char *)", 
      "-\t\t\t\tbh->b_data);", 
      "-\t\telse", 
      "-\t\t\t((unsigned char *) &temp)[1] = *((unsigned char *)", 
      "-\t\t\t\tbh->b_data);", 
      "-\t\t*c_byte = temp;", 
      "-\t\t*offset = 1;", 
      "-\t} else {", 
      "-\t\tif (msblk->swap) {", 
      "-\t\t\t((unsigned char *) &temp)[1] = *((unsigned char *)", 
      "-\t\t\t\t(bh->b_data + *offset));", 
      "-\t\t\t((unsigned char *) &temp)[0] = *((unsigned char *)", 
      "-\t\t\t\t(bh->b_data + *offset + 1));", 
      "-\t\t} else {", 
      "-\t\t\t((unsigned char *) &temp)[0] = *((unsigned char *)", 
      "-\t\t\t\t(bh->b_data + *offset));", 
      "-\t\t\t((unsigned char *) &temp)[1] = *((unsigned char *)", 
      "-\t\t\t\t(bh->b_data + *offset + 1));", 
      "-\t\t}", 
      "-\t\t*c_byte = temp;", 
      "-\t\t*offset += 2;", 
      "-\t}", 
      "-", 
      "-\tif (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {", 
      "-\t\tif (*offset == msblk->devblksize) {", 
      "-\t\t\tbrelse(bh);", 
      "-\t\t\tif (!(bh = sb_bread(s, ++(*cur_index))))", 
      "-\t\t\t\tgoto out;", 
      "-\t\t\t*offset = 0;", 
      "-\t\t}", 
      "-\t\tif (*((unsigned char *) (bh->b_data + *offset)) !=", 
      "-\t\t\t\t\t\tSQUASHFS_MARKER_BYTE) {", 
      "-\t\t\tERROR(\"Metadata block marker corrupt @ %x\\n\",", 
      "-\t\t\t\t\t\t*cur_index);", 
      "-\t\t\tbrelse(bh);", 
      "-\t\t\tgoto out;", 
      "-\t\t}", 
      "-\t\t(*offset)++;", 
      "-\t}", 
      "-\treturn bh;", 
      "-", 
      "-out:", 
      "-\treturn NULL;", 
      "-}", 
      "-", 
      "-", 
      "-SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,", 
      "-\t\t\tlong long index, unsigned int length,", 
      "-\t\t\tlong long *next_index, int srclength)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tstruct buffer_head **bh;", 
      "-\tunsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);", 
      "-\tunsigned int cur_index = index >> msblk->devblksize_log2;", 
      "-\tint bytes, avail_bytes, b = 0, k = 0;", 
      "-\tunsigned int compressed;", 
      "-\tunsigned int c_byte = length;", 
      "-", 
      "-\tbh = kmalloc(((sblk->block_size >> msblk->devblksize_log2) + 1) *", 
      "-\t\t\t\t\t\t\t\tsizeof(struct buffer_head *), GFP_KERNEL);", 
      "-\tif (bh == NULL)", 
      "-\t\tgoto read_failure;", 
      "-", 
      "-\tif (c_byte) {", 
      "-\t\tbytes = msblk->devblksize - offset;", 
      "-\t\tcompressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);", 
      "-\t\tc_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);", 
      "-", 
      "-\t\tTRACE(\"Block @ 0x%llx, %scompressed size %d, src size %d\\n\", index,", 
      "-\t\t\t\t\tcompressed ? \"\" : \"un\", (unsigned int) c_byte, srclength);", 
      "-", 
      "-\t\tif (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used)", 
      "-\t\t\tgoto read_failure;", 
      "-", 
      "-\t\tbh[0] = sb_getblk(s, cur_index);", 
      "-\t\tif (bh[0] == NULL)", 
      "-\t\t\tgoto block_release;", 
      "-", 
      "-\t\tfor (b = 1; bytes < c_byte; b++) {", 
      "-\t\t\tbh[b] = sb_getblk(s, ++cur_index);", 
      "-\t\t\tif (bh[b] == NULL)", 
      "-\t\t\t\tgoto block_release;", 
      "-\t\t\tbytes += msblk->devblksize;", 
      "-\t\t}", 
      "-\t\tll_rw_block(READ, b, bh);", 
      "-\t} else {", 
      "-\t\tif (index < 0 || (index + 2) > sblk->bytes_used)", 
      "-\t\t\tgoto read_failure;", 
      "-", 
      "-\t\tbh[0] = get_block_length(s, &cur_index, &offset, &c_byte);", 
      "-\t\tif (bh[0] == NULL)", 
      "-\t\t\tgoto read_failure;", 
      "-", 
      "-\t\tbytes = msblk->devblksize - offset;", 
      "-\t\tcompressed = SQUASHFS_COMPRESSED(c_byte);", 
      "-\t\tc_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);", 
      "-", 
      "-\t\tTRACE(\"Block @ 0x%llx, %scompressed size %d\\n\", index, compressed", 
      "-\t\t\t\t\t? \"\" : \"un\", (unsigned int) c_byte);", 
      "-", 
      "-\t\tif (c_byte > srclength || (index + c_byte) > sblk->bytes_used)", 
      "-\t\t\tgoto read_failure;", 
      "-", 
      "-\t\tfor (b = 1; bytes < c_byte; b++) {", 
      "-\t\t\tbh[b] = sb_getblk(s, ++cur_index);", 
      "-\t\t\tif (bh[b] == NULL)", 
      "-\t\t\t\tgoto block_release;", 
      "-\t\t\tbytes += msblk->devblksize;", 
      "-\t\t}", 
      "-\t\tll_rw_block(READ, b - 1, bh + 1);", 
      "-\t}", 
      "-", 
      "-\tif (compressed) {", 
      "-\t\tint zlib_err = 0;", 
      "-", 
      "-\t\t/*", 
      "-\t \t* uncompress block", 
      "-\t \t*/", 
      "-", 
      "-\t\tmutex_lock(&msblk->read_data_mutex);", 
      "-", 
      "-\t\tmsblk->stream.next_out = buffer;", 
      "-\t\tmsblk->stream.avail_out = srclength;", 
      "-", 
      "-\t\tfor (bytes = 0; k < b; k++) {", 
      "-\t\t\tavail_bytes = min(c_byte - bytes, msblk->devblksize - offset);", 
      "-", 
      "-\t\t\twait_on_buffer(bh[k]);", 
      "-\t\t\tif (!buffer_uptodate(bh[k]))", 
      "-\t\t\t\tgoto release_mutex;", 
      "-", 
      "-\t\t\tmsblk->stream.next_in = bh[k]->b_data + offset;", 
      "-\t\t\tmsblk->stream.avail_in = avail_bytes;", 
      "-", 
      "-\t\t\tif (k == 0) {", 
      "-\t\t\t\tzlib_err = zlib_inflateInit(&msblk->stream);", 
      "-\t\t\t\tif (zlib_err != Z_OK) {", 
      "-\t\t\t\t\tERROR(\"zlib_inflateInit returned unexpected result 0x%x,\"", 
      "-\t\t\t\t\t\t\" srclength %d\\n\", zlib_err, srclength);", 
      "-\t\t\t\t\tgoto release_mutex;", 
      "-\t\t\t\t}", 
      "-", 
      "-\t\t\t\tif (avail_bytes == 0) {", 
      "-\t\t\t\t\toffset = 0;", 
      "-\t\t\t\t\tbrelse(bh[k]);", 
      "-\t\t\t\t\tcontinue;", 
      "-\t\t\t\t}", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tzlib_err = zlib_inflate(&msblk->stream, Z_NO_FLUSH);", 
      "-\t\t\tif (zlib_err != Z_OK && zlib_err != Z_STREAM_END) {", 
      "-\t\t\t\tERROR(\"zlib_inflate returned unexpected result 0x%x,\"", 
      "-\t\t\t\t\t\" srclength %d, avail_in %d, avail_out %d\\n\", zlib_err,", 
      "-\t\t\t\t\tsrclength, msblk->stream.avail_in, msblk->stream.avail_out);", 
      "-\t\t\t\tgoto release_mutex;", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tbytes += avail_bytes;", 
      "-\t\t\toffset = 0;", 
      "-\t\t\tbrelse(bh[k]);", 
      "-\t\t}", 
      "-", 
      "-\t\tif (zlib_err != Z_STREAM_END)", 
      "-\t\t\tgoto release_mutex;", 
      "-", 
      "-\t\tzlib_err = zlib_inflateEnd(&msblk->stream);", 
      "-\t\tif (zlib_err != Z_OK) {", 
      "-\t\t\tERROR(\"zlib_inflateEnd returned unexpected result 0x%x,\"", 
      "-\t\t\t\t\" srclength %d\\n\", zlib_err, srclength);", 
      "-\t\t\tgoto release_mutex;", 
      "-\t\t}", 
      "-\t\tbytes = msblk->stream.total_out;", 
      "-\t\tmutex_unlock(&msblk->read_data_mutex);", 
      "-\t} else {", 
      "-\t\tint i;", 
      "-", 
      "-\t\tfor(i = 0; i < b; i++) {", 
      "-\t\t\twait_on_buffer(bh[i]);", 
      "-\t\t\tif (!buffer_uptodate(bh[i]))", 
      "-\t\t\t\tgoto block_release;", 
      "-\t\t}", 
      "-", 
      "-\t\tfor (bytes = 0; k < b; k++) {", 
      "-\t\t\tavail_bytes = min(c_byte - bytes, msblk->devblksize - offset);", 
      "-", 
      "-\t\t\tmemcpy(buffer + bytes, bh[k]->b_data + offset, avail_bytes);", 
      "-\t\t\tbytes += avail_bytes;", 
      "-\t\t\toffset = 0;", 
      "-\t\t\tbrelse(bh[k]);", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-\tif (next_index)", 
      "-\t\t*next_index = index + c_byte + (length ? 0 :", 
      "-\t\t\t\t(SQUASHFS_CHECK_DATA(msblk->sblk.flags) ? 3 : 2));", 
      "-", 
      "-\tkfree(bh);", 
      "-\treturn bytes;", 
      "-", 
      "-release_mutex:", 
      "-\tmutex_unlock(&msblk->read_data_mutex);", 
      "-", 
      "-block_release:", 
      "-\tfor (; k < b; k++)", 
      "-\t\tbrelse(bh[k]);", 
      "-", 
      "-read_failure:", 
      "-\tERROR(\"sb_bread failed reading block 0x%x\\n\", cur_index);", 
      "-\tkfree(bh);", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, void *buffer,", 
      "-\t\t\t\tlong long block, unsigned int offset,", 
      "-\t\t\t\tint length, long long *next_block,", 
      "-\t\t\t\tunsigned int *next_offset)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tint n, i, bytes, return_length = length;", 
      "-\tlong long next_index;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_get_cached_block [%llx:%x]\\n\", block, offset);", 
      "-", 
      "-\twhile (1) {", 
      "-\t\tfor (i = 0; i < squashfs_cached_blks; i++)", 
      "-\t\t\tif (msblk->block_cache[i].block == block)", 
      "-\t\t\t\tbreak;", 
      "-", 
      "-\t\tmutex_lock(&msblk->block_cache_mutex);", 
      "-", 
      "-\t\tif (i == squashfs_cached_blks) {", 
      "-\t\t\t/* read inode header block */", 
      "-\t\t\tif (msblk->unused_cache_blks == 0) {", 
      "-\t\t\t\tmutex_unlock(&msblk->block_cache_mutex);", 
      "-\t\t\t\twait_event(msblk->waitq, msblk->unused_cache_blks);", 
      "-\t\t\t\tcontinue;", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\ti = msblk->next_cache;", 
      "-\t\t\tfor (n = 0; n < squashfs_cached_blks; n++) {", 
      "-\t\t\t\tif (msblk->block_cache[i].block != SQUASHFS_USED_BLK)", 
      "-\t\t\t\t\tbreak;", 
      "-\t\t\t\ti = (i + 1) % squashfs_cached_blks;", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tmsblk->next_cache = (i + 1) % squashfs_cached_blks;", 
      "-", 
      "-\t\t\tif (msblk->block_cache[i].block == SQUASHFS_INVALID_BLK) {", 
      "-\t\t\t\tmsblk->block_cache[i].data = vmalloc(SQUASHFS_METADATA_SIZE);", 
      "-\t\t\t\tif (msblk->block_cache[i].data == NULL) {", 
      "-\t\t\t\t\tERROR(\"Failed to allocate cache block\\n\");", 
      "-\t\t\t\t\tmutex_unlock(&msblk->block_cache_mutex);", 
      "-\t\t\t\t\tgoto out;", 
      "-\t\t\t\t}", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tmsblk->block_cache[i].block = SQUASHFS_USED_BLK;", 
      "-\t\t\tmsblk->unused_cache_blks --;", 
      "-\t\t\tmutex_unlock(&msblk->block_cache_mutex);", 
      "-", 
      "-\t\t\tmsblk->block_cache[i].length = squashfs_read_data(s,", 
      "-\t\t\t\tmsblk->block_cache[i].data, block, 0, &next_index,", 
      "-\t\t\t\tSQUASHFS_METADATA_SIZE);", 
      "-", 
      "-\t\t\tif (msblk->block_cache[i].length == 0) {", 
      "-\t\t\t\tERROR(\"Unable to read cache block [%llx:%x]\\n\", block, offset);", 
      "-\t\t\t\tmutex_lock(&msblk->block_cache_mutex);", 
      "-\t\t\t\tmsblk->block_cache[i].block = SQUASHFS_INVALID_BLK;", 
      "-\t\t\t\tmsblk->unused_cache_blks ++;", 
      "-\t\t\t\tsmp_mb();", 
      "-\t\t\t\tvfree(msblk->block_cache[i].data);", 
      "-\t\t\t\twake_up(&msblk->waitq);", 
      "-\t\t\t\tmutex_unlock(&msblk->block_cache_mutex);", 
      "-\t\t\t\tgoto out;", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tmutex_lock(&msblk->block_cache_mutex);", 
      "-\t\t\tmsblk->block_cache[i].block = block;", 
      "-\t\t\tmsblk->block_cache[i].next_index = next_index;", 
      "-\t\t\tmsblk->unused_cache_blks ++;", 
      "-\t\t\tsmp_mb();", 
      "-\t\t\twake_up(&msblk->waitq);", 
      "-\t\t\tTRACE(\"Read cache block [%llx:%x]\\n\", block, offset);", 
      "-\t\t}", 
      "-", 
      "-\t\tif (msblk->block_cache[i].block != block) {", 
      "-\t\t\tmutex_unlock(&msblk->block_cache_mutex);", 
      "-\t\t\tcontinue;", 
      "-\t\t}", 
      "-", 
      "-\t\tbytes = msblk->block_cache[i].length - offset;", 
      "-", 
      "-\t\tif (bytes < 1) {", 
      "-\t\t\tmutex_unlock(&msblk->block_cache_mutex);", 
      "-\t\t\tgoto out;", 
      "-\t\t} else if (bytes >= length) {", 
      "-\t\t\tif (buffer)", 
      "-\t\t\t\tmemcpy(buffer, msblk->block_cache[i].data + offset, length);", 
      "-\t\t\tif (msblk->block_cache[i].length - offset == length) {", 
      "-\t\t\t\t*next_block = msblk->block_cache[i].next_index;", 
      "-\t\t\t\t*next_offset = 0;", 
      "-\t\t\t} else {", 
      "-\t\t\t\t*next_block = block;", 
      "-\t\t\t\t*next_offset = offset + length;", 
      "-\t\t\t}", 
      "-\t\t\tmutex_unlock(&msblk->block_cache_mutex);", 
      "-\t\t\tgoto finish;", 
      "-\t\t} else {", 
      "-\t\t\tif (buffer) {", 
      "-\t\t\t\tmemcpy(buffer, msblk->block_cache[i].data + offset, bytes);", 
      "-\t\t\t\tbuffer = (char *) buffer + bytes;", 
      "-\t\t\t}", 
      "-\t\t\tblock = msblk->block_cache[i].next_index;", 
      "-\t\t\tmutex_unlock(&msblk->block_cache_mutex);", 
      "-\t\t\tlength -= bytes;", 
      "-\t\t\toffset = 0;", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-finish:", 
      "-\treturn return_length;", 
      "-out:", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static int get_fragment_location(struct super_block *s, unsigned int fragment,", 
      "-\t\t\t\tlong long *fragment_start_block,", 
      "-\t\t\t\tunsigned int *fragment_size)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tlong long start_block =", 
      "-\t\tmsblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];", 
      "-\tint offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);", 
      "-\tstruct squashfs_fragment_entry fragment_entry;", 
      "-", 
      "-\tif (msblk->swap) {", 
      "-\t\tstruct squashfs_fragment_entry sfragment_entry;", 
      "-", 
      "-\t\tif (!squashfs_get_cached_block(s, &sfragment_entry, start_block, offset,", 
      "-\t\t\t\t\t sizeof(sfragment_entry), &start_block, &offset))", 
      "-\t\t\tgoto out;", 
      "-\t\tSQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);", 
      "-\t} else", 
      "-\t\tif (!squashfs_get_cached_block(s, &fragment_entry, start_block, offset,", 
      "-\t\t\t\t\t sizeof(fragment_entry), &start_block, &offset))", 
      "-\t\t\tgoto out;", 
      "-", 
      "-\t*fragment_start_block = fragment_entry.start_block;", 
      "-\t*fragment_size = fragment_entry.size;", 
      "-", 
      "-\treturn 1;", 
      "-", 
      "-out:", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk,", 
      "-\t\t\t\tstruct squashfs_fragment_cache *fragment)", 
      "-{", 
      "-\tmutex_lock(&msblk->fragment_mutex);", 
      "-\tfragment->locked --;", 
      "-\tif (fragment->locked == 0) {", 
      "-\t\tmsblk->unused_frag_blks ++;", 
      "-\t\tsmp_mb();", 
      "-\t\twake_up(&msblk->fragment_wait_queue);", 
      "-\t}", 
      "-\tmutex_unlock(&msblk->fragment_mutex);", 
      "-}", 
      "-", 
      "-", 
      "-SQSH_EXTERN", 
      "-struct squashfs_fragment_cache *get_cached_fragment(struct super_block *s,", 
      "-\t\t\t\tlong long start_block, int length)", 
      "-{", 
      "-\tint i, n;", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-", 
      "-\twhile (1) {", 
      "-\t\tmutex_lock(&msblk->fragment_mutex);", 
      "-", 
      "-\t\tfor (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&", 
      "-\t\t\t\tmsblk->fragment[i].block != start_block; i++);", 
      "-", 
      "-\t\tif (i == SQUASHFS_CACHED_FRAGMENTS) {", 
      "-\t\t\tif (msblk->unused_frag_blks == 0) {", 
      "-\t\t\t\tmutex_unlock(&msblk->fragment_mutex);", 
      "-\t\t\t\twait_event(msblk->fragment_wait_queue, msblk->unused_frag_blks);", 
      "-\t\t\t\tcontinue;", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\ti = msblk->next_fragment;", 
      "-\t\t\tfor (n = 0; n < SQUASHFS_CACHED_FRAGMENTS; n++) {", 
      "-\t\t\t\tif (msblk->fragment[i].locked == 0)", 
      "-\t\t\t\t\tbreak;", 
      "-\t\t\t\ti = (i + 1) % SQUASHFS_CACHED_FRAGMENTS;", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tmsblk->next_fragment = (msblk->next_fragment + 1) %", 
      "-\t\t\t\tSQUASHFS_CACHED_FRAGMENTS;", 
      "-", 
      "-\t\t\tif (msblk->fragment[i].data == NULL) {", 
      "-\t\t\t\tmsblk->fragment[i].data = vmalloc(sblk->block_size);", 
      "-\t\t\t\tif (msblk->fragment[i].data == NULL) {", 
      "-\t\t\t\t\tERROR(\"Failed to allocate fragment cache block\\n\");", 
      "-\t\t\t\t\tmutex_unlock(&msblk->fragment_mutex);", 
      "-\t\t\t\t\tgoto out;", 
      "-\t\t\t\t}", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tmsblk->unused_frag_blks --;", 
      "-\t\t\tmsblk->fragment[i].block = SQUASHFS_INVALID_BLK;", 
      "-\t\t\tmsblk->fragment[i].locked = 1;", 
      "-\t\t\tmutex_unlock(&msblk->fragment_mutex);", 
      "-", 
      "-\t\t\tmsblk->fragment[i].length = squashfs_read_data(s,", 
      "-\t\t\t\tmsblk->fragment[i].data, start_block, length, NULL,", 
      "-\t\t\t\tsblk->block_size);", 
      "-", 
      "-\t\t\tif (msblk->fragment[i].length == 0) {", 
      "-\t\t\t\tERROR(\"Unable to read fragment cache block [%llx]\\n\", start_block);", 
      "-\t\t\t\tmsblk->fragment[i].locked = 0;", 
      "-\t\t\t\tmsblk->unused_frag_blks ++;", 
      "-\t\t\t\tsmp_mb();", 
      "-\t\t\t\twake_up(&msblk->fragment_wait_queue);", 
      "-\t\t\t\tgoto out;", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tmutex_lock(&msblk->fragment_mutex);", 
      "-\t\t\tmsblk->fragment[i].block = start_block;", 
      "-\t\t\tTRACE(\"New fragment %d, start block %lld, locked %d\\n\",", 
      "-\t\t\t\ti, msblk->fragment[i].block, msblk->fragment[i].locked);", 
      "-\t\t\tmutex_unlock(&msblk->fragment_mutex);", 
      "-\t\t\tbreak;", 
      "-\t\t}", 
      "-", 
      "-\t\tif (msblk->fragment[i].locked == 0)", 
      "-\t\t\tmsblk->unused_frag_blks --;", 
      "-\t\tmsblk->fragment[i].locked++;", 
      "-\t\tmutex_unlock(&msblk->fragment_mutex);", 
      "-\t\tTRACE(\"Got fragment %d, start block %lld, locked %d\\n\", i,", 
      "-\t\t\tmsblk->fragment[i].block, msblk->fragment[i].locked);", 
      "-\t\tbreak;", 
      "-\t}", 
      "-", 
      "-\treturn &msblk->fragment[i];", 
      "-", 
      "-out:", 
      "-\treturn NULL;", 
      "-}", 
      "-", 
      "-", 
      "-static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i,", 
      "-\t\t\t\tstruct squashfs_base_inode_header *inodeb)", 
      "-{", 
      "-\ti->i_ino = inodeb->inode_number;", 
      "-\ti->i_mtime.tv_sec = inodeb->mtime;", 
      "-\ti->i_atime.tv_sec = inodeb->mtime;", 
      "-\ti->i_ctime.tv_sec = inodeb->mtime;", 
      "-\ti->i_uid = msblk->uid[inodeb->uid];", 
      "-\ti->i_mode = inodeb->mode;", 
      "-\ti->i_size = 0;", 
      "-", 
      "-\tif (inodeb->guid == SQUASHFS_GUIDS)", 
      "-\t\ti->i_gid = i->i_uid;", 
      "-\telse", 
      "-\t\ti->i_gid = msblk->guid[inodeb->guid];", 
      "-}", 
      "-", 
      "-", 
      "-static squashfs_inode_t squashfs_inode_lookup(struct super_block *s, int ino)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tlong long start = msblk->inode_lookup_table[SQUASHFS_LOOKUP_BLOCK(ino - 1)];", 
      "-\tint offset = SQUASHFS_LOOKUP_BLOCK_OFFSET(ino - 1);", 
      "-\tsquashfs_inode_t inode;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_inode_lookup, inode_number = %d\\n\", ino);", 
      "-", 
      "-\tif (msblk->swap) {", 
      "-\t\tsquashfs_inode_t sinode;", 
      "-", 
      "-\t\tif (!squashfs_get_cached_block(s, &sinode, start, offset,", 
      "-\t\t\t\t\tsizeof(sinode), &start, &offset))", 
      "-\t\t\tgoto out;", 
      "-\t\tSQUASHFS_SWAP_INODE_T((&inode), &sinode);", 
      "-\t} else if (!squashfs_get_cached_block(s, &inode, start, offset,", 
      "-\t\t\t\t\tsizeof(inode), &start, &offset))", 
      "-\t\t\tgoto out;", 
      "-", 
      "-\tTRACE(\"squashfs_inode_lookup, inode = 0x%llx\\n\", inode);", 
      "-", 
      "-\treturn inode;", 
      "-", 
      "-out:", 
      "-\treturn SQUASHFS_INVALID_BLK;", 
      "-}", 
      "-", 
      "-", 
      "-static void vfs_read_inode(struct inode *i)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = i->i_sb->s_fs_info;", 
      "-\tsquashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino);", 
      "-", 
      "-\tTRACE(\"Entered vfs_read_inode\\n\");", 
      "-", 
      "-\tif(inode != SQUASHFS_INVALID_BLK)", 
      "-\t\t(msblk->read_inode)(i, inode);", 
      "-}", 
      "-", 
      "-", 
      "-static struct dentry *squashfs_get_parent(struct dentry *child)", 
      "-{", 
      "-\tstruct inode *i = child->d_inode;", 
      "-\tstruct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode);", 
      "-\tstruct dentry *rv;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_get_parent\\n\");", 
      "-", 
      "-\tif(parent == NULL) {", 
      "-\t\trv = ERR_PTR(-EACCES);", 
      "-\t\tgoto out;", 
      "-\t}", 
      "-", 
      "-\trv = d_alloc_anon(parent);", 
      "-\tif(rv == NULL)", 
      "-\t\trv = ERR_PTR(-ENOMEM);", 
      "-", 
      "-out:", 
      "-\treturn rv;", 
      "-}", 
      "-", 
      "-", 
      "-SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s,", 
      "-\t\t\t\tsquashfs_inode_t inode, unsigned int inode_number)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct inode *i = iget_locked(s, inode_number);", 
      "-", 
      "-\tTRACE(\"Entered squashfs_iget\\n\");", 
      "-", 
      "-\tif(i && (i->i_state & I_NEW)) {", 
      "-\t\t(msblk->read_inode)(i, inode);", 
      "-\t\tunlock_new_inode(i);", 
      "-\t}", 
      "-", 
      "-\treturn i;", 
      "-}", 
      "-", 
      "-", 
      "-static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode)", 
      "-{", 
      "-\tstruct super_block *s = i->i_sb;", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tlong long block = SQUASHFS_INODE_BLK(inode) + sblk->inode_table_start;", 
      "-\tunsigned int offset = SQUASHFS_INODE_OFFSET(inode);", 
      "-\tlong long next_block;", 
      "-\tunsigned int next_offset;", 
      "-\tunion squashfs_inode_header id, sid;", 
      "-\tstruct squashfs_base_inode_header *inodeb = &id.base, *sinodeb = &sid.base;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_read_inode\\n\");", 
      "-", 
      "-\tif (msblk->swap) {", 
      "-\t\tif (!squashfs_get_cached_block(s, sinodeb, block, offset,", 
      "-\t\t\t\t\tsizeof(*sinodeb), &next_block, &next_offset))", 
      "-\t\t\tgoto failed_read;", 
      "-\t\tSQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb, sizeof(*sinodeb));", 
      "-\t} else", 
      "-\t\tif (!squashfs_get_cached_block(s, inodeb, block, offset,", 
      "-\t\t\t\t\tsizeof(*inodeb), &next_block, &next_offset))", 
      "-\t\t\tgoto failed_read;", 
      "-", 
      "-\tsquashfs_new_inode(msblk, i, inodeb);", 
      "-", 
      "-\tswitch(inodeb->inode_type) {", 
      "-\t\tcase SQUASHFS_FILE_TYPE: {", 
      "-\t\t\tunsigned int frag_size;", 
      "-\t\t\tlong long frag_blk;", 
      "-\t\t\tstruct squashfs_reg_inode_header *inodep = &id.reg;", 
      "-\t\t\tstruct squashfs_reg_inode_header *sinodep = &sid.reg;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, sinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, inodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tfrag_blk = SQUASHFS_INVALID_BLK;", 
      "-", 
      "-\t\t\tif (inodep->fragment != SQUASHFS_INVALID_FRAG)", 
      "-\t\t\t\t\tif(!get_fragment_location(s, inodep->fragment, &frag_blk,", 
      "-\t\t\t\t\t\t\t\t\t\t\t\t&frag_size))", 
      "-\t\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_nlink = 1;", 
      "-\t\t\ti->i_size = inodep->file_size;", 
      "-\t\t\ti->i_fop = &generic_ro_fops;", 
      "-\t\t\ti->i_mode |= S_IFREG;", 
      "-\t\t\ti->i_blocks = ((i->i_size - 1) >> 9) + 1;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.fragment_size = frag_size;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;", 
      "-\t\t\tSQUASHFS_I(i)->start_block = inodep->start_block;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.block_list_start = next_block;", 
      "-\t\t\tSQUASHFS_I(i)->offset = next_offset;", 
      "-\t\t\ti->i_data.a_ops = &squashfs_aops;", 
      "-", 
      "-\t\t\tTRACE(\"File inode %x:%x, start_block %llx, \"", 
      "-\t\t\t\t\t\"block_list_start %llx, offset %x\\n\",", 
      "-\t\t\t\t\tSQUASHFS_INODE_BLK(inode), offset,", 
      "-\t\t\t\t\tinodep->start_block, next_block,", 
      "-\t\t\t\t\tnext_offset);", 
      "-\t\t\tbreak;", 
      "-\t\t}", 
      "-\t\tcase SQUASHFS_LREG_TYPE: {", 
      "-\t\t\tunsigned int frag_size;", 
      "-\t\t\tlong long frag_blk;", 
      "-\t\t\tstruct squashfs_lreg_inode_header *inodep = &id.lreg;", 
      "-\t\t\tstruct squashfs_lreg_inode_header *sinodep = &sid.lreg;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, sinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, inodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tfrag_blk = SQUASHFS_INVALID_BLK;", 
      "-", 
      "-\t\t\tif (inodep->fragment != SQUASHFS_INVALID_FRAG)", 
      "-\t\t\t\tif (!get_fragment_location(s, inodep->fragment, &frag_blk,", 
      "-\t\t\t\t\t\t\t\t\t\t\t\t &frag_size))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_nlink = inodep->nlink;", 
      "-\t\t\ti->i_size = inodep->file_size;", 
      "-\t\t\ti->i_fop = &generic_ro_fops;", 
      "-\t\t\ti->i_mode |= S_IFREG;", 
      "-\t\t\ti->i_blocks = ((i->i_size - 1) >> 9) + 1;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.fragment_size = frag_size;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;", 
      "-\t\t\tSQUASHFS_I(i)->start_block = inodep->start_block;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.block_list_start = next_block;", 
      "-\t\t\tSQUASHFS_I(i)->offset = next_offset;", 
      "-\t\t\ti->i_data.a_ops = &squashfs_aops;", 
      "-", 
      "-\t\t\tTRACE(\"File inode %x:%x, start_block %llx, \"", 
      "-\t\t\t\t\t\"block_list_start %llx, offset %x\\n\",", 
      "-\t\t\t\t\tSQUASHFS_INODE_BLK(inode), offset,", 
      "-\t\t\t\t\tinodep->start_block, next_block,", 
      "-\t\t\t\t\tnext_offset);", 
      "-\t\t\tbreak;", 
      "-\t\t}", 
      "-\t\tcase SQUASHFS_DIR_TYPE: {", 
      "-\t\t\tstruct squashfs_dir_inode_header *inodep = &id.dir;", 
      "-\t\t\tstruct squashfs_dir_inode_header *sinodep = &sid.dir;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, sinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, inodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_nlink = inodep->nlink;", 
      "-\t\t\ti->i_size = inodep->file_size;", 
      "-\t\t\ti->i_op = &squashfs_dir_inode_ops;", 
      "-\t\t\ti->i_fop = &squashfs_dir_ops;", 
      "-\t\t\ti->i_mode |= S_IFDIR;", 
      "-\t\t\tSQUASHFS_I(i)->start_block = inodep->start_block;", 
      "-\t\t\tSQUASHFS_I(i)->offset = inodep->offset;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.directory_index_count = 0;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;", 
      "-", 
      "-\t\t\tTRACE(\"Directory inode %x:%x, start_block %x, offset \"", 
      "-\t\t\t\t\t\"%x\\n\", SQUASHFS_INODE_BLK(inode),", 
      "-\t\t\t\t\toffset, inodep->start_block,", 
      "-\t\t\t\t\tinodep->offset);", 
      "-\t\t\tbreak;", 
      "-\t\t}", 
      "-\t\tcase SQUASHFS_LDIR_TYPE: {", 
      "-\t\t\tstruct squashfs_ldir_inode_header *inodep = &id.ldir;", 
      "-\t\t\tstruct squashfs_ldir_inode_header *sinodep = &sid.ldir;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, sinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_LDIR_INODE_HEADER(inodep, sinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, inodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_nlink = inodep->nlink;", 
      "-\t\t\ti->i_size = inodep->file_size;", 
      "-\t\t\ti->i_op = &squashfs_dir_inode_ops;", 
      "-\t\t\ti->i_fop = &squashfs_dir_ops;", 
      "-\t\t\ti->i_mode |= S_IFDIR;", 
      "-\t\t\tSQUASHFS_I(i)->start_block = inodep->start_block;", 
      "-\t\t\tSQUASHFS_I(i)->offset = inodep->offset;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.directory_index_start = next_block;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.directory_index_offset = next_offset;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.directory_index_count = inodep->i_count;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;", 
      "-", 
      "-\t\t\tTRACE(\"Long directory inode %x:%x, start_block %x, offset %x\\n\",", 
      "-\t\t\t\t\tSQUASHFS_INODE_BLK(inode), offset,", 
      "-\t\t\t\t\tinodep->start_block, inodep->offset);", 
      "-\t\t\tbreak;", 
      "-\t\t}", 
      "-\t\tcase SQUASHFS_SYMLINK_TYPE: {", 
      "-\t\t\tstruct squashfs_symlink_inode_header *inodep = &id.symlink;", 
      "-\t\t\tstruct squashfs_symlink_inode_header *sinodep = &sid.symlink;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, sinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep, sinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, inodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_nlink = inodep->nlink;", 
      "-\t\t\ti->i_size = inodep->symlink_size;", 
      "-\t\t\ti->i_op = &page_symlink_inode_operations;", 
      "-\t\t\ti->i_data.a_ops = &squashfs_symlink_aops;", 
      "-\t\t\ti->i_mode |= S_IFLNK;", 
      "-\t\t\tSQUASHFS_I(i)->start_block = next_block;", 
      "-\t\t\tSQUASHFS_I(i)->offset = next_offset;", 
      "-", 
      "-\t\t\tTRACE(\"Symbolic link inode %x:%x, start_block %llx, offset %x\\n\",", 
      "-\t\t\t\t\tSQUASHFS_INODE_BLK(inode), offset,", 
      "-\t\t\t\t\tnext_block, next_offset);", 
      "-\t\t\tbreak;", 
      "-\t\t }", 
      "-\t\t case SQUASHFS_BLKDEV_TYPE:", 
      "-\t\t case SQUASHFS_CHRDEV_TYPE: {", 
      "-\t\t\tstruct squashfs_dev_inode_header *inodep = &id.dev;", 
      "-\t\t\tstruct squashfs_dev_inode_header *sinodep = &sid.dev;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, sinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, inodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_nlink = inodep->nlink;", 
      "-\t\t\ti->i_mode |= (inodeb->inode_type == SQUASHFS_CHRDEV_TYPE) ?", 
      "-\t\t\t\t\tS_IFCHR : S_IFBLK;", 
      "-\t\t\tinit_special_inode(i, i->i_mode, old_decode_dev(inodep->rdev));", 
      "-", 
      "-\t\t\tTRACE(\"Device inode %x:%x, rdev %x\\n\",", 
      "-\t\t\t\t\tSQUASHFS_INODE_BLK(inode), offset, inodep->rdev);", 
      "-\t\t\tbreak;", 
      "-\t\t }", 
      "-\t\t case SQUASHFS_FIFO_TYPE:", 
      "-\t\t case SQUASHFS_SOCKET_TYPE: {", 
      "-\t\t\tstruct squashfs_ipc_inode_header *inodep = &id.ipc;", 
      "-\t\t\tstruct squashfs_ipc_inode_header *sinodep = &sid.ipc;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, sinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, inodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_nlink = inodep->nlink;", 
      "-\t\t\ti->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)", 
      "-\t\t\t\t\t\t\t? S_IFIFO : S_IFSOCK;", 
      "-\t\t\tinit_special_inode(i, i->i_mode, 0);", 
      "-\t\t\tbreak;", 
      "-\t\t }", 
      "-\t\t default:", 
      "-\t\t\tERROR(\"Unknown inode type %d in squashfs_iget!\\n\",", 
      "-\t\t\t\t\tinodeb->inode_type);", 
      "-\t\t\tgoto failed_read1;", 
      "-\t}", 
      "-", 
      "-\treturn 1;", 
      "-", 
      "-failed_read:", 
      "-\tERROR(\"Unable to read inode [%llx:%x]\\n\", block, offset);", 
      "-", 
      "-failed_read1:", 
      "-\tmake_bad_inode(i);", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static int read_inode_lookup_table(struct super_block *s)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tunsigned int length = SQUASHFS_LOOKUP_BLOCK_BYTES(sblk->inodes);", 
      "-", 
      "-\tTRACE(\"In read_inode_lookup_table, length %d\\n\", length);", 
      "-", 
      "-\t/* Allocate inode lookup table */", 
      "-\tmsblk->inode_lookup_table = kmalloc(length, GFP_KERNEL);", 
      "-\tif (msblk->inode_lookup_table == NULL) {", 
      "-\t\tERROR(\"Failed to allocate inode lookup table\\n\");", 
      "-\t\treturn 0;", 
      "-\t}", 
      "-", 
      "-\tif (!squashfs_read_data(s, (char *) msblk->inode_lookup_table,", 
      "-\t\t\tsblk->lookup_table_start, length |", 
      "-\t\t\tSQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) {", 
      "-\t\tERROR(\"unable to read inode lookup table\\n\");", 
      "-\t\treturn 0;", 
      "-\t}", 
      "-", 
      "-\tif (msblk->swap) {", 
      "-\t\tint i;", 
      "-\t\tlong long block;", 
      "-", 
      "-\t\tfor (i = 0; i < SQUASHFS_LOOKUP_BLOCKS(sblk->inodes); i++) {", 
      "-\t\t\t/* XXX */", 
      "-\t\t\tSQUASHFS_SWAP_LOOKUP_BLOCKS((&block),", 
      "-\t\t\t\t\t\t&msblk->inode_lookup_table[i], 1);", 
      "-\t\t\tmsblk->inode_lookup_table[i] = block;", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-\treturn 1;", 
      "-}", 
      "-", 
      "-", 
      "-static int read_fragment_index_table(struct super_block *s)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tunsigned int length = SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments);", 
      "-", 
      "-\tif(length == 0)", 
      "-\t\treturn 1;", 
      "-", 
      "-\t/* Allocate fragment index table */", 
      "-\tmsblk->fragment_index = kmalloc(length, GFP_KERNEL);", 
      "-\tif (msblk->fragment_index == NULL) {", 
      "-\t\tERROR(\"Failed to allocate fragment index table\\n\");", 
      "-\t\treturn 0;", 
      "-\t}", 
      "-", 
      "-\tif (!squashfs_read_data(s, (char *) msblk->fragment_index,", 
      "-\t\t\tsblk->fragment_table_start, length |", 
      "-\t\t\tSQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) {", 
      "-\t\tERROR(\"unable to read fragment index table\\n\");", 
      "-\t\treturn 0;", 
      "-\t}", 
      "-", 
      "-\tif (msblk->swap) {", 
      "-\t\tint i;", 
      "-\t\tlong long fragment;", 
      "-", 
      "-\t\tfor (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments); i++) {", 
      "-\t\t\t/* XXX */", 
      "-\t\t\tSQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),", 
      "-\t\t\t\t\t\t&msblk->fragment_index[i], 1);", 
      "-\t\t\tmsblk->fragment_index[i] = fragment;", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-\treturn 1;", 
      "-}", 
      "-", 
      "-", 
      "-static int readahead_metadata(struct super_block *s)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tint i;", 
      "-", 
      "-\tsquashfs_cached_blks = SQUASHFS_CACHED_BLKS;", 
      "-", 
      "-\t/* Init inode_table block pointer array */", 
      "-\tmsblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *", 
      "-\t\t\t\t\tsquashfs_cached_blks, GFP_KERNEL);", 
      "-\tif (msblk->block_cache == NULL) {", 
      "-\t\tERROR(\"Failed to allocate block cache\\n\");", 
      "-\t\tgoto failed;", 
      "-\t}", 
      "-", 
      "-\tfor (i = 0; i < squashfs_cached_blks; i++)", 
      "-\t\tmsblk->block_cache[i].block = SQUASHFS_INVALID_BLK;", 
      "-", 
      "-\tmsblk->next_cache = 0;", 
      "-\tmsblk->unused_cache_blks = squashfs_cached_blks;", 
      "-", 
      "-\treturn 1;", 
      "-", 
      "-failed:", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)", 
      "-{", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-", 
      "-\tmsblk->read_inode = squashfs_read_inode;", 
      "-\tmsblk->read_blocklist = read_blocklist;", 
      "-\tmsblk->read_fragment_index_table = read_fragment_index_table;", 
      "-", 
      "-\tif (sblk->s_major == 1) {", 
      "-\t\tif (!squashfs_1_0_supported(msblk)) {", 
      "-\t\t\tSERROR(\"Major/Minor mismatch, Squashfs 1.0 filesystems \"", 
      "-\t\t\t\t\"are unsupported\\n\");", 
      "-\t\t\tSERROR(\"Please recompile with Squashfs 1.0 support enabled\\n\");", 
      "-\t\t\treturn 0;", 
      "-\t\t}", 
      "-\t} else if (sblk->s_major == 2) {", 
      "-\t\tif (!squashfs_2_0_supported(msblk)) {", 
      "-\t\t\tSERROR(\"Major/Minor mismatch, Squashfs 2.0 filesystems \"", 
      "-\t\t\t\t\"are unsupported\\n\");", 
      "-\t\t\tSERROR(\"Please recompile with Squashfs 2.0 support enabled\\n\");", 
      "-\t\t\treturn 0;", 
      "-\t\t}", 
      "-\t} else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >", 
      "-\t\t\tSQUASHFS_MINOR) {", 
      "-\t\tSERROR(\"Major/Minor mismatch, trying to mount newer %d.%d \"", 
      "-\t\t\t\t\"filesystem\\n\", sblk->s_major, sblk->s_minor);", 
      "-\t\tSERROR(\"Please update your kernel\\n\");", 
      "-\t\treturn 0;", 
      "-\t}", 
      "-", 
      "-\treturn 1;", 
      "-}", 
      "-", 
      "-", 
      "-static int squashfs_fill_super(struct super_block *s, void *data, int silent)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk;", 
      "-\tstruct squashfs_super_block *sblk;", 
      "-\tint i;", 
      "-\tchar b[BDEVNAME_SIZE];", 
      "-\tstruct inode *root;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_fill_superblock\\n\");", 
      "-", 
      "-\ts->s_fs_info = kzalloc(sizeof(struct squashfs_sb_info), GFP_KERNEL);", 
      "-\tif (s->s_fs_info == NULL) {", 
      "-\t\tERROR(\"Failed to allocate superblock\\n\");", 
      "-\t\tgoto failure;", 
      "-\t}", 
      "-\tmsblk = s->s_fs_info;", 
      "-", 
      "-\tmsblk->stream.workspace = vmalloc(zlib_inflate_workspacesize());", 
      "-\tif (msblk->stream.workspace == NULL) {", 
      "-\t\tERROR(\"Failed to allocate zlib workspace\\n\");", 
      "-\t\tgoto failure;", 
      "-\t}", 
      "-\tsblk = &msblk->sblk;", 
      "-", 
      "-\tmsblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);", 
      "-\tmsblk->devblksize_log2 = ffz(~msblk->devblksize);", 
      "-", 
      "-\tmutex_init(&msblk->read_data_mutex);", 
      "-\tmutex_init(&msblk->read_page_mutex);", 
      "-\tmutex_init(&msblk->block_cache_mutex);", 
      "-\tmutex_init(&msblk->fragment_mutex);", 
      "-\tmutex_init(&msblk->meta_index_mutex);", 
      "-", 
      "-\tinit_waitqueue_head(&msblk->waitq);", 
      "-\tinit_waitqueue_head(&msblk->fragment_wait_queue);", 
      "-", 
      "-\t/* sblk->bytes_used is checked in squashfs_read_data to ensure reads are not", 
      "- \t * beyond filesystem end.  As we're using squashfs_read_data to read sblk here,", 
      "- \t * first set sblk->bytes_used to a useful value */", 
      "-\tsblk->bytes_used = sizeof(struct squashfs_super_block);", 
      "-\tif (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,", 
      "-\t\t\t\t\tsizeof(struct squashfs_super_block) |", 
      "-\t\t\t\t\tSQUASHFS_COMPRESSED_BIT_BLOCK, NULL, sizeof(struct squashfs_super_block))) {", 
      "-\t\tSERROR(\"unable to read superblock\\n\");", 
      "-\t\tgoto failed_mount;", 
      "-\t}", 
      "-", 
      "-\t/* Check it is a SQUASHFS superblock */", 
      "-\tif ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {", 
      "-\t\tif (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {", 
      "-\t\t\tstruct squashfs_super_block ssblk;", 
      "-", 
      "-\t\t\tWARNING(\"Mounting a different endian SQUASHFS filesystem on %s\\n\",", 
      "-\t\t\t\tbdevname(s->s_bdev, b));", 
      "-", 
      "-\t\t\tSQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);", 
      "-\t\t\tmemcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));", 
      "-\t\t\tmsblk->swap = 1;", 
      "-\t\t} else  {", 
      "-\t\t\tSERROR(\"Can't find a SQUASHFS superblock on %s\\n\",", 
      "-\t\t\t\t\t\t\tbdevname(s->s_bdev, b));", 
      "-\t\t\tgoto failed_mount;", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-\t/* Check the MAJOR & MINOR versions */", 
      "-\tif(!supported_squashfs_filesystem(msblk, silent))", 
      "-\t\tgoto failed_mount;", 
      "-", 
      "-\t/* Check the filesystem does not extend beyond the end of the", 
      "-\t   block device */", 
      "-\tif(sblk->bytes_used < 0 || sblk->bytes_used > i_size_read(s->s_bdev->bd_inode))", 
      "-\t\tgoto failed_mount;", 
      "-", 
      "-\t/* Check the root inode for sanity */", 
      "-\tif (SQUASHFS_INODE_OFFSET(sblk->root_inode) > SQUASHFS_METADATA_SIZE)", 
      "-\t\tgoto failed_mount;", 
      "-", 
      "-\tTRACE(\"Found valid superblock on %s\\n\", bdevname(s->s_bdev, b));", 
      "-\tTRACE(\"Inodes are %scompressed\\n\", SQUASHFS_UNCOMPRESSED_INODES(sblk->flags)", 
      "-\t\t\t\t\t? \"un\" : \"\");", 
      "-\tTRACE(\"Data is %scompressed\\n\", SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)", 
      "-\t\t\t\t\t? \"un\" : \"\");", 
      "-\tTRACE(\"Check data is %spresent in the filesystem\\n\",", 
      "-\t\t\t\t\tSQUASHFS_CHECK_DATA(sblk->flags) ?  \"\" : \"not \");", 
      "-\tTRACE(\"Filesystem size %lld bytes\\n\", sblk->bytes_used);", 
      "-\tTRACE(\"Block size %d\\n\", sblk->block_size);", 
      "-\tTRACE(\"Number of inodes %d\\n\", sblk->inodes);", 
      "-\tif (sblk->s_major > 1)", 
      "-\t\tTRACE(\"Number of fragments %d\\n\", sblk->fragments);", 
      "-\tTRACE(\"Number of uids %d\\n\", sblk->no_uids);", 
      "-\tTRACE(\"Number of gids %d\\n\", sblk->no_guids);", 
      "-\tTRACE(\"sblk->inode_table_start %llx\\n\", sblk->inode_table_start);", 
      "-\tTRACE(\"sblk->directory_table_start %llx\\n\", sblk->directory_table_start);", 
      "-\tif (sblk->s_major > 1)", 
      "-\t\tTRACE(\"sblk->fragment_table_start %llx\\n\", sblk->fragment_table_start);", 
      "-\tTRACE(\"sblk->uid_start %llx\\n\", sblk->uid_start);", 
      "-", 
      "-\ts->s_maxbytes = MAX_LFS_FILESIZE;", 
      "-\ts->s_flags |= MS_RDONLY;", 
      "-\ts->s_op = &squashfs_super_ops;", 
      "-", 
      "-\tif (readahead_metadata(s) == 0)", 
      "-\t\tgoto failed_mount;", 
      "-", 
      "-\t/* Allocate read_page block */", 
      "-\tmsblk->read_page = vmalloc(sblk->block_size);", 
      "-\tif (msblk->read_page == NULL) {", 
      "-\t\tERROR(\"Failed to allocate read_page block\\n\");", 
      "-\t\tgoto failed_mount;", 
      "-\t}", 
      "-", 
      "-\t/* Allocate uid and gid tables */", 
      "-\tmsblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *", 
      "-\t\t\t\t\tsizeof(unsigned int), GFP_KERNEL);", 
      "-\tif (msblk->uid == NULL) {", 
      "-\t\tERROR(\"Failed to allocate uid/gid table\\n\");", 
      "-\t\tgoto failed_mount;", 
      "-\t}", 
      "-\tmsblk->guid = msblk->uid + sblk->no_uids;", 
      "-", 
      "-\tif (msblk->swap) {", 
      "-\t\tunsigned int suid[sblk->no_uids + sblk->no_guids];", 
      "-", 
      "-\t\tif (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,", 
      "-\t\t\t\t\t((sblk->no_uids + sblk->no_guids) *", 
      "-\t\t\t\t\t sizeof(unsigned int)) |", 
      "-\t\t\t\t\tSQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) {", 
      "-\t\t\tERROR(\"unable to read uid/gid table\\n\");", 
      "-\t\t\tgoto failed_mount;", 
      "-\t\t}", 
      "-", 
      "-\t\tSQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +", 
      "-\t\t\tsblk->no_guids), (sizeof(unsigned int) * 8));", 
      "-\t} else", 
      "-\t\tif (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,", 
      "-\t\t\t\t\t((sblk->no_uids + sblk->no_guids) *", 
      "-\t\t\t\t\t sizeof(unsigned int)) |", 
      "-\t\t\t\t\tSQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) {", 
      "-\t\t\tERROR(\"unable to read uid/gid table\\n\");", 
      "-\t\t\tgoto failed_mount;", 
      "-\t\t}", 
      "-", 
      "-", 
      "-\tif (sblk->s_major == 1 && squashfs_1_0_supported(msblk))", 
      "-\t\tgoto allocate_root;", 
      "-", 
      "-\tmsblk->fragment = kzalloc(sizeof(struct squashfs_fragment_cache) *", 
      "-\t\t\t\tSQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL);", 
      "-\tif (msblk->fragment == NULL) {", 
      "-\t\tERROR(\"Failed to allocate fragment block cache\\n\");", 
      "-\t\tgoto failed_mount;", 
      "-\t}", 
      "-", 
      "-\tfor (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {", 
      "-\t\tmsblk->fragment[i].block = SQUASHFS_INVALID_BLK;", 
      "-\t}", 
      "-", 
      "-\tmsblk->next_fragment = 0;", 
      "-\tmsblk->unused_frag_blks = SQUASHFS_CACHED_FRAGMENTS;", 
      "-", 
      "-\t/* Allocate and read fragment index table */", 
      "-\tif (msblk->read_fragment_index_table(s) == 0)", 
      "-\t\tgoto failed_mount;", 
      "-", 
      "-\tif(sblk->s_major < 3 || sblk->lookup_table_start == SQUASHFS_INVALID_BLK)", 
      "-\t\tgoto allocate_root;", 
      "-", 
      "-\t/* Allocate and read inode lookup table */", 
      "-\tif (read_inode_lookup_table(s) == 0)", 
      "-\t\tgoto failed_mount;", 
      "-", 
      "-\ts->s_op = &squashfs_export_super_ops;", 
      "-\ts->s_export_op = &squashfs_export_ops;", 
      "-", 
      "-allocate_root:", 
      "-\troot = new_inode(s);", 
      "-\tif ((msblk->read_inode)(root, sblk->root_inode) == 0)", 
      "-\t\tgoto failed_mount;", 
      "-\tinsert_inode_hash(root);", 
      "-", 
      "-\ts->s_root = d_alloc_root(root);", 
      "-\tif (s->s_root == NULL) {", 
      "-\t\tERROR(\"Root inode create failed\\n\");", 
      "-\t\tiput(root);", 
      "-\t\tgoto failed_mount;", 
      "-\t}", 
      "-", 
      "-\tTRACE(\"Leaving squashfs_fill_super\\n\");", 
      "-\treturn 0;", 
      "-", 
      "-failed_mount:", 
      "-\tkfree(msblk->inode_lookup_table);", 
      "-\tkfree(msblk->fragment_index);", 
      "-\tkfree(msblk->fragment);", 
      "-\tkfree(msblk->uid);", 
      "-\tvfree(msblk->read_page);", 
      "-\tkfree(msblk->block_cache);", 
      "-\tkfree(msblk->fragment_index_2);", 
      "-\tvfree(msblk->stream.workspace);", 
      "-\tkfree(s->s_fs_info);", 
      "-\ts->s_fs_info = NULL;", 
      "-\treturn -EINVAL;", 
      "-", 
      "-failure:", 
      "-\treturn -ENOMEM;", 
      "-}", 
      "-", 
      "-", 
      "-static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = dentry->d_sb->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_statfs\\n\");", 
      "-", 
      "-\tbuf->f_type = SQUASHFS_MAGIC;", 
      "-\tbuf->f_bsize = sblk->block_size;", 
      "-\tbuf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;", 
      "-\tbuf->f_bfree = buf->f_bavail = 0;", 
      "-\tbuf->f_files = sblk->inodes;", 
      "-\tbuf->f_ffree = 0;", 
      "-\tbuf->f_namelen = SQUASHFS_NAME_LEN;", 
      "-", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static int squashfs_symlink_readpage(struct file *file, struct page *page)", 
      "-{", 
      "-\tstruct inode *inode = page->mapping->host;", 
      "-\tint index = page->index << PAGE_CACHE_SHIFT, length, bytes, avail_bytes;", 
      "-\tlong long block = SQUASHFS_I(inode)->start_block;", 
      "-\tint offset = SQUASHFS_I(inode)->offset;", 
      "-\tvoid *pageaddr = kmap(page);", 
      "-", 
      "-\tTRACE(\"Entered squashfs_symlink_readpage, page index %ld, start block \"", 
      "-\t\t\t\t\"%llx, offset %x\\n\", page->index,", 
      "-\t\t\t\tSQUASHFS_I(inode)->start_block,", 
      "-\t\t\t\tSQUASHFS_I(inode)->offset);", 
      "-", 
      "-\tfor (length = 0; length < index; length += bytes) {", 
      "-\t\tbytes = squashfs_get_cached_block(inode->i_sb, NULL, block,", 
      "-\t\t\t\toffset, PAGE_CACHE_SIZE, &block, &offset);", 
      "-\t\tif (bytes == 0) {", 
      "-\t\t\tERROR(\"Unable to read symbolic link [%llx:%x]\\n\", block, offset);", 
      "-\t\t\tgoto skip_read;", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-\tif (length != index) {", 
      "-\t\tERROR(\"(squashfs_symlink_readpage) length != index\\n\");", 
      "-\t\tbytes = 0;", 
      "-\t\tgoto skip_read;", 
      "-\t}", 
      "-", 
      "-\tavail_bytes = min_t(int, i_size_read(inode) - length, PAGE_CACHE_SIZE);", 
      "-", 
      "-\tbytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block, offset,", 
      "-\t\tavail_bytes, &block, &offset);", 
      "-\tif (bytes == 0)", 
      "-\t\tERROR(\"Unable to read symbolic link [%llx:%x]\\n\", block, offset);", 
      "-", 
      "-skip_read:", 
      "-\tmemset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);", 
      "-\tkunmap(page);", 
      "-\tflush_dcache_page(page);", 
      "-\tSetPageUptodate(page);", 
      "-\tunlock_page(page);", 
      "-", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)", 
      "-{", 
      "-\tstruct meta_index *meta = NULL;", 
      "-\tstruct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;", 
      "-\tint i;", 
      "-", 
      "-\tmutex_lock(&msblk->meta_index_mutex);", 
      "-", 
      "-\tTRACE(\"locate_meta_index: index %d, offset %d\\n\", index, offset);", 
      "-", 
      "-\tif (msblk->meta_index == NULL)", 
      "-\t\tgoto not_allocated;", 
      "-", 
      "-\tfor (i = 0; i < SQUASHFS_META_NUMBER; i ++) {", 
      "-\t\tif (msblk->meta_index[i].inode_number == inode->i_ino &&", 
      "-\t\t\t\tmsblk->meta_index[i].offset >= offset &&", 
      "-\t\t\t\tmsblk->meta_index[i].offset <= index &&", 
      "-\t\t\t\tmsblk->meta_index[i].locked == 0) {", 
      "-\t\t\tTRACE(\"locate_meta_index: entry %d, offset %d\\n\", i,", 
      "-\t\t\t\t\tmsblk->meta_index[i].offset);", 
      "-\t\t\tmeta = &msblk->meta_index[i];", 
      "-\t\t\toffset = meta->offset;", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-\tif (meta)", 
      "-\t\tmeta->locked = 1;", 
      "-", 
      "-not_allocated:", 
      "-\tmutex_unlock(&msblk->meta_index_mutex);", 
      "-", 
      "-\treturn meta;", 
      "-}", 
      "-", 
      "-", 
      "-struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;", 
      "-\tstruct meta_index *meta = NULL;", 
      "-\tint i;", 
      "-", 
      "-\tmutex_lock(&msblk->meta_index_mutex);", 
      "-", 
      "-\tTRACE(\"empty_meta_index: offset %d, skip %d\\n\", offset, skip);", 
      "-", 
      "-\tif (msblk->meta_index == NULL) {", 
      "-\t\tmsblk->meta_index = kmalloc(sizeof(struct meta_index) *", 
      "-\t\t\t\t\tSQUASHFS_META_NUMBER, GFP_KERNEL);", 
      "-\t\tif (msblk->meta_index == NULL) {", 
      "-\t\t\tERROR(\"Failed to allocate meta_index\\n\");", 
      "-\t\t\tgoto failed;", 
      "-\t\t}", 
      "-\t\tfor (i = 0; i < SQUASHFS_META_NUMBER; i++) {", 
      "-\t\t\tmsblk->meta_index[i].inode_number = 0;", 
      "-\t\t\tmsblk->meta_index[i].locked = 0;", 
      "-\t\t}", 
      "-\t\tmsblk->next_meta_index = 0;", 
      "-\t}", 
      "-", 
      "-\tfor (i = SQUASHFS_META_NUMBER; i &&", 
      "-\t\t\tmsblk->meta_index[msblk->next_meta_index].locked; i --)", 
      "-\t\tmsblk->next_meta_index = (msblk->next_meta_index + 1) %", 
      "-\t\t\tSQUASHFS_META_NUMBER;", 
      "-", 
      "-\tif (i == 0) {", 
      "-\t\tTRACE(\"empty_meta_index: failed!\\n\");", 
      "-\t\tgoto failed;", 
      "-\t}", 
      "-", 
      "-\tTRACE(\"empty_meta_index: returned meta entry %d, %p\\n\",", 
      "-\t\t\tmsblk->next_meta_index,", 
      "-\t\t\t&msblk->meta_index[msblk->next_meta_index]);", 
      "-", 
      "-\tmeta = &msblk->meta_index[msblk->next_meta_index];", 
      "-\tmsblk->next_meta_index = (msblk->next_meta_index + 1) %", 
      "-\t\t\tSQUASHFS_META_NUMBER;", 
      "-", 
      "-\tmeta->inode_number = inode->i_ino;", 
      "-\tmeta->offset = offset;", 
      "-\tmeta->skip = skip;", 
      "-\tmeta->entries = 0;", 
      "-\tmeta->locked = 1;", 
      "-", 
      "-failed:", 
      "-\tmutex_unlock(&msblk->meta_index_mutex);", 
      "-\treturn meta;", 
      "-}", 
      "-", 
      "-", 
      "-void release_meta_index(struct inode *inode, struct meta_index *meta)", 
      "-{", 
      "-\tmeta->locked = 0;", 
      "-\tsmp_mb();", 
      "-}", 
      "-", 
      "-", 
      "-static int read_block_index(struct super_block *s, int blocks, char *block_list,", 
      "-\t\t\t\tlong long *start_block, int *offset)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tunsigned int *block_listp;", 
      "-\tint block = 0;", 
      "-", 
      "-\tif (msblk->swap) {", 
      "-\t\tchar sblock_list[blocks << 2];", 
      "-", 
      "-\t\tif (!squashfs_get_cached_block(s, sblock_list, *start_block,", 
      "-\t\t\t\t*offset, blocks << 2, start_block, offset)) {", 
      "-\t\t\tERROR(\"Fail reading block list [%llx:%x]\\n\", *start_block, *offset);", 
      "-\t\t\tgoto failure;", 
      "-\t\t}", 
      "-\t\tSQUASHFS_SWAP_INTS(((unsigned int *)block_list),", 
      "-\t\t\t\t((unsigned int *)sblock_list), blocks);", 
      "-\t} else {", 
      "-\t\tif (!squashfs_get_cached_block(s, block_list, *start_block,", 
      "-\t\t\t\t*offset, blocks << 2, start_block, offset)) {", 
      "-\t\t\tERROR(\"Fail reading block list [%llx:%x]\\n\", *start_block, *offset);", 
      "-\t\t\tgoto failure;", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-\tfor (block_listp = (unsigned int *) block_list; blocks;", 
      "-\t\t\t\tblock_listp++, blocks --)", 
      "-\t\tblock += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);", 
      "-", 
      "-\treturn block;", 
      "-", 
      "-failure:", 
      "-\treturn -1;", 
      "-}", 
      "-", 
      "-", 
      "-#define SIZE 256", 
      "-", 
      "-static inline int calculate_skip(int blocks) {", 
      "-\tint skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);", 
      "-\treturn skip >= 7 ? 7 : skip + 1;", 
      "-}", 
      "-", 
      "-", 
      "-static int get_meta_index(struct inode *inode, int index,", 
      "-\t\tlong long *index_block, int *index_offset,", 
      "-\t\tlong long *data_block, char *block_list)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tint skip = calculate_skip(i_size_read(inode) >> sblk->block_log);", 
      "-\tint offset = 0;", 
      "-\tstruct meta_index *meta;", 
      "-\tstruct meta_entry *meta_entry;", 
      "-\tlong long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;", 
      "-\tint cur_offset = SQUASHFS_I(inode)->offset;", 
      "-\tlong long cur_data_block = SQUASHFS_I(inode)->start_block;", 
      "-\tint i;", 
      "-", 
      "-\tindex /= SQUASHFS_META_INDEXES * skip;", 
      "-", 
      "-\twhile (offset < index) {", 
      "-\t\tmeta = locate_meta_index(inode, index, offset + 1);", 
      "-", 
      "-\t\tif (meta == NULL) {", 
      "-\t\t\tmeta = empty_meta_index(inode, offset + 1, skip);", 
      "-\t\t\tif (meta == NULL)", 
      "-\t\t\t\tgoto all_done;", 
      "-\t\t} else {", 
      "-\t\t\tif(meta->entries == 0)", 
      "-\t\t\t\tgoto failed;", 
      "-\t\t\t/* XXX */", 
      "-\t\t\toffset = index < meta->offset + meta->entries ? index :", 
      "-\t\t\t\tmeta->offset + meta->entries - 1;", 
      "-\t\t\t/* XXX */", 
      "-\t\t\tmeta_entry = &meta->meta_entry[offset - meta->offset];", 
      "-\t\t\tcur_index_block = meta_entry->index_block + sblk->inode_table_start;", 
      "-\t\t\tcur_offset = meta_entry->offset;", 
      "-\t\t\tcur_data_block = meta_entry->data_block;", 
      "-\t\t\tTRACE(\"get_meta_index: offset %d, meta->offset %d, \"", 
      "-\t\t\t\t\"meta->entries %d\\n\", offset, meta->offset, meta->entries);", 
      "-\t\t\tTRACE(\"get_meta_index: index_block 0x%llx, offset 0x%x\"", 
      "-\t\t\t\t\" data_block 0x%llx\\n\", cur_index_block,", 
      "-\t\t\t\tcur_offset, cur_data_block);", 
      "-\t\t}", 
      "-", 
      "-\t\tfor (i = meta->offset + meta->entries; i <= index &&", 
      "-\t\t\t\ti < meta->offset + SQUASHFS_META_ENTRIES; i++) {", 
      "-\t\t\tint blocks = skip * SQUASHFS_META_INDEXES;", 
      "-", 
      "-\t\t\twhile (blocks) {", 
      "-\t\t\t\tint block = blocks > (SIZE >> 2) ? (SIZE >> 2) : blocks;", 
      "-\t\t\t\tint res = read_block_index(inode->i_sb, block, block_list,", 
      "-\t\t\t\t\t&cur_index_block, &cur_offset);", 
      "-", 
      "-\t\t\t\tif (res == -1)", 
      "-\t\t\t\t\tgoto failed;", 
      "-", 
      "-\t\t\t\tcur_data_block += res;", 
      "-\t\t\t\tblocks -= block;", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tmeta_entry = &meta->meta_entry[i - meta->offset];", 
      "-\t\t\tmeta_entry->index_block = cur_index_block - sblk->inode_table_start;", 
      "-\t\t\tmeta_entry->offset = cur_offset;", 
      "-\t\t\tmeta_entry->data_block = cur_data_block;", 
      "-\t\t\tmeta->entries ++;", 
      "-\t\t\toffset ++;", 
      "-\t\t}", 
      "-", 
      "-\t\tTRACE(\"get_meta_index: meta->offset %d, meta->entries %d\\n\",", 
      "-\t\t\t\tmeta->offset, meta->entries);", 
      "-", 
      "-\t\trelease_meta_index(inode, meta);", 
      "-\t}", 
      "-", 
      "-all_done:", 
      "-\t*index_block = cur_index_block;", 
      "-\t*index_offset = cur_offset;", 
      "-\t*data_block = cur_data_block;", 
      "-", 
      "-\treturn offset * SQUASHFS_META_INDEXES * skip;", 
      "-", 
      "-failed:", 
      "-\trelease_meta_index(inode, meta);", 
      "-\treturn -1;", 
      "-}", 
      "-", 
      "-", 
      "-static long long read_blocklist(struct inode *inode, int index,", 
      "-\t\t\t\tint readahead_blks, char *block_list,", 
      "-\t\t\t\tunsigned short **block_p, unsigned int *bsize)", 
      "-{", 
      "-\tlong long block_ptr;", 
      "-\tint offset;", 
      "-\tlong long block;", 
      "-\tint res = get_meta_index(inode, index, &block_ptr, &offset, &block,", 
      "-\t\tblock_list);", 
      "-", 
      "-\tTRACE(\"read_blocklist: res %d, index %d, block_ptr 0x%llx, offset\"", 
      "-\t\t       \" 0x%x, block 0x%llx\\n\", res, index, block_ptr, offset, block);", 
      "-", 
      "-\tif(res == -1)", 
      "-\t\tgoto failure;", 
      "-", 
      "-\tindex -= res;", 
      "-", 
      "-\twhile (index) {", 
      "-\t\tint blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;", 
      "-\t\tint res = read_block_index(inode->i_sb, blocks, block_list,", 
      "-\t\t\t&block_ptr, &offset);", 
      "-\t\tif (res == -1)", 
      "-\t\t\tgoto failure;", 
      "-\t\tblock += res;", 
      "-\t\tindex -= blocks;", 
      "-\t}", 
      "-", 
      "-\tif (read_block_index(inode->i_sb, 1, block_list, &block_ptr, &offset) == -1)", 
      "-\t\tgoto failure;", 
      "-\t*bsize = *((unsigned int *) block_list);", 
      "-", 
      "-\treturn block;", 
      "-", 
      "-failure:", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static int squashfs_readpage(struct file *file, struct page *page)", 
      "-{", 
      "-\tstruct inode *inode = page->mapping->host;", 
      "-\tstruct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tunsigned char *block_list = NULL;", 
      "-\tlong long block;", 
      "-\tunsigned int bsize, i;", 
      "-\tint bytes;", 
      "-\tint index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);", 
      "- \tvoid *pageaddr;", 
      "-\tstruct squashfs_fragment_cache *fragment = NULL;", 
      "-\tchar *data_ptr = msblk->read_page;", 
      "-", 
      "-\tint mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;", 
      "-\tint start_index = page->index & ~mask;", 
      "-\tint end_index = start_index | mask;", 
      "-\tint file_end = i_size_read(inode) >> sblk->block_log;", 
      "-\tint sparse = 0;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_readpage, page index %lx, start block %llx\\n\",", 
      "-\t\t\t\t\tpage->index, SQUASHFS_I(inode)->start_block);", 
      "-", 
      "-\tif (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>", 
      "-\t\t\t\t\tPAGE_CACHE_SHIFT))", 
      "-\t\tgoto out;", 
      "-", 
      "-\tif (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK", 
      "-\t\t\t\t\t|| index < file_end) {", 
      "-\t\tblock_list = kmalloc(SIZE, GFP_KERNEL);", 
      "-\t\tif (block_list == NULL) {", 
      "-\t\t\tERROR(\"Failed to allocate block_list\\n\");", 
      "-\t\t\tgoto error_out;", 
      "-\t\t}", 
      "-", 
      "-\t\tblock = (msblk->read_blocklist)(inode, index, 1, block_list, NULL, &bsize);", 
      "-\t\tif (block == 0)", 
      "-\t\t\tgoto error_out;", 
      "-", 
      "-\t\tif (bsize == 0) { /* hole */", 
      "-\t\t\tbytes = index == file_end ?", 
      "-\t\t\t\t(i_size_read(inode) & (sblk->block_size - 1)) : sblk->block_size;", 
      "-\t\t\tsparse = 1;", 
      "-\t\t} else {", 
      "-\t\t\tmutex_lock(&msblk->read_page_mutex);", 
      "-", 
      "-\t\t\tbytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,", 
      "-\t\t\t\tbsize, NULL, sblk->block_size);", 
      "-", 
      "-\t\t\tif (bytes == 0) {", 
      "-\t\t\t\tERROR(\"Unable to read page, block %llx, size %x\\n\", block, bsize);", 
      "-\t\t\t\tmutex_unlock(&msblk->read_page_mutex);", 
      "-\t\t\t\tgoto error_out;", 
      "-\t\t\t}", 
      "-\t\t}", 
      "-\t} else {", 
      "-\t\tfragment = get_cached_fragment(inode->i_sb,", 
      "-\t\t\t\t\tSQUASHFS_I(inode)-> u.s1.fragment_start_block,", 
      "-\t\t\t\t\tSQUASHFS_I(inode)->u.s1.fragment_size);", 
      "-", 
      "-\t\tif (fragment == NULL) {", 
      "-\t\t\tERROR(\"Unable to read page, block %llx, size %x\\n\",", 
      "-\t\t\t\t\tSQUASHFS_I(inode)->u.s1.fragment_start_block,", 
      "-\t\t\t\t\t(int) SQUASHFS_I(inode)->u.s1.fragment_size);", 
      "-\t\t\tgoto error_out;", 
      "-\t\t}", 
      "-\t\tbytes = i_size_read(inode) & (sblk->block_size - 1);", 
      "-\t\tdata_ptr = fragment->data + SQUASHFS_I(inode)->u.s1.fragment_offset;", 
      "-\t}", 
      "-", 
      "-\tfor (i = start_index; i <= end_index && bytes > 0; i++,", 
      "-\t\t\t\t\t\tbytes -= PAGE_CACHE_SIZE, data_ptr += PAGE_CACHE_SIZE) {", 
      "-\t\tstruct page *push_page;", 
      "-\t\tint avail = sparse ? 0 : min_t(unsigned int, bytes, PAGE_CACHE_SIZE);", 
      "-", 
      "-\t\tTRACE(\"bytes %d, i %d, available_bytes %d\\n\", bytes, i, avail);", 
      "-", 
      "-\t\tpush_page = (i == page->index) ? page :", 
      "-\t\t\tgrab_cache_page_nowait(page->mapping, i);", 
      "-", 
      "-\t\tif (!push_page)", 
      "-\t\t\tcontinue;", 
      "-", 
      "-\t\tif (PageUptodate(push_page))", 
      "-\t\t\tgoto skip_page;", 
      "-", 
      "- \t\tpageaddr = kmap_atomic(push_page, KM_USER0);", 
      "-\t\tmemcpy(pageaddr, data_ptr, avail);", 
      "-\t\tmemset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail);", 
      "-\t\tkunmap_atomic(pageaddr, KM_USER0);", 
      "-\t\tflush_dcache_page(push_page);", 
      "-\t\tSetPageUptodate(push_page);", 
      "-skip_page:", 
      "-\t\tunlock_page(push_page);", 
      "-\t\tif(i != page->index)", 
      "-\t\t\tpage_cache_release(push_page);", 
      "-\t}", 
      "-", 
      "-\tif (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK", 
      "-\t\t\t\t\t|| index < file_end) {", 
      "-\t\tif (!sparse)", 
      "-\t\t\tmutex_unlock(&msblk->read_page_mutex);", 
      "-\t\tkfree(block_list);", 
      "-\t} else", 
      "-\t\trelease_cached_fragment(msblk, fragment);", 
      "-", 
      "-\treturn 0;", 
      "-", 
      "-error_out:", 
      "-\tSetPageError(page);", 
      "-out:", 
      "-\tpageaddr = kmap_atomic(page, KM_USER0);", 
      "-\tmemset(pageaddr, 0, PAGE_CACHE_SIZE);", 
      "-\tkunmap_atomic(pageaddr, KM_USER0);", 
      "-\tflush_dcache_page(page);", 
      "-\tif (!PageError(page))", 
      "-\t\tSetPageUptodate(page);", 
      "-\tunlock_page(page);", 
      "-", 
      "-\tkfree(block_list);", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static int get_dir_index_using_offset(struct super_block *s,", 
      "-\t\t\t\tlong long *next_block, unsigned int *next_offset,", 
      "-\t\t\t\tlong long index_start, unsigned int index_offset, int i_count,", 
      "-\t\t\t\tlong long f_pos)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tint i, length = 0;", 
      "-\tstruct squashfs_dir_index index;", 
      "-", 
      "-\tTRACE(\"Entered get_dir_index_using_offset, i_count %d, f_pos %d\\n\",", 
      "-\t\t\t\t\ti_count, (unsigned int) f_pos);", 
      "-", 
      "-\tf_pos =- 3;", 
      "-\tif (f_pos == 0)", 
      "-\t\tgoto finish;", 
      "-", 
      "-\tfor (i = 0; i < i_count; i++) {", 
      "-\t\tif (msblk->swap) {", 
      "-\t\t\tstruct squashfs_dir_index sindex;", 
      "-\t\t\tsquashfs_get_cached_block(s, &sindex, index_start, index_offset,", 
      "-\t\t\t\t\tsizeof(sindex), &index_start, &index_offset);", 
      "-\t\t\tSQUASHFS_SWAP_DIR_INDEX(&index, &sindex);", 
      "-\t\t} else", 
      "-\t\t\tsquashfs_get_cached_block(s, &index, index_start, index_offset,", 
      "-\t\t\t\t\tsizeof(index), &index_start, &index_offset);", 
      "-", 
      "-\t\tif (index.index > f_pos)", 
      "-\t\t\tbreak;", 
      "-", 
      "-\t\tsquashfs_get_cached_block(s, NULL, index_start, index_offset,", 
      "-\t\t\t\t\tindex.size + 1, &index_start, &index_offset);", 
      "-", 
      "-\t\tlength = index.index;", 
      "-\t\t*next_block = index.start_block + sblk->directory_table_start;", 
      "-\t}", 
      "-", 
      "-\t*next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;", 
      "-", 
      "-finish:", 
      "-\treturn length + 3;", 
      "-}", 
      "-", 
      "-", 
      "-static int get_dir_index_using_name(struct super_block *s,", 
      "-\t\t\t\tlong long *next_block, unsigned int *next_offset,", 
      "-\t\t\t\tlong long index_start, unsigned int index_offset, int i_count,", 
      "-\t\t\t\tconst char *name, int size)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tint i, length = 0;", 
      "-\tstruct squashfs_dir_index *index;", 
      "-\tchar *str;", 
      "-", 
      "-\tTRACE(\"Entered get_dir_index_using_name, i_count %d\\n\", i_count);", 
      "-", 
      "-\tstr = kmalloc(sizeof(struct squashfs_dir_index) +", 
      "-\t\t(SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL);", 
      "-\tif (str == NULL) {", 
      "-\t\tERROR(\"Failed to allocate squashfs_dir_index\\n\");", 
      "-\t\tgoto failure;", 
      "-\t}", 
      "-", 
      "-\tindex = (struct squashfs_dir_index *) (str + SQUASHFS_NAME_LEN + 1);", 
      "-\tstrncpy(str, name, size);", 
      "-\tstr[size] = '\\0';", 
      "-", 
      "-\tfor (i = 0; i < i_count; i++) {", 
      "-\t\tif (msblk->swap) {", 
      "-\t\t\tstruct squashfs_dir_index sindex;", 
      "-\t\t\tsquashfs_get_cached_block(s, &sindex, index_start, index_offset,", 
      "-\t\t\t\tsizeof(sindex), &index_start, &index_offset);", 
      "-\t\t\tSQUASHFS_SWAP_DIR_INDEX(index, &sindex);", 
      "-\t\t} else", 
      "-\t\t\tsquashfs_get_cached_block(s, index, index_start, index_offset,", 
      "-\t\t\t\tsizeof(struct squashfs_dir_index), &index_start, &index_offset);", 
      "-", 
      "-\t\tsquashfs_get_cached_block(s, index->name, index_start, index_offset,", 
      "-\t\t\t\t\tindex->size + 1, &index_start, &index_offset);", 
      "-", 
      "-\t\tindex->name[index->size + 1] = '\\0';", 
      "-", 
      "-\t\tif (strcmp(index->name, str) > 0)", 
      "-\t\t\tbreak;", 
      "-", 
      "-\t\tlength = index->index;", 
      "-\t\t*next_block = index->start_block + sblk->directory_table_start;", 
      "-\t}", 
      "-", 
      "-\t*next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;", 
      "-\tkfree(str);", 
      "-", 
      "-failure:", 
      "-\treturn length + 3;", 
      "-}", 
      "-", 
      "-", 
      "-static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)", 
      "-{", 
      "-\tstruct inode *i = file->f_dentry->d_inode;", 
      "-\tstruct squashfs_sb_info *msblk = i->i_sb->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tlong long next_block = SQUASHFS_I(i)->start_block +", 
      "-\t\tsblk->directory_table_start;", 
      "-\tint next_offset = SQUASHFS_I(i)->offset, length = 0, dir_count;", 
      "-\tstruct squashfs_dir_header dirh;", 
      "-\tstruct squashfs_dir_entry *dire;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_readdir [%llx:%x]\\n\", next_block, next_offset);", 
      "-", 
      "-\tdire = kmalloc(sizeof(struct squashfs_dir_entry) +", 
      "-\t\tSQUASHFS_NAME_LEN + 1, GFP_KERNEL);", 
      "-\tif (dire == NULL) {", 
      "-\t\tERROR(\"Failed to allocate squashfs_dir_entry\\n\");", 
      "-\t\tgoto finish;", 
      "-\t}", 
      "-", 
      "-\twhile(file->f_pos < 3) {", 
      "-\t\tchar *name;", 
      "-\t\tint size, i_ino;", 
      "-", 
      "-\t\tif(file->f_pos == 0) {", 
      "-\t\t\tname = \".\";", 
      "-\t\t\tsize = 1;", 
      "-\t\t\ti_ino = i->i_ino;", 
      "-\t\t} else {", 
      "-\t\t\tname = \"..\";", 
      "-\t\t\tsize = 2;", 
      "-\t\t\ti_ino = SQUASHFS_I(i)->u.s2.parent_inode;", 
      "-\t\t}", 
      "-\t\tTRACE(\"Calling filldir(%x, %s, %d, %d, %d, %d)\\n\",", 
      "-\t\t\t\t(unsigned int) dirent, name, size, (int)", 
      "-\t\t\t\tfile->f_pos, i_ino, squashfs_filetype_table[1]);", 
      "-", 
      "-\t\tif (filldir(dirent, name, size, file->f_pos, i_ino,", 
      "-\t\t\t\tsquashfs_filetype_table[1]) < 0) {", 
      "-\t\t\t\tTRACE(\"Filldir returned less than 0\\n\");", 
      "-\t\t\tgoto finish;", 
      "-\t\t}", 
      "-\t\tfile->f_pos += size;", 
      "-\t}", 
      "-", 
      "-\tlength = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_start,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_offset,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_count, file->f_pos);", 
      "-", 
      "-\twhile (length < i_size_read(i)) {", 
      "-\t\t/* read directory header */", 
      "-\t\tif (msblk->swap) {", 
      "-\t\t\tstruct squashfs_dir_header sdirh;", 
      "-", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, &sdirh, next_block,", 
      "-\t\t\t\t\t next_offset, sizeof(sdirh), &next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += sizeof(sdirh);", 
      "-\t\t\tSQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);", 
      "-\t\t} else {", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, &dirh, next_block,", 
      "-\t\t\t\t\tnext_offset, sizeof(dirh), &next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += sizeof(dirh);", 
      "-\t\t}", 
      "-", 
      "-\t\tdir_count = dirh.count + 1;", 
      "-\t\twhile (dir_count--) {", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tstruct squashfs_dir_entry sdire;", 
      "-\t\t\t\tif (!squashfs_get_cached_block(i->i_sb, &sdire, next_block,", 
      "-\t\t\t\t\t\tnext_offset, sizeof(sdire), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\t\tlength += sizeof(sdire);", 
      "-\t\t\t\tSQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);", 
      "-\t\t\t} else {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(i->i_sb, dire, next_block,", 
      "-\t\t\t\t\t\tnext_offset, sizeof(*dire), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\t\tlength += sizeof(*dire);", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, dire->name, next_block,", 
      "-\t\t\t\t\t\tnext_offset, dire->size + 1, &next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += dire->size + 1;", 
      "-", 
      "-\t\t\tif (file->f_pos >= length)", 
      "-\t\t\t\tcontinue;", 
      "-", 
      "-\t\t\tdire->name[dire->size + 1] = '\\0';", 
      "-", 
      "-\t\t\tTRACE(\"Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\\n\",", 
      "-\t\t\t\t\t(unsigned int) dirent, dire->name, dire->size + 1,", 
      "-\t\t\t\t\t(int) file->f_pos, dirh.start_block, dire->offset,", 
      "-\t\t\t\t\tdirh.inode_number + dire->inode_number,", 
      "-\t\t\t\t\tsquashfs_filetype_table[dire->type]);", 
      "-", 
      "-\t\t\tif (filldir(dirent, dire->name, dire->size + 1, file->f_pos,", 
      "-\t\t\t\t\tdirh.inode_number + dire->inode_number,", 
      "-\t\t\t\t\tsquashfs_filetype_table[dire->type]) < 0) {", 
      "-\t\t\t\tTRACE(\"Filldir returned less than 0\\n\");", 
      "-\t\t\t\tgoto finish;", 
      "-\t\t\t}", 
      "-\t\t\tfile->f_pos = length;", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-finish:", 
      "-\tkfree(dire);", 
      "-\treturn 0;", 
      "-", 
      "-failed_read:", 
      "-\tERROR(\"Unable to read directory block [%llx:%x]\\n\", next_block,", 
      "-\t\tnext_offset);", 
      "-\tkfree(dire);", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,", 
      "-\t\t\t\tstruct nameidata *nd)", 
      "-{", 
      "-\tconst unsigned char *name = dentry->d_name.name;", 
      "-\tint len = dentry->d_name.len;", 
      "-\tstruct inode *inode = NULL;", 
      "-\tstruct squashfs_sb_info *msblk = i->i_sb->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tlong long next_block = SQUASHFS_I(i)->start_block +", 
      "-\t\t\t\tsblk->directory_table_start;", 
      "-\tint next_offset = SQUASHFS_I(i)->offset, length = 0, dir_count;", 
      "-\tstruct squashfs_dir_header dirh;", 
      "-\tstruct squashfs_dir_entry *dire;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_lookup [%llx:%x]\\n\", next_block, next_offset);", 
      "-", 
      "-\tdire = kmalloc(sizeof(struct squashfs_dir_entry) +", 
      "-\t\tSQUASHFS_NAME_LEN + 1, GFP_KERNEL);", 
      "-\tif (dire == NULL) {", 
      "-\t\tERROR(\"Failed to allocate squashfs_dir_entry\\n\");", 
      "-\t\tgoto exit_lookup;", 
      "-\t}", 
      "-", 
      "-\tif (len > SQUASHFS_NAME_LEN)", 
      "-\t\tgoto exit_lookup;", 
      "-", 
      "-\tlength = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_start,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_offset,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_count, name, len);", 
      "-", 
      "-\twhile (length < i_size_read(i)) {", 
      "-\t\t/* read directory header */", 
      "-\t\tif (msblk->swap) {", 
      "-\t\t\tstruct squashfs_dir_header sdirh;", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, &sdirh, next_block,", 
      "-\t\t\t\t\t next_offset, sizeof(sdirh), &next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += sizeof(sdirh);", 
      "-\t\t\tSQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);", 
      "-\t\t} else {", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, &dirh, next_block,", 
      "-\t\t\t\t\tnext_offset, sizeof(dirh), &next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += sizeof(dirh);", 
      "-\t\t}", 
      "-", 
      "-\t\tdir_count = dirh.count + 1;", 
      "-\t\twhile (dir_count--) {", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tstruct squashfs_dir_entry sdire;", 
      "-\t\t\t\tif (!squashfs_get_cached_block(i->i_sb, &sdire, next_block,", 
      "-\t\t\t\t\t\tnext_offset, sizeof(sdire), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\t\tlength += sizeof(sdire);", 
      "-\t\t\t\tSQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);", 
      "-\t\t\t} else {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(i->i_sb, dire, next_block,", 
      "-\t\t\t\t\t\tnext_offset, sizeof(*dire), &next_block, &next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\t\tlength += sizeof(*dire);", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, dire->name, next_block,", 
      "-\t\t\t\t\tnext_offset, dire->size + 1, &next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += dire->size + 1;", 
      "-", 
      "-\t\t\tif (name[0] < dire->name[0])", 
      "-\t\t\t\tgoto exit_lookup;", 
      "-", 
      "-\t\t\tif ((len == dire->size + 1) && !strncmp(name, dire->name, len)) {", 
      "-\t\t\t\tsquashfs_inode_t ino = SQUASHFS_MKINODE(dirh.start_block,", 
      "-\t\t\t\t\t\t\t\tdire->offset);", 
      "-", 
      "-\t\t\t\tTRACE(\"calling squashfs_iget for directory entry %s, inode\"", 
      "-\t\t\t\t\t\"  %x:%x, %d\\n\", name, dirh.start_block, dire->offset,", 
      "-\t\t\t\t\tdirh.inode_number + dire->inode_number);", 
      "-", 
      "-\t\t\t\tinode = squashfs_iget(i->i_sb, ino, dirh.inode_number + dire->inode_number);", 
      "-", 
      "-\t\t\t\tgoto exit_lookup;", 
      "-\t\t\t}", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-exit_lookup:", 
      "-\tkfree(dire);", 
      "-\tif (inode)", 
      "-\t\treturn d_splice_alias(inode, dentry);", 
      "-\td_add(dentry, inode);", 
      "-\treturn ERR_PTR(0);", 
      "-", 
      "-failed_read:", 
      "-\tERROR(\"Unable to read directory block [%llx:%x]\\n\", next_block,", 
      "-\t\tnext_offset);", 
      "-\tgoto exit_lookup;", 
      "-}", 
      "-", 
      "-", 
      "-static int squashfs_remount(struct super_block *s, int *flags, char *data)", 
      "-{", 
      "-\t*flags |= MS_RDONLY;", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static void squashfs_put_super(struct super_block *s)", 
      "-{", 
      "-\tint i;", 
      "-", 
      "-\tif (s->s_fs_info) {", 
      "-\t\tstruct squashfs_sb_info *sbi = s->s_fs_info;", 
      "-\t\tif (sbi->block_cache)", 
      "-\t\t\tfor (i = 0; i < squashfs_cached_blks; i++)", 
      "-\t\t\t\tif (sbi->block_cache[i].block != SQUASHFS_INVALID_BLK)", 
      "-\t\t\t\t\tvfree(sbi->block_cache[i].data);", 
      "-\t\tif (sbi->fragment)", 
      "-\t\t\tfor (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)", 
      "-\t\t\t\tvfree(sbi->fragment[i].data);", 
      "-\t\tkfree(sbi->fragment);", 
      "-\t\tkfree(sbi->block_cache);", 
      "-\t\tvfree(sbi->read_page);", 
      "-\t\tkfree(sbi->uid);", 
      "-\t\tkfree(sbi->fragment_index);", 
      "-\t\tkfree(sbi->fragment_index_2);", 
      "-\t\tkfree(sbi->meta_index);", 
      "-\t\tvfree(sbi->stream.workspace);", 
      "-\t\tkfree(s->s_fs_info);", 
      "-\t\ts->s_fs_info = NULL;", 
      "-\t}", 
      "-}", 
      "-", 
      "-", 
      "-static int squashfs_get_sb(struct file_system_type *fs_type, int flags,", 
      "-\t\t\t\tconst char *dev_name, void *data, struct vfsmount *mnt)", 
      "-{", 
      "-\treturn get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super,", 
      "-\t\t\t\tmnt);", 
      "-}", 
      "-", 
      "-", 
      "-static int __init init_squashfs_fs(void)", 
      "-{", 
      "-\tint err = init_inodecache();", 
      "-\tif (err)", 
      "-\t\tgoto out;", 
      "-", 
      "-\tprintk(KERN_INFO \"squashfs: version 3.3 (2007/10/31) \"", 
      "-\t\t\"Phillip Lougher\\n\");", 
      "-", 
      "-\terr = register_filesystem(&squashfs_fs_type);", 
      "-\tif (err)", 
      "-\t\tdestroy_inodecache();", 
      "-", 
      "-out:", 
      "-\treturn err;", 
      "-}", 
      "-", 
      "-", 
      "-static void __exit exit_squashfs_fs(void)", 
      "-{", 
      "-\tunregister_filesystem(&squashfs_fs_type);", 
      "-\tdestroy_inodecache();", 
      "-}", 
      "-", 
      "-", 
      "-static struct kmem_cache * squashfs_inode_cachep;", 
      "-", 
      "-", 
      "-static struct inode *squashfs_alloc_inode(struct super_block *sb)", 
      "-{", 
      "-\tstruct squashfs_inode_info *ei;", 
      "-\tei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL);", 
      "-\treturn ei ? &ei->vfs_inode : NULL;", 
      "-}", 
      "-", 
      "-", 
      "-static void squashfs_destroy_inode(struct inode *inode)", 
      "-{", 
      "-\tkmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));", 
      "-}", 
      "-", 
      "-", 
      "-static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags)", 
      "-{", 
      "-\tstruct squashfs_inode_info *ei = foo;", 
      "-", 
      "-\tinode_init_once(&ei->vfs_inode);", 
      "-}", 
      "-", 
      "-", 
      "-static int __init init_inodecache(void)", 
      "-{", 
      "-\tsquashfs_inode_cachep = kmem_cache_create(\"squashfs_inode_cache\",", 
      "-\t    sizeof(struct squashfs_inode_info), 0,", 
      "-\t\tSLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, init_once);", 
      "-\tif (squashfs_inode_cachep == NULL)", 
      "-\t\treturn -ENOMEM;", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static void destroy_inodecache(void)", 
      "-{", 
      "-\tkmem_cache_destroy(squashfs_inode_cachep);", 
      "-}", 
      "-", 
      "-", 
      "-module_init(init_squashfs_fs);", 
      "-module_exit(exit_squashfs_fs);", 
      "-MODULE_DESCRIPTION(\"squashfs 3.2-r2-CVS, a compressed read-only filesystem\");", 
      "-MODULE_AUTHOR(\"Phillip Lougher <phillip@lougher.demon.co.uk>\");", 
      "-MODULE_LICENSE(\"GPL\");"
    ]
  ], 
  [
    "linux-2.6.23.orig/fs/squashfs/squashfs.h", 
    "dev/null", 
    [
      "Index: linux-2.6.23/fs/squashfs/squashfs.h", 
      "===================================================================", 
      "--- linux-2.6.23.orig/fs/squashfs/squashfs.h", 
      "+++ dev/null", 
      "@@ -1,86 +0,0 @@", 
      "-/*", 
      "- * Squashfs - a compressed read only filesystem for Linux", 
      "- *", 
      "- * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007", 
      "- * Phillip Lougher <phillip@lougher.demon.co.uk>", 
      "- *", 
      "- * This program is free software; you can redistribute it and/or", 
      "- * modify it under the terms of the GNU General Public License", 
      "- * as published by the Free Software Foundation; either version 2,", 
      "- * or (at your option) any later version.", 
      "- *", 
      "- * This program is distributed in the hope that it will be useful,", 
      "- * but WITHOUT ANY WARRANTY; without even the implied warranty of", 
      "- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the", 
      "- * GNU General Public License for more details.", 
      "- *", 
      "- * You should have received a copy of the GNU General Public License", 
      "- * along with this program; if not, write to the Free Software", 
      "- * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.", 
      "- *", 
      "- * squashfs.h", 
      "- */", 
      "-", 
      "-#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY", 
      "-#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY", 
      "-#endif", 
      "-", 
      "-#ifdef SQUASHFS_TRACE", 
      "-#define TRACE(s, args...)\tprintk(KERN_NOTICE \"SQUASHFS: \"s, ## args)", 
      "-#else", 
      "-#define TRACE(s, args...)\t{}", 
      "-#endif", 
      "-", 
      "-#define ERROR(s, args...)\tprintk(KERN_ERR \"SQUASHFS error: \"s, ## args)", 
      "-", 
      "-#define SERROR(s, args...)\tdo { \\", 
      "-\t\t\t\tif (!silent) \\", 
      "-\t\t\t\tprintk(KERN_ERR \"SQUASHFS error: \"s, ## args);\\", 
      "-\t\t\t\t} while(0)", 
      "-", 
      "-#define WARNING(s, args...)\tprintk(KERN_WARNING \"SQUASHFS: \"s, ## args)", 
      "-", 
      "-static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)", 
      "-{", 
      "-\treturn list_entry(inode, struct squashfs_inode_info, vfs_inode);", 
      "-}", 
      "-", 
      "-#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)", 
      "-#define SQSH_EXTERN", 
      "-extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,", 
      "-\t\t\t\tlong long index, unsigned int length,", 
      "-\t\t\t\tlong long *next_index, int srclength);", 
      "-extern int squashfs_get_cached_block(struct super_block *s, void *buffer,", 
      "-\t\t\t\tlong long block, unsigned int offset,", 
      "-\t\t\t\tint length, long long *next_block,", 
      "-\t\t\t\tunsigned int *next_offset);", 
      "-extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct", 
      "-\t\t\t\t\tsquashfs_fragment_cache *fragment);", 
      "-extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block", 
      "-\t\t\t\t\t*s, long long start_block,", 
      "-\t\t\t\t\tint length);", 
      "-extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number);", 
      "-extern const struct address_space_operations squashfs_symlink_aops;", 
      "-extern const struct address_space_operations squashfs_aops;", 
      "-extern struct inode_operations squashfs_dir_inode_ops;", 
      "-#else", 
      "-#define SQSH_EXTERN static", 
      "-#endif", 
      "-", 
      "-#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY", 
      "-extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);", 
      "-#else", 
      "-static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)", 
      "-{", 
      "-\treturn 0;", 
      "-}", 
      "-#endif", 
      "-", 
      "-#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY", 
      "-extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);", 
      "-#else", 
      "-static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)", 
      "-{", 
      "-\treturn 0;", 
      "-}", 
      "-#endif"
    ]
  ], 
  [
    "linux-2.6.23.orig/fs/squashfs/squashfs2_0.c", 
    "dev/null", 
    [
      "Index: linux-2.6.23/fs/squashfs/squashfs2_0.c", 
      "===================================================================", 
      "--- linux-2.6.23.orig/fs/squashfs/squashfs2_0.c", 
      "+++ dev/null", 
      "@@ -1,740 +0,0 @@", 
      "-/*", 
      "- * Squashfs - a compressed read only filesystem for Linux", 
      "- *", 
      "- * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007", 
      "- * Phillip Lougher <phillip@lougher.demon.co.uk>", 
      "- *", 
      "- * This program is free software; you can redistribute it and/or", 
      "- * modify it under the terms of the GNU General Public License", 
      "- * as published by the Free Software Foundation; either version 2,", 
      "- * or (at your option) any later version.", 
      "- *", 
      "- * This program is distributed in the hope that it will be useful,", 
      "- * but WITHOUT ANY WARRANTY; without even the implied warranty of", 
      "- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the", 
      "- * GNU General Public License for more details.", 
      "- *", 
      "- * You should have received a copy of the GNU General Public License", 
      "- * along with this program; if not, write to the Free Software", 
      "- * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.", 
      "- *", 
      "- * squashfs2_0.c", 
      "- */", 
      "-", 
      "-#include <linux/squashfs_fs.h>", 
      "-#include <linux/module.h>", 
      "-#include <linux/zlib.h>", 
      "-#include <linux/fs.h>", 
      "-#include <linux/squashfs_fs_sb.h>", 
      "-#include <linux/squashfs_fs_i.h>", 
      "-", 
      "-#include \"squashfs.h\"", 
      "-static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);", 
      "-static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,", 
      "-\t\t\t\tstruct nameidata *);", 
      "-", 
      "-static struct file_operations squashfs_dir_ops_2 = {", 
      "-\t.read = generic_read_dir,", 
      "-\t.readdir = squashfs_readdir_2", 
      "-};", 
      "-", 
      "-static struct inode_operations squashfs_dir_inode_ops_2 = {", 
      "-\t.lookup = squashfs_lookup_2", 
      "-};", 
      "-", 
      "-static unsigned char squashfs_filetype_table[] = {", 
      "-\tDT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK", 
      "-};", 
      "-", 
      "-static int read_fragment_index_table_2(struct super_block *s)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-", 
      "-\tif (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2", 
      "-\t\t\t\t\t(sblk->fragments), GFP_KERNEL))) {", 
      "-\t\tERROR(\"Failed to allocate uid/gid table\\n\");", 
      "-\t\treturn 0;", 
      "-\t}", 
      "-", 
      "-\tif (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&", 
      "-\t\t\t\t\t!squashfs_read_data(s, (char *)", 
      "-\t\t\t\t\tmsblk->fragment_index_2,", 
      "-\t\t\t\t\tsblk->fragment_table_start,", 
      "-\t\t\t\t\tSQUASHFS_FRAGMENT_INDEX_BYTES_2", 
      "-\t\t\t\t\t(sblk->fragments) |", 
      "-\t\t\t\t\tSQUASHFS_COMPRESSED_BIT_BLOCK, NULL, SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments))) {", 
      "-\t\tERROR(\"unable to read fragment index table\\n\");", 
      "-\t\treturn 0;", 
      "-\t}", 
      "-", 
      "-\tif (msblk->swap) {", 
      "-\t\tint i;", 
      "-\t\tunsigned int fragment;", 
      "-", 
      "-\t\tfor (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);", 
      "-\t\t\t\t\t\t\t\t\ti++) {", 
      "-\t\t\tSQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),", 
      "-\t\t\t\t\t\t&msblk->fragment_index_2[i], 1);", 
      "-\t\t\tmsblk->fragment_index_2[i] = fragment;", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-\treturn 1;", 
      "-}", 
      "-", 
      "-", 
      "-static int get_fragment_location_2(struct super_block *s, unsigned int fragment,", 
      "-\t\t\t\tlong long *fragment_start_block,", 
      "-\t\t\t\tunsigned int *fragment_size)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tlong long start_block =", 
      "-\t\tmsblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];", 
      "-\tint offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);", 
      "-\tstruct squashfs_fragment_entry_2 fragment_entry;", 
      "-", 
      "-\tif (msblk->swap) {", 
      "-\t\tstruct squashfs_fragment_entry_2 sfragment_entry;", 
      "-", 
      "-\t\tif (!squashfs_get_cached_block(s, (char *) &sfragment_entry,", 
      "-\t\t\t\t\tstart_block, offset,", 
      "-\t\t\t\t\tsizeof(sfragment_entry), &start_block,", 
      "-\t\t\t\t\t&offset))", 
      "-\t\t\tgoto out;", 
      "-\t\tSQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);", 
      "-\t} else", 
      "-\t\tif (!squashfs_get_cached_block(s, (char *) &fragment_entry,", 
      "-\t\t\t\t\tstart_block, offset,", 
      "-\t\t\t\t\tsizeof(fragment_entry), &start_block,", 
      "-\t\t\t\t\t&offset))", 
      "-\t\t\tgoto out;", 
      "-", 
      "-\t*fragment_start_block = fragment_entry.start_block;", 
      "-\t*fragment_size = fragment_entry.size;", 
      "-", 
      "-\treturn 1;", 
      "-", 
      "-out:", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i,", 
      "-\t\tstruct squashfs_base_inode_header_2 *inodeb, unsigned int ino)", 
      "-{", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-", 
      "-\ti->i_ino = ino;", 
      "-\ti->i_mtime.tv_sec = sblk->mkfs_time;", 
      "-\ti->i_atime.tv_sec = sblk->mkfs_time;", 
      "-\ti->i_ctime.tv_sec = sblk->mkfs_time;", 
      "-\ti->i_uid = msblk->uid[inodeb->uid];", 
      "-\ti->i_mode = inodeb->mode;", 
      "-\ti->i_nlink = 1;", 
      "-\ti->i_size = 0;", 
      "-\tif (inodeb->guid == SQUASHFS_GUIDS)", 
      "-\t\ti->i_gid = i->i_uid;", 
      "-\telse", 
      "-\t\ti->i_gid = msblk->guid[inodeb->guid];", 
      "-}", 
      "-", 
      "-", 
      "-static int squashfs_read_inode_2(struct inode *i, squashfs_inode_t inode)", 
      "-{", 
      "-\tstruct super_block *s = i->i_sb;", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tunsigned int block = SQUASHFS_INODE_BLK(inode) +", 
      "-\t\tsblk->inode_table_start;", 
      "-\tunsigned int offset = SQUASHFS_INODE_OFFSET(inode);", 
      "-\tunsigned int ino = SQUASHFS_MK_VFS_INODE(block -", 
      "-\t\tsblk->inode_table_start, offset);", 
      "-\tlong long next_block;", 
      "-\tunsigned int next_offset;", 
      "-\tunion squashfs_inode_header_2 id, sid;", 
      "-\tstruct squashfs_base_inode_header_2 *inodeb = &id.base,", 
      "-\t\t\t\t\t  *sinodeb = &sid.base;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_read_inode_2\\n\");", 
      "-", 
      "-\tif (msblk->swap) {", 
      "-\t\tif (!squashfs_get_cached_block(s, (char *) sinodeb, block,", 
      "-\t\t\t\t\toffset, sizeof(*sinodeb), &next_block,", 
      "-\t\t\t\t\t&next_offset))", 
      "-\t\t\tgoto failed_read;", 
      "-\t\tSQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,", 
      "-\t\t\t\t\tsizeof(*sinodeb));", 
      "-\t} else", 
      "-\t\tif (!squashfs_get_cached_block(s, (char *) inodeb, block,", 
      "-\t\t\t\t\toffset, sizeof(*inodeb), &next_block,", 
      "-\t\t\t\t\t&next_offset))", 
      "-\t\t\tgoto failed_read;", 
      "-", 
      "-\tsquashfs_new_inode(msblk, i, inodeb, ino);", 
      "-", 
      "-\tswitch(inodeb->inode_type) {", 
      "-\t\tcase SQUASHFS_FILE_TYPE: {", 
      "-\t\t\tstruct squashfs_reg_inode_header_2 *inodep = &id.reg;", 
      "-\t\t\tstruct squashfs_reg_inode_header_2 *sinodep = &sid.reg;", 
      "-\t\t\tlong long frag_blk;", 
      "-\t\t\tunsigned int frag_size = 0;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, (char *)", 
      "-\t\t\t\t\t\tsinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, (char *)", 
      "-\t\t\t\t\t\tinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tfrag_blk = SQUASHFS_INVALID_BLK;", 
      "-\t\t\tif (inodep->fragment != SQUASHFS_INVALID_FRAG &&", 
      "-\t\t\t\t\t!get_fragment_location_2(s,", 
      "-\t\t\t\t\tinodep->fragment, &frag_blk, &frag_size))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_size = inodep->file_size;", 
      "-\t\t\ti->i_fop = &generic_ro_fops;", 
      "-\t\t\ti->i_mode |= S_IFREG;", 
      "-\t\t\ti->i_mtime.tv_sec = inodep->mtime;", 
      "-\t\t\ti->i_atime.tv_sec = inodep->mtime;", 
      "-\t\t\ti->i_ctime.tv_sec = inodep->mtime;", 
      "-\t\t\ti->i_blocks = ((i->i_size - 1) >> 9) + 1;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.fragment_size = frag_size;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;", 
      "-\t\t\tSQUASHFS_I(i)->start_block = inodep->start_block;", 
      "-\t\t\tSQUASHFS_I(i)->u.s1.block_list_start = next_block;", 
      "-\t\t\tSQUASHFS_I(i)->offset = next_offset;", 
      "-\t\t\ti->i_data.a_ops = &squashfs_aops;", 
      "-", 
      "-\t\t\tTRACE(\"File inode %x:%x, start_block %x, \"", 
      "-\t\t\t\t\t\"block_list_start %llx, offset %x\\n\",", 
      "-\t\t\t\t\tSQUASHFS_INODE_BLK(inode), offset,", 
      "-\t\t\t\t\tinodep->start_block, next_block,", 
      "-\t\t\t\t\tnext_offset);", 
      "-\t\t\tbreak;", 
      "-\t\t}", 
      "-\t\tcase SQUASHFS_DIR_TYPE: {", 
      "-\t\t\tstruct squashfs_dir_inode_header_2 *inodep = &id.dir;", 
      "-\t\t\tstruct squashfs_dir_inode_header_2 *sinodep = &sid.dir;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, (char *)", 
      "-\t\t\t\t\t\tsinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, (char *)", 
      "-\t\t\t\t\t\tinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_size = inodep->file_size;", 
      "-\t\t\ti->i_op = &squashfs_dir_inode_ops_2;", 
      "-\t\t\ti->i_fop = &squashfs_dir_ops_2;", 
      "-\t\t\ti->i_mode |= S_IFDIR;", 
      "-\t\t\ti->i_mtime.tv_sec = inodep->mtime;", 
      "-\t\t\ti->i_atime.tv_sec = inodep->mtime;", 
      "-\t\t\ti->i_ctime.tv_sec = inodep->mtime;", 
      "-\t\t\tSQUASHFS_I(i)->start_block = inodep->start_block;", 
      "-\t\t\tSQUASHFS_I(i)->offset = inodep->offset;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.directory_index_count = 0;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.parent_inode = 0;", 
      "-", 
      "-\t\t\tTRACE(\"Directory inode %x:%x, start_block %x, offset \"", 
      "-\t\t\t\t\t\"%x\\n\", SQUASHFS_INODE_BLK(inode),", 
      "-\t\t\t\t\toffset, inodep->start_block,", 
      "-\t\t\t\t\tinodep->offset);", 
      "-\t\t\tbreak;", 
      "-\t\t}", 
      "-\t\tcase SQUASHFS_LDIR_TYPE: {", 
      "-\t\t\tstruct squashfs_ldir_inode_header_2 *inodep = &id.ldir;", 
      "-\t\t\tstruct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, (char *)", 
      "-\t\t\t\t\t\tsinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,", 
      "-\t\t\t\t\t\tsinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, (char *)", 
      "-\t\t\t\t\t\tinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_size = inodep->file_size;", 
      "-\t\t\ti->i_op = &squashfs_dir_inode_ops_2;", 
      "-\t\t\ti->i_fop = &squashfs_dir_ops_2;", 
      "-\t\t\ti->i_mode |= S_IFDIR;", 
      "-\t\t\ti->i_mtime.tv_sec = inodep->mtime;", 
      "-\t\t\ti->i_atime.tv_sec = inodep->mtime;", 
      "-\t\t\ti->i_ctime.tv_sec = inodep->mtime;", 
      "-\t\t\tSQUASHFS_I(i)->start_block = inodep->start_block;", 
      "-\t\t\tSQUASHFS_I(i)->offset = inodep->offset;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.directory_index_start = next_block;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.directory_index_offset =", 
      "-\t\t\t\t\t\t\t\tnext_offset;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.directory_index_count =", 
      "-\t\t\t\t\t\t\t\tinodep->i_count;", 
      "-\t\t\tSQUASHFS_I(i)->u.s2.parent_inode = 0;", 
      "-", 
      "-\t\t\tTRACE(\"Long directory inode %x:%x, start_block %x, \"", 
      "-\t\t\t\t\t\"offset %x\\n\",", 
      "-\t\t\t\t\tSQUASHFS_INODE_BLK(inode), offset,", 
      "-\t\t\t\t\tinodep->start_block, inodep->offset);", 
      "-\t\t\tbreak;", 
      "-\t\t}", 
      "-\t\tcase SQUASHFS_SYMLINK_TYPE: {", 
      "-\t\t\tstruct squashfs_symlink_inode_header_2 *inodep =", 
      "-\t\t\t\t\t\t\t\t&id.symlink;", 
      "-\t\t\tstruct squashfs_symlink_inode_header_2 *sinodep =", 
      "-\t\t\t\t\t\t\t\t&sid.symlink;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, (char *)", 
      "-\t\t\t\t\t\tsinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,", 
      "-\t\t\t\t\t\t\t\tsinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, (char *)", 
      "-\t\t\t\t\t\tinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_size = inodep->symlink_size;", 
      "-\t\t\ti->i_op = &page_symlink_inode_operations;", 
      "-\t\t\ti->i_data.a_ops = &squashfs_symlink_aops;", 
      "-\t\t\ti->i_mode |= S_IFLNK;", 
      "-\t\t\tSQUASHFS_I(i)->start_block = next_block;", 
      "-\t\t\tSQUASHFS_I(i)->offset = next_offset;", 
      "-", 
      "-\t\t\tTRACE(\"Symbolic link inode %x:%x, start_block %llx, \"", 
      "-\t\t\t\t\t\"offset %x\\n\",", 
      "-\t\t\t\t\tSQUASHFS_INODE_BLK(inode), offset,", 
      "-\t\t\t\t\tnext_block, next_offset);", 
      "-\t\t\tbreak;", 
      "-\t\t }", 
      "-\t\t case SQUASHFS_BLKDEV_TYPE:", 
      "-\t\t case SQUASHFS_CHRDEV_TYPE: {", 
      "-\t\t\tstruct squashfs_dev_inode_header_2 *inodep = &id.dev;", 
      "-\t\t\tstruct squashfs_dev_inode_header_2 *sinodep = &sid.dev;", 
      "-", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, (char *)", 
      "-\t\t\t\t\t\tsinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*sinodep), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-\t\t\t\tSQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);", 
      "-\t\t\t} else", 
      "-\t\t\t\tif (!squashfs_get_cached_block(s, (char *)", 
      "-\t\t\t\t\t\tinodep, block, offset,", 
      "-\t\t\t\t\t\tsizeof(*inodep), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\ti->i_mode |= (inodeb->inode_type ==", 
      "-\t\t\t\t\tSQUASHFS_CHRDEV_TYPE) ?  S_IFCHR :", 
      "-\t\t\t\t\tS_IFBLK;", 
      "-\t\t\tinit_special_inode(i, i->i_mode,", 
      "-\t\t\t\t\told_decode_dev(inodep->rdev));", 
      "-", 
      "-\t\t\tTRACE(\"Device inode %x:%x, rdev %x\\n\",", 
      "-\t\t\t\t\tSQUASHFS_INODE_BLK(inode), offset,", 
      "-\t\t\t\t\tinodep->rdev);", 
      "-\t\t\tbreak;", 
      "-\t\t }", 
      "-\t\t case SQUASHFS_FIFO_TYPE:", 
      "-\t\t case SQUASHFS_SOCKET_TYPE: {", 
      "-", 
      "-\t\t\ti->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)", 
      "-\t\t\t\t\t\t\t? S_IFIFO : S_IFSOCK;", 
      "-\t\t\tinit_special_inode(i, i->i_mode, 0);", 
      "-\t\t\tbreak;", 
      "-\t\t }", 
      "-\t\t default:", 
      "-\t\t\tERROR(\"Unknown inode type %d in squashfs_iget!\\n\",", 
      "-\t\t\t\t\tinodeb->inode_type);", 
      "-\t\t\tgoto failed_read1;", 
      "-\t}", 
      "-", 
      "-\treturn 1;", 
      "-", 
      "-failed_read:", 
      "-\tERROR(\"Unable to read inode [%x:%x]\\n\", block, offset);", 
      "-", 
      "-failed_read1:", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static int get_dir_index_using_offset(struct super_block *s, long long", 
      "-\t\t\t\t*next_block, unsigned int *next_offset,", 
      "-\t\t\t\tlong long index_start,", 
      "-\t\t\t\tunsigned int index_offset, int i_count,", 
      "-\t\t\t\tlong long f_pos)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tint i, length = 0;", 
      "-\tstruct squashfs_dir_index_2 index;", 
      "-", 
      "-\tTRACE(\"Entered get_dir_index_using_offset, i_count %d, f_pos %d\\n\",", 
      "-\t\t\t\t\ti_count, (unsigned int) f_pos);", 
      "-", 
      "-\tif (f_pos == 0)", 
      "-\t\tgoto finish;", 
      "-", 
      "-\tfor (i = 0; i < i_count; i++) {", 
      "-\t\tif (msblk->swap) {", 
      "-\t\t\tstruct squashfs_dir_index_2 sindex;", 
      "-\t\t\tsquashfs_get_cached_block(s, (char *) &sindex,", 
      "-\t\t\t\t\tindex_start, index_offset,", 
      "-\t\t\t\t\tsizeof(sindex), &index_start,", 
      "-\t\t\t\t\t&index_offset);", 
      "-\t\t\tSQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);", 
      "-\t\t} else", 
      "-\t\t\tsquashfs_get_cached_block(s, (char *) &index,", 
      "-\t\t\t\t\tindex_start, index_offset,", 
      "-\t\t\t\t\tsizeof(index), &index_start,", 
      "-\t\t\t\t\t&index_offset);", 
      "-", 
      "-\t\tif (index.index > f_pos)", 
      "-\t\t\tbreak;", 
      "-", 
      "-\t\tsquashfs_get_cached_block(s, NULL, index_start, index_offset,", 
      "-\t\t\t\t\tindex.size + 1, &index_start,", 
      "-\t\t\t\t\t&index_offset);", 
      "-", 
      "-\t\tlength = index.index;", 
      "-\t\t*next_block = index.start_block + sblk->directory_table_start;", 
      "-\t}", 
      "-", 
      "-\t*next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;", 
      "-", 
      "-finish:", 
      "-\treturn length;", 
      "-}", 
      "-", 
      "-", 
      "-static int get_dir_index_using_name(struct super_block *s, long long", 
      "-\t\t\t\t*next_block, unsigned int *next_offset,", 
      "-\t\t\t\tlong long index_start,", 
      "-\t\t\t\tunsigned int index_offset, int i_count,", 
      "-\t\t\t\tconst char *name, int size)", 
      "-{", 
      "-\tstruct squashfs_sb_info *msblk = s->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tint i, length = 0;", 
      "-\tstruct squashfs_dir_index_2 *index;", 
      "-\tchar *str;", 
      "-", 
      "-\tTRACE(\"Entered get_dir_index_using_name, i_count %d\\n\", i_count);", 
      "-", 
      "-\tif (!(str = kmalloc(sizeof(struct squashfs_dir_index) +", 
      "-\t\t(SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) {", 
      "-\t\tERROR(\"Failed to allocate squashfs_dir_index\\n\");", 
      "-\t\tgoto failure;", 
      "-\t}", 
      "-", 
      "-\tindex = (struct squashfs_dir_index_2 *) (str + SQUASHFS_NAME_LEN + 1);", 
      "-\tstrncpy(str, name, size);", 
      "-\tstr[size] = '\\0';", 
      "-", 
      "-\tfor (i = 0; i < i_count; i++) {", 
      "-\t\tif (msblk->swap) {", 
      "-\t\t\tstruct squashfs_dir_index_2 sindex;", 
      "-\t\t\tsquashfs_get_cached_block(s, (char *) &sindex,", 
      "-\t\t\t\t\tindex_start, index_offset,", 
      "-\t\t\t\t\tsizeof(sindex), &index_start,", 
      "-\t\t\t\t\t&index_offset);", 
      "-\t\t\tSQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);", 
      "-\t\t} else", 
      "-\t\t\tsquashfs_get_cached_block(s, (char *) index,", 
      "-\t\t\t\t\tindex_start, index_offset,", 
      "-\t\t\t\t\tsizeof(struct squashfs_dir_index_2),", 
      "-\t\t\t\t\t&index_start, &index_offset);", 
      "-", 
      "-\t\tsquashfs_get_cached_block(s, index->name, index_start,", 
      "-\t\t\t\t\tindex_offset, index->size + 1,", 
      "-\t\t\t\t\t&index_start, &index_offset);", 
      "-", 
      "-\t\tindex->name[index->size + 1] = '\\0';", 
      "-", 
      "-\t\tif (strcmp(index->name, str) > 0)", 
      "-\t\t\tbreak;", 
      "-", 
      "-\t\tlength = index->index;", 
      "-\t\t*next_block = index->start_block + sblk->directory_table_start;", 
      "-\t}", 
      "-", 
      "-\t*next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;", 
      "-\tkfree(str);", 
      "-failure:", 
      "-\treturn length;", 
      "-}", 
      "-", 
      "-", 
      "-static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)", 
      "-{", 
      "-\tstruct inode *i = file->f_dentry->d_inode;", 
      "-\tstruct squashfs_sb_info *msblk = i->i_sb->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tlong long next_block = SQUASHFS_I(i)->start_block +", 
      "-\t\tsblk->directory_table_start;", 
      "-\tint next_offset = SQUASHFS_I(i)->offset, length = 0,", 
      "-\t\tdir_count;", 
      "-\tstruct squashfs_dir_header_2 dirh;", 
      "-\tstruct squashfs_dir_entry_2 *dire;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_readdir_2 [%llx:%x]\\n\", next_block, next_offset);", 
      "-", 
      "-\tif (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) +", 
      "-\t\tSQUASHFS_NAME_LEN + 1, GFP_KERNEL))) {", 
      "-\t\tERROR(\"Failed to allocate squashfs_dir_entry\\n\");", 
      "-\t\tgoto finish;", 
      "-\t}", 
      "-", 
      "-\tlength = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_start,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_offset,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_count,", 
      "-\t\t\t\tfile->f_pos);", 
      "-", 
      "-\twhile (length < i_size_read(i)) {", 
      "-\t\t/* read directory header */", 
      "-\t\tif (msblk->swap) {", 
      "-\t\t\tstruct squashfs_dir_header_2 sdirh;", 
      "-", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,", 
      "-\t\t\t\t\tnext_block, next_offset, sizeof(sdirh),", 
      "-\t\t\t\t\t&next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += sizeof(sdirh);", 
      "-\t\t\tSQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);", 
      "-\t\t} else {", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,", 
      "-\t\t\t\t\tnext_block, next_offset, sizeof(dirh),", 
      "-\t\t\t\t\t&next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += sizeof(dirh);", 
      "-\t\t}", 
      "-", 
      "-\t\tdir_count = dirh.count + 1;", 
      "-\t\twhile (dir_count--) {", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tstruct squashfs_dir_entry_2 sdire;", 
      "-\t\t\t\tif (!squashfs_get_cached_block(i->i_sb, (char *)", 
      "-\t\t\t\t\t\t&sdire, next_block, next_offset,", 
      "-\t\t\t\t\t\tsizeof(sdire), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\t\tlength += sizeof(sdire);", 
      "-\t\t\t\tSQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);", 
      "-\t\t\t} else {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(i->i_sb, (char *)", 
      "-\t\t\t\t\t\tdire, next_block, next_offset,", 
      "-\t\t\t\t\t\tsizeof(*dire), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\t\tlength += sizeof(*dire);", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, dire->name,", 
      "-\t\t\t\t\t\tnext_block, next_offset,", 
      "-\t\t\t\t\t\tdire->size + 1, &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += dire->size + 1;", 
      "-", 
      "-\t\t\tif (file->f_pos >= length)", 
      "-\t\t\t\tcontinue;", 
      "-", 
      "-\t\t\tdire->name[dire->size + 1] = '\\0';", 
      "-", 
      "-\t\t\tTRACE(\"Calling filldir(%x, %s, %d, %d, %x:%x, %d)\\n\",", 
      "-\t\t\t\t\t(unsigned int) dirent, dire->name,", 
      "-\t\t\t\t\tdire->size + 1, (int) file->f_pos,", 
      "-\t\t\t\t\tdirh.start_block, dire->offset,", 
      "-\t\t\t\t\tsquashfs_filetype_table[dire->type]);", 
      "-", 
      "-\t\t\tif (filldir(dirent, dire->name, dire->size + 1,", 
      "-\t\t\t\t\tfile->f_pos, SQUASHFS_MK_VFS_INODE(", 
      "-\t\t\t\t\tdirh.start_block, dire->offset),", 
      "-\t\t\t\t\tsquashfs_filetype_table[dire->type])", 
      "-\t\t\t\t\t< 0) {", 
      "-\t\t\t\tTRACE(\"Filldir returned less than 0\\n\");", 
      "-\t\t\t\tgoto finish;", 
      "-\t\t\t}", 
      "-\t\t\tfile->f_pos = length;", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-finish:", 
      "-\tkfree(dire);", 
      "-\treturn 0;", 
      "-", 
      "-failed_read:", 
      "-\tERROR(\"Unable to read directory block [%llx:%x]\\n\", next_block,", 
      "-\t\tnext_offset);", 
      "-\tkfree(dire);", 
      "-\treturn 0;", 
      "-}", 
      "-", 
      "-", 
      "-static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,", 
      "-\t\t\t\tstruct nameidata *nd)", 
      "-{", 
      "-\tconst unsigned char *name = dentry->d_name.name;", 
      "-\tint len = dentry->d_name.len;", 
      "-\tstruct inode *inode = NULL;", 
      "-\tstruct squashfs_sb_info *msblk = i->i_sb->s_fs_info;", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-\tlong long next_block = SQUASHFS_I(i)->start_block +", 
      "-\t\t\t\tsblk->directory_table_start;", 
      "-\tint next_offset = SQUASHFS_I(i)->offset, length = 0,", 
      "-\t\t\t\tdir_count;", 
      "-\tstruct squashfs_dir_header_2 dirh;", 
      "-\tstruct squashfs_dir_entry_2 *dire;", 
      "-\tint sorted = sblk->s_major == 2 && sblk->s_minor >= 1;", 
      "-", 
      "-\tTRACE(\"Entered squashfs_lookup_2 [%llx:%x]\\n\", next_block, next_offset);", 
      "-", 
      "-\tif (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) +", 
      "-\t\tSQUASHFS_NAME_LEN + 1, GFP_KERNEL))) {", 
      "-\t\tERROR(\"Failed to allocate squashfs_dir_entry\\n\");", 
      "-\t\tgoto exit_loop;", 
      "-\t}", 
      "-", 
      "-\tif (len > SQUASHFS_NAME_LEN)", 
      "-\t\tgoto exit_loop;", 
      "-", 
      "-\tlength = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_start,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_offset,", 
      "-\t\t\t\tSQUASHFS_I(i)->u.s2.directory_index_count, name,", 
      "-\t\t\t\tlen);", 
      "-", 
      "-\twhile (length < i_size_read(i)) {", 
      "-\t\t/* read directory header */", 
      "-\t\tif (msblk->swap) {", 
      "-\t\t\tstruct squashfs_dir_header_2 sdirh;", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,", 
      "-\t\t\t\t\tnext_block, next_offset, sizeof(sdirh),", 
      "-\t\t\t\t\t&next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += sizeof(sdirh);", 
      "-\t\t\tSQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);", 
      "-\t\t} else {", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,", 
      "-\t\t\t\t\tnext_block, next_offset, sizeof(dirh),", 
      "-\t\t\t\t\t&next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += sizeof(dirh);", 
      "-\t\t}", 
      "-", 
      "-\t\tdir_count = dirh.count + 1;", 
      "-\t\twhile (dir_count--) {", 
      "-\t\t\tif (msblk->swap) {", 
      "-\t\t\t\tstruct squashfs_dir_entry_2 sdire;", 
      "-\t\t\t\tif (!squashfs_get_cached_block(i->i_sb, (char *)", 
      "-\t\t\t\t\t\t&sdire, next_block,next_offset,", 
      "-\t\t\t\t\t\tsizeof(sdire), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\t\tlength += sizeof(sdire);", 
      "-\t\t\t\tSQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);", 
      "-\t\t\t} else {", 
      "-\t\t\t\tif (!squashfs_get_cached_block(i->i_sb, (char *)", 
      "-\t\t\t\t\t\tdire, next_block,next_offset,", 
      "-\t\t\t\t\t\tsizeof(*dire), &next_block,", 
      "-\t\t\t\t\t\t&next_offset))", 
      "-\t\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\t\tlength += sizeof(*dire);", 
      "-\t\t\t}", 
      "-", 
      "-\t\t\tif (!squashfs_get_cached_block(i->i_sb, dire->name,", 
      "-\t\t\t\t\tnext_block, next_offset, dire->size + 1,", 
      "-\t\t\t\t\t&next_block, &next_offset))", 
      "-\t\t\t\tgoto failed_read;", 
      "-", 
      "-\t\t\tlength += dire->size + 1;", 
      "-", 
      "-\t\t\tif (sorted && name[0] < dire->name[0])", 
      "-\t\t\t\tgoto exit_loop;", 
      "-", 
      "-\t\t\tif ((len == dire->size + 1) && !strncmp(name,", 
      "-\t\t\t\t\t\tdire->name, len)) {", 
      "-\t\t\t\tsquashfs_inode_t ino =", 
      "-\t\t\t\t\tSQUASHFS_MKINODE(dirh.start_block,", 
      "-\t\t\t\t\tdire->offset);", 
      "-\t\t\t\tunsigned int inode_number = SQUASHFS_MK_VFS_INODE(dirh.start_block,", 
      "-\t\t\t\t\tdire->offset);", 
      "-", 
      "-\t\t\t\tTRACE(\"calling squashfs_iget for directory \"", 
      "-\t\t\t\t\t\"entry %s, inode %x:%x, %lld\\n\", name,", 
      "-\t\t\t\t\tdirh.start_block, dire->offset, ino);", 
      "-", 
      "-\t\t\t\tinode = squashfs_iget(i->i_sb, ino, inode_number);", 
      "-", 
      "-\t\t\t\tgoto exit_loop;", 
      "-\t\t\t}", 
      "-\t\t}", 
      "-\t}", 
      "-", 
      "-exit_loop:", 
      "-\tkfree(dire);", 
      "-\td_add(dentry, inode);", 
      "-\treturn ERR_PTR(0);", 
      "-", 
      "-failed_read:", 
      "-\tERROR(\"Unable to read directory block [%llx:%x]\\n\", next_block,", 
      "-\t\tnext_offset);", 
      "-\tgoto exit_loop;", 
      "-}", 
      "-", 
      "-", 
      "-int squashfs_2_0_supported(struct squashfs_sb_info *msblk)", 
      "-{", 
      "-\tstruct squashfs_super_block *sblk = &msblk->sblk;", 
      "-", 
      "-\tmsblk->read_inode = squashfs_read_inode_2;", 
      "-\tmsblk->read_fragment_index_table = read_fragment_index_table_2;", 
      "-", 
      "-\tsblk->bytes_used = sblk->bytes_used_2;", 
      "-\tsblk->uid_start = sblk->uid_start_2;", 
      "-\tsblk->guid_start = sblk->guid_start_2;", 
      "-\tsblk->inode_table_start = sblk->inode_table_start_2;", 
      "-\tsblk->directory_table_start = sblk->directory_table_start_2;", 
      "-\tsblk->fragment_table_start = sblk->fragment_table_start_2;", 
      "-", 
      "-\treturn 1;", 
      "-}"
    ]
  ], 
  [
    "linux-2.6.23.orig/fs/Makefile", 
    "linux-2.6.23/fs/Makefile", 
    [
      "Index: linux-2.6.23/fs/Makefile", 
      "===================================================================", 
      "--- linux-2.6.23.orig/fs/Makefile", 
      "+++ linux-2.6.23/fs/Makefile", 
      "@@ -72,7 +72,6 @@ obj-$(CONFIG_JBD)\t\t+= jbd/", 
      "obj-$(CONFIG_JBD2)\t\t+= jbd2/", 
      "obj-$(CONFIG_EXT2_FS)\t\t+= ext2/", 
      "obj-$(CONFIG_CRAMFS)\t\t+= cramfs/", 
      "-obj-$(CONFIG_SQUASHFS)\t\t+= squashfs/", 
      "obj-$(CONFIG_RAMFS)\t\t+= ramfs/", 
      "obj-$(CONFIG_HUGETLBFS)\t\t+= hugetlbfs/", 
      "obj-$(CONFIG_CODA_FS)\t\t+= coda/"
    ]
  ], 
  [
    "linux-2.6.23.orig/include/linux/squashfs_fs.h", 
    "dev/null", 
    [
      "Index: linux-2.6.23/include/linux/squashfs_fs.h", 
      "===================================================================", 
      "--- linux-2.6.23.orig/include/linux/squashfs_fs.h", 
      "+++ dev/null", 
      "@@ -1,935 +0,0 @@", 
      "-#ifndef SQUASHFS_FS", 
      "-#define SQUASHFS_FS", 
      "-", 
      "-/*", 
      "- * Squashfs", 
      "- *", 
      "- * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007", 
      "- * Phillip Lougher <phillip@lougher.demon.co.uk>", 
      "- *", 
      "- * This program is free software; you can redistribute it and/or", 
      "- * modify it under the terms of the GNU General Public License", 
      "- * as published by the Free Software Foundation; either version 2,", 
      "- * or (at your option) any later version.", 
      "- *", 
      "- * This program is distributed in the hope that it will be useful,", 
      "- * but WITHOUT ANY WARRANTY; without even the implied warranty of", 
      "- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the", 
      "- * GNU General Public License for more details.", 
      "- *", 
      "- * You should have received a copy of the GNU General Public License", 
      "- * along with this program; if not, write to the Free Software", 
      "- * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.", 
      "- *", 
      "- * squashfs_fs.h", 
      "- */", 
      "-", 
      "-#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY", 
      "-#define CONFIG_SQUASHFS_2_0_COMPATIBILITY", 
      "-#endif", 
      "-", 
      "-#define SQUASHFS_CACHED_FRAGMENTS\tCONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE", 
      "-#define SQUASHFS_MAJOR\t\t\t3", 
      "-#define SQUASHFS_MINOR\t\t\t1", 
      "-#define SQUASHFS_MAGIC\t\t\t0x73717368", 
      "-#define SQUASHFS_MAGIC_SWAP\t\t0x68737173", 
      "-#define SQUASHFS_START\t\t\t0", 
      "-", 
      "-/* size of metadata (inode and directory) blocks */", 
      "-#define SQUASHFS_METADATA_SIZE\t\t8192", 
      "-#define SQUASHFS_METADATA_LOG\t\t13", 
      "-", 
      "-/* default size of data blocks */", 
      "-#define SQUASHFS_FILE_SIZE\t\t131072", 
      "-#define SQUASHFS_FILE_LOG\t\t17", 
      "-", 
      "-#define SQUASHFS_FILE_MAX_SIZE\t\t1048576", 
      "-", 
      "-/* Max number of uids and gids */", 
      "-#define SQUASHFS_UIDS\t\t\t256", 
      "-#define SQUASHFS_GUIDS\t\t\t255", 
      "-", 
      "-/* Max length of filename (not 255) */", 
      "-#define SQUASHFS_NAME_LEN\t\t256", 
      "-", 
      "-#define SQUASHFS_INVALID\t\t((long long) 0xffffffffffff)", 
      "-#define SQUASHFS_INVALID_FRAG\t\t((unsigned int) 0xffffffff)", 
      "-#define SQUASHFS_INVALID_BLK\t\t((long long) -1)", 
      "-#define SQUASHFS_USED_BLK\t\t((long long) -2)", 
      "-", 
      "-/* Filesystem flags */", 
      "-#define SQUASHFS_NOI\t\t\t0", 
      "-#define SQUASHFS_NOD\t\t\t1", 
      "-#define SQUASHFS_CHECK\t\t\t2", 
      "-#define SQUASHFS_NOF\t\t\t3", 
      "-#define SQUASHFS_NO_FRAG\t\t4", 
      "-#define SQUASHFS_ALWAYS_FRAG\t\t5", 
      "-#define SQUASHFS_DUPLICATE\t\t6", 
      "-#define SQUASHFS_EXPORT\t\t\t7", 
      "-", 
      "-#define SQUASHFS_BIT(flag, bit)\t\t((flag >> bit) & 1)", 
      "-", 
      "-#define SQUASHFS_UNCOMPRESSED_INODES(flags)\tSQUASHFS_BIT(flags, \\", 
      "-\t\t\t\t\t\tSQUASHFS_NOI)", 
      "-", 
      "-#define SQUASHFS_UNCOMPRESSED_DATA(flags)\tSQUASHFS_BIT(flags, \\", 
      "-\t\t\t\t\t\tSQUASHFS_NOD)", 
      "-", 
      "-#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags)\tSQUASHFS_BIT(flags, \\", 
      "-\t\t\t\t\t\tSQUASHFS_NOF)", 
      "-", 
      "-#define SQUASHFS_NO_FRAGMENTS(flags)\t\tSQUASHFS_BIT(flags, \\", 
      "-\t\t\t\t\t\tSQUASHFS_NO_FRAG)", 
      "-", 
      "-#define SQUASHFS_ALWAYS_FRAGMENTS(flags)\tSQUASHFS_BIT(flags, \\", 
      "-\t\t\t\t\t\tSQUASHFS_ALWAYS_FRAG)", 
      "-", 
      "-#define SQUASHFS_DUPLICATES(flags)\t\tSQUASHFS_BIT(flags, \\", 
      "-\t\t\t\t\t\tSQUASHFS_DUPLICATE)", 
      "-", 
      "-#define SQUASHFS_EXPORTABLE(flags)\t\tSQUASHFS_BIT(flags, \\", 
      "-\t\t\t\t\t\tSQUASHFS_EXPORT)", 
      "-", 
      "-#define SQUASHFS_CHECK_DATA(flags)\t\tSQUASHFS_BIT(flags, \\", 
      "-\t\t\t\t\t\tSQUASHFS_CHECK)", 
      "-", 
      "-#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \\", 
      "-\t\tduplicate_checking, exortable)\t(noi | (nod << 1) | (check_data << 2) \\", 
      "-\t\t| (nof << 3) | (no_frag << 4) | (always_frag << 5) | \\", 
      "-\t\t(duplicate_checking << 6) | (exportable << 7))", 
      "-", 
      "-/* Max number of types and file types */", 
      "-#define SQUASHFS_DIR_TYPE\t\t1", 
      "-#define SQUASHFS_FILE_TYPE\t\t2", 
      "-#define SQUASHFS_SYMLINK_TYPE\t\t3", 
      "-#define SQUASHFS_BLKDEV_TYPE\t\t4", 
      "-#define SQUASHFS_CHRDEV_TYPE\t\t5", 
      "-#define SQUASHFS_FIFO_TYPE\t\t6", 
      "-#define SQUASHFS_SOCKET_TYPE\t\t7", 
      "-#define SQUASHFS_LDIR_TYPE\t\t8", 
      "-#define SQUASHFS_LREG_TYPE\t\t9", 
      "-", 
      "-/* 1.0 filesystem type definitions */", 
      "-#define SQUASHFS_TYPES\t\t\t5", 
      "-#define SQUASHFS_IPC_TYPE\t\t0", 
      "-", 
      "-/* Flag whether block is compressed or uncompressed, bit is set if block is", 
      "- * uncompressed */", 
      "-#define SQUASHFS_COMPRESSED_BIT\t\t(1 << 15)", 
      "-", 
      "-#define SQUASHFS_COMPRESSED_SIZE(B)\t(((B) & ~SQUASHFS_COMPRESSED_BIT) ? \\", 
      "-\t\t(B) & ~SQUASHFS_COMPRESSED_BIT :  SQUASHFS_COMPRESSED_BIT)", 
      "-", 
      "-#define SQUASHFS_COMPRESSED(B)\t\t(!((B) & SQUASHFS_COMPRESSED_BIT))", 
      "-", 
      "-#define SQUASHFS_COMPRESSED_BIT_BLOCK\t\t(1 << 24)", 
      "-", 
      "-#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B)\t((B) & \\", 
      "-\t~SQUASHFS_COMPRESSED_BIT_BLOCK)", 
      "-", 
      "-#define SQUASHFS_COMPRESSED_BLOCK(B)\t(!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))", 
      "-", 
      "-/*", 
      "- * Inode number ops.  Inodes consist of a compressed block number, and an", 
      "- * uncompressed  offset within that block", 
      "- */", 
      "-#define SQUASHFS_INODE_BLK(a)\t\t((unsigned int) ((a) >> 16))", 
      "-", 
      "-#define SQUASHFS_INODE_OFFSET(a)\t((unsigned int) ((a) & 0xffff))", 
      "-", 
      "-#define SQUASHFS_MKINODE(A, B)\t\t((squashfs_inode_t)(((squashfs_inode_t) (A)\\", 
      "-\t\t\t\t\t<< 16) + (B)))", 
      "-", 
      "-/* Compute 32 bit VFS inode number from squashfs inode number */", 
      "-#define SQUASHFS_MK_VFS_INODE(a, b)\t((unsigned int) (((a) << 8) + \\", 
      "-\t\t\t\t\t((b) >> 2) + 1))", 
      "-/* XXX */", 
      "-", 
      "-/* Translate between VFS mode and squashfs mode */", 
      "-#define SQUASHFS_MODE(a)\t\t((a) & 0xfff)", 
      "-", 
      "-/* fragment and fragment table defines */", 
      "-#define SQUASHFS_FRAGMENT_BYTES(A)\t((A) * sizeof(struct squashfs_fragment_entry))", 
      "-", 
      "-#define SQUASHFS_FRAGMENT_INDEX(A)\t(SQUASHFS_FRAGMENT_BYTES(A) / \\", 
      "-\t\t\t\t\tSQUASHFS_METADATA_SIZE)", 
      "-", 
      "-#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A)\t(SQUASHFS_FRAGMENT_BYTES(A) % \\", 
      "-\t\t\t\t\t\tSQUASHFS_METADATA_SIZE)", 
      "-", 
      "-#define SQUASHFS_FRAGMENT_INDEXES(A)\t((SQUASHFS_FRAGMENT_BYTES(A) + \\", 
      "-\t\t\t\t\tSQUASHFS_METADATA_SIZE - 1) / \\", 
      "-\t\t\t\t\tSQUASHFS_METADATA_SIZE)", 
      "-", 
      "-#define SQUASHFS_FRAGMENT_INDEX_BYTES(A)\t(SQUASHFS_FRAGMENT_INDEXES(A) *\\", 
      "-\t\t\t\t\t\tsizeof(long long))", 
      "-", 
      "-/* inode lookup table defines */", 
      "-#define SQUASHFS_LOOKUP_BYTES(A)\t((A) * sizeof(squashfs_inode_t))", 
      "-", 
      "-#define SQUASHFS_LOOKUP_BLOCK(A)\t\t(SQUASHFS_LOOKUP_BYTES(A) / \\", 
      "-\t\t\t\t\t\tSQUASHFS_METADATA_SIZE)", 
      "-", 
      "-#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A)\t\t(SQUASHFS_LOOKUP_BYTES(A) % \\", 
      "-\t\t\t\t\t\tSQUASHFS_METADATA_SIZE)", 
      "-", 
      "-#define SQUASHFS_LOOKUP_BLOCKS(A)\t((SQUASHFS_LOOKUP_BYTES(A) + \\", 
      "-\t\t\t\t\tSQUASHFS_METADATA_SIZE - 1) / \\", 
      "-\t\t\t\t\tSQUASHFS_METADATA_SIZE)", 
      "-", 
      "-#define SQUASHFS_LOOKUP_BLOCK_BYTES(A)\t(SQUASHFS_LOOKUP_BLOCKS(A) *\\", 
      "-\t\t\t\t\tsizeof(long long))", 
      "-", 
      "-/* cached data constants for filesystem */", 
      "-#define SQUASHFS_CACHED_BLKS\t\t8", 
      "-", 
      "-#define SQUASHFS_MAX_FILE_SIZE_LOG\t64", 
      "-", 
      "-#define SQUASHFS_MAX_FILE_SIZE\t\t((long long) 1 << \\", 
      "-\t\t\t\t\t(SQUASHFS_MAX_FILE_SIZE_LOG - 2))", 
      "-", 
      "-#define SQUASHFS_MARKER_BYTE\t\t0xff", 
      "-", 
      "-/* meta index cache */", 
      "-#define SQUASHFS_META_INDEXES\t(SQUASHFS_METADATA_SIZE / sizeof(unsigned int))", 
      "-#define SQUASHFS_META_ENTRIES\t31", 
      "-#define SQUASHFS_META_NUMBER\t8", 
      "-#define SQUASHFS_SLOTS\t\t4", 
      "-", 
      "-struct meta_entry {", 
      "-\tlong long\t\tdata_block;", 
      "-\tunsigned int\t\tindex_block;", 
      "-\tunsigned short\t\toffset;", 
      "-\tunsigned short\t\tpad;", 
      "-};", 
      "-", 
      "-struct meta_index {", 
      "-\tunsigned int\t\tinode_number;", 
      "-\tunsigned int\t\toffset;", 
      "-\tunsigned short\t\tentries;", 
      "-\tunsigned short\t\tskip;", 
      "-\tunsigned short\t\tlocked;", 
      "-\tunsigned short\t\tpad;", 
      "-\tstruct meta_entry\tmeta_entry[SQUASHFS_META_ENTRIES];", 
      "-};", 
      "-", 
      "-", 
      "-/*", 
      "- * definitions for structures on disk", 
      "- */", 
      "-", 
      "-typedef long long\t\tsquashfs_block_t;", 
      "-typedef long long\t\tsquashfs_inode_t;", 
      "-", 
      "-struct squashfs_super_block {", 
      "-\tunsigned int\t\ts_magic;", 
      "-\tunsigned int\t\tinodes;", 
      "-\tunsigned int\t\tbytes_used_2;", 
      "-\tunsigned int\t\tuid_start_2;", 
      "-\tunsigned int\t\tguid_start_2;", 
      "-\tunsigned int\t\tinode_table_start_2;", 
      "-\tunsigned int\t\tdirectory_table_start_2;", 
      "-\tunsigned int\t\ts_major:16;", 
      "-\tunsigned int\t\ts_minor:16;", 
      "-\tunsigned int\t\tblock_size_1:16;", 
      "-\tunsigned int\t\tblock_log:16;", 
      "-\tunsigned int\t\tflags:8;", 
      "-\tunsigned int\t\tno_uids:8;", 
      "-\tunsigned int\t\tno_guids:8;", 
      "-\tunsigned int\t\tmkfs_time /* time of filesystem creation */;", 
      "-\tsquashfs_inode_t\troot_inode;", 
      "-\tunsigned int\t\tblock_size;", 
      "-\tunsigned int\t\tfragments;", 
      "-\tunsigned int\t\tfragment_table_start_2;", 
      "-\tlong long\t\tbytes_used;", 
      "-\tlong long\t\tuid_start;", 
      "-\tlong long\t\tguid_start;", 
      "-\tlong long\t\tinode_table_start;", 
      "-\tlong long\t\tdirectory_table_start;", 
      "-\tlong long\t\tfragment_table_start;", 
      "-\tlong long\t\tlookup_table_start;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_dir_index {", 
      "-\tunsigned int\t\tindex;", 
      "-\tunsigned int\t\tstart_block;", 
      "-\tunsigned char\t\tsize;", 
      "-\tunsigned char\t\tname[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-#define SQUASHFS_BASE_INODE_HEADER\t\t\\", 
      "-\tunsigned int\t\tinode_type:4;\t\\", 
      "-\tunsigned int\t\tmode:12;\t\\", 
      "-\tunsigned int\t\tuid:8;\t\t\\", 
      "-\tunsigned int\t\tguid:8;\t\t\\", 
      "-\tunsigned int\t\tmtime;\t\t\\", 
      "-\tunsigned int \t\tinode_number;", 
      "-", 
      "-struct squashfs_base_inode_header {", 
      "-\tSQUASHFS_BASE_INODE_HEADER;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_ipc_inode_header {", 
      "-\tSQUASHFS_BASE_INODE_HEADER;", 
      "-\tunsigned int\t\tnlink;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_dev_inode_header {", 
      "-\tSQUASHFS_BASE_INODE_HEADER;", 
      "-\tunsigned int\t\tnlink;", 
      "-\tunsigned short\t\trdev;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_symlink_inode_header {", 
      "-\tSQUASHFS_BASE_INODE_HEADER;", 
      "-\tunsigned int\t\tnlink;", 
      "-\tunsigned short\t\tsymlink_size;", 
      "-\tchar\t\t\tsymlink[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_reg_inode_header {", 
      "-\tSQUASHFS_BASE_INODE_HEADER;", 
      "-\tsquashfs_block_t\tstart_block;", 
      "-\tunsigned int\t\tfragment;", 
      "-\tunsigned int\t\toffset;", 
      "-\tunsigned int\t\tfile_size;", 
      "-\tunsigned short\t\tblock_list[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_lreg_inode_header {", 
      "-\tSQUASHFS_BASE_INODE_HEADER;", 
      "-\tunsigned int\t\tnlink;", 
      "-\tsquashfs_block_t\tstart_block;", 
      "-\tunsigned int\t\tfragment;", 
      "-\tunsigned int\t\toffset;", 
      "-\tlong long\t\tfile_size;", 
      "-\tunsigned short\t\tblock_list[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_dir_inode_header {", 
      "-\tSQUASHFS_BASE_INODE_HEADER;", 
      "-\tunsigned int\t\tnlink;", 
      "-\tunsigned int\t\tfile_size:19;", 
      "-\tunsigned int\t\toffset:13;", 
      "-\tunsigned int\t\tstart_block;", 
      "-\tunsigned int\t\tparent_inode;", 
      "-} __attribute__  ((packed));", 
      "-", 
      "-struct squashfs_ldir_inode_header {", 
      "-\tSQUASHFS_BASE_INODE_HEADER;", 
      "-\tunsigned int\t\tnlink;", 
      "-\tunsigned int\t\tfile_size:27;", 
      "-\tunsigned int\t\toffset:13;", 
      "-\tunsigned int\t\tstart_block;", 
      "-\tunsigned int\t\ti_count:16;", 
      "-\tunsigned int\t\tparent_inode;", 
      "-\tstruct squashfs_dir_index\tindex[0];", 
      "-} __attribute__  ((packed));", 
      "-", 
      "-union squashfs_inode_header {", 
      "-\tstruct squashfs_base_inode_header\tbase;", 
      "-\tstruct squashfs_dev_inode_header\tdev;", 
      "-\tstruct squashfs_symlink_inode_header\tsymlink;", 
      "-\tstruct squashfs_reg_inode_header\treg;", 
      "-\tstruct squashfs_lreg_inode_header\tlreg;", 
      "-\tstruct squashfs_dir_inode_header\tdir;", 
      "-\tstruct squashfs_ldir_inode_header\tldir;", 
      "-\tstruct squashfs_ipc_inode_header\tipc;", 
      "-};", 
      "-", 
      "-struct squashfs_dir_entry {", 
      "-\tunsigned int\t\toffset:13;", 
      "-\tunsigned int\t\ttype:3;", 
      "-\tunsigned int\t\tsize:8;", 
      "-\tint\t\t\tinode_number:16;", 
      "-\tchar\t\t\tname[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_dir_header {", 
      "-\tunsigned int\t\tcount:8;", 
      "-\tunsigned int\t\tstart_block;", 
      "-\tunsigned int\t\tinode_number;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_fragment_entry {", 
      "-\tlong long\t\tstart_block;", 
      "-\tunsigned int\t\tsize;", 
      "-\tunsigned int\t\tpending;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);", 
      "-extern int squashfs_uncompress_init(void);", 
      "-extern int squashfs_uncompress_exit(void);", 
      "-", 
      "-/*", 
      "- * macros to convert each packed bitfield structure from little endian to big", 
      "- * endian and vice versa.  These are needed when creating or using a filesystem", 
      "- * on a machine with different byte ordering to the target architecture.", 
      "- *", 
      "- */", 
      "-", 
      "-#define SQUASHFS_SWAP_START \\", 
      "-\tint bits;\\", 
      "-\tint b_pos;\\", 
      "-\tunsigned long long val;\\", 
      "-\tunsigned char *s;\\", 
      "-\tunsigned char *d;", 
      "-", 
      "-#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\\", 
      "-\tSQUASHFS_SWAP((s)->s_magic, d, 0, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->inodes, d, 32, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->s_major, d, 224, 16);\\", 
      "-\tSQUASHFS_SWAP((s)->s_minor, d, 240, 16);\\", 
      "-\tSQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\\", 
      "-\tSQUASHFS_SWAP((s)->block_log, d, 272, 16);\\", 
      "-\tSQUASHFS_SWAP((s)->flags, d, 288, 8);\\", 
      "-\tSQUASHFS_SWAP((s)->no_uids, d, 296, 8);\\", 
      "-\tSQUASHFS_SWAP((s)->no_guids, d, 304, 8);\\", 
      "-\tSQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->root_inode, d, 344, 64);\\", 
      "-\tSQUASHFS_SWAP((s)->block_size, d, 408, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->fragments, d, 440, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\\", 
      "-\tSQUASHFS_SWAP((s)->uid_start, d, 568, 64);\\", 
      "-\tSQUASHFS_SWAP((s)->guid_start, d, 632, 64);\\", 
      "-\tSQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\\", 
      "-\tSQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\\", 
      "-\tSQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\\", 
      "-\tSQUASHFS_SWAP((s)->lookup_table_start, d, 888, 64);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\\", 
      "-\tSQUASHFS_MEMSET(s, d, n);\\", 
      "-\tSQUASHFS_SWAP((s)->inode_type, d, 0, 4);\\", 
      "-\tSQUASHFS_SWAP((s)->mode, d, 4, 12);\\", 
      "-\tSQUASHFS_SWAP((s)->uid, d, 16, 8);\\", 
      "-\tSQUASHFS_SWAP((s)->guid, d, 24, 8);\\", 
      "-\tSQUASHFS_SWAP((s)->mtime, d, 32, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->inode_number, d, 64, 32);", 
      "-", 
      "-#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_ipc_inode_header))\\", 
      "-\tSQUASHFS_SWAP((s)->nlink, d, 96, 32);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_dev_inode_header)); \\", 
      "-\tSQUASHFS_SWAP((s)->nlink, d, 96, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->rdev, d, 128, 16);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_symlink_inode_header));\\", 
      "-\tSQUASHFS_SWAP((s)->nlink, d, 96, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_reg_inode_header));\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 96, 64);\\", 
      "-\tSQUASHFS_SWAP((s)->fragment, d, 160, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 192, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->file_size, d, 224, 32);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_lreg_inode_header));\\", 
      "-\tSQUASHFS_SWAP((s)->nlink, d, 96, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 128, 64);\\", 
      "-\tSQUASHFS_SWAP((s)->fragment, d, 192, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 224, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->file_size, d, 256, 64);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_dir_inode_header));\\", 
      "-\tSQUASHFS_SWAP((s)->nlink, d, 96, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->file_size, d, 128, 19);\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 147, 13);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 160, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_ldir_inode_header));\\", 
      "-\tSQUASHFS_SWAP((s)->nlink, d, 96, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->file_size, d, 128, 27);\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 155, 13);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 168, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->i_count, d, 200, 16);\\", 
      "-\tSQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\\", 
      "-\tSQUASHFS_SWAP((s)->index, d, 0, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 32, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->size, d, 64, 8);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\\", 
      "-\tSQUASHFS_SWAP((s)->count, d, 0, 8);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 8, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->inode_number, d, 40, 32);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 0, 13);\\", 
      "-\tSQUASHFS_SWAP((s)->type, d, 13, 3);\\", 
      "-\tSQUASHFS_SWAP((s)->size, d, 16, 8);\\", 
      "-\tSQUASHFS_SWAP((s)->inode_number, d, 24, 16);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 0, 64);\\", 
      "-\tSQUASHFS_SWAP((s)->size, d, 64, 32);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_INODE_T(s, d) SQUASHFS_SWAP_LONG_LONGS(s, d, 1)", 
      "-", 
      "-#define SQUASHFS_SWAP_SHORTS(s, d, n) {\\", 
      "-\tint entry;\\", 
      "-\tint bit_position;\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, n * 2);\\", 
      "-\tfor(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \\", 
      "-\t\t\t16)\\", 
      "-\t\tSQUASHFS_SWAP(s[entry], d, bit_position, 16);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_INTS(s, d, n) {\\", 
      "-\tint entry;\\", 
      "-\tint bit_position;\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, n * 4);\\", 
      "-\tfor(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \\", 
      "-\t\t\t32)\\", 
      "-\t\tSQUASHFS_SWAP(s[entry], d, bit_position, 32);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\\", 
      "-\tint entry;\\", 
      "-\tint bit_position;\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, n * 8);\\", 
      "-\tfor(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \\", 
      "-\t\t\t64)\\", 
      "-\t\tSQUASHFS_SWAP(s[entry], d, bit_position, 64);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\\", 
      "-\tint entry;\\", 
      "-\tint bit_position;\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, n * bits / 8);\\", 
      "-\tfor(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \\", 
      "-\t\t\tbits)\\", 
      "-\t\tSQUASHFS_SWAP(s[entry], d, bit_position, bits);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)", 
      "-#define SQUASHFS_SWAP_LOOKUP_BLOCKS(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)", 
      "-", 
      "-#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY", 
      "-", 
      "-struct squashfs_base_inode_header_1 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:4; /* index into uid table */", 
      "-\tunsigned int\t\tguid:4; /* index into guid table */", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_ipc_inode_header_1 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:4; /* index into uid table */", 
      "-\tunsigned int\t\tguid:4; /* index into guid table */", 
      "-\tunsigned int\t\ttype:4;", 
      "-\tunsigned int\t\toffset:4;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_dev_inode_header_1 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:4; /* index into uid table */", 
      "-\tunsigned int\t\tguid:4; /* index into guid table */", 
      "-\tunsigned short\t\trdev;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_symlink_inode_header_1 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:4; /* index into uid table */", 
      "-\tunsigned int\t\tguid:4; /* index into guid table */", 
      "-\tunsigned short\t\tsymlink_size;", 
      "-\tchar\t\t\tsymlink[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_reg_inode_header_1 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:4; /* index into uid table */", 
      "-\tunsigned int\t\tguid:4; /* index into guid table */", 
      "-\tunsigned int\t\tmtime;", 
      "-\tunsigned int\t\tstart_block;", 
      "-\tunsigned int\t\tfile_size:32;", 
      "-\tunsigned short\t\tblock_list[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_dir_inode_header_1 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:4; /* index into uid table */", 
      "-\tunsigned int\t\tguid:4; /* index into guid table */", 
      "-\tunsigned int\t\tfile_size:19;", 
      "-\tunsigned int\t\toffset:13;", 
      "-\tunsigned int\t\tmtime;", 
      "-\tunsigned int\t\tstart_block:24;", 
      "-} __attribute__  ((packed));", 
      "-", 
      "-union squashfs_inode_header_1 {", 
      "-\tstruct squashfs_base_inode_header_1\tbase;", 
      "-\tstruct squashfs_dev_inode_header_1\tdev;", 
      "-\tstruct squashfs_symlink_inode_header_1\tsymlink;", 
      "-\tstruct squashfs_reg_inode_header_1\treg;", 
      "-\tstruct squashfs_dir_inode_header_1\tdir;", 
      "-\tstruct squashfs_ipc_inode_header_1\tipc;", 
      "-};", 
      "-", 
      "-#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \\", 
      "-\tSQUASHFS_MEMSET(s, d, n);\\", 
      "-\tSQUASHFS_SWAP((s)->inode_type, d, 0, 4);\\", 
      "-\tSQUASHFS_SWAP((s)->mode, d, 4, 12);\\", 
      "-\tSQUASHFS_SWAP((s)->uid, d, 16, 4);\\", 
      "-\tSQUASHFS_SWAP((s)->guid, d, 20, 4);", 
      "-", 
      "-#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_ipc_inode_header_1));\\", 
      "-\tSQUASHFS_SWAP((s)->type, d, 24, 4);\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 28, 4);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_dev_inode_header_1));\\", 
      "-\tSQUASHFS_SWAP((s)->rdev, d, 24, 16);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_symlink_inode_header_1));\\", 
      "-\tSQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_reg_inode_header_1));\\", 
      "-\tSQUASHFS_SWAP((s)->mtime, d, 24, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 56, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->file_size, d, 88, 32);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_dir_inode_header_1));\\", 
      "-\tSQUASHFS_SWAP((s)->file_size, d, 24, 19);\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 43, 13);\\", 
      "-\tSQUASHFS_SWAP((s)->mtime, d, 56, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 88, 24);\\", 
      "-}", 
      "-", 
      "-#endif", 
      "-", 
      "-#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY", 
      "-", 
      "-struct squashfs_dir_index_2 {", 
      "-\tunsigned int\t\tindex:27;", 
      "-\tunsigned int\t\tstart_block:29;", 
      "-\tunsigned char\t\tsize;", 
      "-\tunsigned char\t\tname[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_base_inode_header_2 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:8; /* index into uid table */", 
      "-\tunsigned int\t\tguid:8; /* index into guid table */", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_ipc_inode_header_2 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:8; /* index into uid table */", 
      "-\tunsigned int\t\tguid:8; /* index into guid table */", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_dev_inode_header_2 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:8; /* index into uid table */", 
      "-\tunsigned int\t\tguid:8; /* index into guid table */", 
      "-\tunsigned short\t\trdev;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_symlink_inode_header_2 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:8; /* index into uid table */", 
      "-\tunsigned int\t\tguid:8; /* index into guid table */", 
      "-\tunsigned short\t\tsymlink_size;", 
      "-\tchar\t\t\tsymlink[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_reg_inode_header_2 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:8; /* index into uid table */", 
      "-\tunsigned int\t\tguid:8; /* index into guid table */", 
      "-\tunsigned int\t\tmtime;", 
      "-\tunsigned int\t\tstart_block;", 
      "-\tunsigned int\t\tfragment;", 
      "-\tunsigned int\t\toffset;", 
      "-\tunsigned int\t\tfile_size:32;", 
      "-\tunsigned short\t\tblock_list[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_dir_inode_header_2 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:8; /* index into uid table */", 
      "-\tunsigned int\t\tguid:8; /* index into guid table */", 
      "-\tunsigned int\t\tfile_size:19;", 
      "-\tunsigned int\t\toffset:13;", 
      "-\tunsigned int\t\tmtime;", 
      "-\tunsigned int\t\tstart_block:24;", 
      "-} __attribute__  ((packed));", 
      "-", 
      "-struct squashfs_ldir_inode_header_2 {", 
      "-\tunsigned int\t\tinode_type:4;", 
      "-\tunsigned int\t\tmode:12; /* protection */", 
      "-\tunsigned int\t\tuid:8; /* index into uid table */", 
      "-\tunsigned int\t\tguid:8; /* index into guid table */", 
      "-\tunsigned int\t\tfile_size:27;", 
      "-\tunsigned int\t\toffset:13;", 
      "-\tunsigned int\t\tmtime;", 
      "-\tunsigned int\t\tstart_block:24;", 
      "-\tunsigned int\t\ti_count:16;", 
      "-\tstruct squashfs_dir_index_2\tindex[0];", 
      "-} __attribute__  ((packed));", 
      "-", 
      "-union squashfs_inode_header_2 {", 
      "-\tstruct squashfs_base_inode_header_2\tbase;", 
      "-\tstruct squashfs_dev_inode_header_2\tdev;", 
      "-\tstruct squashfs_symlink_inode_header_2\tsymlink;", 
      "-\tstruct squashfs_reg_inode_header_2\treg;", 
      "-\tstruct squashfs_dir_inode_header_2\tdir;", 
      "-\tstruct squashfs_ldir_inode_header_2\tldir;", 
      "-\tstruct squashfs_ipc_inode_header_2\tipc;", 
      "-};", 
      "-", 
      "-struct squashfs_dir_header_2 {", 
      "-\tunsigned int\t\tcount:8;", 
      "-\tunsigned int\t\tstart_block:24;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_dir_entry_2 {", 
      "-\tunsigned int\t\toffset:13;", 
      "-\tunsigned int\t\ttype:3;", 
      "-\tunsigned int\t\tsize:8;", 
      "-\tchar\t\t\tname[0];", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-struct squashfs_fragment_entry_2 {", 
      "-\tunsigned int\t\tstart_block;", 
      "-\tunsigned int\t\tsize;", 
      "-} __attribute__ ((packed));", 
      "-", 
      "-#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\\", 
      "-\tSQUASHFS_MEMSET(s, d, n);\\", 
      "-\tSQUASHFS_SWAP((s)->inode_type, d, 0, 4);\\", 
      "-\tSQUASHFS_SWAP((s)->mode, d, 4, 12);\\", 
      "-\tSQUASHFS_SWAP((s)->uid, d, 16, 8);\\", 
      "-\tSQUASHFS_SWAP((s)->guid, d, 24, 8);\\", 
      "-", 
      "-#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))", 
      "-", 
      "-#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_dev_inode_header_2)); \\", 
      "-\tSQUASHFS_SWAP((s)->rdev, d, 32, 16);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_symlink_inode_header_2));\\", 
      "-\tSQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_reg_inode_header_2));\\", 
      "-\tSQUASHFS_SWAP((s)->mtime, d, 32, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 64, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->fragment, d, 96, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 128, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->file_size, d, 160, 32);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_dir_inode_header_2));\\", 
      "-\tSQUASHFS_SWAP((s)->file_size, d, 32, 19);\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 51, 13);\\", 
      "-\tSQUASHFS_SWAP((s)->mtime, d, 64, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 96, 24);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \\", 
      "-\t\t\tsizeof(struct squashfs_ldir_inode_header_2));\\", 
      "-\tSQUASHFS_SWAP((s)->file_size, d, 32, 27);\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 59, 13);\\", 
      "-\tSQUASHFS_SWAP((s)->mtime, d, 72, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 104, 24);\\", 
      "-\tSQUASHFS_SWAP((s)->i_count, d, 128, 16);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\\", 
      "-\tSQUASHFS_SWAP((s)->index, d, 0, 27);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 27, 29);\\", 
      "-\tSQUASHFS_SWAP((s)->size, d, 56, 8);\\", 
      "-}", 
      "-#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\\", 
      "-\tSQUASHFS_SWAP((s)->count, d, 0, 8);\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 8, 24);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\\", 
      "-\tSQUASHFS_SWAP((s)->offset, d, 0, 13);\\", 
      "-\tSQUASHFS_SWAP((s)->type, d, 13, 3);\\", 
      "-\tSQUASHFS_SWAP((s)->size, d, 16, 8);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\\", 
      "-\tSQUASHFS_SWAP_START\\", 
      "-\tSQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\\", 
      "-\tSQUASHFS_SWAP((s)->start_block, d, 0, 32);\\", 
      "-\tSQUASHFS_SWAP((s)->size, d, 32, 32);\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)", 
      "-", 
      "-/* fragment and fragment table defines */", 
      "-#define SQUASHFS_FRAGMENT_BYTES_2(A)\t(A * sizeof(struct squashfs_fragment_entry_2))", 
      "-", 
      "-#define SQUASHFS_FRAGMENT_INDEX_2(A)\t(SQUASHFS_FRAGMENT_BYTES_2(A) / \\", 
      "-\t\t\t\t\tSQUASHFS_METADATA_SIZE)", 
      "-", 
      "-#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A)\t(SQUASHFS_FRAGMENT_BYTES_2(A) % \\", 
      "-\t\t\t\t\t\tSQUASHFS_METADATA_SIZE)", 
      "-", 
      "-#define SQUASHFS_FRAGMENT_INDEXES_2(A)\t((SQUASHFS_FRAGMENT_BYTES_2(A) + \\", 
      "-\t\t\t\t\tSQUASHFS_METADATA_SIZE - 1) / \\", 
      "-\t\t\t\t\tSQUASHFS_METADATA_SIZE)", 
      "-", 
      "-#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A)\t(SQUASHFS_FRAGMENT_INDEXES_2(A) *\\", 
      "-\t\t\t\t\t\tsizeof(int))", 
      "-", 
      "-#endif", 
      "-", 
      "-#ifdef __KERNEL__", 
      "-", 
      "-/*", 
      "- * macros used to swap each structure entry, taking into account", 
      "- * bitfields and different bitfield placing conventions on differing", 
      "- * architectures", 
      "- */", 
      "-", 
      "-#include <asm/byteorder.h>", 
      "-", 
      "-#ifdef __BIG_ENDIAN", 
      "-\t/* convert from little endian to big endian */", 
      "-#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \\", 
      "-\t\ttbits, b_pos)", 
      "-#else", 
      "-\t/* convert from big endian to little endian */", 
      "-#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \\", 
      "-\t\ttbits, 64 - tbits - b_pos)", 
      "-#endif", 
      "-", 
      "-#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\\", 
      "-\tb_pos = pos % 8;\\", 
      "-\tval = 0;\\", 
      "-\ts = (unsigned char *)p + (pos / 8);\\", 
      "-\td = ((unsigned char *) &val) + 7;\\", 
      "-\tfor(bits = 0; bits < (tbits + b_pos); bits += 8) \\", 
      "-\t\t*d-- = *s++;\\", 
      "-\tvalue = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\\", 
      "-}", 
      "-", 
      "-#define SQUASHFS_MEMSET(s, d, n)\tmemset(s, 0, n);", 
      "-", 
      "-#endif", 
      "-#endif"
    ]
  ], 
  [
    "linux-2.6.23.orig/include/linux/squashfs_fs_i.h", 
    "dev/null", 
    [
      "Index: linux-2.6.23/include/linux/squashfs_fs_i.h", 
      "===================================================================", 
      "--- linux-2.6.23.orig/include/linux/squashfs_fs_i.h", 
      "+++ dev/null", 
      "@@ -1,45 +0,0 @@", 
      "-#ifndef SQUASHFS_FS_I", 
      "-#define SQUASHFS_FS_I", 
      "-/*", 
      "- * Squashfs", 
      "- *", 
      "- * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007", 
      "- * Phillip Lougher <phillip@lougher.demon.co.uk>", 
      "- *", 
      "- * This program is free software; you can redistribute it and/or", 
      "- * modify it under the terms of the GNU General Public License", 
      "- * as published by the Free Software Foundation; either version 2,", 
      "- * or (at your option) any later version.", 
      "- *", 
      "- * This program is distributed in the hope that it will be useful,", 
      "- * but WITHOUT ANY WARRANTY; without even the implied warranty of", 
      "- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the", 
      "- * GNU General Public License for more details.", 
      "- *", 
      "- * You should have received a copy of the GNU General Public License", 
      "- * along with this program; if not, write to the Free Software", 
      "- * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.", 
      "- *", 
      "- * squashfs_fs_i.h", 
      "- */", 
      "-", 
      "-struct squashfs_inode_info {", 
      "-\tlong long\tstart_block;", 
      "-\tunsigned int\toffset;", 
      "-\tunion {", 
      "-\t\tstruct {", 
      "-\t\t\tlong long\tfragment_start_block;", 
      "-\t\t\tunsigned int\tfragment_size;", 
      "-\t\t\tunsigned int\tfragment_offset;", 
      "-\t\t\tlong long\tblock_list_start;", 
      "-\t\t} s1;", 
      "-\t\tstruct {", 
      "-\t\t\tlong long\tdirectory_index_start;", 
      "-\t\t\tunsigned int\tdirectory_index_offset;", 
      "-\t\t\tunsigned int\tdirectory_index_count;", 
      "-\t\t\tunsigned int\tparent_inode;", 
      "-\t\t} s2;", 
      "-\t} u;", 
      "-\tstruct inode\tvfs_inode;", 
      "-};", 
      "-#endif"
    ]
  ], 
  [
    "linux-2.6.23.orig/include/linux/squashfs_fs_sb.h", 
    "dev/null", 
    [
      "Index: linux-2.6.23/include/linux/squashfs_fs_sb.h", 
      "===================================================================", 
      "--- linux-2.6.23.orig/include/linux/squashfs_fs_sb.h", 
      "+++ dev/null", 
      "@@ -1,76 +0,0 @@", 
      "-#ifndef SQUASHFS_FS_SB", 
      "-#define SQUASHFS_FS_SB", 
      "-/*", 
      "- * Squashfs", 
      "- *", 
      "- * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007", 
      "- * Phillip Lougher <phillip@lougher.demon.co.uk>", 
      "- *", 
      "- * This program is free software; you can redistribute it and/or", 
      "- * modify it under the terms of the GNU General Public License", 
      "- * as published by the Free Software Foundation; either version 2,", 
      "- * or (at your option) any later version.", 
      "- *", 
      "- * This program is distributed in the hope that it will be useful,", 
      "- * but WITHOUT ANY WARRANTY; without even the implied warranty of", 
      "- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the", 
      "- * GNU General Public License for more details.", 
      "- *", 
      "- * You should have received a copy of the GNU General Public License", 
      "- * along with this program; if not, write to the Free Software", 
      "- * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.", 
      "- *", 
      "- * squashfs_fs_sb.h", 
      "- */", 
      "-", 
      "-#include <linux/squashfs_fs.h>", 
      "-", 
      "-struct squashfs_cache {", 
      "-\tlong long\tblock;", 
      "-\tint\t\tlength;", 
      "-\tlong long\tnext_index;", 
      "-\tchar\t\t*data;", 
      "-};", 
      "-", 
      "-struct squashfs_fragment_cache {", 
      "-\tlong long\tblock;", 
      "-\tint\t\tlength;", 
      "-\tunsigned int\tlocked;", 
      "-\tchar\t\t*data;", 
      "-};", 
      "-", 
      "-struct squashfs_sb_info {", 
      "-\tstruct squashfs_super_block\tsblk;", 
      "-\tint\t\t\tdevblksize;", 
      "-\tint\t\t\tdevblksize_log2;", 
      "-\tint\t\t\tswap;", 
      "-\tstruct squashfs_cache\t*block_cache;", 
      "-\tstruct squashfs_fragment_cache\t*fragment;", 
      "-\tint\t\t\tnext_cache;", 
      "-\tint\t\t\tnext_fragment;", 
      "-\tint\t\t\tnext_meta_index;", 
      "-\tunsigned int\t\t*uid;", 
      "-\tunsigned int\t\t*guid;", 
      "-\tlong long\t\t*fragment_index;", 
      "-\tunsigned int\t\t*fragment_index_2;", 
      "-\tchar\t\t\t*read_page;", 
      "-\tstruct mutex\t\tread_data_mutex;", 
      "-\tstruct mutex\t\tread_page_mutex;", 
      "-\tstruct mutex\t\tblock_cache_mutex;", 
      "-\tstruct mutex\t\tfragment_mutex;", 
      "-\tstruct mutex\t\tmeta_index_mutex;", 
      "-\twait_queue_head_t\twaitq;", 
      "-\twait_queue_head_t\tfragment_wait_queue;", 
      "-\tstruct meta_index\t*meta_index;", 
      "-\tz_stream\t\tstream;", 
      "-\tlong long\t\t*inode_lookup_table;", 
      "-\tint\t\t\tunused_cache_blks;", 
      "-\tint\t\t\tunused_frag_blks;", 
      "-\tint\t\t\t(*read_inode)(struct inode *i,  squashfs_inode_t \\", 
      "-\t\t\t\tinode);", 
      "-\tlong long\t\t(*read_blocklist)(struct inode *inode, int \\", 
      "-\t\t\t\tindex, int readahead_blks, char *block_list, \\", 
      "-\t\t\t\tunsigned short **block_p, unsigned int *bsize);", 
      "-\tint\t\t\t(*read_fragment_index_table)(struct super_block *s);", 
      "-};", 
      "-#endif"
    ]
  ], 
  [
    "linux-2.6.23.orig/init/do_mounts_rd.c", 
    "linux-2.6.23/init/do_mounts_rd.c", 
    [
      "Index: linux-2.6.23/init/do_mounts_rd.c", 
      "===================================================================", 
      "--- linux-2.6.23.orig/init/do_mounts_rd.c", 
      "+++ linux-2.6.23/init/do_mounts_rd.c", 
      "@@ -5,7 +5,6 @@", 
      "#include <linux/ext2_fs.h>", 
      "#include <linux/romfs_fs.h>", 
      "#include <linux/cramfs_fs.h>", 
      "-#include <linux/squashfs_fs.h>", 
      "#include <linux/initrd.h>", 
      "#include <linux/string.h>", 
      "", 
      "@@ -40,7 +39,6 @@ static int __init crd_load(int in_fd, in", 
      "* numbers could not be found.", 
      "*", 
      "* We currently check for the following magic numbers:", 
      "- *      squashfs", 
      "* \tminix", 
      "* \text2", 
      "*\tromfs", 
      "@@ -55,7 +53,6 @@ identify_ramdisk_image(int fd, int start", 
      "struct ext2_super_block *ext2sb;", 
      "struct romfs_super_block *romfsb;", 
      "struct cramfs_super *cramfsb;", 
      "-\tstruct squashfs_super_block *squashfsb;", 
      "int nblocks = -1;", 
      "unsigned char *buf;", 
      "", 
      "@@ -67,7 +64,6 @@ identify_ramdisk_image(int fd, int start", 
      "ext2sb = (struct ext2_super_block *) buf;", 
      "romfsb = (struct romfs_super_block *) buf;", 
      "cramfsb = (struct cramfs_super *) buf;", 
      "-\tsquashfsb = (struct squashfs_super_block *) buf;", 
      "memset(buf, 0xe5, size);", 
      "", 
      "/*", 
      "@@ -105,18 +101,6 @@ identify_ramdisk_image(int fd, int start", 
      "goto done;", 
      "}", 
      "", 
      "-\t/* squashfs is at block zero too */", 
      "-\tif (squashfsb->s_magic == SQUASHFS_MAGIC) {", 
      "-\t\tprintk(KERN_NOTICE", 
      "-\t\t       \"RAMDISK: squashfs filesystem found at block %d\\n\",", 
      "-\t\t       start_block);", 
      "-\t\tif (squashfsb->s_major < 3)", 
      "-\t\t\tnblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;", 
      "-\t\telse", 
      "-\t\t\tnblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;", 
      "-\t\tgoto done;", 
      "-\t}", 
      "-", 
      "/*", 
      "* Read block 1 to test for minix and ext2 superblock", 
      "*/"
    ]
  ]
]