Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd05954b authored by Yunlong Song's avatar Yunlong Song Committed by Arnaldo Carvalho de Melo
Browse files

perf data: Support using -f to override perf.data file ownership for 'convert'



Enable perf data convert to use perf.data when it is not owned by
current user or root.

Example:

 # perf record ls
 # chown Yunlong.Song:Yunlong.Song perf.data
 # ls -al perf.data
 -rw------- 1 Yunlong.Song Yunlong.Song 28260 Apr  2 17:35 perf.data
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf data convert --to-ctf=./ctf-data/
 File perf.data not owned by current user or root (use -f to override)
 # perf data convert --to-ctf=./ctf-data/ -f
   Error: unknown switch `f'

  usage: perf data convert [<options>]

     -v, --verbose         be more verbose
     -i, --input <file>    input file name
         --to-ctf ...      Convert to CTF format

After this patch:

 # perf data convert --to-ctf=./ctf-data/
 File perf.data not owned by current user or root (use -f to override)
 # perf data convert --to-ctf=./ctf-data/ -f
 # ls ctf-data/
 metadata  perf_stream_0

As shown above, the -f option really works now.

Signed-off-by: default avatarYunlong Song <yunlong.song@huawei.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-11-git-send-email-yunlong.song@huawei.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent e366a6d8
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -53,12 +53,14 @@ static int cmd_data_convert(int argc, const char **argv,
			    const char *prefix __maybe_unused)
{
	const char *to_ctf     = NULL;
	bool force = false;
	const struct option options[] = {
		OPT_INCR('v', "verbose", &verbose, "be more verbose"),
		OPT_STRING('i', "input", &input_name, "file", "input file name"),
#ifdef HAVE_LIBBABELTRACE_SUPPORT
		OPT_STRING(0, "to-ctf", &to_ctf, NULL, "Convert to CTF format"),
#endif
		OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
		OPT_END()
	};

@@ -76,7 +78,7 @@ static int cmd_data_convert(int argc, const char **argv,

	if (to_ctf) {
#ifdef HAVE_LIBBABELTRACE_SUPPORT
		return bt_convert__perf2ctf(input_name, to_ctf);
		return bt_convert__perf2ctf(input_name, to_ctf, force);
#else
		pr_err("The libbabeltrace support is not compiled in.\n");
		return -1;
+2 −1
Original line number Diff line number Diff line
@@ -791,12 +791,13 @@ static int ctf_writer__init(struct ctf_writer *cw, const char *path)
	return -1;
}

int bt_convert__perf2ctf(const char *input, const char *path)
int bt_convert__perf2ctf(const char *input, const char *path, bool force)
{
	struct perf_session *session;
	struct perf_data_file file = {
		.path = input,
		.mode = PERF_DATA_MODE_READ,
		.force = force,
	};
	struct convert c = {
		.tool = {
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
#define __DATA_CONVERT_BT_H
#ifdef HAVE_LIBBABELTRACE_SUPPORT

int bt_convert__perf2ctf(const char *input_name, const char *to_ctf);
int bt_convert__perf2ctf(const char *input_name, const char *to_ctf, bool force);

#endif /* HAVE_LIBBABELTRACE_SUPPORT */
#endif /* __DATA_CONVERT_BT_H */