Skip to content

Commit 4287921

Browse files
jeromemarchandekyooo
authored andcommitted
libbpf-tools/syncsnoop: Add support for sync_file_range2 and arm_sync_file_range()
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. On some older kernel, this function was called arm_sync_file_range() on arm architecture. Support this syscall too. 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 <jmarchan@redhat.com>
1 parent 06ce134 commit 4287921

3 files changed

Lines changed: 32 additions & 2 deletions

File tree

libbpf-tools/syncsnoop.bpf.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,18 @@ 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+
61+
SEC("tracepoint/syscalls/sys_enter_arm_sync_file_range")
62+
void tracepoint__syscalls__sys_enter_arm_sync_file_range(struct trace_event_raw_sys_enter *ctx)
63+
{
64+
__syscall(ctx, SYS_ARM_SYNC_FILE_RANGE);
65+
}
66+
5567
SEC("tracepoint/syscalls/sys_enter_syncfs")
5668
void tracepoint__syscalls__sys_enter_syncfs(struct trace_event_raw_sys_enter *ctx)
5769
{

libbpf-tools/syncsnoop.c

Lines changed: 16 additions & 2 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,22 @@ int main(int argc, char **argv)
101102

102103
libbpf_set_print(libbpf_print_fn);
103104

104-
obj = syncsnoop_bpf__open_and_load();
105+
obj = syncsnoop_bpf__open();
105106
if (!obj) {
106-
fprintf(stderr, "failed to open and load BPF object\n");
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+
if (!tracepoint_exists("syscalls", "sys_enter_arm_sync_file_range"))
116+
bpf_program__set_autoload(obj->progs.tracepoint__syscalls__sys_enter_arm_sync_file_range, false);
117+
118+
err = syncsnoop_bpf__load(obj);
119+
if (err) {
120+
fprintf(stderr, "failed to load BPF object\n");
107121
return 1;
108122
}
109123

libbpf-tools/syncsnoop.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ enum sync_syscalls {
1111
SYS_FDATASYNC,
1212
SYS_MSYNC,
1313
SYS_SYNC_FILE_RANGE,
14+
SYS_SYNC_FILE_RANGE2,
15+
SYS_ARM_SYNC_FILE_RANGE,
1416
SYS_SYNCFS,
1517
SYS_T_MAX,
1618
};
@@ -28,6 +30,8 @@ static const char *sys_names[] = {
2830
"fdatasync",
2931
"msync",
3032
"sync_file_range",
33+
"sync_file_range2",
34+
"arm_sync_file_range",
3135
"syncfs",
3236
"N/A",
3337
};

0 commit comments

Comments
 (0)