mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 06:34:12 +08:00
d02d21ea00
It turns out that systemd has a bug: it wants to load the autofs module early because of some initialization ordering with udev, and it doesn't do that correctly. Everywhere else it does the proper "look up module name" that does the proper alias resolution, but in that early code, it just uses a hardcoded "autofs4" for the module name. The result of that is that as of commita2225d931f
("autofs: remove left-over autofs4 stubs"), you get systemd[1]: Failed to insert module 'autofs4': No such file or directory in the system logs, and a lack of module loading. All this despite the fact that we had very clearly marked 'autofs4' as an alias for this module. What's so ridiculous about this is that literally everything else does the module alias handling correctly, including really old versions of systemd (that just used 'modprobe' to do this), and even all the other systemd module loading code. Only that special systemd early module load code is broken, hardcoding the module names for not just 'autofs4', but also "ipv6", "unix", "ip_tables" and "virtio_rng". Very annoying. Instead of creating an _additional_ separate compatibility 'autofs4' module, just rely on the fact that everybody else gets this right, and just call the module 'autofs4' for compatibility reasons, with 'autofs' as the alias name. That will allow the systemd people to fix their bugs, adding the proper alias handling, and maybe even fix the name of the module to be just "autofs" (so that they can _test_ the alias handling). And eventually, we can revert this silly compatibility hack. See also https://github.com/systemd/systemd/issues/9501 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=902946 for the systemd bug reports upstream and in the Debian bug tracker respectively. Fixes:a2225d931f
("autofs: remove left-over autofs4 stubs") Reported-by: Ben Hutchings <ben@decadent.org.uk> Reported-by: Michael Biebl <biebl@debian.org> Cc: Ian Kent <raven@themaw.net> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
50 lines
1.1 KiB
C
50 lines
1.1 KiB
C
/*
|
|
* Copyright 1997-1998 Transmeta Corporation -- All Rights Reserved
|
|
*
|
|
* This file is part of the Linux kernel and is made available under
|
|
* the terms of the GNU General Public License, version 2, or at your
|
|
* option, any later version, incorporated herein by reference.
|
|
*/
|
|
|
|
#include <linux/module.h>
|
|
#include <linux/init.h>
|
|
#include "autofs_i.h"
|
|
|
|
static struct dentry *autofs_mount(struct file_system_type *fs_type,
|
|
int flags, const char *dev_name, void *data)
|
|
{
|
|
return mount_nodev(fs_type, flags, data, autofs_fill_super);
|
|
}
|
|
|
|
static struct file_system_type autofs_fs_type = {
|
|
.owner = THIS_MODULE,
|
|
.name = "autofs",
|
|
.mount = autofs_mount,
|
|
.kill_sb = autofs_kill_sb,
|
|
};
|
|
MODULE_ALIAS_FS("autofs");
|
|
MODULE_ALIAS("autofs");
|
|
|
|
static int __init init_autofs_fs(void)
|
|
{
|
|
int err;
|
|
|
|
autofs_dev_ioctl_init();
|
|
|
|
err = register_filesystem(&autofs_fs_type);
|
|
if (err)
|
|
autofs_dev_ioctl_exit();
|
|
|
|
return err;
|
|
}
|
|
|
|
static void __exit exit_autofs_fs(void)
|
|
{
|
|
autofs_dev_ioctl_exit();
|
|
unregister_filesystem(&autofs_fs_type);
|
|
}
|
|
|
|
module_init(init_autofs_fs)
|
|
module_exit(exit_autofs_fs)
|
|
MODULE_LICENSE("GPL");
|