From: David Ahern <dsahern@gmail.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@kernel.org>,
acme@ghostprotocols.net, linux-kernel@vger.kernel.org,
Frederic Weisbecker <fweisbec@gmail.com>,
Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
Mike Galbraith <efault@gmx.de>,
Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH] perf record: Delete file if a failure occurs writing the perf data file
Date: Tue, 19 Nov 2013 21:39:23 -0700 [thread overview]
Message-ID: <528C3CFB.80404@gmail.com> (raw)
In-Reply-To: <20131112153440.GZ5056@laptop.programming.kicks-ass.net>
[-- Attachment #1: Type: text/plain, Size: 880 bytes --]
On 11/12/13, 8:34 AM, Peter Zijlstra wrote:
> On Tue, Nov 12, 2013 at 08:25:02AM -0700, David Ahern wrote:
>> The patch in this thread deletes the file. Another option is to rewind the
>> file to the last known good write (ie., length after last successful call to
>> write_output).
>
> I'd report a warning and continue with all events that you could read
> upto that point.
>
Coming back to this: the answer to that statement is known. The attached
patch attempt to rewind to the last good write. Subsequent reads to the
file fail with:
WARNING: The /tmp/mnt/perf.data file's data size field is 0 which is
unexpected.
Was the 'perf record' command properly terminated?
reading input file (size expected=3 received=-1)broken or missing trace data
incompatible file format (rerun with -v to learn more)
Given that it would seem deleting the file is the best option.
David
[-- Attachment #2: record-reset-on-fail.patch --]
[-- Type: text/plain, Size: 898 bytes --]
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 65615a8bc25e..309f590cf267 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -99,7 +99,22 @@ static int do_write_output(struct perf_record *rec, void *buf, size_t size)
static int write_output(struct perf_record *rec, void *buf, size_t size)
{
- return do_write_output(rec, buf, size);
+ off_t len;
+ int rc;
+
+ /* save current length */
+ len = rec->session->header.data_offset + rec->bytes_written;
+
+ rc = do_write_output(rec, buf, size);
+
+ /* on failure reset file to last known good length */
+ if (rc < 0) {
+ pr_debug("truncating file to last known good write: len %ld\n", len);
+ if (ftruncate(rec->file.fd, len) != 0)
+ pr_err("Double failure -- write failed and then ftruncate\n");
+ }
+
+ return rc;
}
static int process_synthesized_event(struct perf_tool *tool,
prev parent reply other threads:[~2013-11-20 4:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-08 16:41 [PATCH] perf record: Delete file if a failure occurs writing the perf data file David Ahern
2013-11-08 17:58 ` Jiri Olsa
2013-11-11 9:37 ` Ingo Molnar
2013-11-11 14:43 ` David Ahern
2013-11-12 14:51 ` David Ahern
2013-11-12 15:04 ` Peter Zijlstra
2013-11-12 15:25 ` David Ahern
2013-11-12 15:34 ` Peter Zijlstra
2013-11-20 4:39 ` David Ahern [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=528C3CFB.80404@gmail.com \
--to=dsahern@gmail.com \
--cc=acme@ghostprotocols.net \
--cc=efault@gmx.de \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.