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/shmem.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) Index: 2.6-rc/mm/shmem.c =================================================================== --- 2.6-rc.orig/mm/shmem.c +++ 2.6-rc/mm/shmem.c @@ -50,6 +50,7 @@ #include <linux/migrate.h> #include <linux/highmem.h> #include <linux/seq_file.h> +#include <linux/once.h> #include <asm/uaccess.h> #include <asm/div64.h> @@ -2520,7 +2521,6 @@ static struct file_system_type tmpfs_fs_ .get_sb = shmem_get_sb, .kill_sb = kill_litter_super, }; -static struct vfsmount *shm_mnt; static int __init init_tmpfs(void) { @@ -2540,27 +2540,29 @@ static int __init init_tmpfs(void) goto out2; } - shm_mnt = vfs_kern_mount(&tmpfs_fs_type, MS_NOUSER, - tmpfs_fs_type.name, NULL); - if (IS_ERR(shm_mnt)) { - error = PTR_ERR(shm_mnt); - printk(KERN_ERR "Could not kern_mount tmpfs\n"); - goto out1; - } return 0; - -out1: - unregister_filesystem(&tmpfs_fs_type); out2: destroy_inodecache(); out3: bdi_destroy(&shmem_backing_dev_info); out4: - shm_mnt = ERR_PTR(error); return error; } module_init(init_tmpfs) +static struct vfsmount *shm_mnt; + +static int init_shm_mnt(void) +{ + shm_mnt = vfs_kern_mount(&tmpfs_fs_type, MS_NOUSER, + tmpfs_fs_type.name, NULL); + if (IS_ERR(shm_mnt)) { + printk(KERN_ERR "Could not kern_mount tmpfs\n"); + return PTR_ERR(shm_mnt); + } + return 0; +} + /* * shmem_file_setup - get an unlinked file living in tmpfs * @@ -2575,9 +2577,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); if (size < 0 || size > SHMEM_MAX_BYTES) return ERR_PTR(-EINVAL); -- 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