[PATCH] discover/device-handler: Restore autoboot setting on requery

Samuel Mendoza-Jonas sam at mendozajonas.com
Tue Aug 28 17:02:54 AEST 2018


On Mon, 2018-08-27 at 11:50 +1000, Samuel Mendoza-Jonas wrote:
> 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 at mendozajonas.com>
> ---
>  discover/device-handler.c | 8 ++++++++
>  1 file changed, 8 insertions(+)

Merged as 3917e88b

> 
> diff --git a/discover/device-handler.c b/discover/device-handler.c
> index cf379e78..34437d66 100644
> --- a/discover/device-handler.c
> +++ b/discover/device-handler.c
> @@ -1278,6 +1278,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;
> @@ -1300,6 +1301,11 @@ 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",
> @@ -1310,6 +1316,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;
>  




More information about the Petitboot mailing list