Orangefs: fix sloppy cleanups of debugfs and sysfs init failures.
authorMike Marshall <hubcap@omnibond.com>
Mon, 14 Mar 2016 19:30:39 +0000 (15:30 -0400)
committerMike Marshall <hubcap@omnibond.com>
Mon, 14 Mar 2016 19:48:28 +0000 (15:48 -0400)
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
fs/orangefs/orangefs-debugfs.c
fs/orangefs/orangefs-mod.c
fs/orangefs/orangefs-sysfs.c

index 9eb7972ae10d90c37ccd80369caa4f9d72669f6c..19670b8b4053b49a6c40da82464ff75000bb84da 100644 (file)
@@ -101,30 +101,33 @@ int orangefs_debugfs_init(void)
        int rc = -ENOMEM;
 
        debug_dir = debugfs_create_dir("orangefs", NULL);
-       if (!debug_dir)
+       if (!debug_dir) {
+               pr_info("%s: debugfs_create_dir failed.\n", __func__);
                goto out;
+       }
 
        help_file_dentry = debugfs_create_file(ORANGEFS_KMOD_DEBUG_HELP_FILE,
                                  0444,
                                  debug_dir,
                                  debug_help_string,
                                  &debug_help_fops);
-       if (!help_file_dentry)
+       if (!help_file_dentry) {
+               pr_info("%s: debugfs_create_file failed.\n", __func__);
                goto out;
+       }
 
        orangefs_debug_disabled = 0;
        rc = 0;
 
 out:
-       if (rc)
-               orangefs_debugfs_cleanup();
 
        return rc;
 }
 
 void orangefs_debugfs_cleanup(void)
 {
-       debugfs_remove_recursive(debug_dir);
+       if (debug_dir)
+               debugfs_remove_recursive(debug_dir);
 }
 
 /* open ORANGEFS_KMOD_DEBUG_HELP_FILE */
