This patch defers mounting tmpfs till shmem_file_setup() is called first time by using call_once(). Signed-off-by: Akinobu Mita <akinobu.mita@xxxxxxxxx> --- mm/tiny-shmem.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) Index: 2.6-rc/mm/tiny-shmem.c =================================================================== --- 2.6-rc.orig/mm/tiny-shmem.c +++ 2.6-rc/mm/tiny-shmem.c @@ -19,6 +19,7 @@ #include <linux/module.h> #include <linux/swap.h> #include <linux/ramfs.h> +#include <linux/once.h> static struct file_system_type tmpfs_fs_type = { .name = "tmpfs", @@ -26,19 +27,23 @@ static struct file_system_type tmpfs_fs_ .kill_sb = kill_litter_super, }; -static struct vfsmount *shm_mnt; - static int __init init_tmpfs(void) { BUG_ON(register_filesystem(&tmpfs_fs_type) != 0); - shm_mnt = kern_mount(&tmpfs_fs_type); - BUG_ON(IS_ERR(shm_mnt)); - return 0; } module_init(init_tmpfs) +static struct vfsmount *shm_mnt; + +static int init_shm_mnt(void) +{ + shm_mnt = kern_mount(&tmpfs_fs_type); + + return IS_ERR(shm_mnt) ? PTR_ERR(shm_mnt) : 0; +} + /* * shmem_file_setup - get an unlinked file living in tmpfs * @@ -53,9 +58,11 @@ struct file *shmem_file_setup(char *name struct inode *inode; struct dentry *dentry, *root; struct qstr this; + static DEFINE_ONCE(once); - if (IS_ERR(shm_mnt)) - return (void *)shm_mnt; + error = call_once(&once, init_shm_mnt); + if (error) + return ERR_PTR(error); error = -ENOMEM; this.name = name; -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html