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>

authored by

Jiri Olsa and committed by
Arnaldo Carvalho de Melo
cd6379eb 58b79186

+12 -1
+12 -1
tools/perf/util/data.c
··· 10 10 #include "util.h" 11 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 23 static bool check_pipe(struct perf_data_file *file) 14 24 { 15 25 struct stat st; ··· 106 96 if (check_backup(file)) 107 97 return -1; 108 98 109 - fd = open(file->path, O_CREAT|O_RDWR|O_TRUNC, S_IRUSR|S_IWUSR); 99 + fd = open(file->path, O_CREAT|O_RDWR|O_TRUNC|O_CLOEXEC, 100 + S_IRUSR|S_IWUSR); 110 101 111 102 if (fd < 0) 112 103 pr_err("failed to open %s : %s\n", file->path,