@@ -198,7 +201,6 @@ static int help_show(struct seq_file *m, void *v)
  */
 int orangefs_kernel_debug_init(void)
 {
-
        int rc = -ENOMEM;
        struct dentry *ret;
        char *k_buffer = NULL;
@@ -232,8 +234,6 @@ int orangefs_kernel_debug_init(void)
        rc = 0;
 
 out:
-       if (rc)
-               orangefs_debugfs_cleanup();
 
        gossip_debug(GOSSIP_DEBUGFS_DEBUG, "%s: rc:%d:\n", __func__, rc);
        return rc;
@@ -268,7 +268,7 @@ int orangefs_client_debug_init(void)
                                                  c_buffer,
                                                  &kernel_debug_fops);
        if (!client_debug_dentry) {
-               pr_info("%s: failed to create %s.\n",
+               pr_info("%s: failed to create updated %s.\n",
                        __func__,
                        ORANGEFS_CLIENT_DEBUG_FILE);
                goto out;
@@ -277,8 +277,6 @@ int orangefs_client_debug_init(void)
        rc = 0;
 
 out:
-       if (rc)
-               orangefs_debugfs_cleanup();
 
        gossip_debug(GOSSIP_DEBUGFS_DEBUG, "%s: rc:%d:\n", __func__, rc);
        return rc;
index 91a4293d1cd7b7cc33bbea8c45e53c92f1adbab1..abc41fa2d2c422033e4d501e32e2a203628b9392 100644 (file)
@@ -185,22 +185,39 @@ static int __init orangefs_init(void)
         */
        ret = orangefs_prepare_debugfs_help_string(1);
        if (ret)
-               goto out;
+               goto prepare_helpstring_failed;
+
+       ret = orangefs_debugfs_init();
+       if (ret)
+               goto debugfs_init_failed;
 
-       orangefs_debugfs_init();
-       orangefs_kernel_debug_init();
-       orangefs_sysfs_init();
+       ret = orangefs_kernel_debug_init();
+       if (ret)
+               goto kernel_debug_init_failed;
+
+       ret = orangefs_sysfs_init();
+       if (ret)
+               goto sysfs_init_failed;
 
        ret = register_filesystem(&orangefs_fs_type);
        if (ret == 0) {
                pr_info("orangefs: module version %s loaded\n", ORANGEFS_VERSION);
-               return 0;
+               ret = 0;
+               goto out;
        }
 
-       orangefs_debugfs_cleanup();
        orangefs_sysfs_exit();
        fsid_key_table_finalize();
 
+sysfs_init_failed:
+
+kernel_debug_init_failed:
+
+debugfs_init_failed:
+       orangefs_debugfs_cleanup();
+
+prepare_helpstring_failed:
+
 cleanup_progress_table:
        kfree(htable_ops_in_progress);
 
index 83f4053bd11b6d3fde75e1efe394285bc5156359..5c03113e3ad2a791dcc757bcda2c4e8cf824e873 100644 (file)
@@ -1611,27 +1611,22 @@ static struct stats_orangefs_obj *stats_orangefs_obj;
 
 int orangefs_sysfs_init(void)
 {
-       int rc;
+       int rc = -EINVAL;
 
        gossip_debug(GOSSIP_SYSFS_DEBUG, "orangefs_sysfs_init: start\n");
 
        /* create /sys/fs/orangefs. */
        orangefs_obj = kzalloc(sizeof(*orangefs_obj), GFP_KERNEL);
-       if (!orangefs_obj) {
-               rc = -EINVAL;
+       if (!orangefs_obj)
                goto out;
-       }
 
        rc = kobject_init_and_add(&orangefs_obj->kobj,
                                  &orangefs_ktype,
                                  fs_kobj,
                                  ORANGEFS_KOBJ_ID);
 
-       if (rc) {
-               kobject_put(&orangefs_obj->kobj);
-               rc = -EINVAL;
-               goto out;
-       }
+       if (rc)
+               goto ofs_obj_bail;
 
        kobject_uevent(&orangefs_obj->kobj, KOBJ_ADD);
 
@@ -1639,7 +1634,7 @@ int orangefs_sysfs_init(void)
        acache_orangefs_obj = kzalloc(sizeof(*acache_orangefs_obj), GFP_KERNEL);
        if (!acache_orangefs_obj) {
                rc = -EINVAL;
-               goto out;
+               goto ofs_obj_bail;
        }
 
        rc = kobject_init_and_add(&acache_orangefs_obj->kobj,
@@ -1647,11 +1642,8 @@ int orangefs_sysfs_init(void)
                                  &orangefs_obj->kobj,
                                  ACACHE_KOBJ_ID);
 
-       if (rc) {
-               kobject_put(&acache_orangefs_obj->kobj);
-               rc = -EINVAL;
-               goto out;
-       }
+       if (rc)
+               goto acache_obj_bail;
 
        kobject_uevent(&acache_orangefs_obj->kobj, KOBJ_ADD);
 
@@ -1660,18 +1652,15 @@ int orangefs_sysfs_init(void)
                kzalloc(sizeof(*capcache_orangefs_obj), GFP_KERNEL);
        if (!capcache_orangefs_obj) {
                rc = -EINVAL;
-               goto out;
+               goto acache_obj_bail;
        }
 
        rc = kobject_init_and_add(&capcache_orangefs_obj->kobj,
                                  &capcache_orangefs_ktype,
                                  &orangefs_obj->kobj,
                                  CAPCACHE_KOBJ_ID);
-       if (rc) {
-               kobject_put(&capcache_orangefs_obj->kobj);
-               rc = -EINVAL;
-               goto out;
-       }
+       if (rc)
+               goto capcache_obj_bail;
 
        kobject_uevent(&capcache_orangefs_obj->kobj, KOBJ_ADD);
 
@@ -1680,18 +1669,15 @@ int orangefs_sysfs_init(void)
                kzalloc(sizeof(*ccache_orangefs_obj), GFP_KERNEL);
        if (!ccache_orangefs_obj) {
                rc = -EINVAL;
-               goto out;
+               goto capcache_obj_bail;
        }
 
        rc = kobject_init_and_add(&ccache_orangefs_obj->kobj,
                                  &ccache_orangefs_ktype,
                                  &orangefs_obj->kobj,
                                  CCACHE_KOBJ_ID);
-       if (rc) {
-               kobject_put(&ccache_orangefs_obj->kobj);
-               rc = -EINVAL;
-               goto out;
-       }
+       if (rc)
+               goto ccache_obj_bail;
 
        kobject_uevent(&ccache_orangefs_obj->kobj, KOBJ_ADD);
 
@@ -1699,7 +1685,7 @@ int orangefs_sysfs_init(void)
        ncache_orangefs_obj = kzalloc(sizeof(*ncache_orangefs_obj), GFP_KERNEL);
        if (!ncache_orangefs_obj) {
                rc = -EINVAL;
-               goto out;
+               goto ccache_obj_bail;
        }
 
        rc = kobject_init_and_add(&ncache_orangefs_obj->kobj,
@@ -1707,11 +1693,8 @@ int orangefs_sysfs_init(void)
                                  &orangefs_obj->kobj,
                                  NCACHE_KOBJ_ID);
 
-       if (rc) {
-               kobject_put(&ncache_orangefs_obj->kobj);
-               rc = -EINVAL;
-               goto out;
-       }
+       if (rc)
+               goto ncache_obj_bail;
 
        kobject_uevent(&ncache_orangefs_obj->kobj, KOBJ_ADD);
 
@@ -1719,7 +1702,7 @@ int orangefs_sysfs_init(void)
        pc_orangefs_obj = kzalloc(sizeof(*pc_orangefs_obj), GFP_KERNEL);
        if (!pc_orangefs_obj) {
                rc = -EINVAL;
-               goto out;
+               goto ncache_obj_bail;
        }
 
        rc = kobject_init_and_add(&pc_orangefs_obj->kobj,
@@ -1727,11 +1710,8 @@ int orangefs_sysfs_init(void)
                                  &orangefs_obj->kobj,
                                  "perf_counters");
 
-       if (rc) {
-               kobject_put(&pc_orangefs_obj->kobj);
-               rc = -EINVAL;
-               goto out;
-       }
+       if (rc)
+               goto pc_obj_bail;
 
        kobject_uevent(&pc_orangefs_obj->kobj, KOBJ_ADD);
 
@@ -1739,7 +1719,7 @@ int orangefs_sysfs_init(void)
        stats_orangefs_obj = kzalloc(sizeof(*stats_orangefs_obj), GFP_KERNEL);
        if (!stats_orangefs_obj) {
                rc = -EINVAL;
-               goto out;
+               goto pc_obj_bail;
        }
 
        rc = kobject_init_and_add(&stats_orangefs_obj->kobj,
@@ -1747,13 +1727,32 @@ int orangefs_sysfs_init(void)
                                  &orangefs_obj->kobj,
                                  STATS_KOBJ_ID);
 
-       if (rc) {
-               kobject_put(&stats_orangefs_obj->kobj);
-               rc = -EINVAL;
-               goto out;
-       }
+       if (rc)
+               goto stats_obj_bail;
 
        kobject_uevent(&stats_orangefs_obj->kobj, KOBJ_ADD);
+       goto out;
+
+stats_obj_bail:
+               kobject_put(&stats_orangefs_obj->kobj);
+
+pc_obj_bail:
+               kobject_put(&pc_orangefs_obj->kobj);
+
+ncache_obj_bail:
+               kobject_put(&ncache_orangefs_obj->kobj);
+
+ccache_obj_bail:
+               kobject_put(&ccache_orangefs_obj->kobj);
+
+capcache_obj_bail:
+               kobject_put(&capcache_orangefs_obj->kobj);
+
+acache_obj_bail:
+               kobject_put(&acache_orangefs_obj->kobj);
+
+ofs_obj_bail:
+               kobject_put(&orangefs_obj->kobj);
 out:
        return rc;
 }