Commit da5e4ef7fdb8f2fb0878dee3bd9d4dd10cea8cf1

Authored by Peter Korsgaard
Committed by Greg Kroah-Hartman
1 parent 1653268b1b

devtmpfs: support !CONFIG_TMPFS

Make devtmpfs available on (embedded) configurations without SHMEM/TMPFS,
using ramfs instead.

Saves ~15KB.

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Acked-by: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

Showing 4 changed files with 13 additions and 3 deletions Side-by-side Diff

drivers/base/Kconfig
... ... @@ -18,9 +18,9 @@
18 18  
19 19 config DEVTMPFS
20 20 bool "Maintain a devtmpfs filesystem to mount at /dev"
21   - depends on HOTPLUG && SHMEM && TMPFS
  21 + depends on HOTPLUG
22 22 help
23   - This creates a tmpfs filesystem instance early at bootup.
  23 + This creates a tmpfs/ramfs filesystem instance early at bootup.
24 24 In this filesystem, the kernel driver core maintains device
25 25 nodes with their default names and permissions for all
26 26 registered devices with an assigned major/minor number.
... ... @@ -32,6 +32,9 @@
32 32 In very limited environments, it may provide a sufficient
33 33 functional /dev without any further help. It also allows simple
34 34 rescue systems, and reliably handles dynamic major/minor numbers.
  35 +
  36 + Notice: if CONFIG_TMPFS isn't enabled, the simpler ramfs
  37 + file system will be used instead.
35 38  
36 39 config DEVTMPFS_MOUNT
37 40 bool "Automount devtmpfs at /dev, after the kernel mounted the rootfs"
drivers/base/devtmpfs.c
... ... @@ -20,6 +20,7 @@
20 20 #include <linux/namei.h>
21 21 #include <linux/fs.h>
22 22 #include <linux/shmem_fs.h>
  23 +#include <linux/ramfs.h>
23 24 #include <linux/cred.h>
24 25 #include <linux/sched.h>
25 26 #include <linux/init_task.h>
26 27  
... ... @@ -45,7 +46,11 @@
45 46 static int dev_get_sb(struct file_system_type *fs_type, int flags,
46 47 const char *dev_name, void *data, struct vfsmount *mnt)
47 48 {
  49 +#ifdef CONFIG_TMPFS
48 50 return get_sb_single(fs_type, flags, data, shmem_fill_super, mnt);
  51 +#else
  52 + return get_sb_single(fs_type, flags, data, ramfs_fill_super, mnt);
  53 +#endif
49 54 }
50 55  
51 56 static struct file_system_type dev_fs_type = {
... ... @@ -214,7 +214,7 @@
214 214 return 0;
215 215 }
216 216  
217   -static int ramfs_fill_super(struct super_block * sb, void * data, int silent)
  217 +int ramfs_fill_super(struct super_block *sb, void *data, int silent)
218 218 {
219 219 struct ramfs_fs_info *fsi;
220 220 struct inode *inode = NULL;
include/linux/ramfs.h
... ... @@ -20,5 +20,7 @@
20 20 extern const struct vm_operations_struct generic_file_vm_ops;
21 21 extern int __init init_rootfs(void);
22 22  
  23 +int ramfs_fill_super(struct super_block *sb, void *data, int silent);
  24 +
23 25 #endif