tools/perf/tests/shell/lib/probe_vfs_getname.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
Since commit 611851010c74 ("fs: dedup handling of struct filename init
and refcounts bumps"), the kernel has been refactored to use a new
inline function initname(), moving name initialization into it.
As a result, the perf probe test can no longer find the source line that
matches the defined regular expressions. This causes the script to fail
when attempting to add probes.
Update the regular expression to search for the call site of initname().
This provides a valid source line number for adding the probe.
Fixes: 611851010c74 ("fs: dedup handling of struct filename init and refcounts bumps")
Signed-off-by: Leo Yan <leo.yan@arm.com>
---
tools/perf/tests/shell/lib/probe_vfs_getname.sh | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/tools/perf/tests/shell/lib/probe_vfs_getname.sh b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
index 89f72a4c818c..cbfdd2a62c6e 100644
--- a/tools/perf/tests/shell/lib/probe_vfs_getname.sh
+++ b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
@@ -13,12 +13,8 @@ cleanup_probe_vfs_getname() {
add_probe_vfs_getname() {
add_probe_verbose=$1
if [ $had_vfs_getname -eq 1 ] ; then
- result_filename_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*"
- line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_filename_re" | sed -r "s/$result_filename_re/\1/")
- if [ -z "$line" ] ; then
- result_aname_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->aname = NULL;"
- line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_aname_re" | sed -r "s/$result_aname_re/\1/")
- fi
+ result_initname_re="[[:space:]]+([[:digit:]]+)[[:space:]]+initname.*"
+ line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_initname_re" | sed -r "s/$result_initname_re/\1/")
if [ -z "$line" ] ; then
echo "Could not find probeable line"
--
2.34.1
On Fri, May 16, 2025 at 10:05:32AM +0100, Leo Yan wrote:
> Since commit 611851010c74 ("fs: dedup handling of struct filename init
> and refcounts bumps"), the kernel has been refactored to use a new
> inline function initname(), moving name initialization into it.
>
> As a result, the perf probe test can no longer find the source line that
> matches the defined regular expressions. This causes the script to fail
> when attempting to add probes.
>
> Update the regular expression to search for the call site of initname().
Well, I'd say we should add, not update, i.e. a new perf should continue
to work on an older kernel, so please consider the following patch.
- Arnaldo
diff --git a/tools/perf/tests/shell/lib/probe_vfs_getname.sh b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
index 89f72a4c818c712b..aa867e28eadc46bc 100644
--- a/tools/perf/tests/shell/lib/probe_vfs_getname.sh
+++ b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
@@ -13,8 +13,17 @@ cleanup_probe_vfs_getname() {
add_probe_vfs_getname() {
add_probe_verbose=$1
if [ $had_vfs_getname -eq 1 ] ; then
- result_filename_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*"
- line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_filename_re" | sed -r "s/$result_filename_re/\1/")
+ # Please keep the older regexps so that this will pass on older kernels as well
+ # as in the most recent one.
+
+ result_initname_re="[[:space:]]+([[:digit:]]+)[[:space:]]+initname.*"
+ line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_initname_re" | sed -r "s/$result_initname_re/\1/")
+
+ if [ -z "$line" ] ; then
+ result_filename_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*"
+ line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_filename_re" | sed -r "s/$result_filename_re/\1/")
+ fi
+
if [ -z "$line" ] ; then
result_aname_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->aname = NULL;"
line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_aname_re" | sed -r "s/$result_aname_re/\1/")
> This provides a valid source line number for adding the probe.
>
> Fixes: 611851010c74 ("fs: dedup handling of struct filename init and refcounts bumps")
> Signed-off-by: Leo Yan <leo.yan@arm.com>
> ---
> tools/perf/tests/shell/lib/probe_vfs_getname.sh | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/tools/perf/tests/shell/lib/probe_vfs_getname.sh b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
> index 89f72a4c818c..cbfdd2a62c6e 100644
> --- a/tools/perf/tests/shell/lib/probe_vfs_getname.sh
> +++ b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
> @@ -13,12 +13,8 @@ cleanup_probe_vfs_getname() {
> add_probe_vfs_getname() {
> add_probe_verbose=$1
> if [ $had_vfs_getname -eq 1 ] ; then
> - result_filename_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*"
> - line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_filename_re" | sed -r "s/$result_filename_re/\1/")
> - if [ -z "$line" ] ; then
> - result_aname_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->aname = NULL;"
> - line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_aname_re" | sed -r "s/$result_aname_re/\1/")
> - fi
> + result_initname_re="[[:space:]]+([[:digit:]]+)[[:space:]]+initname.*"
> + line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_initname_re" | sed -r "s/$result_initname_re/\1/")
>
> if [ -z "$line" ] ; then
> echo "Could not find probeable line"
> --
> 2.34.1
On Fri, May 16, 2025 at 03:49:51PM -0300, Arnaldo Carvalho de Melo wrote:
> On Fri, May 16, 2025 at 10:05:32AM +0100, Leo Yan wrote:
[...]
> Well, I'd say we should add, not update, i.e. a new perf should continue
> to work on an older kernel, so please consider the following patch.
The change is fine with me. I sent patch v2 based on the idea.
Thanks a lot for suggestion!
Leo
> - Arnaldo
>
> diff --git a/tools/perf/tests/shell/lib/probe_vfs_getname.sh b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
> index 89f72a4c818c712b..aa867e28eadc46bc 100644
> --- a/tools/perf/tests/shell/lib/probe_vfs_getname.sh
> +++ b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
> @@ -13,8 +13,17 @@ cleanup_probe_vfs_getname() {
> add_probe_vfs_getname() {
> add_probe_verbose=$1
> if [ $had_vfs_getname -eq 1 ] ; then
> - result_filename_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*"
> - line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_filename_re" | sed -r "s/$result_filename_re/\1/")
> + # Please keep the older regexps so that this will pass on older kernels as well
> + # as in the most recent one.
> +
> + result_initname_re="[[:space:]]+([[:digit:]]+)[[:space:]]+initname.*"
> + line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_initname_re" | sed -r "s/$result_initname_re/\1/")
> +
> + if [ -z "$line" ] ; then
> + result_filename_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*"
> + line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_filename_re" | sed -r "s/$result_filename_re/\1/")
> + fi
> +
> if [ -z "$line" ] ; then
> result_aname_re="[[:space:]]+([[:digit:]]+)[[:space:]]+result->aname = NULL;"
> line=$(perf probe -L getname_flags 2>&1 | grep -E "$result_aname_re" | sed -r "s/$result_aname_re/\1/")
© 2016 - 2025 Red Hat, Inc.