David Ahern
unread,May 9, 2013, 7:09:28 AM5/9/13You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to ac...@ghostprotocols.net, linux-...@vger.kernel.org, David Ahern, Ingo Molnar, Frederic Weisbecker, Peter Zijlstra, Jiri Olsa, Namhyung Kim, Stephane Eranian
perf-record updates the header in the perf.data file at termination.
Without this update perf-report (and other processing builtins) cannot
properly read events from the file -- the algorithm in
__perf_session__process_events depends on the data_size which is read
from the file header and that function loops if data_size is 0.
Catch this condition when the file is opened and warn the user.
Signed-off-by: David Ahern <
dsa...@gmail.com>
Cc: Arnaldo Carvalho de Melo <
ac...@ghostprotocols.net>
Cc: Ingo Molnar <
mi...@kernel.org>
Cc: Frederic Weisbecker <
fwei...@gmail.com>
Cc: Peter Zijlstra <
pet...@infradead.org>
Cc: Jiri Olsa <
jo...@redhat.com>
Cc: Namhyung Kim <
namh...@kernel.org>
Cc: Stephane Eranian <
era...@google.com>
---
tools/perf/util/header.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 326068a..aa42c8c 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -2802,6 +2802,18 @@ int perf_session__read_header(struct perf_session *session, int fd)
if (perf_file_header__read(&f_header, header, fd) < 0)
return -EINVAL;
+ /*
+ * sanity check that perf.data was written cleanly: data size
+ * is initialized to 0 and updated only if the on_exit function
+ * is run. If data size is still 0 then the file cannot be
+ * processed.
+ */
+ if (f_header.data.size == 0) {
+ pr_err("data size is 0. "
+ "Was the record command properly terminated?\n");
+ return -1;
+ }
+
nr_attrs = f_header.attrs.size / f_header.attr_size;
lseek(fd, f_header.attrs.offset, SEEK_SET);
--
1.7.10.1