ecryptfs: make register_filesystem() the last potential failure exit
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 18 Mar 2012 01:29:13 +0000 (21:29 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 21 Mar 2012 01:29:49 +0000 (21:29 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/ecryptfs/main.c

index 6e0e017e693215c69250a8cfd8cd42c293f3f715..68954937a071abd9ce4a67b6614880a4073d1554 100644 (file)
@@ -794,15 +794,10 @@ static int __init ecryptfs_init(void)
                       "Failed to allocate one or more kmem_cache objects\n");
                goto out;
        }
-       rc = register_filesystem(&ecryptfs_fs_type);
-       if (rc) {
-               printk(KERN_ERR "Failed to register filesystem\n");
-               goto out_free_kmem_caches;
-       }
        rc = do_sysfs_registration();
        if (rc) {
                printk(KERN_ERR "sysfs registration failed\n");
-               goto out_unregister_filesystem;
+               goto out_free_kmem_caches;
        }
        rc = ecryptfs_init_kthread();
        if (rc) {
@@ -823,19 +818,24 @@ static int __init ecryptfs_init(void)
                       "rc = [%d]\n", rc);
                goto out_release_messaging;
        }
+       rc = register_filesystem(&ecryptfs_fs_type);
+       if (rc) {
+               printk(KERN_ERR "Failed to register filesystem\n");
+               goto out_destroy_crypto;
+       }
        if (ecryptfs_verbosity > 0)
                printk(KERN_CRIT "eCryptfs verbosity set to %d. Secret values "
                        "will be written to the syslog!\n", ecryptfs_verbosity);
 
        goto out;
+out_destroy_crypto:
+       ecryptfs_destroy_crypto();
 out_release_messaging:
        ecryptfs_release_messaging();
 out_destroy_kthread:
        ecryptfs_destroy_kthread();
 out_do_sysfs_unregistration:
        do_sysfs_unregistration();
-out_unregister_filesystem:
-       unregister_filesystem(&ecryptfs_fs_type);
 out_free_kmem_caches:
        ecryptfs_free_kmem_caches();
 out: