| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- From 24b584240a0006ea7436cd35f5e8983eb76f1e6f Mon Sep 17 00:00:00 2001
- From: Theodore Ts'o <[email protected]>
- 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" <[email protected]>
- ---
- 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
- @@ -3994,6 +3994,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",
- @@ -4024,11 +4076,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();
- @@ -4044,6 +4100,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();
|