disk: make AsyncDisk take a dynamic BackingMemory

Rather than tying AsyncDisk::read_to_mem/write_from_mem to the
GuestMemory type specifically, use dyn BackingMemory like the underlying
read_to_mem/write_from_mem calls in cros_async. This will allow an async
version of QcowFile to use these functions to read/write temporary
buffers as part of its internal bookkeeping.

BUG=b:219595052
TEST=tools/presubmit

Change-Id: I4ca3c976bf5dca68e3bbe0e3f163023b47034254
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/3824065
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: Daniel Verkamp <dverkamp@chromium.org>
This commit is contained in:
Daniel Verkamp 2022-02-14 16:51:44 -08:00 committed by crosvm LUCI
parent 03dd11a0d4
commit ac9a459761
2 changed files with 7 additions and 15 deletions

View file

@ -25,10 +25,10 @@ use base::FileSync;
use base::PunchHole;
use base::WriteZeroesAt;
use cros_async::AllocateMode;
use cros_async::BackingMemory;
use cros_async::Executor;
use cros_async::IoSourceExt;
use thiserror::Error as ThisError;
use vm_memory::GuestMemory;
mod qcow;
pub use qcow::QcowFile;
@ -318,7 +318,7 @@ pub trait AsyncDisk: DiskGetLen + FileSetLen + FileAllocate {
async fn read_to_mem<'a>(
&self,
file_offset: u64,
mem: Arc<GuestMemory>,
mem: Arc<dyn BackingMemory + Send + Sync>,
mem_offsets: &'a [cros_async::MemRegion],
) -> Result<usize>;
@ -326,7 +326,7 @@ pub trait AsyncDisk: DiskGetLen + FileSetLen + FileAllocate {
async fn write_from_mem<'a>(
&self,
file_offset: u64,
mem: Arc<GuestMemory>,
mem: Arc<dyn BackingMemory + Send + Sync>,
mem_offsets: &'a [cros_async::MemRegion],
) -> Result<usize>;
@ -381,7 +381,7 @@ impl AsyncDisk for SingleFileDisk {
async fn read_to_mem<'a>(
&self,
file_offset: u64,
mem: Arc<GuestMemory>,
mem: Arc<dyn BackingMemory + Send + Sync>,
mem_offsets: &'a [cros_async::MemRegion],
) -> Result<usize> {
self.inner
@ -393,7 +393,7 @@ impl AsyncDisk for SingleFileDisk {
async fn write_from_mem<'a>(
&self,
file_offset: u64,
mem: Arc<GuestMemory>,
mem: Arc<dyn BackingMemory + Send + Sync>,
mem_offsets: &'a [cros_async::MemRegion],
) -> Result<usize> {
self.inner

View file

@ -31,11 +31,7 @@ mod tests {
let f = File::open("/dev/zero").unwrap();
let async_file = SingleFileDisk::new(f, ex).unwrap();
let result = async_file
.read_to_mem(
0,
Arc::clone(&guest_mem),
&[MemRegion { offset: 0, len: 48 }],
)
.read_to_mem(0, guest_mem, &[MemRegion { offset: 0, len: 48 }])
.await;
assert_eq!(48, result.unwrap());
}
@ -51,11 +47,7 @@ mod tests {
let f = OpenOptions::new().write(true).open("/dev/null").unwrap();
let async_file = SingleFileDisk::new(f, ex).unwrap();
let result = async_file
.write_from_mem(
0,
Arc::clone(&guest_mem),
&[MemRegion { offset: 0, len: 48 }],
)
.write_from_mem(0, guest_mem, &[MemRegion { offset: 0, len: 48 }])
.await;
assert_eq!(48, result.unwrap());
}