summary refs log tree commit diff
diff options
context:
space:
mode:
authorDylan Reid <dgreid@chromium.org>2019-07-10 19:44:50 -0700
committerCommit Bot <commit-bot@chromium.org>2019-07-19 21:19:13 +0000
commit13c219139504d0a191948fd205c835a2505cadba (patch)
tree0d182c1be9b44188444e5c5055de2c7f6278482f
parentcb3ec5ed2b20fb92b7c43d7617d5cfa5c8128a37 (diff)
downloadcrosvm-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.rs6
-rw-r--r--qcow/src/qcow_raw_file.rs9
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(())
+    }
 }