Merge 'core/io: Switch Unix I/O to use libc::pwrite()' from Pekka Enberg

We use libc elsewhere for fault injection reasons, so let's do this
call-site too.

Reviewed-by: Pere Diaz Bou <pere-altea@homail.com>

Closes #2811
This commit is contained in:
Pekka Enberg
2025-08-28 07:38:42 +03:00
committed by GitHub

View File

@@ -219,15 +219,22 @@ impl File for UnixFile {
#[instrument(err, skip_all, level = Level::TRACE)]
fn pwrite(&self, pos: usize, buffer: Arc<crate::Buffer>, c: Completion) -> Result<Completion> {
let file = self.file.lock();
let result = { rustix::io::pwrite(file.as_fd(), buffer.as_slice(), pos as u64) };
match result {
Ok(n) => {
trace!("pwrite n: {}", n);
// Read succeeded immediately
c.complete(n as i32);
Ok(c)
}
Err(e) => Err(e.into()),
let result = unsafe {
libc::pwrite(
file.as_raw_fd(),
buffer.as_slice().as_ptr() as *const libc::c_void,
buffer.as_slice().len(),
pos as libc::off_t,
)
};
if result == -1 {
let e = std::io::Error::last_os_error();
Err(e.into())
} else {
trace!("pwrite n: {}", result);
// Write succeeded immediately
c.complete(result as i32);
Ok(c)
}
}