Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cf81f89d9a85b1825d8c8cf1f8f0e2c98cc72823
Commit:     cf81f89d9a85b1825d8c8cf1f8f0e2c98cc72823
Parent:     5dda6992a3138f3839dcaecbcd2fbea4dd514c7c
Author:     Michael Halcrow <[EMAIL PROTECTED]>
AuthorDate: Tue Oct 16 01:28:07 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Oct 16 09:43:12 2007 -0700

    ecryptfs: fix error handling
    
    The error paths and the module exit code need work. sysfs
    unregistration is not the right place to tear down the crypto
    subsystem, and the code to undo subsystem initializations on various
    error paths is unnecessarily duplicated. This patch addresses those
    issues.
    
    Signed-off-by: Michael Halcrow <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 fs/ecryptfs/main.c |   41 ++++++++++++++++++++---------------------
 1 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c
index 00686f1..4954595 100644
--- a/fs/ecryptfs/main.c
+++ b/fs/ecryptfs/main.c
@@ -799,13 +799,6 @@ out:
 
 static void do_sysfs_unregistration(void)
 {
-       int rc;
-
-       rc = ecryptfs_destroy_crypto();
-       if (rc) {
-               printk(KERN_ERR "Failure whilst attempting to destroy crypto; "
-                      "rc = [%d]\n", rc);
-       }
        sysfs_remove_file(&ecryptfs_subsys.kobj,
                          &sysfs_attr_version.attr);
        sysfs_remove_file(&ecryptfs_subsys.kobj,
@@ -836,43 +829,49 @@ static int __init ecryptfs_init(void)
        rc = register_filesystem(&ecryptfs_fs_type);
        if (rc) {
                printk(KERN_ERR "Failed to register filesystem\n");
-               ecryptfs_free_kmem_caches();
-               goto out;
+               goto out_free_kmem_caches;
        }
        kobj_set_kset_s(&ecryptfs_subsys, fs_subsys);
        rc = do_sysfs_registration();
        if (rc) {
                printk(KERN_ERR "sysfs registration failed\n");
-               unregister_filesystem(&ecryptfs_fs_type);
-               ecryptfs_free_kmem_caches();
-               goto out;
+               goto out_unregister_filesystem;
        }
        rc = ecryptfs_init_messaging(ecryptfs_transport);
        if (rc) {
                ecryptfs_printk(KERN_ERR, "Failure occured while attempting to "
                                "initialize the eCryptfs netlink socket\n");
-               do_sysfs_unregistration();
-               unregister_filesystem(&ecryptfs_fs_type);
-               ecryptfs_free_kmem_caches();
-               goto out;
+               goto out_do_sysfs_unregistration;
        }
        rc = ecryptfs_init_crypto();
        if (rc) {
                printk(KERN_ERR "Failure whilst attempting to init crypto; "
                       "rc = [%d]\n", rc);
-               do_sysfs_unregistration();
-               unregister_filesystem(&ecryptfs_fs_type);
-               ecryptfs_free_kmem_caches();
-               goto out;
+               goto out_release_messaging;
        }
+       goto out;
+out_release_messaging:
+       ecryptfs_release_messaging(ecryptfs_transport);
+out_do_sysfs_unregistration:
+       do_sysfs_unregistration();
+out_unregister_filesystem:
+       unregister_filesystem(&ecryptfs_fs_type);
+out_free_kmem_caches:
+       ecryptfs_free_kmem_caches();
 out:
        return rc;
 }
 
 static void __exit ecryptfs_exit(void)
 {
-       do_sysfs_unregistration();
+       int rc;
+
+       rc = ecryptfs_destroy_crypto();
+       if (rc)
+               printk(KERN_ERR "Failure whilst attempting to destroy crypto; "
+                      "rc = [%d]\n", rc);
        ecryptfs_release_messaging(ecryptfs_transport);
+       do_sysfs_unregistration();
        unregister_filesystem(&ecryptfs_fs_type);
        ecryptfs_free_kmem_caches();
 }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to