deps: bump io-uring from 0.4.0 to 0.5.0

Bumps [io-uring](https://github.com/tokio-rs/io-uring) from 0.4.0 to 0.5.0.
- [Release notes](https://github.com/tokio-rs/io-uring/releases)
- [Commits](https://github.com/tokio-rs/io-uring/commits)

The API was changed, hence some changes were needed to keep the code
building and functional.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
dependabot-preview[bot] 2021-02-28 17:06:01 +00:00 committed by Rob Bradford
parent e31c2be60a
commit 30cd3cb764
3 changed files with 28 additions and 39 deletions

4
Cargo.lock generated
View File

@ -463,9 +463,9 @@ dependencies = [
[[package]] [[package]]
name = "io-uring" name = "io-uring"
version = "0.4.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f7589adca0ddd74f56ed83a5098b45e3abf264dc27e150a8bec3397fcc34338" checksum = "4e06a309d419b77e3036c1eb5683482c9ee51cff165e448d04bd601b6cd16360"
dependencies = [ dependencies = [
"bitflags 1.2.1", "bitflags 1.2.1",
"libc", "libc",

View File

@ -5,7 +5,7 @@
use crate::async_io::{ use crate::async_io::{
AsyncIo, AsyncIoError, AsyncIoResult, DiskFile, DiskFileError, DiskFileResult, AsyncIo, AsyncIoError, AsyncIoResult, DiskFile, DiskFileError, DiskFileResult,
}; };
use io_uring::{opcode, squeue, IoUring}; use io_uring::{opcode, squeue, types, IoUring};
use std::fs::File; use std::fs::File;
use std::io::{Seek, SeekFrom}; use std::io::{Seek, SeekFrom};
use std::os::unix::io::{AsRawFd, RawFd}; use std::os::unix::io::{AsRawFd, RawFd};
@ -71,28 +71,23 @@ impl AsyncIo for RawFileAsync {
iovecs: Vec<libc::iovec>, iovecs: Vec<libc::iovec>,
user_data: u64, user_data: u64,
) -> AsyncIoResult<()> { ) -> AsyncIoResult<()> {
let (submitter, sq, _) = self.io_uring.split(); let (submitter, mut sq, _) = self.io_uring.split();
let mut avail_sq = sq.available();
// Safe because we know the file descriptor is valid and we // Safe because we know the file descriptor is valid and we
// relied on vm-memory to provide the buffer address. // relied on vm-memory to provide the buffer address.
let _ = unsafe { let _ = unsafe {
avail_sq.push( sq.push(
opcode::Readv::new( &opcode::Readv::new(types::Fd(self.fd), iovecs.as_ptr(), iovecs.len() as u32)
opcode::types::Fd(self.fd), .offset(offset)
iovecs.as_ptr(), .build()
iovecs.len() as u32, .flags(squeue::Flags::ASYNC)
) .user_data(user_data),
.offset(offset)
.build()
.flags(squeue::Flags::ASYNC)
.user_data(user_data),
) )
}; };
// Update the submission queue and submit new operations to the // Update the submission queue and submit new operations to the
// io_uring instance. // io_uring instance.
avail_sq.sync(); sq.sync();
submitter.submit().map_err(AsyncIoError::ReadVectored)?; submitter.submit().map_err(AsyncIoError::ReadVectored)?;
Ok(()) Ok(())
@ -104,28 +99,23 @@ impl AsyncIo for RawFileAsync {
iovecs: Vec<libc::iovec>, iovecs: Vec<libc::iovec>,
user_data: u64, user_data: u64,
) -> AsyncIoResult<()> { ) -> AsyncIoResult<()> {
let (submitter, sq, _) = self.io_uring.split(); let (submitter, mut sq, _) = self.io_uring.split();
let mut avail_sq = sq.available();
// Safe because we know the file descriptor is valid and we // Safe because we know the file descriptor is valid and we
// relied on vm-memory to provide the buffer address. // relied on vm-memory to provide the buffer address.
let _ = unsafe { let _ = unsafe {
avail_sq.push( sq.push(
opcode::Writev::new( &opcode::Writev::new(types::Fd(self.fd), iovecs.as_ptr(), iovecs.len() as u32)
opcode::types::Fd(self.fd), .offset(offset)
iovecs.as_ptr(), .build()
iovecs.len() as u32, .flags(squeue::Flags::ASYNC)
) .user_data(user_data),
.offset(offset)
.build()
.flags(squeue::Flags::ASYNC)
.user_data(user_data),
) )
}; };
// Update the submission queue and submit new operations to the // Update the submission queue and submit new operations to the
// io_uring instance. // io_uring instance.
avail_sq.sync(); sq.sync();
submitter.submit().map_err(AsyncIoError::WriteVectored)?; submitter.submit().map_err(AsyncIoError::WriteVectored)?;
Ok(()) Ok(())
@ -133,13 +123,12 @@ impl AsyncIo for RawFileAsync {
fn fsync(&mut self, user_data: Option<u64>) -> AsyncIoResult<()> { fn fsync(&mut self, user_data: Option<u64>) -> AsyncIoResult<()> {
if let Some(user_data) = user_data { if let Some(user_data) = user_data {
let (submitter, sq, _) = self.io_uring.split(); let (submitter, mut sq, _) = self.io_uring.split();
let mut avail_sq = sq.available();
// Safe because we know the file descriptor is valid. // Safe because we know the file descriptor is valid.
let _ = unsafe { let _ = unsafe {
avail_sq.push( sq.push(
opcode::Fsync::new(opcode::types::Fd(self.fd)) &opcode::Fsync::new(types::Fd(self.fd))
.build() .build()
.flags(squeue::Flags::ASYNC) .flags(squeue::Flags::ASYNC)
.user_data(user_data), .user_data(user_data),
@ -148,7 +137,7 @@ impl AsyncIo for RawFileAsync {
// Update the submission queue and submit new operations to the // Update the submission queue and submit new operations to the
// io_uring instance. // io_uring instance.
avail_sq.sync(); sq.sync();
submitter.submit().map_err(AsyncIoError::Fsync)?; submitter.submit().map_err(AsyncIoError::Fsync)?;
} else { } else {
unsafe { libc::fsync(self.fd) }; unsafe { libc::fsync(self.fd) };
@ -161,7 +150,7 @@ impl AsyncIo for RawFileAsync {
let mut completion_list = Vec::new(); let mut completion_list = Vec::new();
let cq = self.io_uring.completion(); let cq = self.io_uring.completion();
for cq_entry in cq.available() { for cq_entry in cq {
completion_list.push((cq_entry.user_data(), cq_entry.result())); completion_list.push((cq_entry.user_data(), cq_entry.result()));
} }

8
fuzz/Cargo.lock generated
View File

@ -273,9 +273,9 @@ dependencies = [
[[package]] [[package]]
name = "io-uring" name = "io-uring"
version = "0.4.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f7589adca0ddd74f56ed83a5098b45e3abf264dc27e150a8bec3397fcc34338" checksum = "4e06a309d419b77e3036c1eb5683482c9ee51cff165e448d04bd601b6cd16360"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"libc", "libc",
@ -512,9 +512,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.63" version = "1.0.64"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43535db9747a4ba938c0ce0a98cc631a46ebf943c9e1d604e091df6007620bf6" checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
dependencies = [ dependencies = [
"itoa", "itoa",
"ryu", "ryu",