sync_file_range - synchronizes a file range with the underlying hardware
sync_file_range system call causes all modified data and metadata
stored in a file range of the provided file descriptor to be transferred
to the underlying hardware associated with the file descriptor. This
system call is capable of both flushing and fsyncing the given file range.
It allows for more precise control over which blocks of a file are
flushed to the underlying hardware, allowing certain operations to be
asynchronous, without incurring the overhead of the
fsync system calls. It also allows operations to bypass the page cache
and touch a range of blocks directly.
There are some drawbacks to taking advantage of this syscall, one of
which is the potential race conditions due to TOCTOU (time of check,
time of use). It is important for the caller to be aware of the
possibility of race conditions, and to properly use the
SYNC_FILE_RANGE_WRITE flag if they wish to mitigate race
int[U] - File descriptor of the file to synchronize.
off_t[U] - Offset within the file to the start of the region to sync.
off_t[U] - Number of bytes in the range to sync.
unsigned int[U] - Bitmask indicating what action should be taken for the range.
- K - Originated from kernel-space.
- U - Originated from user-space (for example, pointer to user-space memory used to get it)
- TOCTOU - Vulnerable to TOCTOU (time of check, time of use)
- OPT - Optional argument - might not always be available (passed with null value)
vfs_sync_file_range function, which is the kernel entry point for the
Example Use Case¶
sync_file_range can be used to synchronize certain parts of files without fsyncing the entire file. An example would be a database that updates small parts of a database file in a single operation. The database might use
sync_file_range to synchronize the relevant blocks, rather than fsyncing the entire database file.
Some filesystems may not support all options of the
while others may support additional flags. This can lead to unexpected
behaviour, and should be carefully considered by the caller. Additionally,
sync_file_range is vulnerable to TOCTOU and race conditions, so be careful
when using it.
fdatasync system call is similar to
sync_file_range, in that it flushes
modified data and metadata to the underlying hardware. However,
flushes the entire file, while
sync_file_range only flushes a portion of
the file. Additionally,
fsync can be used to synchronize both the metadata
and data of a file, while
sync_file_range only synchronizes the data.
This document was automatically generated by OpenAI and needs review. It might not be accurate and might contain errors. The authors of Tracee recommend that the user reads the "events.go" source file to understand the events and their arguments better.