]> git.ozlabs.org Git - petitboot/blobdiff - discover/boot.c
discover/devmapper: Retry dm-device remove if busy
[petitboot] / discover / boot.c
index 1e010ab1ebc316e6a13a0ef588abe4ff9ed9330d..f80b409bdc940ceb63c5b5952a901b3e24ddaa15 100644 (file)
@@ -341,6 +341,8 @@ static int check_load(struct boot_task *task, const char *name,
                return 0;
        }
 
+       pb_log("Failed to load %s from %s\n", name,
+                       pb_url_to_string(result->url));
        update_status(task->status_fn, task->status_arg,
                        STATUS_ERROR,
                        _("Couldn't load %s from %s"), name,
@@ -362,15 +364,14 @@ static void cleanup_load(struct load_url_result *result)
 static void cleanup_cancellations(struct boot_task *task,
                struct load_url_result *cur_result)
 {
-       struct load_url_result *result, **results[] = {
-               &task->image, &task->initrd, &task->dtb,
-       };
+       struct boot_resource *resource;
+       struct load_url_result *result;
        bool pending = false;
-       unsigned int i;
 
-       for (i = 0; i < ARRAY_SIZE(results); i++) {
-               result = *results[i];
+       list_for_each_entry(&task->resources, resource, list) {
+               result = resource->result;
 
+               /* Nothing to do if a load hasn't actually started yet */
                if (!result)
                        continue;
 
@@ -378,9 +379,6 @@ static void cleanup_cancellations(struct boot_task *task,
                if (result == cur_result || result->status == LOAD_OK
                                || result->status == LOAD_ERROR) {
                        cleanup_load(result);
-                       talloc_free(result);
-                       *results[i] = NULL;
-
                /* ... and cancel any pending loads, which we'll free in
                 * the completion callback */
                } else if (result->status == LOAD_ASYNC) {
@@ -455,6 +453,8 @@ no_load:
                                        STATUS_ERROR,
                                        _("kexec reboot failed"));
                }
+       } else {
+               pb_log("Failed to load all boot resources\n");
        }
 }
 
@@ -466,6 +466,8 @@ static int start_url_load(struct boot_task *task, struct boot_resource *res)
        res->result = load_url_async(task, res->url, boot_process,
                                 task, NULL, task->status_arg);
        if (!res->result) {
+               pb_log("Error starting load for %s at %s\n",
+                               res->name, pb_url_to_string(res->url));
                update_status(task->status_fn, task->status_arg,
                                STATUS_ERROR, _("Error loading %s"),
                                res->name);