mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-28 07:33:09 +00:00
block_util: Pass a reference to the slice of iovecs
Rather than passing the vector of iovecs for the I/O to act on pass a reference to the slice of values inside them. This removes the explicit container type from the API allowing the use of e.g. SmallVec. Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
parent
9ba06ce5f5
commit
e7a51cde78
@ -131,13 +131,13 @@ pub trait AsyncIo: Send {
|
|||||||
fn read_vectored(
|
fn read_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()>;
|
) -> AsyncIoResult<()>;
|
||||||
fn write_vectored(
|
fn write_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()>;
|
) -> AsyncIoResult<()>;
|
||||||
fn fsync(&mut self, user_data: Option<u64>) -> AsyncIoResult<()>;
|
fn fsync(&mut self, user_data: Option<u64>) -> AsyncIoResult<()>;
|
||||||
|
@ -64,7 +64,7 @@ impl AsyncIo for FixedVhdAsync {
|
|||||||
fn read_vectored(
|
fn read_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
if offset as u64 >= self.size {
|
if offset as u64 >= self.size {
|
||||||
@ -83,7 +83,7 @@ impl AsyncIo for FixedVhdAsync {
|
|||||||
fn write_vectored(
|
fn write_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
if offset as u64 >= self.size {
|
if offset as u64 >= self.size {
|
||||||
|
@ -62,7 +62,7 @@ impl AsyncIo for FixedVhdSync {
|
|||||||
fn read_vectored(
|
fn read_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
if offset as u64 >= self.size {
|
if offset as u64 >= self.size {
|
||||||
@ -81,7 +81,7 @@ impl AsyncIo for FixedVhdSync {
|
|||||||
fn write_vectored(
|
fn write_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
if offset as u64 >= self.size {
|
if offset as u64 >= self.size {
|
||||||
|
@ -431,12 +431,12 @@ impl Request {
|
|||||||
.mark_dirty(0, *data_len as usize);
|
.mark_dirty(0, *data_len as usize);
|
||||||
}
|
}
|
||||||
disk_image
|
disk_image
|
||||||
.read_vectored(offset, iovecs, user_data)
|
.read_vectored(offset, &iovecs, user_data)
|
||||||
.map_err(ExecuteError::AsyncRead)?;
|
.map_err(ExecuteError::AsyncRead)?;
|
||||||
}
|
}
|
||||||
RequestType::Out => {
|
RequestType::Out => {
|
||||||
disk_image
|
disk_image
|
||||||
.write_vectored(offset, iovecs, user_data)
|
.write_vectored(offset, &iovecs, user_data)
|
||||||
.map_err(ExecuteError::AsyncWrite)?;
|
.map_err(ExecuteError::AsyncWrite)?;
|
||||||
}
|
}
|
||||||
RequestType::Flush => {
|
RequestType::Flush => {
|
||||||
@ -590,7 +590,7 @@ where
|
|||||||
fn read_vectored_sync(
|
fn read_vectored_sync(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
eventfd: &EventFd,
|
eventfd: &EventFd,
|
||||||
completion_list: &mut Vec<(u64, i32)>,
|
completion_list: &mut Vec<(u64, i32)>,
|
||||||
@ -623,7 +623,7 @@ where
|
|||||||
fn write_vectored_sync(
|
fn write_vectored_sync(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
eventfd: &EventFd,
|
eventfd: &EventFd,
|
||||||
completion_list: &mut Vec<(u64, i32)>,
|
completion_list: &mut Vec<(u64, i32)>,
|
||||||
|
@ -65,7 +65,7 @@ impl AsyncIo for QcowSync {
|
|||||||
fn read_vectored(
|
fn read_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
self.qcow_file.read_vectored_sync(
|
self.qcow_file.read_vectored_sync(
|
||||||
@ -80,7 +80,7 @@ impl AsyncIo for QcowSync {
|
|||||||
fn write_vectored(
|
fn write_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
self.qcow_file.write_vectored_sync(
|
self.qcow_file.write_vectored_sync(
|
||||||
|
@ -76,7 +76,7 @@ impl AsyncIo for RawFileAsync {
|
|||||||
fn read_vectored(
|
fn read_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
let (submitter, mut sq, _) = self.io_uring.split();
|
let (submitter, mut sq, _) = self.io_uring.split();
|
||||||
@ -104,7 +104,7 @@ impl AsyncIo for RawFileAsync {
|
|||||||
fn write_vectored(
|
fn write_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
let (submitter, mut sq, _) = self.io_uring.split();
|
let (submitter, mut sq, _) = self.io_uring.split();
|
||||||
|
@ -65,7 +65,7 @@ impl AsyncIo for RawFileSync {
|
|||||||
fn read_vectored(
|
fn read_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
// SAFETY: FFI call with valid arguments
|
// SAFETY: FFI call with valid arguments
|
||||||
@ -90,7 +90,7 @@ impl AsyncIo for RawFileSync {
|
|||||||
fn write_vectored(
|
fn write_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
// SAFETY: FFI call with valid arguments
|
// SAFETY: FFI call with valid arguments
|
||||||
|
@ -64,7 +64,7 @@ impl AsyncIo for VhdxSync {
|
|||||||
fn read_vectored(
|
fn read_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
self.vhdx_file.read_vectored_sync(
|
self.vhdx_file.read_vectored_sync(
|
||||||
@ -79,7 +79,7 @@ impl AsyncIo for VhdxSync {
|
|||||||
fn write_vectored(
|
fn write_vectored(
|
||||||
&mut self,
|
&mut self,
|
||||||
offset: libc::off_t,
|
offset: libc::off_t,
|
||||||
iovecs: Vec<libc::iovec>,
|
iovecs: &[libc::iovec],
|
||||||
user_data: u64,
|
user_data: u64,
|
||||||
) -> AsyncIoResult<()> {
|
) -> AsyncIoResult<()> {
|
||||||
self.vhdx_file.write_vectored_sync(
|
self.vhdx_file.write_vectored_sync(
|
||||||
|
Loading…
Reference in New Issue
Block a user