summary refs log tree commit diff
path: root/disk/src/qcow/mod.rs
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2020-01-07 17:51:04 -0800
committerCommit Bot <commit-bot@chromium.org>2020-01-13 21:16:29 +0000
commitd5aa9954237f9eb9c7ec468362fb8262f0975429 (patch)
treeb003550c00fa349cf0eed758b6a5ce02508f5290 /disk/src/qcow/mod.rs
parent54305cd5e2d52d274c20dd294c9c869a0115e96d (diff)
downloadcrosvm-d5aa9954237f9eb9c7ec468362fb8262f0975429.tar
crosvm-d5aa9954237f9eb9c7ec468362fb8262f0975429.tar.gz
crosvm-d5aa9954237f9eb9c7ec468362fb8262f0975429.tar.bz2
crosvm-d5aa9954237f9eb9c7ec468362fb8262f0975429.tar.lz
crosvm-d5aa9954237f9eb9c7ec468362fb8262f0975429.tar.xz
crosvm-d5aa9954237f9eb9c7ec468362fb8262f0975429.tar.zst
crosvm-d5aa9954237f9eb9c7ec468362fb8262f0975429.zip
disk: use seek to determine file length
Add a new disk-specific DiskGetLen trait which uses io::Seek instead of
File::metadata() to determine the length so that it works on raw block
devices (e.g. /dev/sda) as well as regular files.

BUG=b:146811529
TEST=`crosvm run --disk /dev/sda` and verify block device length

Change-Id: I6936863490efaa479a3c8745c75c373748c800a1
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1990855
Reviewed-by: Zach Reizner <zachr@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Tested-by: Trent Begin <tbegin@chromium.org>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
Diffstat (limited to 'disk/src/qcow/mod.rs')
-rw-r--r--disk/src/qcow/mod.rs7
1 files changed, 4 insertions, 3 deletions
diff --git a/disk/src/qcow/mod.rs b/disk/src/qcow/mod.rs
index f449d1d..6bd9719 100644
--- a/disk/src/qcow/mod.rs
+++ b/disk/src/qcow/mod.rs
@@ -10,8 +10,8 @@ use data_model::{VolatileMemory, VolatileSlice};
 use libc::{EINVAL, ENOSPC, ENOTSUP};
 use remain::sorted;
 use sys_util::{
-    error, FileGetLen, FileReadWriteAtVolatile, FileReadWriteVolatile, FileSetLen, FileSync,
-    PunchHole, SeekHole, WriteZeroesAt,
+    error, FileReadWriteAtVolatile, FileReadWriteVolatile, FileSetLen, FileSync, PunchHole,
+    SeekHole, WriteZeroesAt,
 };
 
 use std::cmp::{max, min};
@@ -24,6 +24,7 @@ use std::os::unix::io::{AsRawFd, RawFd};
 use crate::qcow::qcow_raw_file::QcowRawFile;
 use crate::qcow::refcount::RefCount;
 use crate::qcow::vec_cache::{CacheMap, Cacheable, VecCache};
+use crate::DiskGetLen;
 
 #[sorted]
 #[derive(Debug)]
@@ -1571,7 +1572,7 @@ impl FileSetLen for QcowFile {
     }
 }
 
-impl FileGetLen for QcowFile {
+impl DiskGetLen for QcowFile {
     fn get_len(&self) -> io::Result<u64> {
         Ok(self.virtual_size())
     }