add 2.6.32 patches to use ext4 for ext2/3
[openwrt.git] / 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 (file)
index 0000000..d5824f1
--- /dev/null
@@ -0,0 +1,123 @@
+From 24b584240a0006ea7436cd35f5e8983eb76f1e6f Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+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" <tytso@mit.edu>
+---
+ 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();
This page took 0.029928 seconds and 4 git commands to generate.