From e288080ae02d357412755d998bd542d4cb60c8b2 Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Thu, 24 May 2018 11:10:57 -0400 Subject: [PATCH] disk: Allow settling to occur after reading partitions https://bugzilla.redhat.com/show_bug.cgi?id=1400475 In order to avoid a possible error as a result of kernel interactions with the partition helper, let's use virWaitForDevices to force things to settle down before attempting to open and read the partition. This is related to https://bugzilla.redhat.com/show_bug.cgi?id=1264719. Although perhaps overkill to have too many places to settle, since we know that the act of reading the partitions via libvirt_parthelper will cause udev activity/events - we just need to ensure udev has been settled before proceding with usage of the device. Signed-off-by: John Ferlan ACKed-by: Michal Privoznik --- src/storage/storage_backend_disk.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/storage/storage_backend_disk.c b/src/storage/storage_backend_disk.c index 7b4549c34d..2e3d1e04a4 100644 --- a/src/storage/storage_backend_disk.c +++ b/src/storage/storage_backend_disk.c @@ -183,7 +183,16 @@ virStorageBackendDiskMakeDataVol(virStoragePoolObjPtr pool, * after an extended partition is created an open on the extended * partition will fail, so pass the NOERROR flag and only error if a * -1 was returned indicating some other error than an open error. + * + * NB: A small window exists in some cases where the just created + * partition disappears, but then reappears. Since we were given + * vol->target.path from parthelper, let's just be sure that any + * kernel magic that occurs as a result of parthelper doesn't cause + * us to fail with some sort of ENOENT failure since that would be + * quite "unexpected". So rather than just fail, let's use the + * virWaitForDevices to ensure everything has settled properly. */ + virWaitForDevices(); if (vol->source.partType == VIR_STORAGE_VOL_DISK_TYPE_EXTENDED) { if (virStorageBackendUpdateVolInfo(vol, false, VIR_STORAGE_VOL_OPEN_DEFAULT | -- GitLab