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

Method write

block/src/qcow/mod.rs:2088–2108  ·  view source on GitHub ↗
(&mut self, buf: &[u8])

Source from the content-addressed store, hash-verified

2086
2087impl Write for QcowFile {
2088 fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
2089 let address: u64 = self.current_offset;
2090 let write_count: usize = self.limit_range_file(address, buf.len());
2091
2092 let mut nwritten: usize = 0;
2093 while nwritten < write_count {
2094 let curr_addr = address + nwritten as u64;
2095 let offset = self.file_offset_write(curr_addr)?;
2096 let count = self.limit_range_cluster(curr_addr, write_count - nwritten);
2097
2098 self.raw_file.file_mut().seek(SeekFrom::Start(offset))?;
2099 let count = self
2100 .raw_file
2101 .file_mut()
2102 .write(&buf[nwritten..(nwritten + count)])?;
2103
2104 nwritten += count;
2105 }
2106 self.current_offset += write_count as u64;
2107 Ok(write_count)
2108 }
2109
2110 fn flush(&mut self) -> std::io::Result<()> {
2111 self.sync_caches()?;

Callers 15

read_vectored_syncMethod · 0.45
write_vectored_syncMethod · 0.45
fsync_syncMethod · 0.45
open_diskFunction · 0.45
read_vectoredMethod · 0.45
write_vectoredMethod · 0.45
fsyncMethod · 0.45
punch_holeMethod · 0.45
submit_batch_requestsMethod · 0.45
punch_holeMethod · 0.45

Calls 6

limit_range_fileMethod · 0.80
file_offset_writeMethod · 0.80
limit_range_clusterMethod · 0.80
file_mutMethod · 0.80
lenMethod · 0.45
seekMethod · 0.45