On Thu, Aug 31, 2023 at 01:46:09PM +0200, Daniel Borkmann wrote: > On 8/31/23 1:00 PM, Jiri Olsa wrote: > > Recent commit [1] broken d_path test, because now filp_close is not called > > directly from sys_close, but eventually later when the file is finally > > released. > > > > As suggested by Hou Tao we don't need to re-hook the bpf program, but just > > instead we can use sys_close_range to trigger filp_close synchronously. > > > > [1] 021a160abf62 ("fs: use __fput_sync in close(2)") > > Suggested-by: Hou Tao <houtao@xxxxxxxxxxxxxxx> > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > > --- > > tools/testing/selftests/bpf/prog_tests/d_path.c | 8 +++++++- > > 1 file changed, 7 insertions(+), 1 deletion(-) > > > > diff --git a/tools/testing/selftests/bpf/prog_tests/d_path.c b/tools/testing/selftests/bpf/prog_tests/d_path.c > > index 911345c526e6..81e34a4a05d1 100644 > > --- a/tools/testing/selftests/bpf/prog_tests/d_path.c > > +++ b/tools/testing/selftests/bpf/prog_tests/d_path.c > > @@ -90,7 +90,11 @@ static int trigger_fstat_events(pid_t pid) > > fstat(indicatorfd, &fileStat); > > out_close: > > - /* triggers filp_close */ > > + /* sys_close no longer triggers filp_close, but we can > > + * call sys_close_range instead which still does > > + */ > > +#define close(fd) close_range(fd, fd, 0) > > + > > The BPF CI selftest build says: > > [...] > TEST-OBJ [test_progs] lookup_key.test.o > TEST-OBJ [test_progs] migrate_reuseport.test.o > TEST-OBJ [test_progs] user_ringbuf.test.o > /tmp/work/bpf/bpf/tools/testing/selftests/bpf/prog_tests/d_path.c: In function ‘trigger_fstat_events’: > /tmp/work/bpf/bpf/tools/testing/selftests/bpf/prog_tests/d_path.c:96:19: error: implicit declaration of function ‘close_range’ [-Werror=implicit-function-declaration] > 96 | #define close(fd) close_range(fd, fd, 0) > | ^~~~~~~~~~~ > /tmp/work/bpf/bpf/tools/testing/selftests/bpf/prog_tests/d_path.c:98:2: note: in expansion of macro ‘close’ > 98 | close(pipefd[0]); > | ^~~~~ > TEST-OBJ [test_progs] task_pt_regs.test.o > [...] > > Perhaps #include <linux/close_range.h> missing ? yes, will send v2 thanks, jirka > > > close(pipefd[0]); > > close(pipefd[1]); > > close(sockfd); > > @@ -98,6 +102,8 @@ static int trigger_fstat_events(pid_t pid) > > close(devfd); > > close(localfd); > > close(indicatorfd); > > + > > +#undef close > > return ret; > > } > > >