Commit fa1b41a7 authored by John Garry's avatar John Garry Committed by Arnaldo Carvalho de Melo

perf jevents: Tidy error handling

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: default avatarJohn 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.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent c5e6bc23
...@@ -1100,12 +1100,13 @@ static int process_one_file(const char *fpath, const struct stat *sb, ...@@ -1100,12 +1100,13 @@ static int process_one_file(const char *fpath, const struct stat *sb,
*/ */
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int rc, ret = 0; int rc, ret = 0, empty_map = 0;
int maxfds; int maxfds;
char ldirname[PATH_MAX]; char ldirname[PATH_MAX];
const char *arch; const char *arch;
const char *output_file; const char *output_file;
const char *start_dirname; const char *start_dirname;
char *err_string_ext = "";
struct stat stbuf; struct stat stbuf;
prog = basename(argv[0]); prog = basename(argv[0]);
...@@ -1133,7 +1134,8 @@ int main(int argc, char *argv[]) ...@@ -1133,7 +1134,8 @@ int main(int argc, char *argv[])
/* If architecture does not have any event lists, bail out */ /* If architecture does not have any event lists, bail out */
if (stat(ldirname, &stbuf) < 0) { if (stat(ldirname, &stbuf) < 0) {
pr_info("%s: Arch %s has no PMU event lists\n", prog, arch); 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 */ /* Include pmu-events.h first */
...@@ -1150,75 +1152,60 @@ int main(int argc, char *argv[]) ...@@ -1150,75 +1152,60 @@ int main(int argc, char *argv[])
*/ */
maxfds = get_maxfds(); maxfds = get_maxfds();
mapfile = NULL;
rc = nftw(ldirname, preprocess_arch_std_files, maxfds, 0); rc = nftw(ldirname, preprocess_arch_std_files, maxfds, 0);
if (rc && verbose) { if (rc)
pr_info("%s: Error preprocessing arch standard files %s\n", goto err_processing_std_arch_event_dir;
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;
}
rc = nftw(ldirname, process_one_file, maxfds, 0); rc = nftw(ldirname, process_one_file, maxfds, 0);
if (rc && verbose) { if (rc)
pr_info("%s: Error walking file tree %s\n", prog, ldirname); goto err_processing_dir;
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;
}
sprintf(ldirname, "%s/test", start_dirname); sprintf(ldirname, "%s/test", start_dirname);
rc = nftw(ldirname, process_one_file, maxfds, 0); rc = nftw(ldirname, process_one_file, maxfds, 0);
if (rc && verbose) { if (rc)
pr_info("%s: Error walking file tree %s rc=%d for test\n", goto err_processing_dir;
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 (close_table) if (close_table)
print_events_table_suffix(eventsfp); print_events_table_suffix(eventsfp);
if (!mapfile) { if (!mapfile) {
pr_info("%s: No CPU->JSON mapping?\n", prog); 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); pr_info("%s: Error processing mapfile %s\n", prog, mapfile);
/* Make build fail */ /* Make build fail */
fclose(eventsfp);
free_arch_std_events();
ret = 1; ret = 1;
goto err_out;
} }
free_arch_std_events();
free(mapfile);
return 0;
goto out_free_mapfile; err_processing_std_arch_event_dir:
err_string_ext = " for std arch event";
empty_map: 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); fclose(eventsfp);
create_empty_mapping(output_file); if (empty_map)
create_empty_mapping(output_file);
err_out:
free_arch_std_events(); free_arch_std_events();
out_free_mapfile:
free(mapfile); free(mapfile);
return ret; return ret;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment