virtio-devices: block, block_io_uring: Don't assume max queue count

Don't assume that the number of queues provided match the number of
queues offered. The virtio spec allows the driver to program fewer
queues.

Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
Rob Bradford 2021-01-18 13:55:37 +00:00 committed by Sebastien Boeuf
parent c9b68a3be6
commit c366efc19e
2 changed files with 8 additions and 6 deletions

View File

@ -444,8 +444,9 @@ impl<T: 'static + DiskFile + Send> VirtioDevice for Block<T> {
self.update_writeback();
let mut epoll_threads = Vec::new();
for i in 0..self.common.queue_sizes.len() {
for i in 0..queues.len() {
let queue_evt = queue_evts.remove(0);
let queue = queues.remove(0);
let kill_evt = self
.common
.kill_evt
@ -467,7 +468,7 @@ impl<T: 'static + DiskFile + Send> VirtioDevice for Block<T> {
ActivateError::BadActivate
})?;
let mut handler = BlockEpollHandler {
queue: queues.remove(0),
queue,
mem: mem.clone(),
disk_image: self.disk_image.clone(),
disk_nsectors: self.disk_nsectors,

View File

@ -493,9 +493,10 @@ impl VirtioDevice for BlockIoUring {
self.update_writeback();
let mut epoll_threads = Vec::new();
for i in 0..self.common.queue_sizes.len() {
let queue_size = self.common.queue_sizes[i] as usize;
for i in 0..queues.len() {
let queue_evt = queue_evts.remove(0);
let queue = queues.remove(0);
let queue_size = queue.size;
let io_uring = IoUring::new(queue_size as u32).map_err(|e| {
error!("failed to create io_uring instance: {}", e);
ActivateError::BadActivate
@ -522,7 +523,7 @@ impl VirtioDevice for BlockIoUring {
})?;
let mut handler = BlockIoUringEpollHandler {
queue: queues.remove(0),
queue,
mem: mem.clone(),
disk_image_fd: self.disk_image.as_raw_fd(),
disk_nsectors: self.disk_nsectors,
@ -538,7 +539,7 @@ impl VirtioDevice for BlockIoUring {
error!("failed to create io_uring eventfd: {}", e);
ActivateError::BadActivate
})?,
request_list: HashMap::with_capacity(queue_size),
request_list: HashMap::with_capacity(queue_size.into()),
};
let paused = self.common.paused.clone();