[Libguestfs] [PATCH v2v 1/2] input: libvirt: Share a single connection to the source NBD server

Richard W.M. Jones rjones at redhat.com
Tue Jan 25 10:45:01 UTC 2022


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
-- 
2.32.0




More information about the Libguestfs mailing list