public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Backport of squashfs-2.6.29+ (squashfs-4.0) to kernel 2.6.27
@ 2009-06-19 14:34 Michael Tokarev
  0 siblings, 0 replies; only message in thread
From: Michael Tokarev @ 2009-06-19 14:34 UTC (permalink / raw)
  To: squashfs-devel, Linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1076 bytes --]

Below are two diffs for squashfs-4 (as found in 2.6.29
and 2.6.30 kernels) to kernel 2.6.27.

In order to build, grab fs/squashfs directory from 2.6.29 or
2.6.30 (or maybe later version), copy it to fs/squashfs in
2.6.27 tree, and apply 2 provided patches.

First (squashfs-2.6.29-to-.27-backport.diff) changes squashfs
itself to be compatible with kernel 2.6.27 API (namely, adding
magic number definition and implementing d_obtain_alias() which
is missing in 2.6.27.

And second changes 2.6.27 build infrastructure to actually
include squashfs filesystem -- init/do_mounts_rd.c, fs/Kconfig
and fs/Makefile.

JFYI, in case it will be useful to someone.

What I use it for is -- since 2.6.29+ does not work with version
3 of the filesystem layout, and 2.6.28- only recognizes v.3, and
since I'm tired updating kernels on all supported machines, I want
to stop for some time, relying on 2.6.27.y stable series.  But we
also use squashfs and some machines requires more modern kernel
features.  So I thought about updating squashfs to v4 on all.
So here it goes.

Thanks.

/mjt

[-- Attachment #2: squashfs-2.6.29-to-.27-backport.diff --]
[-- Type: text/x-patch, Size: 1148 bytes --]

--- linux-2.6.29/fs/squashfs/export.c	2009-06-10 07:05:27 +0400
+++ linux-2.6.27/fs/squashfs/export.c	2009-06-19 18:07:55 +0400
@@ -76,14 +76,30 @@ static struct dentry *squashfs_export_ig
 	unsigned int ino_num)
 {
 	long long ino;
-	struct dentry *dentry = ERR_PTR(-ENOENT);
+	struct dentry *dentry;
+	struct inode *i;
 
 	TRACE("Entered squashfs_export_iget\n");
 
 	ino = squashfs_inode_lookup(sb, ino_num);
-	if (ino >= 0)
-		dentry = d_obtain_alias(squashfs_iget(sb, ino, ino_num));
+	if (ino < 0) {
+		dentry = ERR_PTR(-ENOENT);
+		goto failure;
+	}
+
+	i = squashfs_iget(sb, ino, ino_num);
+	if (i == NULL) {
+		dentry = ERR_PTR(-EACCES);
+		goto failure;
+	}
+
+	dentry = d_alloc_anon(i);
+	if (dentry == NULL) {
+		iput(i);
+		dentry = ERR_PTR(-ENOMEM);
+	}
 
+failure:
 	return dentry;
 }
 
--- linux-2.6.29/fs/squashfs/squashfs_fs.h	2009-06-10 07:05:27 +0400
+++ linux-2.6.27/fs/squashfs/squashfs_fs.h	2009-06-19 18:07:55 +0400
@@ -23,6 +23,8 @@
  * squashfs_fs.h
  */
 
+#define SQUASHFS_MAGIC		0x73717368
+
 #define SQUASHFS_CACHED_FRAGMENTS	CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
 #define SQUASHFS_MAJOR			4
 #define SQUASHFS_MINOR			0

[-- Attachment #3: squashfs-integrate.diff --]
[-- Type: text/x-patch, Size: 1503 bytes --]

--- linux-2.6.27.orig/fs/Kconfig	2008-10-10 02:13:53 +0400
+++ linux-2.6.27.squash/fs/Kconfig	2009-06-19 17:57:16 +0400
@@ -1350,2 +1350,4 @@ config CRAMFS
 
+source "fs/squashfs/Kconfig"
+
 config VXFS_FS
--- linux-2.6.27.orig/fs/Makefile	2008-10-10 02:13:53 +0400
+++ linux-2.6.27.squash/fs/Makefile	2009-06-19 17:56:02 +0400
@@ -76,2 +76,3 @@ obj-$(CONFIG_EXT2_FS)		+= ext2/
 obj-$(CONFIG_CRAMFS)		+= cramfs/
+obj-$(CONFIG_SQUASHFS)		+= squashfs/
 obj-y				+= ramfs/
--- linux-2.6.27.orig/init/do_mounts_rd.c	2008-10-10 02:13:53 +0400
+++ linux-2.6.27.squash/init/do_mounts_rd.c	2009-06-19 17:53:22 +0400
@@ -11,2 +11,3 @@
 #include "do_mounts.h"
+#include "../fs/squashfs/squashfs_fs.h"
 
@@ -43,2 +44,3 @@ static int __init crd_load(int in_fd, in
  *	cramfs
+ *	squashfs
  * 	gzip
@@ -53,2 +55,3 @@ identify_ramdisk_image(int fd, int start
 	struct cramfs_super *cramfsb;
+	struct squashfs_super_block *squashfsb;
 	int nblocks = -1;
@@ -64,2 +67,3 @@ identify_ramdisk_image(int fd, int start
 	cramfsb = (struct cramfs_super *) buf;
+	squashfsb = (struct squashfs_super_block *) buf;
 	memset(buf, 0xe5, size);
@@ -101,2 +105,12 @@ identify_ramdisk_image(int fd, int start
 
+	/* squashfs is at block zero too */
+	if (le32_to_cpu(squashfsb->s_magic) == SQUASHFS_MAGIC) {
+		printk(KERN_NOTICE
+		       "RAMDISK: squashfs filesystem found at block %d\n",
+		       start_block);
+		nblocks = (le64_to_cpu(squashfsb->bytes_used) + BLOCK_SIZE - 1)
+			 >> BLOCK_SIZE_BITS;
+		goto done;
+	}
+
 	/*

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-06-19 14:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-19 14:34 Backport of squashfs-2.6.29+ (squashfs-4.0) to kernel 2.6.27 Michael Tokarev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox