040-use_ext4_for_ext23.patch 3.4 KB

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