aboutsummaryrefslogtreecommitdiffstats
path: root/mm/shmem.c
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2009-04-30 09:23:42 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2009-09-15 12:50:49 -0400
commit2b2af54a5bb6f7e80ccf78f20084b93c398c3a8b (patch)
treebb27e3b16a2a8fadeea869033a406f0a19b63e29 /mm/shmem.c
parentea5ffff57dce2f4c85ab056f4b0a202f71db2bdf (diff)
Driver Core: devtmpfs - kernel-maintained tmpfs-based /dev
Devtmpfs lets the kernel create a tmpfs instance called devtmpfs very early at kernel initialization, before any driver-core device is registered. Every device with a major/minor will provide a device node in devtmpfs. Devtmpfs can be changed and altered by userspace at any time, and in any way needed - just like today's udev-mounted tmpfs. Unmodified udev versions will run just fine on top of it, and will recognize an already existing kernel-created device node and use it. The default node permissions are root:root 0600. Proper permissions and user/group ownership, meaningful symlinks, all other policy still needs to be applied by userspace. If a node is created by devtmps, devtmpfs will remove the device node when the device goes away. If the device node was created by userspace, or the devtmpfs created node was replaced by userspace, it will no longer be removed by devtmpfs. If it is requested to auto-mount it, it makes init=/bin/sh work without any further userspace support. /dev will be fully populated and dynamic, and always reflect the current device state of the kernel. With the commonly used dynamic device numbers, it solves the problem where static devices nodes may point to the wrong devices. It is intended to make the initial bootup logic simpler and more robust, by de-coupling the creation of the inital environment, to reliably run userspace processes, from a complex userspace bootstrap logic to provide a working /dev. Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Jan Blunck <jblunck@suse.de> Tested-By: Harald Hoyer <harald@redhat.com> Tested-By: Scott James Remnant <scott@ubuntu.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'mm/shmem.c')
-rw-r--r--mm/shmem.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/mm/shmem.c b/mm/shmem.c
index 5a0b3d4055f..bd20f8bb02a 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -2298,8 +2298,7 @@ static void shmem_put_super(struct super_block *sb)
2298 sb->s_fs_info = NULL; 2298 sb->s_fs_info = NULL;
2299} 2299}
2300 2300
2301static int shmem_fill_super(struct super_block *sb, 2301int shmem_fill_super(struct super_block *sb, void *data, int silent)
2302 void *data, int silent)
2303{ 2302{
2304 struct inode *inode; 2303 struct inode *inode;
2305 struct dentry *root; 2304 struct dentry *root;
@@ -2519,7 +2518,7 @@ static struct file_system_type tmpfs_fs_type = {
2519 .kill_sb = kill_litter_super, 2518 .kill_sb = kill_litter_super,
2520}; 2519};
2521 2520
2522static int __init init_tmpfs(void) 2521int __init init_tmpfs(void)
2523{ 2522{
2524 int error; 2523 int error;
2525 2524
@@ -2576,7 +2575,7 @@ static struct file_system_type tmpfs_fs_type = {
2576 .kill_sb = kill_litter_super, 2575 .kill_sb = kill_litter_super,
2577}; 2576};
2578 2577
2579static int __init init_tmpfs(void) 2578int __init init_tmpfs(void)
2580{ 2579{
2581 BUG_ON(register_filesystem(&tmpfs_fs_type) != 0); 2580 BUG_ON(register_filesystem(&tmpfs_fs_type) != 0);
2582 2581
@@ -2687,5 +2686,3 @@ int shmem_zero_setup(struct vm_area_struct *vma)
2687 vma->vm_ops = &shmem_vm_ops; 2686 vma->vm_ops = &shmem_vm_ops;
2688 return 0; 2687 return 0;
2689} 2688}
2690
2691module_init(init_tmpfs)