summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2018-08-27 11:50:47 +1000
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2018-09-07 09:44:29 +1000
commit93d41f97eedca3684922f4c3cae82d4c74b04210 (patch)
tree74509b98423f6a9604b7ce0ce91d190ebec93483
parentf0e038a4b21edeab8cd5e6a0aa7439d882bbabef (diff)
downloadtalos-petitboot-93d41f97eedca3684922f4c3cae82d4c74b04210.tar.gz
talos-petitboot-93d41f97eedca3684922f4c3cae82d4c74b04210.zip
discover/device-handler: Restore autoboot setting on requeryv1.7.3
When a device requery is triggered we cancel any default boot option on the device. This also disables autoboot which we don't want; any boot options found after the requery will not be able to autoboot. To avoid this restore the existing autoboot setting after checking for default options. This prevents a particular corner case where a default boot option has been selected for boot but one of its boot files has stalled or is taking more time to download than the requery timeout and the requery accidentally cancels autoboot preventing Petitboot from trying to boot again. Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com> (cherry picked from commit 3917e88b838001b13a19fc6ea01d08b08c0770ca)
-rw-r--r--discover/device-handler.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/discover/device-handler.c b/discover/device-handler.c
index 20093a4..4dfe537 100644
--- a/discover/device-handler.c
+++ b/discover/device-handler.c
@@ -1191,6 +1191,7 @@ static int device_handler_requery_timeout_fn(void *data)
struct requery_data *rqd = data;
struct device_handler *handler;
struct discover_device *device;
+ bool autoboot;
handler = rqd->handler;
device = rqd->device;
@@ -1213,9 +1214,14 @@ static int device_handler_requery_timeout_fn(void *data)
talloc_free(opt);
}
+ /* Track whether autoboot was enabled, if we cancel a default option
+ * it will be switched off.
+ */
+ autoboot = handler->autoboot_enabled;
+
list_for_each_entry_safe(&device->boot_options, opt, tmp, list) {
if (opt == handler->default_boot_option) {
- pb_log("Default option %s cancelled since device is being requeried",
+ pb_log("Default option %s cancelled since device is being requeried\n",
opt->option->name);
device_handler_cancel_default(handler);
}
@@ -1223,6 +1229,8 @@ static int device_handler_requery_timeout_fn(void *data)
talloc_free(opt);
}
+ handler->autoboot_enabled = autoboot;
+
discover_server_notify_device_remove(handler->server, device->device);
device->notified = false;
OpenPOWER on IntegriCloud