mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-09 20:04:20 +00:00
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:
parent
03dd11a0d4
commit
ac9a459761
2 changed files with 7 additions and 15 deletions
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue