]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: Wait udev events are handled before removing lvm vol
authorOsier Yang <jyang@redhat.com>
Wed, 21 Sep 2011 06:02:30 +0000 (14:02 +0800)
committerOsier Yang <jyang@redhat.com>
Wed, 21 Sep 2011 23:53:57 +0000 (07:53 +0800)
Related #BZ: https://bugzilla.redhat.com/show_bug.cgi?id=702260.

There are two problems described in the BZ:
1) "Can't remove open logical volume".
2) "Unable to deactivate logical volume "foo""

This patch just intends to fix 2), as 1) is expected if the vol
is still used by something, and you never known if "lvchange -an"
will fail or not either (sometime, it will succeed, sometimes not).
We'd better not look for trouble, :-)

For 2), that's caused by race between lvremove and udev event handling,
the only workable way now is to wait the events handling are finished,
though it might introduce latencies, as "udevadmin settle" exits
after *all* events are handled, it's the only way we can fix
the racing in libvirt layer.

See https://bugzilla.redhat.com/show_bug.cgi?id=570359 for more
details.

src/storage/storage_backend_logical.c

index 4f42047cb3175b41f8078b6b35ec219584778e53..23d80cbe6d318d792b73e417c53e4707d6a8adf3 100644 (file)
@@ -686,6 +686,8 @@ virStorageBackendLogicalDeleteVol(virConnectPtr conn ATTRIBUTE_UNUSED,
 
     virCheckFlags(0, -1);
 
+    virFileWaitForDevices();
+
     if (virRun(cmdargv, NULL) < 0)
         return -1;