fuse: register_filesystem() called too early
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 13 Dec 2011 17:25:27 +0000 (12:25 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 13 Dec 2011 17:35:14 +0000 (12:35 -0500)
same story as with ubifs

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/fuse/inode.c

index 3e6d727..aa83109 100644 (file)
@@ -1138,28 +1138,28 @@ static int __init fuse_fs_init(void)
 {
        int err;
 
 {
        int err;
 
-       err = register_filesystem(&fuse_fs_type);
-       if (err)
-               goto out;
-
-       err = register_fuseblk();
-       if (err)
-               goto out_unreg;
-
        fuse_inode_cachep = kmem_cache_create("fuse_inode",
                                              sizeof(struct fuse_inode),
                                              0, SLAB_HWCACHE_ALIGN,
                                              fuse_inode_init_once);
        err = -ENOMEM;
        if (!fuse_inode_cachep)
        fuse_inode_cachep = kmem_cache_create("fuse_inode",
                                              sizeof(struct fuse_inode),
                                              0, SLAB_HWCACHE_ALIGN,
                                              fuse_inode_init_once);
        err = -ENOMEM;
        if (!fuse_inode_cachep)
-               goto out_unreg2;
+               goto out;
+
+       err = register_fuseblk();
+       if (err)
+               goto out2;
+
+       err = register_filesystem(&fuse_fs_type);
+       if (err)
+               goto out3;
 
        return 0;
 
 
        return 0;
 
- out_unreg2:
+ out3:
        unregister_fuseblk();
        unregister_fuseblk();
- out_unreg:
-       unregister_filesystem(&fuse_fs_type);
+ out2:
+       kmem_cache_destroy(fuse_inode_cachep);
  out:
        return err;
 }
  out:
        return err;
 }