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

perf test vfs_getname: Look for alternative line where to collect the pathname

The getname_flags() routine changed recently and thus the place where we
were getting the pathname is not probeable anymore, albeit still
present, so use the next line for that, before:

root@number:/home/acme/git/perf-tools-next# perf test vfs_getname
91: Add vfs_getname probe to get syscall args filenames : FAILED!
93: Use vfs_getname probe to get syscall args filenames : FAILED!
126: Check open filename arg using perf trace + vfs_getname : FAILED!
root@number:/home/acme/git/perf-tools-next#

Now tests 91 and 126 are passing, some more investigation is needed for
test 93, that continues to fail.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+6 -1
+6 -1
tools/perf/tests/shell/lib/probe_vfs_getname.sh
··· 13 13 add_probe_vfs_getname() { 14 14 add_probe_verbose=$1 15 15 if [ $had_vfs_getname -eq 1 ] ; then 16 - line=$(perf probe -L getname_flags 2>&1 | grep -E 'result.*=.*filename;' | sed -r 's/[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*/\1/') 16 + result_filename_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*" 17 + line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_filename_re=" | sed -r "s/$result_filename_re=/\1/") 18 + if [ -z "$line" ] ; then 19 + result_aname_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->aname = NULL;" 20 + line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_aname_re=" | sed -r "s/$result_aname_re=/\1/") 21 + fi 17 22 perf probe -q "vfs_getname=getname_flags:${line} pathname=result->name:string" || \ 18 23 perf probe $add_probe_verbose "vfs_getname=getname_flags:${line} pathname=filename:ustring" 19 24 fi