mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-10 20:19:07 +00:00
qcow: Add a zero_cluster method to raw file
Zeroing a cluster will be done from more than one place in qcow.rs soon, add a helper to reduce duplication. Change-Id: Idb40539f8e4ed2338fc84c0d53b37c913f2d90fe Signed-off-by: Dylan Reid <dgreid@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1697122 Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
parent
cb3ec5ed2b
commit
13c2191395
2 changed files with 10 additions and 5 deletions
|
@ -1035,11 +1035,7 @@ impl QcowFile {
|
|||
fn get_new_cluster(&mut self) -> std::io::Result<u64> {
|
||||
// First use a pre allocated cluster if one is available.
|
||||
if let Some(free_cluster) = self.avail_clusters.pop() {
|
||||
let cluster_size = self.raw_file.cluster_size() as usize;
|
||||
self.raw_file
|
||||
.file_mut()
|
||||
.seek(SeekFrom::Start(free_cluster))?;
|
||||
self.raw_file.file_mut().write_zeroes(cluster_size)?;
|
||||
self.raw_file.zero_cluster(free_cluster)?;
|
||||
return Ok(free_cluster);
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ use std::io::{self, BufWriter, Seek, SeekFrom};
|
|||
use std::mem::size_of;
|
||||
|
||||
use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
|
||||
use sys_util::WriteZeroes;
|
||||
|
||||
/// A qcow file. Allows reading/writing clusters and appending clusters.
|
||||
#[derive(Debug)]
|
||||
|
@ -133,4 +134,12 @@ impl QcowRawFile {
|
|||
pub fn cluster_offset(&self, address: u64) -> u64 {
|
||||
address & self.cluster_mask
|
||||
}
|
||||
|
||||
/// Zeros out a cluster in the file.
|
||||
pub fn zero_cluster(&mut self, address: u64) -> io::Result<()> {
|
||||
let cluster_size = self.cluster_size as usize;
|
||||
self.file.seek(SeekFrom::Start(address))?;
|
||||
self.file.write_zeroes(cluster_size)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue