discover/devmapper: Disable libdm udev sync support
authorSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Fri, 14 Aug 2015 05:25:14 +0000 (15:25 +1000)
committerSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Tue, 18 Aug 2015 05:30:50 +0000 (15:30 +1000)
Certain userspace environments that Petitboot is packaged with include
a libdm built with udev sync support which hung with the previous approach.
Relying on udev to properly process dm device creation makes some
assumptions about the flavour of udev available - until that is certain
disable udev sync support and have device-mapper control device creation
itself.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
discover/devmapper.c

index b3639320aecba713734d247fe2dc93948d9d5dd3..1fd1215d91d802d495869930629dbfed37c01b49 100644 (file)
@@ -40,12 +40,21 @@ static unsigned int get_block_sectors(struct discover_device *device)
        return sectors;
 }
 
        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)
 {
 static inline int set_cookie(struct dm_task *task, uint32_t *cookie)
 {
+       uint16_t udev_rules = 0;
        *cookie = 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)
 }
 
 static bool snapshot_merge_complete(const char *dm_name)