MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / write_vectored_sync

Method write_vectored_sync

block/src/lib.rs:495–532  ·  view source on GitHub ↗
(
        &mut self,
        offset: libc::off_t,
        iovecs: &[libc::iovec],
        user_data: u64,
        eventfd: &EventFd,
        completion_list: &mut VecDeque<(u64, i32)>,
    )

Source from the content-addressed store, hash-verified

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,

Callers 1

write_vectoredMethod · 0.80

Implementers 1

vhdx_sync.rsblock/src/vhdx_sync.rs

Calls 6

newFunction · 0.85
iterMethod · 0.80
lenMethod · 0.45
pushMethod · 0.45
seekMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected