diff --git a/virtio-devices/src/vhost_user/blk.rs b/virtio-devices/src/vhost_user/blk.rs index f3f8cacd3..77f7a5c72 100644 --- a/virtio-devices/src/vhost_user/blk.rs +++ b/virtio-devices/src/vhost_user/blk.rs @@ -24,7 +24,6 @@ use vhost::vhost_user::message::VhostUserConfigFlags; use vhost::vhost_user::message::VHOST_USER_CONFIG_OFFSET; use vhost::vhost_user::message::{VhostUserProtocolFeatures, VhostUserVirtioFeatures}; use vhost::vhost_user::{MasterReqHandler, VhostUserMaster, VhostUserMasterReqHandler}; -use vhost::VhostBackend; use virtio_bindings::bindings::virtio_blk::{ VIRTIO_BLK_F_BLK_SIZE, VIRTIO_BLK_F_CONFIG_WCE, VIRTIO_BLK_F_DISCARD, VIRTIO_BLK_F_FLUSH, VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_MQ, VIRTIO_BLK_F_RO, VIRTIO_BLK_F_SEG_MAX, @@ -128,15 +127,6 @@ impl Blk { config.num_queues = num_queues as u16; } - // Send set_vring_base here, since it could tell backends, like SPDK, - // how many virt queues to be handled, which backend required to know - // at early stage. - for i in 0..num_queues { - vu.socket_handle() - .set_vring_base(i, 0) - .map_err(Error::VhostUserSetVringBase)?; - } - Ok(Blk { common: VirtioCommon { device_type: VirtioDeviceType::Block as u32, diff --git a/virtio-devices/src/vhost_user/vu_common_ctrl.rs b/virtio-devices/src/vhost_user/vu_common_ctrl.rs index 41b9ab8d7..a8317d137 100644 --- a/virtio-devices/src/vhost_user/vu_common_ctrl.rs +++ b/virtio-devices/src/vhost_user/vu_common_ctrl.rs @@ -141,6 +141,15 @@ impl VhostUserHandle { // Let's first provide the memory table to the backend. self.update_mem_table(mem)?; + // Send set_vring_num here, since it could tell backends, like SPDK, + // how many virt queues to be handled, which backend required to know + // at early stage. + for (queue_index, queue) in queues.iter().enumerate() { + self.vu + .set_vring_num(queue_index, queue.actual_size()) + .map_err(Error::VhostUserSetVringNum)?; + } + // Setup for inflight I/O tracking shared memory. if let Some(inflight) = inflight { if inflight.fd.is_none() { @@ -168,10 +177,6 @@ impl VhostUserHandle { for (queue_index, queue) in queues.into_iter().enumerate() { let actual_size: usize = queue.actual_size().try_into().unwrap(); - self.vu - .set_vring_num(queue_index, queue.actual_size()) - .map_err(Error::VhostUserSetVringNum)?; - let config_data = VringConfigData { queue_max_size: queue.get_max_size(), queue_size: queue.actual_size(),