summary refs log tree commit diff
path: root/src/linux.rs
diff options
context:
space:
mode:
authorCody Schuffelen <schuffelen@google.com>2019-07-02 16:54:05 -0700
committerCommit Bot <commit-bot@chromium.org>2019-08-28 23:52:36 +0000
commit7d533e5952b6bae600441e1183964d335a41d6fe (patch)
tree6f5fc375f4d7207fc02ee20c2c683f5c67d9beca /src/linux.rs
parent971589f7ec1af2904cd5a5b828e9008df9c0bba1 (diff)
downloadcrosvm-7d533e5952b6bae600441e1183964d335a41d6fe.tar
crosvm-7d533e5952b6bae600441e1183964d335a41d6fe.tar.gz
crosvm-7d533e5952b6bae600441e1183964d335a41d6fe.tar.bz2
crosvm-7d533e5952b6bae600441e1183964d335a41d6fe.tar.lz
crosvm-7d533e5952b6bae600441e1183964d335a41d6fe.tar.xz
crosvm-7d533e5952b6bae600441e1183964d335a41d6fe.tar.zst
crosvm-7d533e5952b6bae600441e1183964d335a41d6fe.zip
Extract disk creation logic out of qcow and src.
Bug: b/133432409
Change-Id: Iba25d5f6bb5f60619bb2f5a3d72ddfd3a81650b4
Signed-off-by: Cody Schuffelen <schuffelen@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1691460
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'src/linux.rs')
-rw-r--r--src/linux.rs28
1 files changed, 6 insertions, 22 deletions
diff --git a/src/linux.rs b/src/linux.rs
index 75b09b5..7ce7c82 100644
--- a/src/linux.rs
+++ b/src/linux.rs
@@ -32,7 +32,6 @@ use kvm::*;
 use libcras::CrasClient;
 use msg_socket::{MsgError, MsgReceiver, MsgSender, MsgSocket};
 use net_util::{Error as NetError, MacAddress, Tap};
-use qcow::{self, ImageType, QcowFile};
 use rand_ish::SimpleRng;
 use remain::sorted;
 use resources::{Alloc, SystemAllocator};
@@ -82,6 +81,7 @@ pub enum Error {
     ChownTpmStorage(sys_util::Error),
     CloneEventFd(sys_util::Error),
     CreateCrasClient(libcras::Error),
+    CreateDiskError(disk::Error),
     CreateEventFd(sys_util::Error),
     CreatePollContext(sys_util::Error),
     CreateSignalFd(sys_util::SignalFdError),
@@ -90,7 +90,6 @@ pub enum Error {
     CreateTimerFd(sys_util::Error),
     CreateTpmStorage(PathBuf, io::Error),
     CreateUsbProvider(devices::usb::host_backend::error::Error),
-    DetectImageType(qcow::Error),
     DeviceJail(io_jail::Error),
     DevicePivotRoot(io_jail::Error),
     Disk(io::Error),
@@ -114,7 +113,6 @@ pub enum Error {
     PmemDeviceNew(sys_util::Error),
     PollContextAdd(sys_util::Error),
     PollContextDelete(sys_util::Error),
-    QcowDeviceCreate(qcow::Error),
     ReadLowmemAvailable(io::Error),
     ReadLowmemMargin(io::Error),
     RegisterBalloon(arch::DeviceRegistrationError),
@@ -162,6 +160,7 @@ impl Display for Error {
             ChownTpmStorage(e) => write!(f, "failed to chown tpm storage: {}", e),
             CloneEventFd(e) => write!(f, "failed to clone eventfd: {}", e),
             CreateCrasClient(e) => write!(f, "failed to create cras client: {}", e),
+            CreateDiskError(e) => write!(f, "failed to create virtual disk: {}", e),
             CreateEventFd(e) => write!(f, "failed to create eventfd: {}", e),
             CreatePollContext(e) => write!(f, "failed to create poll context: {}", e),
             CreateSignalFd(e) => write!(f, "failed to create signalfd: {}", e),
@@ -172,7 +171,6 @@ impl Display for Error {
                 write!(f, "failed to create tpm storage dir {}: {}", p.display(), e)
             }
             CreateUsbProvider(e) => write!(f, "failed to create usb provider: {}", e),
-            DetectImageType(e) => write!(f, "failed to detect disk image type: {}", e),
             DeviceJail(e) => write!(f, "failed to jail device: {}", e),
             DevicePivotRoot(e) => write!(f, "failed to pivot root device: {}", e),
             Disk(e) => write!(f, "failed to load disk image: {}", e),
@@ -203,7 +201,6 @@ impl Display for Error {
             PmemDeviceNew(e) => write!(f, "failed to create pmem device: {}", e),
             PollContextAdd(e) => write!(f, "failed to add fd to poll context: {}", e),
             PollContextDelete(e) => write!(f, "failed to remove fd from poll context: {}", e),
-            QcowDeviceCreate(e) => write!(f, "failed to read qcow formatted file {}", e),
             ReadLowmemAvailable(e) => write!(
                 f,
                 "failed to read /sys/kernel/mm/chromeos-low_mem/available: {}",
@@ -351,25 +348,12 @@ fn create_block_device(
     };
     flock(&raw_image, lock_op, true).map_err(Error::DiskImageLock)?;
 
-    let image_type = qcow::detect_image_type(&raw_image).map_err(Error::DetectImageType)?;
-    let dev = match image_type {
-        ImageType::Raw => {
-            // Access as a raw block device.
-            let dev = virtio::Block::new(raw_image, disk.read_only, Some(disk_device_socket))
-                .map_err(Error::BlockDeviceNew)?;
-            Box::new(dev) as Box<dyn VirtioDevice>
-        }
-        ImageType::Qcow2 => {
-            // Valid qcow header present
-            let qcow_image = QcowFile::from(raw_image).map_err(Error::QcowDeviceCreate)?;
-            let dev = virtio::Block::new(qcow_image, disk.read_only, Some(disk_device_socket))
-                .map_err(Error::BlockDeviceNew)?;
-            Box::new(dev) as Box<dyn VirtioDevice>
-        }
-    };
+    let disk_file = disk::create_disk_file(raw_image).map_err(Error::CreateDiskError)?;
+    let dev = virtio::Block::new(disk_file, disk.read_only, Some(disk_device_socket))
+        .map_err(Error::BlockDeviceNew)?;
 
     Ok(VirtioDeviceStub {
-        dev,
+        dev: Box::new(dev),
         jail: simple_jail(&cfg, "block_device.policy")?,
     })
 }