Skip to content

Commit

Permalink
devtmpfs: support !CONFIG_TMPFS
Browse files Browse the repository at this point in the history
Make devtmpfs available on (embedded) configurations without SHMEM/TMPFS,
using ramfs instead.

Saves ~15KB.

Signed-off-by: Peter Korsgaard <[email protected]>
Acked-by: Kay Sievers <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
jacmet authored and gregkh committed May 21, 2010
1 parent 1653268 commit da5e4ef
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 3 deletions.
7 changes: 5 additions & 2 deletions drivers/base/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ config UEVENT_HELPER_PATH

config DEVTMPFS
bool "Maintain a devtmpfs filesystem to mount at /dev"
depends on HOTPLUG && SHMEM && TMPFS
depends on HOTPLUG
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
nodes with their default names and permissions for all
registered devices with an assigned major/minor number.
Expand All @@ -33,6 +33,9 @@ config DEVTMPFS
functional /dev without any further help. It also allows simple
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
bool "Automount devtmpfs at /dev, after the kernel mounted the rootfs"
depends on DEVTMPFS
Expand Down
5 changes: 5 additions & 0 deletions drivers/base/devtmpfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <linux/namei.h>
#include <linux/fs.h>
#include <linux/shmem_fs.h>
#include <linux/ramfs.h>
#include <linux/cred.h>
#include <linux/sched.h>
#include <linux/init_task.h>
Expand All @@ -45,7 +46,11 @@ __setup("devtmpfs.mount=", mount_param);
static int dev_get_sb(struct file_system_type *fs_type, int flags,
const char *dev_name, void *data, struct vfsmount *mnt)
{
#ifdef CONFIG_TMPFS
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 = {
Expand Down
2 changes: 1 addition & 1 deletion fs/ramfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ static int ramfs_parse_options(char *data, struct ramfs_mount_opts *opts)
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 inode *inode = NULL;
Expand Down
2 changes: 2 additions & 0 deletions include/linux/ramfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,6 @@ extern const struct file_operations ramfs_file_operations;
extern const struct vm_operations_struct generic_file_vm_ops;
extern int __init init_rootfs(void);

int ramfs_fill_super(struct super_block *sb, void *data, int silent);

#endif

0 comments on commit da5e4ef

Please sign in to comment.