]> git.itanic.dy.fi Git - linux-stable/commitdiff
perf jevents: Tidy error handling
authorJohn Garry <john.garry@huawei.com>
Thu, 22 Oct 2020 11:02:26 +0000 (19:02 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Oct 2021 08:04:27 +0000 (10:04 +0200)
[ Upstream commit fa1b41a74d1136cbdd6960f36d7b9c7aa35c8139 ]

There is much duplication in the error handling for directory transvering
for prcessing JSONs.

Factor out the common code to tidy a bit.

Signed-off-by: John Garry <john.garry@huawei.com>
Reviewed-By: Kajol Jain<kjain@linux.ibm.com>
Link: https://lore.kernel.org/r/1603364547-197086-2-git-send-email-john.garry@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/perf/pmu-events/jevents.c

index dcfdf6a322dc40615f38ed979b91f6c115c7b2d1..c679a79aef5133c04ec21b7e1582559d8db51365 100644 (file)
@@ -1100,12 +1100,13 @@ static int process_one_file(const char *fpath, const struct stat *sb,
  */
 int main(int argc, char *argv[])
 {
-       int rc, ret = 0;
+       int rc, ret = 0, empty_map = 0;
        int maxfds;
        char ldirname[PATH_MAX];
        const char *arch;
        const char *output_file;
        const char *start_dirname;
+       char *err_string_ext = "";
        struct stat stbuf;
 
        prog = basename(argv[0]);
@@ -1133,7 +1134,8 @@ int main(int argc, char *argv[])
        /* If architecture does not have any event lists, bail out */
        if (stat(ldirname, &stbuf) < 0) {
                pr_info("%s: Arch %s has no PMU event lists\n", prog, arch);
-               goto empty_map;
+               empty_map = 1;
+               goto err_close_eventsfp;
        }
 
        /* Include pmu-events.h first */
@@ -1150,75 +1152,60 @@ int main(int argc, char *argv[])
         */
 
        maxfds = get_maxfds();
-       mapfile = NULL;
        rc = nftw(ldirname, preprocess_arch_std_files, maxfds, 0);
-       if (rc && verbose) {
-               pr_info("%s: Error preprocessing arch standard files %s\n",
-                       prog, ldirname);
-               goto empty_map;
-       } else if (rc < 0) {
-               /* Make build fail */
-               fclose(eventsfp);
-               free_arch_std_events();
-               return 1;
-       } else if (rc) {
-               goto empty_map;
-       }
+       if (rc)
+               goto err_processing_std_arch_event_dir;
 
        rc = nftw(ldirname, process_one_file, maxfds, 0);
-       if (rc && verbose) {
-               pr_info("%s: Error walking file tree %s\n", prog, ldirname);
-               goto empty_map;
-       } else if (rc < 0) {
-               /* Make build fail */
-               fclose(eventsfp);
-               free_arch_std_events();
-               ret = 1;
-               goto out_free_mapfile;
-       } else if (rc) {
-               goto empty_map;
-       }
+       if (rc)
+               goto err_processing_dir;
 
        sprintf(ldirname, "%s/test", start_dirname);
 
        rc = nftw(ldirname, process_one_file, maxfds, 0);
-       if (rc && verbose) {
-               pr_info("%s: Error walking file tree %s rc=%d for test\n",
-                       prog, ldirname, rc);
-               goto empty_map;
-       } else if (rc < 0) {
-               /* Make build fail */
-               free_arch_std_events();
-               ret = 1;
-               goto out_free_mapfile;
-       } else if (rc) {
-               goto empty_map;
-       }
+       if (rc)
+               goto err_processing_dir;
 
        if (close_table)
                print_events_table_suffix(eventsfp);
 
        if (!mapfile) {
                pr_info("%s: No CPU->JSON mapping?\n", prog);
-               goto empty_map;
+               empty_map = 1;
+               goto err_close_eventsfp;
        }
 
-       if (process_mapfile(eventsfp, mapfile)) {
+       rc = process_mapfile(eventsfp, mapfile);
+       fclose(eventsfp);
+       if (rc) {
                pr_info("%s: Error processing mapfile %s\n", prog, mapfile);
                /* Make build fail */
-               fclose(eventsfp);
-               free_arch_std_events();
                ret = 1;
+               goto err_out;
        }
 
+       free_arch_std_events();
+       free(mapfile);
+       return 0;
 
-       goto out_free_mapfile;
-
-empty_map:
+err_processing_std_arch_event_dir:
+       err_string_ext = " for std arch event";
+err_processing_dir:
+       if (verbose) {
+               pr_info("%s: Error walking file tree %s%s\n", prog, ldirname,
+                       err_string_ext);
+               empty_map = 1;
+       } else if (rc < 0) {
+               ret = 1;
+       } else {
+               empty_map = 1;
+       }
+err_close_eventsfp:
        fclose(eventsfp);
-       create_empty_mapping(output_file);
+       if (empty_map)
+               create_empty_mapping(output_file);
+err_out:
        free_arch_std_events();
-out_free_mapfile:
        free(mapfile);
        return ret;
 }