Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf trace: Beautify renameat2's flags argument

# strace -e renameat2 -f perf trace -e rename* mv c /tmp
strace: Process 10824 attached
[pid 10824] renameat2(AT_FDCWD, "c", AT_FDCWD, "/tmp", RENAME_NOREPLACE) = -1 EXDEV (Invalid cross-device link)
[pid 10824] renameat2(AT_FDCWD, "c", AT_FDCWD, "/tmp/c", RENAME_NOREPLACE) = -1 EEXIST (File exists)
1.857 ( 0.008 ms): mv/10824 renameat2(olddfd: CWD, oldname: 0x7ffc72ff3d81, newdfd: CWD, newname: 0x7ffc72ff3d83, flags: NOREPLACE) = -1 EXDEV Invalid cross-device link
2.002 ( 0.006 ms): mv/10824 renameat2(olddfd: CWD, oldname: 0x7ffc72ff3d81, newdfd: CWD, newname: 0x55ad609efcc0, flags: NOREPLACE) = -1 EEXIST File exists
mv: 'c' and '/tmp/c' are the same file
[pid 10824] +++ exited with 1 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=10824, si_uid=0, si_status=1, si_utime=0, si_stime=0} ---
+++ exited with 0 +++
#

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lkml.kernel.org/n/tip-glyt6nzlt1yx56m5bshy6g83@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+25 -1
+2 -1
tools/perf/builtin-trace.c
··· 801 801 .arg = { [0] = { .scnprintf = SCA_FDAT, /* dfd */ }, }, }, 802 802 { .name = "renameat2", 803 803 .arg = { [0] = { .scnprintf = SCA_FDAT, /* olddirfd */ }, 804 - [2] = { .scnprintf = SCA_FDAT, /* newdirfd */ }, }, }, 804 + [2] = { .scnprintf = SCA_FDAT, /* newdirfd */ }, 805 + [4] = { .scnprintf = SCA_RENAMEAT2_FLAGS, /* flags */ }, }, }, 805 806 { .name = "rt_sigaction", 806 807 .arg = { [0] = { .scnprintf = SCA_SIGNUM, /* sig */ }, }, }, 807 808 { .name = "rt_sigprocmask",
+1
tools/perf/trace/beauty/Build
··· 8 8 libperf-y += mount_flags.o 9 9 libperf-y += pkey_alloc.o 10 10 libperf-y += prctl.o 11 + libperf-y += renameat.o 11 12 libperf-y += sockaddr.o 12 13 libperf-y += socket.o 13 14 libperf-y += statx.o
+3
tools/perf/trace/beauty/beauty.h
··· 144 144 size_t syscall_arg__scnprintf_prctl_arg3(char *bf, size_t size, struct syscall_arg *arg); 145 145 #define SCA_PRCTL_ARG3 syscall_arg__scnprintf_prctl_arg3 146 146 147 + size_t syscall_arg__scnprintf_renameat2_flags(char *bf, size_t size, struct syscall_arg *arg); 148 + #define SCA_RENAMEAT2_FLAGS syscall_arg__scnprintf_renameat2_flags 149 + 147 150 size_t syscall_arg__scnprintf_sockaddr(char *bf, size_t size, struct syscall_arg *arg); 148 151 #define SCA_SOCKADDR syscall_arg__scnprintf_sockaddr 149 152
+19
tools/perf/trace/beauty/renameat.c
··· 1 + // SPDX-License-Identifier: LGPL-2.1 2 + // Copyright (C) 2018, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com> 3 + 4 + #include "trace/beauty/beauty.h" 5 + #include <uapi/linux/fs.h> 6 + 7 + static size_t renameat2__scnprintf_flags(unsigned long flags, char *bf, size_t size) 8 + { 9 + #include "trace/beauty/generated/rename_flags_array.c" 10 + static DEFINE_STRARRAY(rename_flags); 11 + 12 + return strarray__scnprintf_flags(&strarray__rename_flags, bf, size, flags); 13 + } 14 + 15 + size_t syscall_arg__scnprintf_renameat2_flags(char *bf, size_t size, struct syscall_arg *arg) 16 + { 17 + unsigned long flags = arg->val; 18 + return renameat2__scnprintf_flags(flags, bf, size); 19 + }