@@ -1088,27 +1088,35 @@ pub(crate) async fn install_to_disk(opts: InstallToDiskOpts) -> Result<()> {
1088
1088
. device
1089
1089
. metadata ( )
1090
1090
. with_context ( || format ! ( "Querying {}" , & block_opts. device) ) ?;
1091
- let mut loopback = None ;
1092
1091
if opts. via_loopback {
1093
1092
if !target_blockdev_meta. file_type ( ) . is_file ( ) {
1094
1093
anyhow:: bail!(
1095
1094
"Not a regular file (to be used via loopback): {}" ,
1096
1095
block_opts. device
1097
1096
) ;
1098
1097
}
1099
- let loopback_dev = crate :: blockdev:: LoopbackDevice :: new ( block_opts. device . as_std_path ( ) ) ?;
1100
- block_opts. device = loopback_dev. path ( ) . into ( ) ;
1101
- loopback = Some ( loopback_dev) ;
1102
1098
} else if !target_blockdev_meta. file_type ( ) . is_block_device ( ) {
1103
1099
anyhow:: bail!( "Not a block device: {}" , block_opts. device) ;
1104
1100
}
1105
1101
let state = prepare_install ( opts. config_opts , opts. source_opts , opts. target_opts ) . await ?;
1106
1102
1107
1103
// This is all blocking stuff
1108
- let mut rootfs = {
1104
+ let ( mut rootfs, loopback) = {
1105
+ let loopback_dev = if opts. via_loopback {
1106
+ let loopback_dev =
1107
+ crate :: blockdev:: LoopbackDevice :: new ( block_opts. device . as_std_path ( ) ) ?;
1108
+ block_opts. device = loopback_dev. path ( ) . into ( ) ;
1109
+ Some ( loopback_dev)
1110
+ } else {
1111
+ None
1112
+ } ;
1113
+
1109
1114
let state = state. clone ( ) ;
1110
- tokio:: task:: spawn_blocking ( move || baseline:: install_create_rootfs ( & state, block_opts) )
1111
- . await ??
1115
+ let rootfs = tokio:: task:: spawn_blocking ( move || {
1116
+ baseline:: install_create_rootfs ( & state, block_opts)
1117
+ } )
1118
+ . await ??;
1119
+ ( rootfs, loopback_dev)
1112
1120
} ;
1113
1121
1114
1122
install_to_filesystem_impl ( & state, & mut rootfs) . await ?;
0 commit comments