xref: /OK3568_Linux_fs/kernel/tools/perf/tests/shell/trace+probe_vfs_getname.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun# Check open filename arg using perf trace + vfs_getname
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun# Uses the 'perf test shell' library to add probe:vfs_getname to the system
5*4882a593Smuzhiyun# then use it with 'perf trace' using 'touch' to write to a temp file, then
6*4882a593Smuzhiyun# checks that that was captured by the vfs_getname was used by 'perf trace',
7*4882a593Smuzhiyun# that already handles "probe:vfs_getname" if present, and used in the
8*4882a593Smuzhiyun# "open" syscall "filename" argument beautifier.
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
11*4882a593Smuzhiyun# Arnaldo Carvalho de Melo <acme@kernel.org>, 2017
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun. $(dirname $0)/lib/probe.sh
14*4882a593Smuzhiyun
15*4882a593Smuzhiyunskip_if_no_perf_probe || exit 2
16*4882a593Smuzhiyunskip_if_no_perf_trace || exit 2
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun. $(dirname $0)/lib/probe_vfs_getname.sh
19*4882a593Smuzhiyun
20*4882a593Smuzhiyunfile=$(mktemp /tmp/temporary_file.XXXXX)
21*4882a593Smuzhiyun
22*4882a593Smuzhiyuntrace_open_vfs_getname() {
23*4882a593Smuzhiyun	evts=$(echo $(perf list syscalls:sys_enter_open* 2>&1 | egrep 'open(at)? ' | sed -r 's/.*sys_enter_([a-z]+) +\[.*$/\1/') | sed 's/ /,/')
24*4882a593Smuzhiyun	perf trace -e $evts touch $file 2>&1 | \
25*4882a593Smuzhiyun	egrep " +[0-9]+\.[0-9]+ +\( +[0-9]+\.[0-9]+ ms\): +touch\/[0-9]+ open(at)?\((dfd: +CWD, +)?filename: +${file}, +flags: CREAT\|NOCTTY\|NONBLOCK\|WRONLY, +mode: +IRUGO\|IWUGO\) += +[0-9]+$"
26*4882a593Smuzhiyun}
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun
29*4882a593Smuzhiyunadd_probe_vfs_getname || skip_if_no_debuginfo
30*4882a593Smuzhiyunerr=$?
31*4882a593Smuzhiyunif [ $err -ne 0 ] ; then
32*4882a593Smuzhiyun	exit $err
33*4882a593Smuzhiyunfi
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun# Do not use whatever ~/.perfconfig file, it may change the output
36*4882a593Smuzhiyun# via trace.{show_timestamp,show_prefix,etc}
37*4882a593Smuzhiyunexport PERF_CONFIG=/dev/null
38*4882a593Smuzhiyun
39*4882a593Smuzhiyuntrace_open_vfs_getname
40*4882a593Smuzhiyunerr=$?
41*4882a593Smuzhiyunrm -f ${file}
42*4882a593Smuzhiyuncleanup_probe_vfs_getname
43*4882a593Smuzhiyunexit $err
44