Skip to content

Commit e7098b9

Browse files
libbpf-tools/syncsnoop: Add support for sync_file_range2
Some architectures like ppc64 don't use the sync_file_range syscall, but sync_file_range2 instead and that makes syncsnoop fails on those arches. Add support for it. Fixes the following error: libbpf: failed to determine tracepoint 'syscalls/sys_enter_sync_file_range' perf event ID: No such file or directory libbpf: prog 'tracepoint__syscalls__sys_enter_sync_file_range': failed to create tracepoint 'syscalls/sys_enter_sync_file_range' perf event: No such file or directory libbpf: prog 'tracepoint__syscalls__sys_enter_sync_file_range': failed to auto-attach: -2 failed to attach BPF object Signed-off-by: Jerome Marchand <[email protected]>
1 parent e58d680 commit e7098b9

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

libbpf-tools/syncsnoop.bpf.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ void tracepoint__syscalls__sys_enter_sync_file_range(struct trace_event_raw_sys_
5252
__syscall(ctx, SYS_SYNC_FILE_RANGE);
5353
}
5454

55+
SEC("tracepoint/syscalls/sys_enter_sync_file_range2")
56+
void tracepoint__syscalls__sys_enter_sync_file_range2(struct trace_event_raw_sys_enter *ctx)
57+
{
58+
__syscall(ctx, SYS_SYNC_FILE_RANGE2);
59+
}
60+
5561
SEC("tracepoint/syscalls/sys_enter_syncfs")
5662
void tracepoint__syscalls__sys_enter_syncfs(struct trace_event_raw_sys_enter *ctx)
5763
{

libbpf-tools/syncsnoop.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <bpf/libbpf.h>
1111
#include "syncsnoop.h"
1212
#include "syncsnoop.skel.h"
13+
#include "trace_helpers.h"
1314

1415
#define PERF_BUFFER_PAGES 16
1516
#define PERF_POLL_TIMEOUT_MS 100
@@ -101,9 +102,21 @@ int main(int argc, char **argv)
101102

102103
libbpf_set_print(libbpf_print_fn);
103104

104-
obj = syncsnoop_bpf__open_and_load();
105-
if (!obj) {
106-
fprintf(stderr, "failed to open and load BPF object\n");
105+
obj = syncsnoop_bpf__open();
106+
if (!obj) {
107+
fprintf(stderr, "failed to open BPF object\n");
108+
return 1;
109+
}
110+
111+
if (!tracepoint_exists("syscalls", "sys_enter__sync_file_range"))
112+
bpf_program__set_autoload(obj->progs.tracepoint__syscalls__sys_enter_sync_file_range, false);
113+
if (!tracepoint_exists("syscalls", "sys_enter__sync_file_range2"))
114+
bpf_program__set_autoload(obj->progs.tracepoint__syscalls__sys_enter_sync_file_range2, false);
115+
116+
117+
err = syncsnoop_bpf__load(obj);
118+
if (err) {
119+
fprintf(stderr, "failed to load BPF object\n");
107120
return 1;
108121
}
109122

libbpf-tools/syncsnoop.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ enum sync_syscalls {
1111
SYS_FDATASYNC,
1212
SYS_MSYNC,
1313
SYS_SYNC_FILE_RANGE,
14+
SYS_SYNC_FILE_RANGE2,
1415
SYS_SYNCFS,
1516
SYS_T_MAX,
1617
};
@@ -28,6 +29,7 @@ static const char *sys_names[] = {
2829
"fdatasync",
2930
"msync",
3031
"sync_file_range",
32+
"sync_file_range2",
3133
"syncfs",
3234
"N/A",
3335
};

0 commit comments

Comments
 (0)