diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/shared/dissect-image.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c index 0147c45d8..0e2fb9afb 100644 --- a/src/shared/dissect-image.c +++ b/src/shared/dissect-image.c @@ -221,6 +221,8 @@ static int loop_wait_for_partitions_to_appear( sd_device_enumerator **ret_enumerator) { int r; + log_debug("Waiting for device (parent + %d partitions) to appear...", num_partitions); + for (unsigned i = 0; i < N_DEVICE_NODE_LIST_ATTEMPTS; i++) { r = wait_for_partitions_to_appear(fd, d, num_partitions, ret_enumerator); if (r != -EAGAIN) @@ -320,6 +322,10 @@ int dissect_image( if (!m) return -ENOMEM; + r = sd_device_new_from_devnum(&d, 'b', st.st_rdev); + if (r < 0) + return r; + if (!(flags & DISSECT_IMAGE_GPT_ONLY) && (flags & DISSECT_IMAGE_REQUIRE_ROOT)) { const char *usage = NULL; @@ -353,6 +359,10 @@ int dissect_image( m->encrypted = streq_ptr(fstype, "crypto_LUKS"); + r = loop_wait_for_partitions_to_appear(fd, d, 0, &e); + if (r < 0) + return r; + *ret = TAKE_PTR(m); return 0; @@ -374,10 +384,6 @@ int dissect_image( if (!pl) return -errno ?: -ENOMEM; - r = sd_device_new_from_devnum(&d, 'b', st.st_rdev); - if (r < 0) - return r; - r = loop_wait_for_partitions_to_appear(fd, d, blkid_partlist_numof_partitions(pl), &e); if (r < 0) return r; |