On 01/25/22 11:45, Richard W.M. Jones wrote:
When using virt-p2v from RHEL 7, it starts a very old qemu-nbd
server
(probably 1.5.3) which required the --shared parameter to enable
sharing even in read-only mode. Since it doesn't pass this parameter
only a single connection at a time is allowed, and further connections
will deadlock. Note that later versions of qemu-nbd changed this so
that read-only connections permit sharing.
In modular virt-v2v we now use nbdkit-nbd-plugin to proxy the
connection to virt-p2v / qemu-nbd. When you connect to this multiple
times, as virt-v2v does, it will make multiple connections to the
backend qemu-nbd. This will cause a deadlock.
We can use the nbdkit-nbd-plugin shared=true flag to enable the plugin
to share a single connection to the backend between multiple nbdkit
clients.
---
input/input_libvirt.ml | 1 +
1 file changed, 1 insertion(+)
diff --git a/input/input_libvirt.ml b/input/input_libvirt.ml
index 33f61086ec..42050c157b 100644
--- a/input/input_libvirt.ml
+++ b/input/input_libvirt.ml
@@ -76,6 +76,7 @@ and libvirt_servers dir disks =
Nbdkit.add_filter cmd "cow";
Nbdkit.add_arg cmd "hostname" hostname;
Nbdkit.add_arg cmd "port" (string_of_int port);
+ Nbdkit.add_arg cmd "shared" "true";
let _, pid = Nbdkit.run_unix ~socket cmd in
(* --exit-with-parent should ensure nbdkit is cleaned
Reviewed-by: Laszlo Ersek <lersek(a)redhat.com>