diff --git a/virtio-devices/src/vhost_user/blk.rs b/virtio-devices/src/vhost_user/blk.rs index 66958e32c..7b574a583 100644 --- a/virtio-devices/src/vhost_user/blk.rs +++ b/virtio-devices/src/vhost_user/blk.rs @@ -192,14 +192,7 @@ impl Blk { } fn state(&self) -> State { - State { - avail_features: self.common.avail_features, - acked_features: self.common.acked_features, - config: self.config, - acked_protocol_features: self.vu_common.acked_protocol_features, - vu_num_queues: self.vu_common.vu_num_queues, - ..Default::default() - } + self.vu_common.state(&self.common, self.config) } } diff --git a/virtio-devices/src/vhost_user/fs.rs b/virtio-devices/src/vhost_user/fs.rs index f9f819c0c..3ae526264 100644 --- a/virtio-devices/src/vhost_user/fs.rs +++ b/virtio-devices/src/vhost_user/fs.rs @@ -201,14 +201,7 @@ impl Fs { } fn state(&self) -> State { - State { - avail_features: self.common.avail_features, - acked_features: self.common.acked_features, - config: self.config, - acked_protocol_features: self.vu_common.acked_protocol_features, - vu_num_queues: self.vu_common.vu_num_queues, - ..Default::default() - } + self.vu_common.state(&self.common, self.config) } } diff --git a/virtio-devices/src/vhost_user/generic_vhost_user.rs b/virtio-devices/src/vhost_user/generic_vhost_user.rs index d0880b02e..2110e6842 100644 --- a/virtio-devices/src/vhost_user/generic_vhost_user.rs +++ b/virtio-devices/src/vhost_user/generic_vhost_user.rs @@ -157,14 +157,7 @@ since the backend only supports {backend_num_queues}\n", } fn state(&self) -> State { - State { - avail_features: self.common.avail_features, - acked_features: self.common.acked_features, - acked_protocol_features: self.vu_common.acked_protocol_features, - vu_num_queues: self.vu_common.vu_num_queues, - backend_req_support: false, - ..Default::default() - } + self.vu_common.state(&self.common, ()) } #[cold] diff --git a/virtio-devices/src/vhost_user/mod.rs b/virtio-devices/src/vhost_user/mod.rs index 863212539..811ff92e1 100644 --- a/virtio-devices/src/vhost_user/mod.rs +++ b/virtio-devices/src/vhost_user/mod.rs @@ -457,6 +457,17 @@ impl VhostUserCommon { Ok(()) } + pub fn state(&self, common: &crate::VirtioCommon, config: C) -> VhostUserState { + VhostUserState { + avail_features: common.avail_features, + acked_features: common.acked_features, + config, + acked_protocol_features: self.acked_protocol_features, + vu_num_queues: self.vu_num_queues, + ..Default::default() + } + } + pub fn snapshot(&mut self, state: &T) -> std::result::Result where T: Serialize, diff --git a/virtio-devices/src/vhost_user/net.rs b/virtio-devices/src/vhost_user/net.rs index d6d142ba6..2145691a0 100644 --- a/virtio-devices/src/vhost_user/net.rs +++ b/virtio-devices/src/vhost_user/net.rs @@ -221,14 +221,7 @@ impl Net { } fn state(&self) -> State { - State { - avail_features: self.common.avail_features, - acked_features: self.common.acked_features, - config: self.config, - acked_protocol_features: self.vu_common.acked_protocol_features, - vu_num_queues: self.vu_common.vu_num_queues, - ..Default::default() - } + self.vu_common.state(&self.common, self.config) } }