summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-22 18:16:59 +0200
committerPaul Buetow <paul@buetow.org>2026-02-22 18:16:59 +0200
commit40ce5bc1d9da31b49f42e488d2ab5633e7c6a3fb (patch)
tree33c6197180648d80f0e71b14803e102522059be5
parent3ec3c117bb280a377fea1a3eef84a70e2a3d4150 (diff)
Implement sync_file_range coverage and document mage world bootstrap
-rw-r--r--AGENTS.md1
-rw-r--r--integrationtests/cmd/ioworkload/scenario_sync.go23
-rw-r--r--integrationtests/cmd/ioworkload/scenarios.go167
-rw-r--r--integrationtests/sync_test.go11
-rw-r--r--internal/c/generated_tracepoints.c46
-rw-r--r--internal/eventloop.go1
-rw-r--r--internal/eventloop_test.go70
7 files changed, 205 insertions, 114 deletions
diff --git a/AGENTS.md b/AGENTS.md
index cfd3dd1..db92aa8 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -5,6 +5,7 @@ This file provides guidance to AI coding assistants working with the I/O Riot NG
## Build/Test Commands
**Prerequisites**: Ensure libbpfgo is cloned at `../libbpfgo` relative to this repository.
+If builds/tests fail with missing libbpf headers (for example `bpf/bpf.h` not found), run `mage world` first. It bootstraps generation/dependencies and is the preferred first troubleshooting step before retrying `mage test` or `go test`.
```bash
mage all # Build everything (BPF objects and Go binary)
diff --git a/integrationtests/cmd/ioworkload/scenario_sync.go b/integrationtests/cmd/ioworkload/scenario_sync.go
index 214c783..db6b08f 100644
--- a/integrationtests/cmd/ioworkload/scenario_sync.go
+++ b/integrationtests/cmd/ioworkload/scenario_sync.go
@@ -77,6 +77,29 @@ func syncSyncFileRange() error {
return syscall.SyncFileRange(fd, 0, int64(len(data)), 0)
}
+// syncSyncFileRangeToEOF calls sync_file_range(2) with nbytes=0.
+// Per sync_file_range(2), nbytes=0 means "sync from offset through end-of-file".
+func syncSyncFileRangeToEOF() error {
+ dir, cleanup, err := makeTempDir("sync-sync-file-range-to-eof")
+ if err != nil {
+ return err
+ }
+ defer cleanup()
+
+ path := filepath.Join(dir, "syncrangeeoffile.txt")
+ fd, err := syscall.Open(path, syscall.O_RDWR|syscall.O_CREAT, 0o644)
+ if err != nil {
+ return fmt.Errorf("open: %w", err)
+ }
+ defer syscall.Close(fd)
+
+ if _, err := syscall.Write(fd, []byte("sync file range to eof")); err != nil {
+ return fmt.Errorf("write: %w", err)
+ }
+
+ return syscall.SyncFileRange(fd, 0, 0, 0)
+}
+
// syncFsyncEbadf calls fsync on an invalid fd.
// The syscall fails with EBADF, but ior captures the enter_fsync tracepoint.
func syncFsyncEbadf() error {
diff --git a/integrationtests/cmd/ioworkload/scenarios.go b/integrationtests/cmd/ioworkload/scenarios.go
index 0103c6d..4bd85b6 100644
--- a/integrationtests/cmd/ioworkload/scenarios.go
+++ b/integrationtests/cmd/ioworkload/scenarios.go
@@ -7,89 +7,90 @@ import (
// scenarios maps scenario names to their execution functions.
var scenarios = map[string]func() error{
- "crash": crash,
- "open-basic": openBasic,
- "open-creat": openCreat,
- "open-by-handle-at": openByHandleAt,
- "open-enoent": openEnoent,
- "open-rdonly-write": openRdonlyWrite,
- "open-pid-filter": openPidFilter,
- "readwrite-basic": readwriteBasic,
- "readwrite-pread": readwritePread,
- "readwrite-pwrite": readwritePwrite,
- "readwrite-readv": readwriteReadv,
- "readwrite-writev": readwriteWritev,
- "readwrite-wronly-read": readwriteWronlyRead,
- "readwrite-rdonly-write": readwriteRdonlyWrite,
- "readwrite-pread-invalid": readwritePreadInvalid,
- "readwrite-pwrite-invalid": readwritePwriteInvalid,
- "close-basic": closeBasic,
- "close-range": closeRange,
- "close-invalid-fd": closeInvalidFd,
- "close-double-close": closeDoubleClose,
- "close-range-empty": closeRangeEmpty,
- "dup-basic": dupBasic,
- "dup-dup2": dupDup2,
- "dup-dup3": dupDup3,
- "dup-invalid-fd": dupInvalidFd,
- "dup2-same-fd": dup2SameFd,
- "dup3-invalid-flags": dup3InvalidFlags,
- "fcntl-dupfd": fcntlDupfd,
- "fcntl-setfl": fcntlSetfl,
- "fcntl-dupfd-cloexec": fcntlDupfdCloexec,
- "fcntl-invalid-fd": fcntlInvalidFd,
- "fcntl-dupfd-max": fcntlDupfdMax,
- "rename-basic": renameBasic,
- "rename-renameat": renameRenameat,
- "rename-renameat2": renameRenameat2,
- "rename-enoent": renameEnoent,
- "rename-noreplace": renameNoreplace,
- "link-basic": linkBasic,
- "link-linkat": linkLinkat,
- "link-symlinkat": linkSymlinkat,
- "link-readlinkat": linkReadlinkat,
- "link-enoent": linkEnoent,
- "link-symlink-eexist": linkSymlinkEexist,
- "link-readlinkat-einval": linkReadlinkatEinval,
- "unlink-basic": unlinkBasic,
- "unlink-unlinkat": unlinkUnlinkat,
- "unlink-rmdir": unlinkRmdir,
- "unlink-enoent": unlinkEnoent,
- "unlink-rmdir-notempty": unlinkRmdirNotempty,
- "unlink-unlinkat-enoent": unlinkUnlinkatEnoent,
- "dir-basic": dirBasic,
- "dir-mkdirat": dirMkdirat,
- "dir-chdir": dirChdir,
- "dir-getdents": dirGetdents,
- "dir-mkdir-eexist": dirMkdirEexist,
- "dir-chdir-enoent": dirChdirEnoent,
- "dir-getdents-ebadf": dirGetdentsEbadf,
- "stat-basic": statBasic,
- "stat-fstat": statFstat,
- "stat-lstat": statLstat,
- "stat-newfstatat": statNewfstatat,
- "stat-statx": statStatx,
- "stat-access": statAccess,
- "stat-faccessat": statFaccessat,
- "stat-enoent": statEnoent,
- "stat-access-enoent": statAccessEnoent,
- "stat-fstat-ebadf": statFstatEbadf,
- "sync-basic": syncBasic,
- "sync-fdatasync": syncFdatasync,
- "sync-sync": syncSync,
- "sync-sync-file-range": syncSyncFileRange,
- "sync-fsync-ebadf": syncFsyncEbadf,
- "sync-fdatasync-ebadf": syncFdatasyncEbadf,
- "sync-file-range-ebadf": syncFileRangeEbadf,
- "truncate-basic": truncateBasic,
- "truncate-ftruncate": truncateFtruncate,
- "truncate-enoent": truncateEnoent,
- "truncate-ftruncate-ebadf": truncateFtruncateEbadf,
- "iouring-setup": iouringSetup,
- "iouring-enter": iouringEnter,
- "iouring-register": iouringRegister,
- "iouring-enter-ebadf": iouringEnterEbadf,
- "iouring-register-ebadf": iouringRegisterEbadf,
+ "crash": crash,
+ "open-basic": openBasic,
+ "open-creat": openCreat,
+ "open-by-handle-at": openByHandleAt,
+ "open-enoent": openEnoent,
+ "open-rdonly-write": openRdonlyWrite,
+ "open-pid-filter": openPidFilter,
+ "readwrite-basic": readwriteBasic,
+ "readwrite-pread": readwritePread,
+ "readwrite-pwrite": readwritePwrite,
+ "readwrite-readv": readwriteReadv,
+ "readwrite-writev": readwriteWritev,
+ "readwrite-wronly-read": readwriteWronlyRead,
+ "readwrite-rdonly-write": readwriteRdonlyWrite,
+ "readwrite-pread-invalid": readwritePreadInvalid,
+ "readwrite-pwrite-invalid": readwritePwriteInvalid,
+ "close-basic": closeBasic,
+ "close-range": closeRange,
+ "close-invalid-fd": closeInvalidFd,
+ "close-double-close": closeDoubleClose,
+ "close-range-empty": closeRangeEmpty,
+ "dup-basic": dupBasic,
+ "dup-dup2": dupDup2,
+ "dup-dup3": dupDup3,
+ "dup-invalid-fd": dupInvalidFd,
+ "dup2-same-fd": dup2SameFd,
+ "dup3-invalid-flags": dup3InvalidFlags,
+ "fcntl-dupfd": fcntlDupfd,
+ "fcntl-setfl": fcntlSetfl,
+ "fcntl-dupfd-cloexec": fcntlDupfdCloexec,
+ "fcntl-invalid-fd": fcntlInvalidFd,
+ "fcntl-dupfd-max": fcntlDupfdMax,
+ "rename-basic": renameBasic,
+ "rename-renameat": renameRenameat,
+ "rename-renameat2": renameRenameat2,
+ "rename-enoent": renameEnoent,
+ "rename-noreplace": renameNoreplace,
+ "link-basic": linkBasic,
+ "link-linkat": linkLinkat,
+ "link-symlinkat": linkSymlinkat,
+ "link-readlinkat": linkReadlinkat,
+ "link-enoent": linkEnoent,
+ "link-symlink-eexist": linkSymlinkEexist,
+ "link-readlinkat-einval": linkReadlinkatEinval,
+ "unlink-basic": unlinkBasic,
+ "unlink-unlinkat": unlinkUnlinkat,
+ "unlink-rmdir": unlinkRmdir,
+ "unlink-enoent": unlinkEnoent,
+ "unlink-rmdir-notempty": unlinkRmdirNotempty,
+ "unlink-unlinkat-enoent": unlinkUnlinkatEnoent,
+ "dir-basic": dirBasic,
+ "dir-mkdirat": dirMkdirat,
+ "dir-chdir": dirChdir,
+ "dir-getdents": dirGetdents,
+ "dir-mkdir-eexist": dirMkdirEexist,
+ "dir-chdir-enoent": dirChdirEnoent,
+ "dir-getdents-ebadf": dirGetdentsEbadf,
+ "stat-basic": statBasic,
+ "stat-fstat": statFstat,
+ "stat-lstat": statLstat,
+ "stat-newfstatat": statNewfstatat,
+ "stat-statx": statStatx,
+ "stat-access": statAccess,
+ "stat-faccessat": statFaccessat,
+ "stat-enoent": statEnoent,
+ "stat-access-enoent": statAccessEnoent,
+ "stat-fstat-ebadf": statFstatEbadf,
+ "sync-basic": syncBasic,
+ "sync-fdatasync": syncFdatasync,
+ "sync-sync": syncSync,
+ "sync-sync-file-range": syncSyncFileRange,
+ "sync-sync-file-range-to-eof": syncSyncFileRangeToEOF,
+ "sync-fsync-ebadf": syncFsyncEbadf,
+ "sync-fdatasync-ebadf": syncFdatasyncEbadf,
+ "sync-file-range-ebadf": syncFileRangeEbadf,
+ "truncate-basic": truncateBasic,
+ "truncate-ftruncate": truncateFtruncate,
+ "truncate-enoent": truncateEnoent,
+ "truncate-ftruncate-ebadf": truncateFtruncateEbadf,
+ "iouring-setup": iouringSetup,
+ "iouring-enter": iouringEnter,
+ "iouring-register": iouringRegister,
+ "iouring-enter-ebadf": iouringEnterEbadf,
+ "iouring-register-ebadf": iouringRegisterEbadf,
}
func makeTempDir(prefix string) (string, func(), error) {
diff --git a/integrationtests/sync_test.go b/integrationtests/sync_test.go
index 763f3c2..ce0a461 100644
--- a/integrationtests/sync_test.go
+++ b/integrationtests/sync_test.go
@@ -45,6 +45,17 @@ func TestSyncSyncFileRange(t *testing.T) {
})
}
+func TestSyncSyncFileRangeToEOF(t *testing.T) {
+ runScenario(t, "sync-sync-file-range-to-eof", []ExpectedEvent{
+ {
+ PathContains: "syncrangeeoffile.txt",
+ Tracepoint: "enter_sync_file_range",
+ Comm: "ioworkload",
+ MinCount: 1,
+ },
+ })
+}
+
func TestSyncFsyncEbadf(t *testing.T) {
runScenario(t, "sync-fsync-ebadf", []ExpectedEvent{
{
diff --git a/internal/c/generated_tracepoints.c b/internal/c/generated_tracepoints.c
index 562a5b9..a40f558 100644
--- a/internal/c/generated_tracepoints.c
+++ b/internal/c/generated_tracepoints.c
@@ -1,7 +1,7 @@
// Code generated - don't change manually!
-/// Ignoring sys_enter_accept4 sys_exit_accept4 as possibly not file I/O related
/// Ignoring sys_enter_accept sys_exit_accept as possibly not file I/O related
+/// Ignoring sys_enter_accept4 sys_exit_accept4 as possibly not file I/O related
/// Ignoring sys_enter_acct sys_exit_acct as possibly not file I/O related
/// Ignoring sys_enter_add_key sys_exit_add_key as possibly not file I/O related
/// Ignoring sys_enter_adjtimex sys_exit_adjtimex as possibly not file I/O related
@@ -17,21 +17,21 @@
/// Ignoring sys_enter_clock_gettime sys_exit_clock_gettime as possibly not file I/O related
/// Ignoring sys_enter_clock_nanosleep sys_exit_clock_nanosleep as possibly not file I/O related
/// Ignoring sys_enter_clock_settime sys_exit_clock_settime as possibly not file I/O related
-/// Ignoring sys_enter_clone3 sys_exit_clone3 as possibly not file I/O related
/// Ignoring sys_enter_clone sys_exit_clone as possibly not file I/O related
+/// Ignoring sys_enter_clone3 sys_exit_clone3 as possibly not file I/O related
/// Ignoring sys_enter_connect sys_exit_connect as possibly not file I/O related
/// Ignoring sys_enter_copy_file_range sys_exit_copy_file_range as possibly not file I/O related
/// Ignoring sys_enter_delete_module sys_exit_delete_module as possibly not file I/O related
-/// Ignoring sys_enter_epoll_create1 sys_exit_epoll_create1 as possibly not file I/O related
/// Ignoring sys_enter_epoll_create sys_exit_epoll_create as possibly not file I/O related
+/// Ignoring sys_enter_epoll_create1 sys_exit_epoll_create1 as possibly not file I/O related
/// Ignoring sys_enter_epoll_ctl sys_exit_epoll_ctl as possibly not file I/O related
-/// Ignoring sys_enter_epoll_pwait2 sys_exit_epoll_pwait2 as possibly not file I/O related
/// Ignoring sys_enter_epoll_pwait sys_exit_epoll_pwait as possibly not file I/O related
+/// Ignoring sys_enter_epoll_pwait2 sys_exit_epoll_pwait2 as possibly not file I/O related
/// Ignoring sys_enter_epoll_wait sys_exit_epoll_wait as possibly not file I/O related
-/// Ignoring sys_enter_eventfd2 sys_exit_eventfd2 as possibly not file I/O related
/// Ignoring sys_enter_eventfd sys_exit_eventfd as possibly not file I/O related
-/// Ignoring sys_enter_execveat sys_exit_execveat as possibly not file I/O related
+/// Ignoring sys_enter_eventfd2 sys_exit_eventfd2 as possibly not file I/O related
/// Ignoring sys_enter_execve sys_exit_execve as possibly not file I/O related
+/// Ignoring sys_enter_execveat sys_exit_execveat as possibly not file I/O related
/// Ignoring sys_enter_exit sys_exit_exit as possibly not file I/O related
/// Ignoring sys_enter_exit_group sys_exit_exit_group as possibly not file I/O related
/// Ignoring sys_enter_fanotify_init sys_exit_fanotify_init as possibly not file I/O related
@@ -43,6 +43,8 @@
/// Ignoring sys_enter_futex_wait sys_exit_futex_wait as possibly not file I/O related
/// Ignoring sys_enter_futex_waitv sys_exit_futex_waitv as possibly not file I/O related
/// Ignoring sys_enter_futex_wake sys_exit_futex_wake as possibly not file I/O related
+/// Ignoring sys_enter_get_mempolicy sys_exit_get_mempolicy as possibly not file I/O related
+/// Ignoring sys_enter_get_robust_list sys_exit_get_robust_list as possibly not file I/O related
/// Ignoring sys_enter_getcpu sys_exit_getcpu as possibly not file I/O related
/// Ignoring sys_enter_getcwd sys_exit_getcwd as possibly not file I/O related
/// Ignoring sys_enter_getegid sys_exit_getegid as possibly not file I/O related
@@ -50,7 +52,6 @@
/// Ignoring sys_enter_getgid sys_exit_getgid as possibly not file I/O related
/// Ignoring sys_enter_getgroups sys_exit_getgroups as possibly not file I/O related
/// Ignoring sys_enter_getitimer sys_exit_getitimer as possibly not file I/O related
-/// Ignoring sys_enter_get_mempolicy sys_exit_get_mempolicy as possibly not file I/O related
/// Ignoring sys_enter_getpeername sys_exit_getpeername as possibly not file I/O related
/// Ignoring sys_enter_getpgid sys_exit_getpgid as possibly not file I/O related
/// Ignoring sys_enter_getpgrp sys_exit_getpgrp as possibly not file I/O related
@@ -61,7 +62,6 @@
/// Ignoring sys_enter_getresgid sys_exit_getresgid as possibly not file I/O related
/// Ignoring sys_enter_getresuid sys_exit_getresuid as possibly not file I/O related
/// Ignoring sys_enter_getrlimit sys_exit_getrlimit as possibly not file I/O related
-/// Ignoring sys_enter_get_robust_list sys_exit_get_robust_list as possibly not file I/O related
/// Ignoring sys_enter_getrusage sys_exit_getrusage as possibly not file I/O related
/// Ignoring sys_enter_getsid sys_exit_getsid as possibly not file I/O related
/// Ignoring sys_enter_getsockname sys_exit_getsockname as possibly not file I/O related
@@ -71,8 +71,8 @@
/// Ignoring sys_enter_getuid sys_exit_getuid as possibly not file I/O related
/// Ignoring sys_enter_init_module sys_exit_init_module as possibly not file I/O related
/// Ignoring sys_enter_inotify_add_watch sys_exit_inotify_add_watch as possibly not file I/O related
-/// Ignoring sys_enter_inotify_init1 sys_exit_inotify_init1 as possibly not file I/O related
/// Ignoring sys_enter_inotify_init sys_exit_inotify_init as possibly not file I/O related
+/// Ignoring sys_enter_inotify_init1 sys_exit_inotify_init1 as possibly not file I/O related
/// Ignoring sys_enter_inotify_rm_watch sys_exit_inotify_rm_watch as possibly not file I/O related
/// Ignoring sys_enter_ioperm sys_exit_ioperm as possibly not file I/O related
/// Ignoring sys_enter_iopl sys_exit_iopl as possibly not file I/O related
@@ -99,11 +99,11 @@
/// Ignoring sys_enter_memfd_secret sys_exit_memfd_secret as possibly not file I/O related
/// Ignoring sys_enter_migrate_pages sys_exit_migrate_pages as possibly not file I/O related
/// Ignoring sys_enter_mincore sys_exit_mincore as possibly not file I/O related
-/// Ignoring sys_enter_mknodat sys_exit_mknodat as possibly not file I/O related
/// Ignoring sys_enter_mknod sys_exit_mknod as possibly not file I/O related
+/// Ignoring sys_enter_mknodat sys_exit_mknodat as possibly not file I/O related
+/// Ignoring sys_enter_mlock sys_exit_mlock as possibly not file I/O related
/// Ignoring sys_enter_mlock2 sys_exit_mlock2 as possibly not file I/O related
/// Ignoring sys_enter_mlockall sys_exit_mlockall as possibly not file I/O related
-/// Ignoring sys_enter_mlock sys_exit_mlock as possibly not file I/O related
/// Ignoring sys_enter_modify_ldt sys_exit_modify_ldt as possibly not file I/O related
/// Ignoring sys_enter_mount sys_exit_mount as possibly not file I/O related
/// Ignoring sys_enter_move_mount sys_exit_move_mount as possibly not file I/O related
@@ -122,8 +122,8 @@
/// Ignoring sys_enter_msgrcv sys_exit_msgrcv as possibly not file I/O related
/// Ignoring sys_enter_msgsnd sys_exit_msgsnd as possibly not file I/O related
/// Ignoring sys_enter_msync sys_exit_msync as possibly not file I/O related
-/// Ignoring sys_enter_munlockall sys_exit_munlockall as possibly not file I/O related
/// Ignoring sys_enter_munlock sys_exit_munlock as possibly not file I/O related
+/// Ignoring sys_enter_munlockall sys_exit_munlockall as possibly not file I/O related
/// Ignoring sys_enter_munmap sys_exit_munmap as possibly not file I/O related
/// Ignoring sys_enter_nanosleep sys_exit_nanosleep as possibly not file I/O related
/// Ignoring sys_enter_newuname sys_exit_newuname as possibly not file I/O related
@@ -133,8 +133,8 @@
/// Ignoring sys_enter_pidfd_getfd sys_exit_pidfd_getfd as possibly not file I/O related
/// Ignoring sys_enter_pidfd_open sys_exit_pidfd_open as possibly not file I/O related
/// Ignoring sys_enter_pidfd_send_signal sys_exit_pidfd_send_signal as possibly not file I/O related
-/// Ignoring sys_enter_pipe2 sys_exit_pipe2 as possibly not file I/O related
/// Ignoring sys_enter_pipe sys_exit_pipe as possibly not file I/O related
+/// Ignoring sys_enter_pipe2 sys_exit_pipe2 as possibly not file I/O related
/// Ignoring sys_enter_pivot_root sys_exit_pivot_root as possibly not file I/O related
/// Ignoring sys_enter_pkey_alloc sys_exit_pkey_alloc as possibly not file I/O related
/// Ignoring sys_enter_pkey_free sys_exit_pkey_free as possibly not file I/O related
@@ -166,11 +166,11 @@
/// Ignoring sys_enter_rt_sigsuspend sys_exit_rt_sigsuspend as possibly not file I/O related
/// Ignoring sys_enter_rt_sigtimedwait sys_exit_rt_sigtimedwait as possibly not file I/O related
/// Ignoring sys_enter_rt_tgsigqueueinfo sys_exit_rt_tgsigqueueinfo as possibly not file I/O related
+/// Ignoring sys_enter_sched_get_priority_max sys_exit_sched_get_priority_max as possibly not file I/O related
+/// Ignoring sys_enter_sched_get_priority_min sys_exit_sched_get_priority_min as possibly not file I/O related
/// Ignoring sys_enter_sched_getaffinity sys_exit_sched_getaffinity as possibly not file I/O related
/// Ignoring sys_enter_sched_getattr sys_exit_sched_getattr as possibly not file I/O related
/// Ignoring sys_enter_sched_getparam sys_exit_sched_getparam as possibly not file I/O related
-/// Ignoring sys_enter_sched_get_priority_max sys_exit_sched_get_priority_max as possibly not file I/O related
-/// Ignoring sys_enter_sched_get_priority_min sys_exit_sched_get_priority_min as possibly not file I/O related
/// Ignoring sys_enter_sched_getscheduler sys_exit_sched_getscheduler as possibly not file I/O related
/// Ignoring sys_enter_sched_rr_get_interval sys_exit_sched_rr_get_interval as possibly not file I/O related
/// Ignoring sys_enter_sched_setaffinity sys_exit_sched_setaffinity as possibly not file I/O related
@@ -188,6 +188,10 @@
/// Ignoring sys_enter_sendmmsg sys_exit_sendmmsg as possibly not file I/O related
/// Ignoring sys_enter_sendmsg sys_exit_sendmsg as possibly not file I/O related
/// Ignoring sys_enter_sendto sys_exit_sendto as possibly not file I/O related
+/// Ignoring sys_enter_set_mempolicy sys_exit_set_mempolicy as possibly not file I/O related
+/// Ignoring sys_enter_set_mempolicy_home_node sys_exit_set_mempolicy_home_node as possibly not file I/O related
+/// Ignoring sys_enter_set_robust_list sys_exit_set_robust_list as possibly not file I/O related
+/// Ignoring sys_enter_set_tid_address sys_exit_set_tid_address as possibly not file I/O related
/// Ignoring sys_enter_setdomainname sys_exit_setdomainname as possibly not file I/O related
/// Ignoring sys_enter_setfsgid sys_exit_setfsgid as possibly not file I/O related
/// Ignoring sys_enter_setfsuid sys_exit_setfsuid as possibly not file I/O related
@@ -195,8 +199,6 @@
/// Ignoring sys_enter_setgroups sys_exit_setgroups as possibly not file I/O related
/// Ignoring sys_enter_sethostname sys_exit_sethostname as possibly not file I/O related
/// Ignoring sys_enter_setitimer sys_exit_setitimer as possibly not file I/O related
-/// Ignoring sys_enter_set_mempolicy sys_exit_set_mempolicy as possibly not file I/O related
-/// Ignoring sys_enter_set_mempolicy_home_node sys_exit_set_mempolicy_home_node as possibly not file I/O related
/// Ignoring sys_enter_setns sys_exit_setns as possibly not file I/O related
/// Ignoring sys_enter_setpgid sys_exit_setpgid as possibly not file I/O related
/// Ignoring sys_enter_setpriority sys_exit_setpriority as possibly not file I/O related
@@ -205,10 +207,8 @@
/// Ignoring sys_enter_setresuid sys_exit_setresuid as possibly not file I/O related
/// Ignoring sys_enter_setreuid sys_exit_setreuid as possibly not file I/O related
/// Ignoring sys_enter_setrlimit sys_exit_setrlimit as possibly not file I/O related
-/// Ignoring sys_enter_set_robust_list sys_exit_set_robust_list as possibly not file I/O related
/// Ignoring sys_enter_setsid sys_exit_setsid as possibly not file I/O related
/// Ignoring sys_enter_setsockopt sys_exit_setsockopt as possibly not file I/O related
-/// Ignoring sys_enter_set_tid_address sys_exit_set_tid_address as possibly not file I/O related
/// Ignoring sys_enter_settimeofday sys_exit_settimeofday as possibly not file I/O related
/// Ignoring sys_enter_setuid sys_exit_setuid as possibly not file I/O related
/// Ignoring sys_enter_shmat sys_exit_shmat as possibly not file I/O related
@@ -217,8 +217,8 @@
/// Ignoring sys_enter_shmget sys_exit_shmget as possibly not file I/O related
/// Ignoring sys_enter_shutdown sys_exit_shutdown as possibly not file I/O related
/// Ignoring sys_enter_sigaltstack sys_exit_sigaltstack as possibly not file I/O related
-/// Ignoring sys_enter_signalfd4 sys_exit_signalfd4 as possibly not file I/O related
/// Ignoring sys_enter_signalfd sys_exit_signalfd as possibly not file I/O related
+/// Ignoring sys_enter_signalfd4 sys_exit_signalfd4 as possibly not file I/O related
/// Ignoring sys_enter_socket sys_exit_socket as possibly not file I/O related
/// Ignoring sys_enter_socketpair sys_exit_socketpair as possibly not file I/O related
/// Ignoring sys_enter_splice sys_exit_splice as possibly not file I/O related
@@ -232,12 +232,12 @@
/// Ignoring sys_enter_time sys_exit_time as possibly not file I/O related
/// Ignoring sys_enter_timer_create sys_exit_timer_create as possibly not file I/O related
/// Ignoring sys_enter_timer_delete sys_exit_timer_delete as possibly not file I/O related
-/// Ignoring sys_enter_timerfd_create sys_exit_timerfd_create as possibly not file I/O related
-/// Ignoring sys_enter_timerfd_gettime sys_exit_timerfd_gettime as possibly not file I/O related
-/// Ignoring sys_enter_timerfd_settime sys_exit_timerfd_settime as possibly not file I/O related
/// Ignoring sys_enter_timer_getoverrun sys_exit_timer_getoverrun as possibly not file I/O related
/// Ignoring sys_enter_timer_gettime sys_exit_timer_gettime as possibly not file I/O related
/// Ignoring sys_enter_timer_settime sys_exit_timer_settime as possibly not file I/O related
+/// Ignoring sys_enter_timerfd_create sys_exit_timerfd_create as possibly not file I/O related
+/// Ignoring sys_enter_timerfd_gettime sys_exit_timerfd_gettime as possibly not file I/O related
+/// Ignoring sys_enter_timerfd_settime sys_exit_timerfd_settime as possibly not file I/O related
/// Ignoring sys_enter_times sys_exit_times as possibly not file I/O related
/// Ignoring sys_enter_tkill sys_exit_tkill as possibly not file I/O related
/// Ignoring sys_enter_umask sys_exit_umask as possibly not file I/O related
diff --git a/internal/eventloop.go b/internal/eventloop.go
index 010b892..01b37eb 100644
--- a/internal/eventloop.go
+++ b/internal/eventloop.go
@@ -421,7 +421,6 @@ func (e *eventLoop) tracepointExited(exitEv event.Event, ch chan<- *event.Pair)
// TODO: open_by_handle_at
// TODO: mmap, msync...
// TODO: getcwd?
- // TODO: sync_file_range
prevPairTime, _ := e.prevPairTimes[ep.EnterEv.GetTid()]
ep.CalculateDurations(prevPairTime)
diff --git a/internal/eventloop_test.go b/internal/eventloop_test.go
index 60047fe..e6e3a4a 100644
--- a/internal/eventloop_test.go
+++ b/internal/eventloop_test.go
@@ -30,13 +30,14 @@ func TestEventloop(t *testing.T) {
"OpenEventTest2": makeOpenEventTestData2(t),
"OpenEventTest3": makeOpenEventTestData3(t),
// FdEvent tests
- "ReadEventTest": makeReadEventTestData(t),
- "WriteEventTest": makeWriteEventTestData(t),
- "CloseEventTest": makeCloseEventTestData(t),
- "CloseRangeEventTest": makeCloseRangeEventTestData(t),
- "CloseRangeFailureTest": makeCloseRangeFailureTestData(t),
- "FsyncEventTest": makeFsyncEventTestData(t),
- "FtruncateEventTest": makeFtruncateEventTestData(t),
+ "ReadEventTest": makeReadEventTestData(t),
+ "WriteEventTest": makeWriteEventTestData(t),
+ "CloseEventTest": makeCloseEventTestData(t),
+ "CloseRangeEventTest": makeCloseRangeEventTestData(t),
+ "CloseRangeFailureTest": makeCloseRangeFailureTestData(t),
+ "FsyncEventTest": makeFsyncEventTestData(t),
+ "SyncFileRangeEventTest": makeSyncFileRangeEventTestData(t),
+ "FtruncateEventTest": makeFtruncateEventTestData(t),
// PathEvent tests
"MkdirEventTest": makeMkdirEventTestData(t),
"UnlinkEventTest": makeUnlinkEventTestData(t),
@@ -587,6 +588,61 @@ func makeFsyncEventTestData(t *testing.T) (td testData) {
return td
}
+func makeSyncFileRangeEventTestData(t *testing.T) (td testData) {
+ fd := int32(47)
+ filename := "sync_file_range_test.txt"
+
+ openEnterEv, _ := makeEnterOpenEvent(t, defaulTime, defaultPid, defaultTid)
+ copy(openEnterEv.Filename[:], filename)
+ openEnterBytes, err := openEnterEv.Bytes()
+ if err != nil {
+ t.Fatal(err)
+ }
+ td.rawTracepoints = append(td.rawTracepoints, openEnterBytes)
+
+ openExitEv, _ := makeExitOpenEvent(t, defaulTime+100, defaultPid, defaultTid)
+ openExitEv.Ret = int64(fd)
+ openExitBytes, err := openExitEv.Bytes()
+ if err != nil {
+ t.Fatal(err)
+ }
+ td.rawTracepoints = append(td.rawTracepoints, openExitBytes)
+
+ enterEv, enterEvBytes := makeEnterFdEvent(t, defaulTime+200, defaultPid, defaultTid, fd, types.SYS_ENTER_SYNC_FILE_RANGE)
+ td.rawTracepoints = append(td.rawTracepoints, enterEvBytes)
+
+ exitEv, exitEvBytes := makeExitRetEvent(t, defaulTime+300, defaultPid, defaultTid, types.SYS_EXIT_SYNC_FILE_RANGE, 0)
+ td.rawTracepoints = append(td.rawTracepoints, exitEvBytes)
+
+ td.validates = append(td.validates, func(t *testing.T, el *eventLoop, ep *event.Pair) {
+ if !openEnterEv.Equals(ep.EnterEv) {
+ t.Errorf("Expected '%v' but got '%v'", openEnterEv, ep.EnterEv)
+ }
+ if !openExitEv.Equals(ep.ExitEv) {
+ t.Errorf("Expected '%v' but got '%v'", openExitEv, ep.ExitEv)
+ }
+ verifyFileDescriptor(t, el, fd, filename)
+ })
+
+ td.validates = append(td.validates, func(t *testing.T, el *eventLoop, ep *event.Pair) {
+ if !enterEv.Equals(ep.EnterEv) {
+ t.Errorf("Expected '%v' but got '%v'", enterEv, ep.EnterEv)
+ }
+ if !exitEv.Equals(ep.ExitEv) {
+ t.Errorf("Expected '%v' but got '%v'", exitEv, ep.ExitEv)
+ }
+ verifyFileDescriptor(t, el, fd, filename)
+ if ep.File == nil {
+ t.Fatalf("Expected file metadata for sync_file_range event")
+ }
+ if ep.File.Name() != filename {
+ t.Errorf("Expected sync_file_range file name '%s' but got '%s'", filename, ep.File.Name())
+ }
+ })
+
+ return td
+}
+
func makeFtruncateEventTestData(t *testing.T) (td testData) {
fd := int32(46)
enterEv, enterEvBytes := makeEnterFdEvent(t, defaulTime, defaultPid, defaultTid, fd, types.SYS_ENTER_FTRUNCATE)