diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c index c24f1e1..f875bf2 100644 --- a/fs/ramfs/inode.c +++ b/fs/ramfs/inode.c @@ -244,10 +244,17 @@ struct dentry *ramfs_mount(struct file_system_type *fs_type, return mount_nodev(fs_type, flags, data, ramfs_fill_super); } -static struct dentry *rootfs_mount(struct file_system_type *fs_type, +int shmem_init(void); +int shmem_fill_super(struct super_block *sb, void *data, int silent); +static __init struct dentry *rootfs_mount(struct file_system_type *fs_type, int flags, const char *dev_name, void *data) { +#ifdef CONFIG_TMPFS + if (shmem_init()) return NULL; + return mount_nodev(fs_type, flags, data, shmem_fill_super); +#else return mount_nodev(fs_type, flags|MS_NOUSER, data, ramfs_fill_super); +#endif } static void ramfs_kill_sb(struct super_block *sb) diff --git a/mm/shmem.c b/mm/shmem.c index 1c44af7..d2cb93e 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2785,6 +2785,8 @@ int __init shmem_init(void) { int error; + if (shmem_inode_cachep) return 0; + error = bdi_init(&shmem_backing_dev_info); if (error) goto out4;