X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=discover%2Fdevmapper.c;h=e2ef0b59c279c294355ec28ff6045f150981495e;hb=b4d338c2ae40f16091a4bb4a0cc4f2e322f4f4b9;hp=b3639320aecba713734d247fe2dc93948d9d5dd3;hpb=754c0737db6b7337f1d3b40e6e52d9c3abec954f;p=petitboot diff --git a/discover/devmapper.c b/discover/devmapper.c index b363932..e2ef0b5 100644 --- a/discover/devmapper.c +++ b/discover/devmapper.c @@ -6,6 +6,7 @@ #include "libdevmapper.h" #include "devmapper.h" +#include "platform.h" #define MERGE_INTERVAL_US 200000 @@ -40,12 +41,21 @@ static unsigned int get_block_sectors(struct discover_device *device) return sectors; } -/* Petitboot's libdm isn't compiled with --enable-udev_sync, so we set - * empty cookie and flags unconditionally */ +/* + * The system's libdm may or may not have udev sync support. Tell libdm + * to manage the creation of device nodes itself rather than waiting on udev + * to do it + */ static inline int set_cookie(struct dm_task *task, uint32_t *cookie) { + uint16_t udev_rules = 0; *cookie = 0; - return dm_task_set_cookie(task, cookie, 0); + + dm_udev_set_sync_support(0); + udev_rules |= DM_UDEV_DISABLE_DM_RULES_FLAG | + DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG; + + return dm_task_set_cookie(task, cookie, udev_rules); } static bool snapshot_merge_complete(const char *dm_name) @@ -311,6 +321,9 @@ int devmapper_init_snapshot(struct device_handler *handler, { struct ramdisk_device *ramdisk; + if (config_get()->disable_snapshots) + return 0; + ramdisk = device_handler_get_ramdisk(handler); if (!ramdisk) { pb_log("No ramdisk available for snapshot %s\n",