sys_sync_file_range [fs/sync.c]
Synchronizes a file segment with disk Arguments
eax | 314
ebx | File descriptor of a file to be synchronized.
ecx | Offset of the file range to be synchronized. Synchronization is done in units of the system page size: ebx is rounded down to a page boundary; (ebx+ecx-1) is rounded up to a page boundary.
edx | Length of the range to be synchronized, in bytes. If edx is zero, then all bytes from offset specified by ecx through to the end of file are synchronized.
esi | Flag bit-mask. It may include following flags (esi may be 0, if no operation is required):
`SYNC_FILE_RANGE_WAIT_BEFORE` | `Wait upon write-out of all pages in the specified range that have already been submitted to the device driver for write-out before performing any write. This can be used after an earlier "SYNC_FILE_RANGE_WAIT_BEFORE or SYNC_FILE_RANGE_WRITE" operation to wait for completion of that operation, and obtain its result. This flag will detect any I/O errors or ENOSPC conditions and will return these to the caller.`
`SYNC_FILE_RANGE_WRITE` | `Initiate write-out of all dirty pages in the specified range which are not presently submitted write-out. This is an asynchronous flush-to-disk operation. This is not suitable for data integrity operations.`
`SYNC_FILE_RANGE_WAIT_AFTER` | `Wait upon write-out of all pages in the range after performing any write. This can be used after an earlier "SYNC_FILE_RANGE_WAIT_BEFORE or SYNC_FILE_RANGE_WRITE" operation to wait for completion of that operation, and obtain its result. This flag will detect any I/O errors or ENOSPC conditions and will return these to the caller.`
Useful flags combinations:
`SYNC_FILE_RANGE_WAIT_BEFORE or SYNC_FILE_RANGE_WRITE` | `Ensures that all pages in the specified range which were dirty when sys_sync_file_range was called are placed under write-out. This is a start-write-for-data-integrity operation.`
`SYNC_FILE_RANGE_WAIT_BEFORE or SYNC_FILE_RANGE_WRITE or SYNC_FILE_RANGE_WAIT_AFTER` | `This is a traditional sys_fdatasync operation. It is a write-for-data-integrity operation that will ensure that all pages in the specified range which were dirty when sys_sync_file_range was called are committed to disk.`
Return values If the system call succeeds the return value is 0. If the system call fails the return value is one of the following errno values:
`-EBADF` | `ebx is not a valid file descriptor`
`-EIO` | `I/O error.`
`-EINVAL` | `esi specifies an invalid bit; or ecx or edx is invalid.`
`-ENOMEM` | `Out of memory.`
`-ENOSPC` | `Out of disk space.`
`-ESPIPE` | `ebx refers to something other than a regular file, a block device, a directory, or a symbolic link.`
Remarks sys_sync_file_range does not write out the file's metadata. Therefore, unless the application is strictly performing overwrites of already-instantiated disk blocks, there are no guarantees that the data will be available after a crash. Compatibility n/a