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