X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/e71ac4855b7b46ec3670bfa3a0bbcf68bcd8a2ec..d5e6bde258d1c0f7e4119df4f95f1d94d69affc4:/target/linux/generic/patches-2.6.32/040-use_ext4_for_ext23.patch diff --git a/target/linux/generic/patches-2.6.32/040-use_ext4_for_ext23.patch b/target/linux/generic/patches-2.6.32/040-use_ext4_for_ext23.patch new file mode 100644 index 000000000..d5824f1bd --- /dev/null +++ b/target/linux/generic/patches-2.6.32/040-use_ext4_for_ext23.patch @@ -0,0 +1,123 @@ +From 24b584240a0006ea7436cd35f5e8983eb76f1e6f Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o +Date: Mon, 7 Dec 2009 14:08:51 -0500 +Subject: [PATCH] ext4: Use ext4 file system driver for ext2/ext3 file system mounts + +Add a new config option, CONFIG_EXT4_USE_FOR_EXT23 which if enabled, +will cause ext4 to be used for either ext2 or ext3 file system mounts +when ext2 or ext3 is not enabled in the configuration. + +This allows minimalist kernel fanatics to drop to file system drivers +from their compiled kernel with out losing functionality. + +Signed-off-by: "Theodore Ts'o" +--- + fs/ext4/Kconfig | 10 +++++++++ + fs/ext4/super.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 68 insertions(+), 0 deletions(-) + +--- a/fs/ext4/Kconfig ++++ b/fs/ext4/Kconfig +@@ -26,6 +26,16 @@ config EXT4_FS + + If unsure, say N. + ++config EXT4_USE_FOR_EXT23 ++ bool "Use ext4 for ext2/ext3 file systems" ++ depends on !EXT3_FS || !EXT2_FS ++ default y ++ help ++ Allow the ext4 file system driver code to be used for ext2 or ++ ext3 file system mounts. This allows users to reduce their ++ compiled kernel size by using one file system driver for ++ ext2, ext3, and ext4 file systems. ++ + config EXT4_FS_XATTR + bool "Ext4 extended attributes" + depends on EXT4_FS +--- a/fs/ext4/super.c ++++ b/fs/ext4/super.c +@@ -3989,6 +3989,58 @@ static int ext4_get_sb(struct file_syste + return get_sb_bdev(fs_type, flags, dev_name, data, ext4_fill_super,mnt); + } + ++#if !defined(CONTIG_EXT2_FS) && defined(CONFIG_EXT4_USE_FOR_EXT23) ++static struct file_system_type ext2_fs_type = { ++ .owner = THIS_MODULE, ++ .name = "ext2", ++ .get_sb = ext4_get_sb, ++ .kill_sb = kill_block_super, ++ .fs_flags = FS_REQUIRES_DEV, ++}; ++ ++static inline void register_as_ext2(void) ++{ ++ int err = register_filesystem(&ext2_fs_type); ++ if (err) ++ printk(KERN_WARNING ++ "EXT4-fs: Unable to register as ext2 (%d)\n", err); ++} ++ ++static inline void unregister_as_ext2(void) ++{ ++ unregister_filesystem(&ext2_fs_type); ++} ++#else ++static inline void register_as_ext2(void) { } ++static inline void unregister_as_ext2(void) { } ++#endif ++ ++#if !defined(CONTIG_EXT3_FS) && defined(CONFIG_EXT4_USE_FOR_EXT23) ++static struct file_system_type ext3_fs_type = { ++ .owner = THIS_MODULE, ++ .name = "ext3", ++ .get_sb = ext4_get_sb, ++ .kill_sb = kill_block_super, ++ .fs_flags = FS_REQUIRES_DEV, ++}; ++ ++static inline void register_as_ext3(void) ++{ ++ int err = register_filesystem(&ext3_fs_type); ++ if (err) ++ printk(KERN_WARNING ++ "EXT4-fs: Unable to register as ext3 (%d)\n", err); ++} ++ ++static inline void unregister_as_ext3(void) ++{ ++ unregister_filesystem(&ext3_fs_type); ++} ++#else ++static inline void register_as_ext3(void) { } ++static inline void unregister_as_ext3(void) { } ++#endif ++ + static struct file_system_type ext4_fs_type = { + .owner = THIS_MODULE, + .name = "ext4", +@@ -4018,11 +4070,15 @@ static int __init init_ext4_fs(void) + err = init_inodecache(); + if (err) + goto out1; ++ register_as_ext2(); ++ register_as_ext3(); + err = register_filesystem(&ext4_fs_type); + if (err) + goto out; + return 0; + out: ++ unregister_as_ext2(); ++ unregister_as_ext3(); + destroy_inodecache(); + out1: + exit_ext4_xattr(); +@@ -4038,6 +4094,8 @@ out4: + + static void __exit exit_ext4_fs(void) + { ++ unregister_as_ext2(); ++ unregister_as_ext3(); + unregister_filesystem(&ext4_fs_type); + destroy_inodecache(); + exit_ext4_xattr();