ntb: Add error path/handling to Debug FS entry creation
authorGary R Hook <gary.hook@amd.com>
Mon, 15 May 2017 15:33:27 +0000 (10:33 -0500)
committerJon Mason <jdmason@kudzu.us>
Thu, 6 Jul 2017 15:30:08 +0000 (11:30 -0400)
If a failure occurs when creating Debug FS entries, unroll all of
the work that's been done.

Signed-off-by: Gary R Hook <gary.hook@amd.com>
Acked-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Jon Mason <jdmason@kudzu.us>
drivers/ntb/test/ntb_perf.c

index 6fdddf86269efad74d455a2ef77c44198babb428..759f772fa00c6a3970eacaaa05de88155bcf6c8d 100644 (file)
@@ -745,6 +745,7 @@ static int perf_debugfs_setup(struct perf_ctx *perf)
        if (!debugfs_initialized())
                return -ENODEV;
 
        if (!debugfs_initialized())
                return -ENODEV;
 
+       /* Assumpion: only one NTB device in the system */
        if (!perf_debugfs_dir) {
                perf_debugfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
                if (!perf_debugfs_dir)
        if (!perf_debugfs_dir) {
                perf_debugfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
                if (!perf_debugfs_dir)
@@ -754,45 +755,50 @@ static int perf_debugfs_setup(struct perf_ctx *perf)
        debugfs_node_dir = debugfs_create_dir(pci_name(pdev),
                                              perf_debugfs_dir);
        if (!debugfs_node_dir)
        debugfs_node_dir = debugfs_create_dir(pci_name(pdev),
                                              perf_debugfs_dir);
        if (!debugfs_node_dir)
-               return -ENODEV;
+               goto err;
 
        debugfs_run = debugfs_create_file("run", S_IRUSR | S_IWUSR,
                                          debugfs_node_dir, perf,
                                          &ntb_perf_debugfs_run);
        if (!debugfs_run)
 
        debugfs_run = debugfs_create_file("run", S_IRUSR | S_IWUSR,
                                          debugfs_node_dir, perf,
                                          &ntb_perf_debugfs_run);
        if (!debugfs_run)
-               return -ENODEV;
+               goto err;
 
        debugfs_threads = debugfs_create_u8("threads", S_IRUSR | S_IWUSR,
                                            debugfs_node_dir,
                                            &perf->perf_threads);
        if (!debugfs_threads)
 
        debugfs_threads = debugfs_create_u8("threads", S_IRUSR | S_IWUSR,
                                            debugfs_node_dir,
                                            &perf->perf_threads);
        if (!debugfs_threads)
-               return -ENODEV;
+               goto err;
 
        debugfs_seg_order = debugfs_create_u32("seg_order", 0600,
                                               debugfs_node_dir,
                                               &seg_order);
        if (!debugfs_seg_order)
 
        debugfs_seg_order = debugfs_create_u32("seg_order", 0600,
                                               debugfs_node_dir,
                                               &seg_order);
        if (!debugfs_seg_order)
-               return -ENODEV;
+               goto err;
 
        debugfs_run_order = debugfs_create_u32("run_order", 0600,
                                               debugfs_node_dir,
                                               &run_order);
        if (!debugfs_run_order)
 
        debugfs_run_order = debugfs_create_u32("run_order", 0600,
                                               debugfs_node_dir,
                                               &run_order);
        if (!debugfs_run_order)
-               return -ENODEV;
+               goto err;
 
        debugfs_use_dma = debugfs_create_bool("use_dma", 0600,
                                               debugfs_node_dir,
                                               &use_dma);
        if (!debugfs_use_dma)
 
        debugfs_use_dma = debugfs_create_bool("use_dma", 0600,
                                               debugfs_node_dir,
                                               &use_dma);
        if (!debugfs_use_dma)
-               return -ENODEV;
+               goto err;
 
        debugfs_on_node = debugfs_create_bool("on_node", 0600,
                                              debugfs_node_dir,
                                              &on_node);
        if (!debugfs_on_node)
 
        debugfs_on_node = debugfs_create_bool("on_node", 0600,
                                              debugfs_node_dir,
                                              &on_node);
        if (!debugfs_on_node)
-               return -ENODEV;
+               goto err;
 
        return 0;
 
        return 0;
+
+err:
+       debugfs_remove_recursive(perf_debugfs_dir);
+       perf_debugfs_dir = NULL;
+       return -ENODEV;
 }
 
 static int perf_probe(struct ntb_client *client, struct ntb_dev *ntb)
 }
 
 static int perf_probe(struct ntb_client *client, struct ntb_dev *ntb)