14eaf97e8SMichael Petlan#!/bin/sh
26060c726SArnaldo Carvalho de Melo# Use vfs_getname probe to get syscall args filenames
36060c726SArnaldo Carvalho de Melo
46060c726SArnaldo Carvalho de Melo# Uses the 'perf test shell' library to add probe:vfs_getname to the system
56060c726SArnaldo Carvalho de Melo# then use it with 'perf record' using 'touch' to write to a temp file, then
66060c726SArnaldo Carvalho de Melo# checks that that was captured by the vfs_getname probe in the generated
76060c726SArnaldo Carvalho de Melo# perf.data file, with the temp file name as the pathname argument.
86060c726SArnaldo Carvalho de Melo
95875cf4cSArnaldo Carvalho de Melo# SPDX-License-Identifier: GPL-2.0
106060c726SArnaldo Carvalho de Melo# Arnaldo Carvalho de Melo <acme@kernel.org>, 2017
116060c726SArnaldo Carvalho de Melo
12*ed46a999SSamir Mulani. "$(dirname "$0")/lib/probe.sh"
131ad5a182SArnaldo Carvalho de Melo
141ad5a182SArnaldo Carvalho de Meloskip_if_no_perf_probe || exit 2
151ad5a182SArnaldo Carvalho de Melo
16*ed46a999SSamir Mulani. "$(dirname "$0")/lib/probe_vfs_getname.sh"
176060c726SArnaldo Carvalho de Melo
186060c726SArnaldo Carvalho de Melorecord_open_file() {
196060c726SArnaldo Carvalho de Melo	echo "Recording open file:"
20766b0beeSAthira Rajeev	# Check presence of libtraceevent support to run perf record
21766b0beeSAthira Rajeev	skip_no_probe_record_support "probe:vfs_getname*"
22766b0beeSAthira Rajeev	[ $? -eq 2 ] && return 2
23194cb6b5SMichael Petlan	perf record -o ${perfdata} -e probe:vfs_getname\* touch $file
246060c726SArnaldo Carvalho de Melo}
256060c726SArnaldo Carvalho de Melo
266060c726SArnaldo Carvalho de Meloperf_script_filenames() {
276060c726SArnaldo Carvalho de Melo	echo "Looking at perf.data file for vfs_getname records for the file we touched:"
286060c726SArnaldo Carvalho de Melo	perf script -i ${perfdata} | \
29818448e9STiezhu Yang	grep -E " +touch +[0-9]+ +\[[0-9]+\] +[0-9]+\.[0-9]+: +probe:vfs_getname[_0-9]*: +\([[:xdigit:]]+\) +pathname=\"${file}\""
306060c726SArnaldo Carvalho de Melo}
316060c726SArnaldo Carvalho de Melo
326060c726SArnaldo Carvalho de Meloadd_probe_vfs_getname || skip_if_no_debuginfo
336060c726SArnaldo Carvalho de Meloerr=$?
346060c726SArnaldo Carvalho de Meloif [ $err -ne 0 ] ; then
356060c726SArnaldo Carvalho de Melo	exit $err
366060c726SArnaldo Carvalho de Melofi
376060c726SArnaldo Carvalho de Melo
38cf95f85eSJames Clarkperfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
39cf95f85eSJames Clarkfile=$(mktemp /tmp/temporary_file.XXXXX)
40cf95f85eSJames Clark
416060c726SArnaldo Carvalho de Melorecord_open_file && perf_script_filenames
426060c726SArnaldo Carvalho de Meloerr=$?
436060c726SArnaldo Carvalho de Melorm -f ${perfdata}
446060c726SArnaldo Carvalho de Melorm -f ${file}
456060c726SArnaldo Carvalho de Melocleanup_probe_vfs_getname
466060c726SArnaldo Carvalho de Meloexit $err
47