perf jevents: Tidy error handling
[ 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>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
628b31d967
commit
40a84fcae2
@@ -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[])
|
|||||||
/* 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[])
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
goto out_free_mapfile;
|
|
||||||
|
|
||||||
empty_map:
|
|
||||||
fclose(eventsfp);
|
|
||||||
create_empty_mapping(output_file);
|
|
||||||
free_arch_std_events();
|
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);
|
free(mapfile);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user