rpms/kernel/FC-4 linux-2.6-squashfs.patch, NONE, 1.1 kernel-2.6.spec, 1.1571, 1.1572
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Mon Jan 9 18:38:48 UTC 2006
Author: davej
Update of /cvs/dist/rpms/kernel/FC-4
In directory cvs.devel.redhat.com:/tmp/cvs-serv2019
Modified Files:
kernel-2.6.spec
Added Files:
linux-2.6-squashfs.patch
Log Message:
squashfs
linux-2.6-squashfs.patch:
fs/Kconfig | 63 +
fs/Makefile | 1
fs/squashfs/Makefile | 7
fs/squashfs/inode.c | 1803 +++++++++++++++++++++++++++++++++++++++++
include/linux/squashfs_fs.h | 519 +++++++++++
include/linux/squashfs_fs_i.h | 43
include/linux/squashfs_fs_sb.h | 65 +
7 files changed, 2501 insertions(+)
--- NEW FILE linux-2.6-squashfs.patch ---
diff --new-file -urp linux-2.6.13/fs/Kconfig linux-2.6.13-squashfs2.2-r2/fs/Kconfig
--- linux-2.6.13/fs/Kconfig 2005-08-29 00:41:01.000000000 +0100
+++ linux-2.6.13-squashfs2.2-r2/fs/Kconfig 2005-09-09 00:40:06.000000000 +0100
@@ -1155,6 +1155,69 @@ config CRAMFS
If unsure, say N.
+config SQUASHFS
+ tristate "SquashFS 2.2 - Squashed file system support"
+ select ZLIB_INFLATE
+ help
+ Saying Y here includes support for SquashFS 2.2 (Compressed Read-Only File
+ System). Squashfs is a highly compressed read-only filesystem for Linux.
+ It uses zlib compression to compress both files, inodes and directories.
+ Inodes in the system are very small and all blocks are packed to minimise
+ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
+
+ Squashfs is intended for general read-only filesystem use, for archival
+ use (i.e. in cases where a .tar.gz file may be used), and in embedded
+ systems where low overhead is needed. Further information and filesystem tools
+ are available from http://squashfs.sourceforge.net.
+
+ If you want to compile this as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want),
+ say M here and read <file:Documentation/modules.txt>. The module
+ will be called squashfs. Note that the root file system (the one
+ containing the directory /) cannot be compiled as a module.
+
+ If unsure, say N.
+
+config SQUASHFS_EMBEDDED
+
+ bool "Additional options for memory-constrained systems"
+ depends on SQUASHFS
+ default n
+ help
+ Saying Y here allows you to specify cache sizes and how Squashfs
+ allocates memory. This is only intended for memory constrained
+ systems.
+
+ If unsure, say N.
+
+config SQUASHFS_FRAGMENT_CACHE_SIZE
+ int "Number of fragments cached" if SQUASHFS_EMBEDDED
+ depends on SQUASHFS
+ default "3"
+ help
+ By default SquashFS caches the last 3 fragments read from
+ the filesystem. Increasing this amount may mean SquashFS
+ has to re-read fragments less often from disk, at the expense
+ of extra system memory. Decreasing this amount will mean
+ SquashFS uses less memory at the expense of extra reads from disk.
+
+ Note there must be at least one cached fragment. Anything
+ much more than three will probably not make much difference.
+
+config SQUASHFS_VMALLOC
+ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
+ depends on SQUASHFS
+ default n
+ help
+ By default SquashFS uses kmalloc to obtain fragment cache memory.
+ Kmalloc memory is the standard kernel allocator, but it can fail
+ on memory constrained systems. Because of the way Vmalloc works,
+ Vmalloc can succeed when kmalloc fails. Specifying this option
+ will make SquashFS always use Vmalloc to allocate the
+ fragment cache memory.
+
+ If unsure, say N.
+
config VXFS_FS
tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
help
diff --new-file -urp linux-2.6.13/fs/Makefile linux-2.6.13-squashfs2.2-r2/fs/Makefile
--- linux-2.6.13/fs/Makefile 2005-08-29 00:41:01.000000000 +0100
+++ linux-2.6.13-squashfs2.2-r2/fs/Makefile 2005-09-09 00:39:17.000000000 +0100
@@ -55,6 +55,7 @@ obj-$(CONFIG_EXT3_FS) += ext3/ # Before
obj-$(CONFIG_JBD) += jbd/
obj-$(CONFIG_EXT2_FS) += ext2/
obj-$(CONFIG_CRAMFS) += cramfs/
+obj-$(CONFIG_SQUASHFS) += squashfs/
obj-$(CONFIG_RAMFS) += ramfs/
obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
obj-$(CONFIG_CODA_FS) += coda/
diff --new-file -urp linux-2.6.13/fs/squashfs/inode.c linux-2.6.13-squashfs2.2-r2/fs/squashfs/inode.c
--- linux-2.6.13/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.13-squashfs2.2-r2/fs/squashfs/inode.c 2005-09-09 00:40:54.000000000 +0100
@@ -0,0 +1,1803 @@
+/*
+ * Squashfs - a compressed read only filesystem for Linux
+ *
+ * Copyright (c) 2002, 2003, 2004, 2005 Phillip Lougher <phillip at 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
+ */
+
+#define SQUASHFS_1_0_COMPATIBILITY
+
+#include <linux/types.h>
+#include <linux/squashfs_fs.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/slab.h>
+#include <linux/fs.h>
+#include <linux/smp_lock.h>
+#include <linux/slab.h>
+#include <linux/squashfs_fs_sb.h>
+#include <linux/squashfs_fs_i.h>
+#include <linux/buffer_head.h>
+#include <linux/vfs.h>
+#include <linux/init.h>
+#include <linux/dcache.h>
+#include <asm/uaccess.h>
+#include <linux/wait.h>
+#include <asm/semaphore.h>
+#include <linux/zlib.h>
+#include <linux/blkdev.h>
+#include <linux/vmalloc.h>
+
+#ifdef SQUASHFS_TRACE
+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
+#else
+#define TRACE(s, args...) {}
+#endif
+
+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
+
+#define SERROR(s, args...) if(!silent) printk(KERN_ERR "SQUASHFS error: "s, ## args)
+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
+
+static void squashfs_put_super(struct super_block *);
+static int squashfs_statfs(struct super_block *, struct kstatfs *);
+static int squashfs_symlink_readpage(struct file *file, struct page *page);
+static int squashfs_readpage(struct file *file, struct page *page);
+static int squashfs_readpage4K(struct file *file, struct page *page);
+static int squashfs_readdir(struct file *, void *, filldir_t);
+static struct dentry *squashfs_lookup(struct inode *, struct dentry *, struct nameidata *);
+static unsigned int read_data(struct super_block *s, char *buffer,
+ unsigned int index, unsigned int length, unsigned int *next_index);
+static int squashfs_get_cached_block(struct super_block *s, char *buffer,
+ unsigned int block, unsigned int offset, int length,
+ unsigned int *next_block, unsigned int *next_offset);
+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode inode);
+static unsigned int read_blocklist(struct inode *inode, int index, int readahead_blks,
+ char *block_list, unsigned short **block_p, unsigned int *bsize);
+static void squashfs_put_super(struct super_block *s);
+static struct super_block *squashfs_get_sb(struct file_system_type *, int, const char *, void *);
+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);
+
+#ifdef SQUASHFS_1_0_COMPATIBILITY
+static int squashfs_readpage_lessthan4K(struct file *file, struct page *page);
+static struct inode *squashfs_iget_1(struct super_block *s, squashfs_inode inode);
+static unsigned int read_blocklist_1(struct inode *inode, int index, int readahead_blks,
+ char *block_list, unsigned short **block_p, unsigned int *bsize);
+#endif
+
+DECLARE_MUTEX(read_data_mutex);
+
+static z_stream stream;
+
+static struct file_system_type squashfs_fs_type = {
+ .owner = THIS_MODULE,
+ .name = "squashfs",
+ .get_sb = squashfs_get_sb,
+ .kill_sb = kill_block_super,
+ .fs_flags = FS_REQUIRES_DEV
+ };
+
+static unsigned char squashfs_filetype_table[] = {
+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
+};
+
+static struct super_operations squashfs_ops = {
+ .alloc_inode = squashfs_alloc_inode,
+ .destroy_inode = squashfs_destroy_inode,
+ .statfs = squashfs_statfs,
+ .put_super = squashfs_put_super,
+};
+
+static struct address_space_operations squashfs_symlink_aops = {
+ .readpage = squashfs_symlink_readpage
+};
[...2142 lines suppressed...]
+ unsigned int mtime;
+ squashfs_block start_block;
+ unsigned int file_size:SQUASHFS_MAX_FILE_SIZE_LOG;
+ unsigned short block_list[0];
+} __attribute__ ((packed)) squashfs_reg_inode_header_1;
+
+typedef struct {
+ unsigned int inode_type:4;
+ unsigned int mode:12; /* protection */
+ unsigned int uid:4; /* index into uid table */
+ unsigned int guid:4; /* index into guid table */
+ unsigned int file_size:19;
+ unsigned int offset:13;
+ unsigned int mtime;
+ unsigned int start_block:24;
+} __attribute__ ((packed)) squashfs_dir_inode_header_1;
+
+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
+ SQUASHFS_MEMSET(s, d, n);\
+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
+ SQUASHFS_SWAP((s)->guid, d, 20, 4);\
+}
+
+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
+ SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, sizeof(squashfs_ipc_inode_header_1));\
+ SQUASHFS_SWAP((s)->type, d, 24, 4);\
+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
+}
+
+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
+ SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, sizeof(squashfs_dev_inode_header_1));\
+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
+}
+
+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
+ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_symlink_inode_header_1));\
+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
+}
+
+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
+ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_reg_inode_header_1));\
+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
+ SQUASHFS_SWAP((s)->file_size, d, 88, SQUASHFS_MAX_FILE_SIZE_LOG);\
+}
+
+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
+ SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, sizeof(squashfs_dir_inode_header_1));\
+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
+}
+#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
+ /* convert from little endian to big endian */
+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, tbits, b_pos)
+#else
+ /* convert from big endian to little endian */
+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, tbits, 64 - tbits - b_pos)
+#endif
+
+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
+ int bits;\
+ int b_pos = pos % 8;\
+ unsigned long long val = 0;\
+ unsigned char *s = (unsigned char *)p + (pos / 8);\
+ unsigned char *d = ((unsigned char *) &val) + 7;\
+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
+ *d-- = *s++;\
+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
+}
+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
+#endif
+#endif
diff --new-file -urp linux-2.6.13/include/linux/squashfs_fs_i.h linux-2.6.13-squashfs2.2-r2/include/linux/squashfs_fs_i.h
--- linux-2.6.13/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.13-squashfs2.2-r2/include/linux/squashfs_fs_i.h 2005-09-09 00:39:17.000000000 +0100
@@ -0,0 +1,43 @@
+#ifndef SQUASHFS_FS_I
+#define SQUASHFS_FS_I
+/*
+ * Squashfs
+ *
+ * Copyright (c) 2002, 2003, 2004, 2005 Phillip Lougher <phillip at 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
+ */
+
+typedef struct squashfs_inode_info {
+ unsigned int start_block;
+ unsigned int block_list_start;
+ unsigned int offset;
+ union {
+ struct {
+ unsigned int fragment_start_block;
+ unsigned int fragment_size;
+ unsigned int fragment_offset;
+ } s1;
+ struct {
+ unsigned int directory_index_start;
+ unsigned int directory_index_offset;
+ unsigned int directory_index_count;
+ } s2;
+ } u;
+ struct inode vfs_inode;
+ } squashfs_inode_info;
+#endif
diff --new-file -urp linux-2.6.13/include/linux/squashfs_fs_sb.h linux-2.6.13-squashfs2.2-r2/include/linux/squashfs_fs_sb.h
--- linux-2.6.13/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.13-squashfs2.2-r2/include/linux/squashfs_fs_sb.h 2005-09-09 00:39:17.000000000 +0100
@@ -0,0 +1,65 @@
+#ifndef SQUASHFS_FS_SB
+#define SQUASHFS_FS_SB
+/*
+ * Squashfs
+ *
+ * Copyright (c) 2002, 2003, 2004, 2005 Phillip Lougher <phillip at 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>
+
+typedef struct {
+ unsigned int block;
+ int length;
+ unsigned int next_index;
+ char *data;
+ } squashfs_cache;
+
+struct squashfs_fragment_cache {
+ unsigned int block;
+ int length;
+ unsigned int locked;
+ char *data;
+ };
+
+typedef struct squashfs_sb_info {
+ squashfs_super_block sBlk;
+ int devblksize;
+ int devblksize_log2;
+ int swap;
+ squashfs_cache *block_cache;
+ struct squashfs_fragment_cache *fragment;
+ int next_cache;
+ int next_fragment;
+ squashfs_uid *uid;
+ squashfs_uid *guid;
+ squashfs_fragment_index *fragment_index;
+ unsigned int read_size;
+ char *read_data;
+ char *read_page;
+ struct semaphore read_page_mutex;
+ struct semaphore block_cache_mutex;
+ struct semaphore fragment_mutex;
+ wait_queue_head_t waitq;
+ wait_queue_head_t fragment_wait_queue;
+ struct inode *(*iget)(struct super_block *s, squashfs_inode inode);
+ unsigned int (*read_blocklist)(struct inode *inode, int index, int readahead_blks,
+ char *block_list, unsigned short **block_p, unsigned int *bsize);
+ } squashfs_sb_info;
+#endif
Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-4/kernel-2.6.spec,v
retrieving revision 1.1571
retrieving revision 1.1572
diff -u -r1.1571 -r1.1572
--- kernel-2.6.spec 7 Jan 2006 04:20:10 -0000 1.1571
+++ kernel-2.6.spec 9 Jan 2006 18:38:45 -0000 1.1572
@@ -313,6 +313,9 @@
# NIC driver updates
Patch1301: linux-2.6-net-sundance-ip100A.patch
+# Squashfs
+Patch1400: linux-2.6-squashfs.patch
+
# Netdump and Diskdump bits.
Patch1500: linux-2.6-crashdump-common.patch
Patch1501: linux-2.6-netdump.patch
@@ -718,6 +721,9 @@
# New PCI ID for sundance driver.
%patch1301 -p1
+# Squashfs
+%patch1400 -p1
+
# netdump bits
%patch1500 -p1
%patch1501 -p1
@@ -1261,6 +1267,9 @@
%endif
%changelog
+* Mon Jan 9 2006 Dave Jones <davej at redhat.com>
+- Reenable Squashfs.
+
* Fri Jan 6 2006 Dave Jones <davej at redhat.com>
- Enable nvram driver for x86-64
- Fix posix-cpu-timers sched_time accumulation.
More information about the fedora-cvs-commits
mailing list