(
&mut self,
offset: libc::off_t,
iovecs: &[libc::iovec],
user_data: u64,
eventfd: &EventFd,
completion_list: &mut VecDeque<(u64, i32)>,
)
| 493 | } |
| 494 | |
| 495 | fn write_vectored_sync( |
| 496 | &mut self, |
| 497 | offset: libc::off_t, |
| 498 | iovecs: &[libc::iovec], |
| 499 | user_data: u64, |
| 500 | eventfd: &EventFd, |
| 501 | completion_list: &mut VecDeque<(u64, i32)>, |
| 502 | ) -> AsyncIoResult<()> |
| 503 | where |
| 504 | Self: Write + Seek, |
| 505 | { |
| 506 | // Convert libc::iovec into IoSlice |
| 507 | let mut slices: SmallVec<[IoSlice; DEFAULT_DESCRIPTOR_VEC_SIZE]> = |
| 508 | SmallVec::with_capacity(iovecs.len()); |
| 509 | for iovec in iovecs.iter() { |
| 510 | // SAFETY: on Linux IoSlice wraps around libc::iovec |
| 511 | slices.push(IoSlice::new(unsafe { |
| 512 | std::mem::transmute::<libc::iovec, &mut [u8]>(*iovec) |
| 513 | })); |
| 514 | } |
| 515 | |
| 516 | let result = { |
| 517 | // Move the cursor to the right offset |
| 518 | self.seek(SeekFrom::Start(offset as u64)) |
| 519 | .map_err(AsyncIoError::WriteVectored)?; |
| 520 | |
| 521 | let mut r = 0; |
| 522 | for b in slices.iter() { |
| 523 | r += self.write(b).map_err(AsyncIoError::WriteVectored)?; |
| 524 | } |
| 525 | r |
| 526 | }; |
| 527 | |
| 528 | completion_list.push_back((user_data, result as i32)); |
| 529 | eventfd.write(1).unwrap(); |
| 530 | |
| 531 | Ok(()) |
| 532 | } |
| 533 | |
| 534 | fn fsync_sync( |
| 535 | &mut self, |
no test coverage detected