⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 003-squashfs_lzma.patch

📁 Linux Home Server 是专门为家庭和SOHO/SMB 设计的高性价比的ISCSI 存储服务器, 具有如下的特色: 强大的iscsi 存储服务器软件; 混合iscsi 和NAS 服务;
💻 PATCH
字号:
Index: linux-2.6.21.7/fs/squashfs/inode.c===================================================================--- linux-2.6.21.7.orig/fs/squashfs/inode.c+++ linux-2.6.21.7/fs/squashfs/inode.c@@ -4,6 +4,9 @@  * Copyright (c) 2002, 2003, 2004, 2005, 2006  * Phillip Lougher <phillip@lougher.org.uk>  *+ * LZMA decompressor support added by Oleg I. Vdovikin+ * Copyright (c) 2005 Oleg I.Vdovikin <oleg@cs.msu.su>+ *  * 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,@@ -21,6 +24,7 @@  * inode.c  */ +#define SQUASHFS_LZMA #include <linux/types.h> #include <linux/squashfs_fs.h> #include <linux/module.h>@@ -44,6 +48,19 @@  #include "squashfs.h" +#ifdef SQUASHFS_LZMA+#include <linux/LzmaDecode.h>++/* default LZMA settings, should be in sync with mksquashfs */+#define LZMA_LC 3+#define LZMA_LP 0+#define LZMA_PB 2++#define LZMA_WORKSPACE_SIZE ((LZMA_BASE_SIZE + \+      (LZMA_LIT_SIZE << (LZMA_LC + LZMA_LP))) * sizeof(CProb))++#endif+ static void squashfs_put_super(struct super_block *); static int squashfs_statfs(struct dentry *, struct kstatfs *); static int squashfs_symlink_readpage(struct file *file, struct page *page);@@ -64,7 +81,11 @@ static int squashfs_get_sb(struct file_s 			const char *, void *, struct vfsmount *);  +#ifdef SQUASHFS_LZMA+static unsigned char lzma_workspace[LZMA_WORKSPACE_SIZE];+#else static z_stream stream;+#endif  static struct file_system_type squashfs_fs_type = { 	.owner = THIS_MODULE,@@ -249,6 +270,15 @@ SQSH_EXTERN unsigned int squashfs_read_d 	if (compressed) { 		int zlib_err; +#ifdef SQUASHFS_LZMA+		if ((zlib_err = LzmaDecode(lzma_workspace,+			LZMA_WORKSPACE_SIZE, LZMA_LC, LZMA_LP, LZMA_PB,+			c_buffer, c_byte, buffer, msblk->read_size, &bytes)) != LZMA_RESULT_OK)+		{+			ERROR("lzma returned unexpected result 0x%x\n", zlib_err);+			bytes = 0;+		}+#else 		stream.next_in = c_buffer; 		stream.avail_in = c_byte; 		stream.next_out = buffer;@@ -263,7 +293,7 @@ SQSH_EXTERN unsigned int squashfs_read_d 			bytes = 0; 		} else 			bytes = stream.total_out;-+#endif 		up(&msblk->read_data_mutex); 	} @@ -2045,15 +2075,19 @@ static int __init init_squashfs_fs(void) 	printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) " 		"Phillip Lougher\n"); +#ifndef SQUASHFS_LZMA 	if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) { 		ERROR("Failed to allocate zlib workspace\n"); 		destroy_inodecache(); 		err = -ENOMEM; 		goto out; 	}+#endif  	if ((err = register_filesystem(&squashfs_fs_type))) {+#ifndef SQUASHFS_LZMA 		vfree(stream.workspace);+#endif 		destroy_inodecache(); 	} @@ -2064,7 +2098,9 @@ out:  static void __exit exit_squashfs_fs(void) {+#ifndef SQUASHFS_LZMA 	vfree(stream.workspace);+#endif 	unregister_filesystem(&squashfs_fs_type); 	destroy_inodecache(); }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -