@@ -884,49 +884,38 @@ fn attach_block_devices<'a, I: Iterator<Item = &'a BlockDeviceType> + Debug>(
884
884
blocks : I ,
885
885
event_manager : & mut EventManager ,
886
886
) -> Result < ( ) , StartMicrovmError > {
887
+ macro_rules! attach_block {
888
+ ( $block: ident) => {
889
+ let id = {
890
+ let locked = $block. lock( ) . expect( "Poisoned lock" ) ;
891
+ if locked. root_device {
892
+ match locked. partuuid {
893
+ Some ( ref partuuid) => {
894
+ cmdline. insert_str( format!( "root=PARTUUID={}" , partuuid) ) ?
895
+ }
896
+ None => cmdline. insert_str( "root=/dev/vda" ) ?,
897
+ }
898
+ match locked. read_only {
899
+ true => cmdline. insert_str( "ro" ) ?,
900
+ false => cmdline. insert_str( "rw" ) ?,
901
+ }
902
+ }
903
+ locked. id. clone( )
904
+ } ;
905
+ // The device mutex mustn't be locked here otherwise it will deadlock.
906
+ attach_virtio_device( event_manager, vmm, id, $block. clone( ) , cmdline) ?;
907
+ } ;
908
+ }
909
+
887
910
for block in blocks {
888
911
match block {
889
912
BlockDeviceType :: VirtioBlock ( block) => {
890
- let id = {
891
- let locked = block. lock ( ) . expect ( "Poisoned lock" ) ;
892
- if locked. root_device {
893
- cmdline. insert_str ( if let Some ( ref partuuid) = locked. partuuid {
894
- format ! ( "root=PARTUUID={}" , partuuid)
895
- } else {
896
- // If no PARTUUID was specified for the root device, try with the
897
- // /dev/vda.
898
- "root=/dev/vda" . to_string ( )
899
- } ) ?;
900
-
901
- let flags = if locked. read_only { "ro" } else { "rw" } ;
902
- cmdline. insert_str ( flags) ?;
903
- }
904
- locked. id . clone ( )
905
- } ;
906
- // The device mutex mustn't be locked here otherwise it will deadlock.
907
- attach_virtio_device ( event_manager, vmm, id, block. clone ( ) , cmdline) ?;
913
+ attach_block ! ( block) ;
908
914
}
909
915
BlockDeviceType :: VhostUserBlock ( block) => {
910
- let id = {
911
- let locked = block. lock ( ) . expect ( "Poisoned lock" ) ;
912
- if locked. root_device {
913
- cmdline. insert_str ( if let Some ( ref partuuid) = locked. partuuid {
914
- format ! ( "root=PARTUUID={}" , partuuid)
915
- } else {
916
- // If no PARTUUID was specified for the root device, try with the
917
- // /dev/vda.
918
- "root=/dev/vda" . to_string ( )
919
- } ) ?;
920
-
921
- let flags = if locked. read_only { "ro" } else { "rw" } ;
922
- cmdline. insert_str ( flags) ?;
923
- }
924
- locked. id . clone ( )
925
- } ;
926
- // The device mutex mustn't be locked here otherwise it will deadlock.
927
- attach_virtio_device ( event_manager, vmm, id, block. clone ( ) , cmdline) ?;
916
+ attach_block ! ( block) ;
928
917
}
929
- }
918
+ } ;
930
919
}
931
920
Ok ( ( ) )
932
921
}
0 commit comments