Browse Source

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>
Peter Korsgaard 15 years ago
parent
commit
da5e4ef7fd
4 changed files with 13 additions and 3 deletions
  1. 5 2
      drivers/base/Kconfig
  2. 5 0
      drivers/base/devtmpfs.c
  3. 1 1
      fs/ramfs/inode.c
  4. 2 0
      include/linux/ramfs.h

+ 5 - 2
drivers/base/Kconfig

@@ -18,9 +18,9 @@ config UEVENT_HELPER_PATH
 
 
 config DEVTMPFS
 config DEVTMPFS
 	bool "Maintain a devtmpfs filesystem to mount at /dev"
 	bool "Maintain a devtmpfs filesystem to mount at /dev"
-	depends on HOTPLUG && SHMEM && TMPFS
+	depends on HOTPLUG
 	help
 	help
-	  This creates a tmpfs filesystem instance early at bootup.
+	  This creates a tmpfs/ramfs filesystem instance early at bootup.
 	  In this filesystem, the kernel driver core maintains device
 	  In this filesystem, the kernel driver core maintains device
 	  nodes with their default names and permissions for all
 	  nodes with their default names and permissions for all
 	  registered devices with an assigned major/minor number.
 	  registered devices with an assigned major/minor number.
@@ -33,6 +33,9 @@ config DEVTMPFS
 	  functional /dev without any further help. It also allows simple
 	  functional /dev without any further help. It also allows simple
 	  rescue systems, and reliably handles dynamic major/minor numbers.
 	  rescue systems, and reliably handles dynamic major/minor numbers.
 
 
+	  Notice: if CONFIG_TMPFS isn't enabled, the simpler ramfs
+	  file system will be used instead.
+
 config DEVTMPFS_MOUNT
 config DEVTMPFS_MOUNT
 	bool "Automount devtmpfs at /dev, after the kernel mounted the rootfs"
 	bool "Automount devtmpfs at /dev, after the kernel mounted the rootfs"
 	depends on DEVTMPFS
 	depends on DEVTMPFS

+ 5 - 0
drivers/base/devtmpfs.c

@@ -20,6 +20,7 @@
 #include <linux/namei.h>
 #include <linux/namei.h>
 #include <linux/fs.h>
 #include <linux/fs.h>
 #include <linux/shmem_fs.h>
 #include <linux/shmem_fs.h>
+#include <linux/ramfs.h>
 #include <linux/cred.h>
 #include <linux/cred.h>
 #include <linux/sched.h>
 #include <linux/sched.h>
 #include <linux/init_task.h>
 #include <linux/init_task.h>
@@ -45,7 +46,11 @@ __setup("devtmpfs.mount=", mount_param);
 static int dev_get_sb(struct file_system_type *fs_type, int flags,
 static int dev_get_sb(struct file_system_type *fs_type, int flags,
 		      const char *dev_name, void *data, struct vfsmount *mnt)
 		      const char *dev_name, void *data, struct vfsmount *mnt)
 {
 {
+#ifdef CONFIG_TMPFS
 	return get_sb_single(fs_type, flags, data, shmem_fill_super, mnt);
 	return get_sb_single(fs_type, flags, data, shmem_fill_super, mnt);
+#else
+	return get_sb_single(fs_type, flags, data, ramfs_fill_super, mnt);
+#endif
 }
 }
 
 
 static struct file_system_type dev_fs_type = {
 static struct file_system_type dev_fs_type = {

+ 1 - 1
fs/ramfs/inode.c

@@ -214,7 +214,7 @@ static int ramfs_parse_options(char *data, struct ramfs_mount_opts *opts)
 	return 0;
 	return 0;
 }
 }
 
 
-static int ramfs_fill_super(struct super_block * sb, void * data, int silent)
+int ramfs_fill_super(struct super_block *sb, void *data, int silent)
 {
 {
 	struct ramfs_fs_info *fsi;
 	struct ramfs_fs_info *fsi;
 	struct inode *inode = NULL;
 	struct inode *inode = NULL;

+ 2 - 0
include/linux/ramfs.h

@@ -20,4 +20,6 @@ extern const struct file_operations ramfs_file_operations;
 extern const struct vm_operations_struct generic_file_vm_ops;
 extern const struct vm_operations_struct generic_file_vm_ops;
 extern int __init init_rootfs(void);
 extern int __init init_rootfs(void);
 
 
+int ramfs_fill_super(struct super_block *sb, void *data, int silent);
+
 #endif
 #endif