vfs: Allocate anon_inode_inode in anon_inode_init()

Currently we allocated anon_inode_inode in anon_inodefs_mount. This is
somewhat fragile as if that function ever gets called again, it will
overwrite anon_inode_inode pointer. So move the initialization of
anon_inode_inode to anon_inode_init().

Signed-off-by: Jan Kara <jack@suse.cz>
[ Further simplified on suggestion from Dave Jones ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Jan Kara and committed by Linus Torvalds 75c5a52d f217c44e

Changed files
+8 -22
fs
+8 -22
fs/anon_inodes.c
··· 41 41 static struct dentry *anon_inodefs_mount(struct file_system_type *fs_type, 42 42 int flags, const char *dev_name, void *data) 43 43 { 44 - struct dentry *root; 45 - root = mount_pseudo(fs_type, "anon_inode:", NULL, 44 + return mount_pseudo(fs_type, "anon_inode:", NULL, 46 45 &anon_inodefs_dentry_operations, ANON_INODE_FS_MAGIC); 47 - if (!IS_ERR(root)) { 48 - struct super_block *s = root->d_sb; 49 - anon_inode_inode = alloc_anon_inode(s); 50 - if (IS_ERR(anon_inode_inode)) { 51 - dput(root); 52 - deactivate_locked_super(s); 53 - root = ERR_CAST(anon_inode_inode); 54 - } 55 - } 56 - return root; 57 46 } 58 47 59 48 static struct file_system_type anon_inode_fs_type = { ··· 164 175 165 176 static int __init anon_inode_init(void) 166 177 { 167 - int error; 168 - 169 178 anon_inode_mnt = kern_mount(&anon_inode_fs_type); 170 - if (IS_ERR(anon_inode_mnt)) { 171 - error = PTR_ERR(anon_inode_mnt); 172 - goto err_unregister_filesystem; 173 - } 174 - return 0; 179 + if (IS_ERR(anon_inode_mnt)) 180 + panic("anon_inode_init() kernel mount failed (%ld)\n", PTR_ERR(anon_inode_mnt)); 175 181 176 - err_unregister_filesystem: 177 - unregister_filesystem(&anon_inode_fs_type); 178 - panic(KERN_ERR "anon_inode_init() failed (%d)\n", error); 182 + anon_inode_inode = alloc_anon_inode(anon_inode_mnt->mnt_sb); 183 + if (IS_ERR(anon_inode_inode)) 184 + panic("anon_inode_init() inode allocation failed (%ld)\n", PTR_ERR(anon_inode_inode)); 185 + 186 + return 0; 179 187 } 180 188 181 189 fs_initcall(anon_inode_init);