aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/sdfat/Kconfig7
-rw-r--r--fs/sdfat/sdfat.c26
2 files changed, 32 insertions, 1 deletions
diff --git a/fs/sdfat/Kconfig b/fs/sdfat/Kconfig
index 417ff432d..90265a198 100644
--- a/fs/sdfat/Kconfig
+++ b/fs/sdfat/Kconfig
@@ -15,6 +15,13 @@ config SDFAT_FS
To compile this as a module, choose M here: the module will be called
sdfat_core and sdfat_fs.
+config SDFAT_USE_FOR_EXFAT
+ bool "Register sdFAT as exFAT"
+ default y
+ depends on SDFAT_FS && !EXFAT_FS
+ help
+ If you want to register sdFAT as available for exFAT, say Y.
+
config SDFAT_DELAYED_META_DIRTY
bool "Enable delayed metadata dirty"
default y
diff --git a/fs/sdfat/sdfat.c b/fs/sdfat/sdfat.c
index 1837ea5a1..0829f4d83 100644
--- a/fs/sdfat/sdfat.c
+++ b/fs/sdfat/sdfat.c
@@ -4978,6 +4978,20 @@ static struct file_system_type sdfat_fs_type = {
.fs_flags = FS_REQUIRES_DEV,
};
+#ifdef CONFIG_SDFAT_USE_FOR_EXFAT
+static struct file_system_type exfat_fs_type = {
+ .owner = THIS_MODULE,
+ .name = "exfat",
+ .mount = sdfat_fs_mount,
+#ifdef CONFIG_SDFAT_DBG_IOCTL
+ .kill_sb = sdfat_debug_kill_sb,
+#else
+ .kill_sb = kill_block_super,
+#endif /* CONFIG_SDFAT_DBG_IOCTL */
+ .fs_flags = FS_REQUIRES_DEV,
+};
+#endif /* CONFIG_SDFAT_USE_FOR_EXFAT */
+
static int __init init_sdfat_fs(void)
{
int err;
@@ -5016,6 +5030,14 @@ static int __init init_sdfat_fs(void)
goto error;
}
+#ifdef CONFIG_SDFAT_USE_FOR_EXFAT
+ err = register_filesystem(&exfat_fs_type);
+ if (err) {
+ pr_err("[SDFAT] failed to register for exfat filesystem\n");
+ goto error;
+ }
+#endif /* CONFIG_SDFAT_USE_FOR_EXFAT */
+
return 0;
error:
sdfat_statistics_uninit();
@@ -5045,7 +5067,9 @@ static void __exit exit_sdfat_fs(void)
sdfat_destroy_inodecache();
unregister_filesystem(&sdfat_fs_type);
-
+#ifdef CONFIG_SDFAT_USE_FOR_EXFAT
+ unregister_filesystem(&exfat_fs_type);
+#endif /* CONFIG_SDFAT_USE_FOR_EXFAT */
fsapi_shutdown();
}