Unverified Commit 74871791 authored by Christian Brauner's avatar Christian Brauner
Browse files

ntfs3: serve as alias for the legacy ntfs driver

Johan Hovold reported that removing the legacy ntfs driver broke boot
for him since his fstab uses the legacy ntfs driver to access firmware
from the original Windows partition.

Use ntfs3 as an alias for legacy ntfs if CONFIG_NTFS_FS is selected.
This is similar to how ext3 is treated.

Link: https://lore.kernel.org/r/Zf2zPf5TO5oYt3I3@hovoldconsulting.com
Link: https://lore.kernel.org/r/20240325-hinkriegen-zuziehen-d7e2c490427a@brauner


Fixes: 7ffa8f3d ("fs: Remove NTFS classic")
Tested-by: default avatarJohan Hovold <johan+linaro@kernel.org>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Johan Hovold <johan@kernel.org>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 9617cd6f
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -46,3 +46,12 @@ config NTFS3_FS_POSIX_ACL
	  NOTE: this is linux only feature. Windows will ignore these ACLs.

	  If you don't know what Access Control Lists are, say N.

config NTFS_FS
	tristate "NTFS file system support"
	select NTFS3_FS
	select BUFFER_HEAD
	select NLS
	help
	  This config option is here only for backward compatibility. NTFS
	  filesystem is now handled by the NTFS3 driver.
+31 −0
Original line number Diff line number Diff line
@@ -1798,6 +1798,35 @@ static struct file_system_type ntfs_fs_type = {
	.kill_sb		= ntfs3_kill_sb,
	.fs_flags		= FS_REQUIRES_DEV | FS_ALLOW_IDMAP,
};

#if IS_ENABLED(CONFIG_NTFS_FS)
static struct file_system_type ntfs_legacy_fs_type = {
	.owner			= THIS_MODULE,
	.name			= "ntfs",
	.init_fs_context	= ntfs_init_fs_context,
	.parameters		= ntfs_fs_parameters,
	.kill_sb		= ntfs3_kill_sb,
	.fs_flags		= FS_REQUIRES_DEV | FS_ALLOW_IDMAP,
};
MODULE_ALIAS_FS("ntfs");

static inline void register_as_ntfs_legacy(void)
{
	int err = register_filesystem(&ntfs_legacy_fs_type);
	if (err)
		pr_warn("ntfs3: Failed to register legacy ntfs filesystem driver: %d\n", err);
}

static inline void unregister_as_ntfs_legacy(void)
{
	unregister_filesystem(&ntfs_legacy_fs_type);
}
#else
static inline void register_as_ntfs_legacy(void) {}
static inline void unregister_as_ntfs_legacy(void) {}
#endif


// clang-format on

static int __init init_ntfs_fs(void)
@@ -1832,6 +1861,7 @@ static int __init init_ntfs_fs(void)
		goto out1;
	}

	register_as_ntfs_legacy();
	err = register_filesystem(&ntfs_fs_type);
	if (err)
		goto out;
@@ -1849,6 +1879,7 @@ static void __exit exit_ntfs_fs(void)
	rcu_barrier();
	kmem_cache_destroy(ntfs_inode_cachep);
	unregister_filesystem(&ntfs_fs_type);
	unregister_as_ntfs_legacy();
	ntfs3_exit_bitmap();

#ifdef CONFIG_PROC_FS