@@ -10,6 +10,7 @@ use serde::{Deserialize, Serialize};
10
10
use super :: RateLimiterConfig ;
11
11
pub use crate :: devices:: virtio:: block:: device:: FileEngineType ;
12
12
use crate :: devices:: virtio:: block:: VirtioBlockError ;
13
+ use crate :: devices:: virtio:: vhost_user_block:: device:: VhostUserBlock ;
13
14
pub use crate :: devices:: virtio:: CacheType ;
14
15
use crate :: devices:: virtio:: VirtioBlock ;
15
16
use crate :: VmmError ;
@@ -77,6 +78,8 @@ pub struct BlockDeviceUpdateConfig {
77
78
pub enum BlockDeviceType {
78
79
/// VirtioBlock type
79
80
VirtioBlock ( Arc < Mutex < VirtioBlock > > ) ,
81
+ /// VhostUserBlock type
82
+ VhostUserBlock ( Arc < Mutex < VhostUserBlock > > ) ,
80
83
}
81
84
82
85
/// Wrapper for the collection that holds all the Block Devices
@@ -106,6 +109,7 @@ impl BlockBuilder {
106
109
BlockDeviceType :: VirtioBlock ( b) => {
107
110
b. lock ( ) . expect ( "Poisoned lock" ) . is_root_device ( )
108
111
}
112
+ BlockDeviceType :: VhostUserBlock ( b) => b. lock ( ) . expect ( "Poisoned lock" ) . root_device ,
109
113
}
110
114
} else {
111
115
false
@@ -116,6 +120,7 @@ impl BlockBuilder {
116
120
fn get_index_of_drive_id ( & self , drive_id : & str ) -> Option < usize > {
117
121
self . devices . iter ( ) . position ( |b| match b {
118
122
BlockDeviceType :: VirtioBlock ( b) => b. lock ( ) . expect ( "Poisoned lock" ) . id ( ) . eq ( drive_id) ,
123
+ BlockDeviceType :: VhostUserBlock ( b) => b. lock ( ) . expect ( "Poisoned lock" ) . id . eq ( drive_id) ,
119
124
} )
120
125
}
121
126
@@ -179,6 +184,7 @@ impl BlockBuilder {
179
184
. iter ( )
180
185
. map ( |b| match b {
181
186
BlockDeviceType :: VirtioBlock ( b) => b. lock ( ) . unwrap ( ) . config ( ) . into ( ) ,
187
+ BlockDeviceType :: VhostUserBlock ( b) => b. lock ( ) . unwrap ( ) . config ( ) . into ( ) ,
182
188
} )
183
189
. collect ( )
184
190
}
@@ -250,6 +256,7 @@ mod tests {
250
256
assert_eq ! ( block. partuuid( ) , dummy_block_device. partuuid. as_ref( ) ) ;
251
257
assert_eq ! ( block. is_read_only( ) , dummy_block_device. is_read_only) ;
252
258
}
259
+ BlockDeviceType :: VhostUserBlock ( _) => { }
253
260
}
254
261
}
255
262
assert_eq ! ( block_devs. get_index_of_drive_id( & dummy_id) , Some ( 0 ) ) ;
@@ -284,6 +291,7 @@ mod tests {
284
291
assert_eq ! ( block. partuuid( ) , dummy_block_device. partuuid. as_ref( ) ) ;
285
292
assert_eq ! ( block. is_read_only( ) , dummy_block_device. is_read_only) ;
286
293
}
294
+ BlockDeviceType :: VhostUserBlock ( _) => { }
287
295
}
288
296
}
289
297
}
@@ -378,16 +386,19 @@ mod tests {
378
386
BlockDeviceType :: VirtioBlock ( ref b) => {
379
387
assert_eq ! ( b. lock( ) . unwrap( ) . id( ) , & root_block_device. drive_id)
380
388
}
389
+ BlockDeviceType :: VhostUserBlock ( _) => { }
381
390
}
382
391
match block_iter. next ( ) . unwrap ( ) {
383
392
BlockDeviceType :: VirtioBlock ( ref b) => {
384
393
assert_eq ! ( b. lock( ) . unwrap( ) . id( ) , & dummy_block_dev_2. drive_id)
385
394
}
395
+ BlockDeviceType :: VhostUserBlock ( _) => { }
386
396
}
387
397
match block_iter. next ( ) . unwrap ( ) {
388
398
BlockDeviceType :: VirtioBlock ( ref b) => {
389
399
assert_eq ! ( b. lock( ) . unwrap( ) . id( ) , & dummy_block_dev_3. drive_id)
390
400
}
401
+ BlockDeviceType :: VhostUserBlock ( _) => { }
391
402
}
392
403
}
393
404
@@ -447,16 +458,19 @@ mod tests {
447
458
BlockDeviceType :: VirtioBlock ( ref b) => {
448
459
assert_eq ! ( b. lock( ) . unwrap( ) . id( ) , & root_block_device. drive_id)
449
460
}
461
+ BlockDeviceType :: VhostUserBlock ( _) => { }
450
462
}
451
463
match block_iter. next ( ) . unwrap ( ) {
452
464
BlockDeviceType :: VirtioBlock ( ref b) => {
453
465
assert_eq ! ( b. lock( ) . unwrap( ) . id( ) , & dummy_block_dev_2. drive_id)
454
466
}
467
+ BlockDeviceType :: VhostUserBlock ( _) => { }
455
468
}
456
469
match block_iter. next ( ) . unwrap ( ) {
457
470
BlockDeviceType :: VirtioBlock ( ref b) => {
458
471
assert_eq ! ( b. lock( ) . unwrap( ) . id( ) , & dummy_block_dev_3. drive_id)
459
472
}
473
+ BlockDeviceType :: VhostUserBlock ( _) => { }
460
474
}
461
475
}
462
476
@@ -520,6 +534,7 @@ mod tests {
520
534
// Validate update was successful.
521
535
match block_devs. devices [ index] {
522
536
BlockDeviceType :: VirtioBlock ( ref b) => assert ! ( b. lock( ) . unwrap( ) . is_read_only( ) ) ,
537
+ BlockDeviceType :: VhostUserBlock ( _) => { }
523
538
}
524
539
525
540
// Update with invalid path.
@@ -572,6 +587,7 @@ mod tests {
572
587
BlockDeviceType :: VirtioBlock ( ref b) => {
573
588
assert_eq ! ( b. lock( ) . unwrap( ) . id( ) , & root_block_id)
574
589
}
590
+ BlockDeviceType :: VhostUserBlock ( _) => { }
575
591
}
576
592
}
577
593
@@ -621,6 +637,7 @@ mod tests {
621
637
assert_eq ! ( block_devs. devices. len( ) , 1 ) ;
622
638
match block_devs. devices . pop_back ( ) . unwrap ( ) {
623
639
BlockDeviceType :: VirtioBlock ( ref b) => assert_eq ! ( b. lock( ) . unwrap( ) . id( ) , block_id) ,
640
+ BlockDeviceType :: VhostUserBlock ( _) => { }
624
641
}
625
642
}
626
643
}
0 commit comments