diff options
author | Dylan Reid <dgreid@chromium.org> | 2019-07-10 19:44:50 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-07-19 21:19:13 +0000 |
commit | 13c219139504d0a191948fd205c835a2505cadba (patch) | |
tree | 0d182c1be9b44188444e5c5055de2c7f6278482f | |
parent | cb3ec5ed2b20fb92b7c43d7617d5cfa5c8128a37 (diff) | |
download | crosvm-13c219139504d0a191948fd205c835a2505cadba.tar crosvm-13c219139504d0a191948fd205c835a2505cadba.tar.gz crosvm-13c219139504d0a191948fd205c835a2505cadba.tar.bz2 crosvm-13c219139504d0a191948fd205c835a2505cadba.tar.lz crosvm-13c219139504d0a191948fd205c835a2505cadba.tar.xz crosvm-13c219139504d0a191948fd205c835a2505cadba.tar.zst crosvm-13c219139504d0a191948fd205c835a2505cadba.zip |
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>
-rw-r--r-- | qcow/src/qcow.rs | 6 | ||||
-rw-r--r-- | qcow/src/qcow_raw_file.rs | 9 |
2 files changed, 10 insertions, 5 deletions
diff --git a/qcow/src/qcow.rs b/qcow/src/qcow.rs index fba511d..e2d391b 100644 --- a/qcow/src/qcow.rs +++ b/qcow/src/qcow.rs @@ -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); } diff --git a/qcow/src/qcow_raw_file.rs b/qcow/src/qcow_raw_file.rs index 456b986..a900081 100644 --- a/qcow/src/qcow_raw_file.rs +++ b/qcow/src/qcow_raw_file.rs @@ -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(()) + } } |