Root/target/linux/generic/patches-2.6.32/040-use_ext4_for_ext23.patch

1From 24b584240a0006ea7436cd35f5e8983eb76f1e6f Mon Sep 17 00:00:00 2001
2From: Theodore Ts'o <tytso@mit.edu>
3Date: Mon, 7 Dec 2009 14:08:51 -0500
4Subject: [PATCH] ext4: Use ext4 file system driver for ext2/ext3 file system mounts
5
6Add a new config option, CONFIG_EXT4_USE_FOR_EXT23 which if enabled,
7will cause ext4 to be used for either ext2 or ext3 file system mounts
8when ext2 or ext3 is not enabled in the configuration.
9
10This allows minimalist kernel fanatics to drop to file system drivers
11from their compiled kernel with out losing functionality.
12
13Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
14---
15 fs/ext4/Kconfig | 10 +++++++++
16 fs/ext4/super.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
17 2 files changed, 68 insertions(+), 0 deletions(-)
18
19--- a/fs/ext4/Kconfig
20+++ b/fs/ext4/Kconfig
21@@ -26,6 +26,16 @@ config EXT4_FS
22 
23       If unsure, say N.
24 
25+config EXT4_USE_FOR_EXT23
26+ bool "Use ext4 for ext2/ext3 file systems"
27+ depends on !EXT3_FS || !EXT2_FS
28+ default y
29+ help
30+ Allow the ext4 file system driver code to be used for ext2 or
31+ ext3 file system mounts. This allows users to reduce their
32+ compiled kernel size by using one file system driver for
33+ ext2, ext3, and ext4 file systems.
34+
35 config EXT4_FS_XATTR
36     bool "Ext4 extended attributes"
37     depends on EXT4_FS
38--- a/fs/ext4/super.c
39+++ b/fs/ext4/super.c
40@@ -3994,6 +3994,58 @@ static int ext4_get_sb(struct file_syste
41     return get_sb_bdev(fs_type, flags, dev_name, data, ext4_fill_super,mnt);
42 }
43 
44+#if !defined(CONTIG_EXT2_FS) && defined(CONFIG_EXT4_USE_FOR_EXT23)
45+static struct file_system_type ext2_fs_type = {
46+ .owner = THIS_MODULE,
47+ .name = "ext2",
48+ .get_sb = ext4_get_sb,
49+ .kill_sb = kill_block_super,
50+ .fs_flags = FS_REQUIRES_DEV,
51+};
52+
53+static inline void register_as_ext2(void)
54+{
55+ int err = register_filesystem(&ext2_fs_type);
56+ if (err)
57+ printk(KERN_WARNING
58+ "EXT4-fs: Unable to register as ext2 (%d)\n", err);
59+}
60+
61+static inline void unregister_as_ext2(void)
62+{
63+ unregister_filesystem(&ext2_fs_type);
64+}
65+#else
66+static inline void register_as_ext2(void) { }
67+static inline void unregister_as_ext2(void) { }
68+#endif
69+
70+#if !defined(CONTIG_EXT3_FS) && defined(CONFIG_EXT4_USE_FOR_EXT23)
71+static struct file_system_type ext3_fs_type = {
72+ .owner = THIS_MODULE,
73+ .name = "ext3",
74+ .get_sb = ext4_get_sb,
75+ .kill_sb = kill_block_super,
76+ .fs_flags = FS_REQUIRES_DEV,
77+};
78+
79+static inline void register_as_ext3(void)
80+{
81+ int err = register_filesystem(&ext3_fs_type);
82+ if (err)
83+ printk(KERN_WARNING
84+ "EXT4-fs: Unable to register as ext3 (%d)\n", err);
85+}
86+
87+static inline void unregister_as_ext3(void)
88+{
89+ unregister_filesystem(&ext3_fs_type);
90+}
91+#else
92+static inline void register_as_ext3(void) { }
93+static inline void unregister_as_ext3(void) { }
94+#endif
95+
96 static struct file_system_type ext4_fs_type = {
97     .owner = THIS_MODULE,
98     .name = "ext4",
99@@ -4024,11 +4076,15 @@ static int __init init_ext4_fs(void)
100     err = init_inodecache();
101     if (err)
102         goto out1;
103+ register_as_ext2();
104+ register_as_ext3();
105     err = register_filesystem(&ext4_fs_type);
106     if (err)
107         goto out;
108     return 0;
109 out:
110+ unregister_as_ext2();
111+ unregister_as_ext3();
112     destroy_inodecache();
113 out1:
114     exit_ext4_xattr();
115@@ -4044,6 +4100,8 @@ out4:
116 
117 static void __exit exit_ext4_fs(void)
118 {
119+ unregister_as_ext2();
120+ unregister_as_ext3();
121     unregister_filesystem(&ext4_fs_type);
122     destroy_inodecache();
123     exit_ext4_xattr();
124

Archive Download this file



interactive