mirror of https://gitee.com/openkylin/linux.git
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: 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>
This commit is contained in:
parent
c5e6bc2335
commit
fa1b41a74d
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
goto out_free_mapfile;
|
||||
|
||||
empty_map:
|
||||
fclose(eventsfp);
|
||||
create_empty_mapping(output_file);
|
||||
free_arch_std_events();
|
||||
out_free_mapfile:
|
||||
free(mapfile);
|
||||
return 0;
|
||||
|
||||
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);
|
||||
if (empty_map)
|
||||
create_empty_mapping(output_file);
|
||||
err_out:
|
||||
free_arch_std_events();
|
||||
free(mapfile);
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue