dm - synchronize disk info before returning
authorMatthew Dillon <dillon@apollo.backplane.com>
Sun, 18 Mar 2018 19:26:17 +0000 (12:26 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sun, 18 Mar 2018 19:26:17 +0000 (12:26 -0700)
* DM now issues a disk_config(NULL) after setting up the disk info
  in order to wait for the probe to complete, otherwise callers
  may race trying to open() the disk device before it is actually
  ready.

* Fixes cryptsetup luksOpen errors which occur due to probe races,
  typically when used in a VM or qemu.

Reported-by: Aaron LI
sys/dev/disk/dm/device-mapper.c

index 6a15d99..c51ce99 100644 (file)
@@ -584,7 +584,12 @@ dmsetdiskinfo(struct disk *disk, dm_table_head_t *head)
        info.d_secpercyl = info.d_secpertrack * info.d_nheads;
        info.d_ncylinders = dmp_size / info.d_secpercyl;
 
+       /*
+        * The probe is asynchronous so call disk_config() to
+        * wait for it to complete.
+        */
        disk_setdiskinfo(disk, &info);
+       disk_config(NULL);
 }
 
 /*