linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Peterson <benjamin@python.org>
To: peterz@infradead.org, mingo@redhat.com, acme@kernel.org,
	alexander.shishkin@linux.intel.com, jolsa@redhat.com,
	namhyung@kernel.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH] perf trace beautify: Beautify flags of mount(2) and umount(2).
Date: Mon, 27 Aug 2018 20:53:44 -0700	[thread overview]
Message-ID: <20180828035344.31500-1-benjamin@python.org> (raw)

Example output of perf trace -e mount,umount2:

  6243.930 ( 0.052 ms): mount/30976 mount(dev_name: 0x55dc541bb920, dir_name: 0x55dc541bc960, type: 0x55dc541b9c40, flags: BIND) = 0
  7851.821 (26.015 ms): umount/30983 umount2(name: 0x558daa82cf50, flags: MNT_FORCE                        ) = 0

Signed-off-by: Benjamin Peterson <benjamin@python.org>
---
 tools/perf/builtin-trace.c            |  5 ++
 tools/perf/trace/beauty/mount_flags.c | 79 +++++++++++++++++++++++++++
 2 files changed, 84 insertions(+)
 create mode 100644 tools/perf/trace/beauty/mount_flags.c

diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 22ab8e67c760..3cffb25d1928 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -603,6 +603,7 @@ static size_t syscall_arg__scnprintf_getrandom_flags(char *bf, size_t size,
 #include "trace/beauty/futex_val3.c"
 #include "trace/beauty/mmap.c"
 #include "trace/beauty/mode_t.c"
+#include "trace/beauty/mount_flags.c"
 #include "trace/beauty/msg_flags.c"
 #include "trace/beauty/open_flags.c"
 #include "trace/beauty/perf_event_open.c"
@@ -722,6 +723,8 @@ static struct syscall_fmt {
 	  .arg = { [0] = { .scnprintf = SCA_HEX,	/* addr */ },
 		   [2] = { .scnprintf = SCA_MMAP_PROT,	/* prot */ },
 		   [3] = { .scnprintf = SCA_MMAP_FLAGS,	/* flags */ }, }, },
+	{ .name     = "mount",
+	  .arg = { [3] = { .scnprintf = SCA_MOUNT_FLAGS, /* flags */ }, }, },
 	{ .name	    = "mprotect",
 	  .arg = { [0] = { .scnprintf = SCA_HEX,	/* start */ },
 		   [2] = { .scnprintf = SCA_MMAP_PROT,	/* prot */ }, }, },
@@ -830,6 +833,8 @@ static struct syscall_fmt {
 	  .arg = { [2] = { .scnprintf = SCA_SIGNUM, /* sig */ }, }, },
 	{ .name	    = "tkill",
 	  .arg = { [1] = { .scnprintf = SCA_SIGNUM, /* sig */ }, }, },
+	{ .name     = "umount2", .alias = "umount",
+	  .arg = { [1] = { .scnprintf = SCA_UMOUNT_FLAGS, /* flags */ }, }, },
 	{ .name	    = "uname", .alias = "newuname", },
 	{ .name	    = "unlinkat",
 	  .arg = { [0] = { .scnprintf = SCA_FDAT, /* dfd */ }, }, },
diff --git a/tools/perf/trace/beauty/mount_flags.c b/tools/perf/trace/beauty/mount_flags.c
new file mode 100644
index 000000000000..86790b82c869
--- /dev/null
+++ b/tools/perf/trace/beauty/mount_flags.c
@@ -0,0 +1,79 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <sys/mount.h>
+
+static size_t syscall_arg__scnprintf_mount_flags(char *bf, size_t size, struct syscall_arg *arg)
+{
+	size_t printed = 0;
+	int flags = arg->val;
+
+	if ((flags & MS_MGC_MSK) == MS_MGC_VAL)
+		flags &= ~MS_MGC_MSK;
+
+#define	P_FLAG(n) \
+	if (flags & MS_##n) { \
+		printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+		flags &= ~MS_##n; \
+	}
+
+	P_FLAG(RDONLY);
+	P_FLAG(NOSUID);
+	P_FLAG(NODEV);
+	P_FLAG(NOEXEC);
+	P_FLAG(SYNCHRONOUS);
+	P_FLAG(REMOUNT);
+	P_FLAG(MANDLOCK);
+	P_FLAG(DIRSYNC);
+	P_FLAG(NOATIME);
+	P_FLAG(NODIRATIME);
+	P_FLAG(BIND);
+	P_FLAG(MOVE);
+	P_FLAG(REC);
+	P_FLAG(SILENT);
+	P_FLAG(POSIXACL);
+	P_FLAG(UNBINDABLE);
+	P_FLAG(PRIVATE);
+	P_FLAG(SLAVE);
+	P_FLAG(SHARED);
+	P_FLAG(RELATIME);
+	P_FLAG(KERNMOUNT);
+	P_FLAG(I_VERSION);
+	P_FLAG(STRICTATIME);
+	P_FLAG(LAZYTIME);
+	P_FLAG(ACTIVE);
+	P_FLAG(NOUSER);
+
+#undef P_FLAG
+
+	if (flags)
+		printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
+
+	return printed;
+}
+
+#define SCA_MOUNT_FLAGS syscall_arg__scnprintf_mount_flags
+
+static size_t syscall_arg__scnprintf_umount_flags(char *bf, size_t size, struct syscall_arg *arg)
+{
+	size_t printed = 0;
+	int flags = arg->val;
+
+#define	P_FLAG(n) \
+	if (flags & n) { \
+		printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+		flags &= ~n; \
+	}
+
+	P_FLAG(MNT_FORCE);
+	P_FLAG(MNT_DETACH);
+	P_FLAG(MNT_EXPIRE);
+	P_FLAG(UMOUNT_NOFOLLOW);
+
+#undef P_FLAG
+
+	if (flags)
+		printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
+
+	return printed;
+}
+
+#define SCA_UMOUNT_FLAGS syscall_arg__scnprintf_umount_flags
-- 
2.17.1


             reply	other threads:[~2018-08-28  4:06 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-28  3:53 Benjamin Peterson [this message]
2018-08-30 18:28 ` [PATCH] perf trace beautify: Beautify flags of mount(2) and umount(2) Arnaldo Carvalho de Melo
2018-08-30 21:50   ` Benjamin Peterson
2018-10-10  3:52     ` Benjamin Peterson
2018-10-10 12:55       ` Arnaldo Carvalho de Melo
2018-10-10 12:56         ` Arnaldo Carvalho de Melo
2018-10-23  2:40         ` Benjamin Peterson
2018-10-24 20:18           ` Arnaldo Carvalho de Melo
2018-10-26  6:23             ` Benjamin Peterson
2018-09-06 13:44 ` [tip:perf/core] perf trace beauty: Alias 'umount' to 'umount2' tip-bot for Benjamin Peterson

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=20180828035344.31500-1-benjamin@python.org \
    --to=benjamin@python.org \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).