Skip to content

Commit f9c37ae

Browse files
authored
Merge pull request #278 from cgwalters/loop-debug
install: Only switch to loopback after re-exec
2 parents 7874e05 + 73f3996 commit f9c37ae

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

lib/src/blockdev.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ impl LoopbackDevice {
8989
.quiet()
9090
.read()?;
9191
let dev = Utf8PathBuf::from(dev.trim());
92+
tracing::debug!("Allocated loopback {dev}");
9293
Ok(Self { dev: Some(dev) })
9394
}
9495

@@ -104,6 +105,7 @@ impl LoopbackDevice {
104105
let dev = if let Some(dev) = self.dev.take() {
105106
dev
106107
} else {
108+
tracing::trace!("loopback device already deallocated");
107109
return Ok(());
108110
};
109111
Task::new("losetup", "losetup")

lib/src/install.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,27 +1088,35 @@ pub(crate) async fn install_to_disk(opts: InstallToDiskOpts) -> Result<()> {
10881088
.device
10891089
.metadata()
10901090
.with_context(|| format!("Querying {}", &block_opts.device))?;
1091-
let mut loopback = None;
10921091
if opts.via_loopback {
10931092
if !target_blockdev_meta.file_type().is_file() {
10941093
anyhow::bail!(
10951094
"Not a regular file (to be used via loopback): {}",
10961095
block_opts.device
10971096
);
10981097
}
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);
11021098
} else if !target_blockdev_meta.file_type().is_block_device() {
11031099
anyhow::bail!("Not a block device: {}", block_opts.device);
11041100
}
11051101
let state = prepare_install(opts.config_opts, opts.source_opts, opts.target_opts).await?;
11061102

11071103
// 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+
11091114
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)
11121120
};
11131121

11141122
install_to_filesystem_impl(&state, &mut rootfs).await?;

0 commit comments

Comments
 (0)