blob: cd2c678058022875187d5661acc53c2a513d8579 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
diff -urN linux-2.6.23/init/do_mounts_rd.c linux-2.6.23.sqlzma-ng/init/do_mounts_rd.c
--- linux-2.6.23/init/do_mounts_rd.c 2007-10-09 16:31:38.000000000 -0400
+++ linux-2.6.23.sqlzma-ng/init/do_mounts_rd.c 2007-11-13 18:58:41.000000000 -0500
@@ -5,6 +5,7 @@
#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>
@@ -39,6 +40,7 @@
* numbers could not be found.
*
* We currently check for the following magic numbers:
+ * squashfs
* minix
* ext2
* romfs
@@ -53,6 +55,7 @@
struct ext2_super_block *ext2sb;
struct romfs_super_block *romfsb;
struct cramfs_super *cramfsb;
+ struct squashfs_super_block *squashfsb;
int nblocks = -1;
unsigned char *buf;
@@ -64,6 +67,7 @@
ext2sb = (struct ext2_super_block *) buf;
romfsb = (struct romfs_super_block *) buf;
cramfsb = (struct cramfs_super *) buf;
+ squashfsb = (struct squashfs_super_block *) buf;
memset(buf, 0xe5, size);
/*
@@ -101,6 +105,18 @@
goto done;
}
+ /* squashfs is at block zero too */
+ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
+ printk(KERN_NOTICE
+ "RAMDISK: squashfs filesystem found at block %d\n",
+ start_block);
+ if (squashfsb->s_major < 3)
+ nblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
+ else
+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
+ goto done;
+ }
+
/*
* Read block 1 to test for minix and ext2 superblock
*/
|