#include <process/process.h>
#include <url/url.h>
#include <i18n/i18n.h>
+#include <pb-config/pb-config.h>
#include <sys/sysmacros.h>
#include <sys/types.h>
{
struct discover_boot_option *opt, *tmp;
struct ramdisk_device *ramdisk;
+ struct config *config;
unsigned int i;
device_handler_cancel_default(handler);
set_env_variables(config_get());
+ /* If the safe mode warning was active disable it now */
+ if (config_get()->safe_mode) {
+ config = config_copy(handler, config_get());
+ config->safe_mode = false;
+ config_set(config);
+ discover_server_notify_config(handler->server, config);
+ }
+
device_handler_reinit_sources(handler);
}
rc = try_mount(device_path, dev->mount_path, fstype,
MS_RDONLY | MS_SILENT, dev->ramdisk);
+ /* If mount fails clean up any snapshot and try again */
+ if (rc && dev->ramdisk) {
+ pb_log("couldn't mount snapshot for %s: mount failed: %s\n",
+ device_path, strerror(errno));
+ pb_log("falling back to actual device\n");
+
+ devmapper_destroy_snapshot(dev);
+
+ device_path = get_device_path(dev);
+ pb_log("mounting device %s read-only\n", dev->device_path);
+ rc = try_mount(device_path, dev->mount_path, fstype,
+ MS_RDONLY | MS_SILENT, dev->ramdisk);
+ }
+
if (!rc) {
dev->mounted = true;
dev->mounted_rw = false;
pb_log("couldn't mount device %s: mount failed: %s\n",
device_path, strerror(errno));
- /* If mount fails clean up any snapshot */
- devmapper_destroy_snapshot(dev);
-
pb_rmdir_recursive(mount_base(), dev->mount_path);
err_free:
talloc_free(dev->mount_path);