8d7b48e0bc
Add a miscellaneous device to the autofs4 module for routing ioctls. This provides the ability to obtain an ioctl file handle for an autofs mount point that is possibly covered by another mount. The actual problem with autofs is that it can't reconnect to existing mounts. Immediately one things of just adding the ability to remount autofs file systems would solve it, but alas, that can't work. This is because autofs direct mounts and the implementation of "on demand mount and expire" of nested mount trees have the file system mounted on top of the mount trigger dentry. To resolve this a miscellaneous device node for routing ioctl commands to these mount points has been implemented in the autofs4 kernel module and a library added to autofs. This provides the ability to open a file descriptor for these over mounted autofs mount points. Please refer to Documentation/filesystems/autofs4-mount-control.txt for a discussion of the problem, implementation alternatives considered and a description of the interface. [akpm@linux-foundation.org: coding-style fixes] [akpm@linux-foundation.org: build fix] Signed-off-by: Ian Kent <raven@themaw.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
/* -*- c -*- --------------------------------------------------------------- *
|
|
*
|
|
* linux/fs/autofs/init.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 int autofs_get_sb(struct file_system_type *fs_type,
|
|
int flags, const char *dev_name, void *data, struct vfsmount *mnt)
|
|
{
|
|
return get_sb_nodev(fs_type, flags, data, autofs4_fill_super, mnt);
|
|
}
|
|
|
|
static struct file_system_type autofs_fs_type = {
|
|
.owner = THIS_MODULE,
|
|
.name = "autofs",
|
|
.get_sb = autofs_get_sb,
|
|
.kill_sb = autofs4_kill_sb,
|
|
};
|
|
|
|
static int __init init_autofs4_fs(void)
|
|
{
|
|
int err;
|
|
|
|
err = register_filesystem(&autofs_fs_type);
|
|
if (err)
|
|
return err;
|
|
|
|
autofs_dev_ioctl_init();
|
|
|
|
return err;
|
|
}
|
|
|
|
static void __exit exit_autofs4_fs(void)
|
|
{
|
|
autofs_dev_ioctl_exit();
|
|
unregister_filesystem(&autofs_fs_type);
|
|
}
|
|
|
|
module_init(init_autofs4_fs)
|
|
module_exit(exit_autofs4_fs)
|
|
MODULE_LICENSE("GPL");
|