]> git.ozlabs.org Git - petitboot/blobdiff - discover/device-handler.c
discover: detect unresolvable resources
[petitboot] / discover / device-handler.c
index 594a7c3c80a87b2c142cd17730cf09f46b50b149..b2922b790560fd5089b5fda3a6f15ddcb9c12e73 100644 (file)
@@ -149,8 +149,17 @@ static void context_commit(struct device_handler *handler,
                        discover_server_notify_boot_option_add(handler->server,
                                                                opt->option);
                } else {
-                       list_add(&handler->unresolved_boot_options, &opt->list);
-                       talloc_steal(handler, opt);
+                       if (!opt->source->resolve_resource) {
+                               pb_log("parser %s gave us an unresolved "
+                                       "resource (%s), but no way to "
+                                       "resolve it\n",
+                                       opt->source->name, opt->option->id);
+                               talloc_free(opt);
+                       } else {
+                               list_add(&handler->unresolved_boot_options,
+                                               &opt->list);
+                               talloc_steal(handler, opt);
+                       }
                }
        }
 }
@@ -663,6 +672,13 @@ static struct discover_boot_option *find_boot_option_by_id(
        return NULL;
 }
 
+static void boot_status(void *arg, struct boot_status *status)
+{
+       struct device_handler *handler = arg;
+
+       discover_server_notify_boot_status(handler->server, status);
+}
+
 void device_handler_boot(struct device_handler *handler,
                struct boot_command *cmd)
 {
@@ -670,5 +686,5 @@ void device_handler_boot(struct device_handler *handler,
 
        opt = find_boot_option_by_id(handler, cmd->option_id);
 
-       boot(handler, opt, cmd, handler->dry_run);
+       boot(handler, opt, cmd, handler->dry_run, boot_status, handler);
 }