diff options
author | Jiri Olsa <jolsa@kernel.org> | 2017-09-08 04:46:20 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2017-09-12 11:34:23 -0400 |
commit | cd6379ebb55ae53e77f17e22ce830bf3fe826736 (patch) | |
tree | 10ac84e0de244dea15fab7d4e464364b9d662601 /tools | |
parent | 58b79186c34306f4a14e98119afc10744a42fa40 (diff) |
perf tools: Open perf.data with O_CLOEXEC flag
Do not carry the perf.data file descriptor into the workload process and
close it when perf executes the workload.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20170908084621.31595-2-jolsa@kernel.org
[ Add definitions for O_CLOEXEC for older systems ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/util/data.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/tools/perf/util/data.c b/tools/perf/util/data.c index e84bbc8ec058..263f5a906ba5 100644 --- a/tools/perf/util/data.c +++ b/tools/perf/util/data.c | |||
@@ -10,6 +10,16 @@ | |||
10 | #include "util.h" | 10 | #include "util.h" |
11 | #include "debug.h" | 11 | #include "debug.h" |
12 | 12 | ||
13 | #ifndef O_CLOEXEC | ||
14 | #ifdef __sparc__ | ||
15 | #define O_CLOEXEC 0x400000 | ||
16 | #elif defined(__alpha__) || defined(__hppa__) | ||
17 | #define O_CLOEXEC 010000000 | ||
18 | #else | ||
19 | #define O_CLOEXEC 02000000 | ||
20 | #endif | ||
21 | #endif | ||
22 | |||
13 | static bool check_pipe(struct perf_data_file *file) | 23 | static bool check_pipe(struct perf_data_file *file) |
14 | { | 24 | { |
15 | struct stat st; | 25 | struct stat st; |
@@ -96,7 +106,8 @@ static int open_file_write(struct perf_data_file *file) | |||
96 | if (check_backup(file)) | 106 | if (check_backup(file)) |
97 | return -1; | 107 | return -1; |
98 | 108 | ||
99 | fd = open(file->path, O_CREAT|O_RDWR|O_TRUNC, S_IRUSR|S_IWUSR); | 109 | fd = open(file->path, O_CREAT|O_RDWR|O_TRUNC|O_CLOEXEC, |
110 | S_IRUSR|S_IWUSR); | ||
100 | 111 | ||
101 | if (fd < 0) | 112 | if (fd < 0) |
102 | pr_err("failed to open %s : %s\n", file->path, | 113 | pr_err("failed to open %s : %s\n", file->path, |