[Libguestfs] [PATCH] v2v: add support for virtio-scsi
Roman Kagan
rkagan at virtuozzo.com
Wed Apr 13 13:18:16 UTC 2016
On Wed, Apr 13, 2016 at 10:11:54AM +0100, Richard W.M. Jones wrote:
> On Tue, Apr 12, 2016 at 06:46:31PM +0300, Roman Kagan wrote:
> > (match guestcaps.gcaps_block_bus with
> > - | Virtio_blk -> "VirtIO" | IDE -> "IDE");
> > + | Virtio_blk -> "VirtIO"
> > + | Virtio_SCSI -> "SCSI"
>
> I believe this should be "VirtIO_SCSI", although it's difficult to get
> a straight answer from the massive and convoluted Java sources of
> ovirt-engine ...
>
> > @@ -1148,14 +1149,15 @@ let rec convert ~keep_serial_console (g : G.guestfs) inspect source rcaps =
> > List.iter (fun path -> ignore (g#aug_rm path))
> > (List.rev paths_to_delete);
> >
> > - g#aug_set (path ^ "/modulename") "virtio_blk"
> > + g#aug_set (path ^ "/modulename")
> > + (string_of_block_type block_type)
>
> Here ...
>
> > ) else (
> > (* We have to add a scsi_hostadapter. *)
> > let modpath = discover_modpath () in
> > g#aug_set (sprintf "/files%s/alias[last()+1]" modpath)
> > "scsi_hostadapter";
> > g#aug_set (sprintf "/files%s/alias[last()]/modulename" modpath)
> > - "virtio_blk"
> > + (string_of_block_type block_type)
> > )
>
> ... and here don't seem right.
>
> Firstly, string_of_block_type returns "virtio-blk" (not "virtio_blk").
> Maybe for this configuration file it doesn't matter.
>
> But, the real problem is that string_of_block_type is essentially an
> internal debugging function.
>
> What we should really have is a new function (eg.
> "linux_module_of_block_type") which converts the block type to a Linux
> module name.
>
> > + (* Presence of virtio-scsi controller. *)
> > + let has_virtio_scsi =
> > + let obj = Xml.xpath_eval_expression xpathctx
> > + "/domain/devices/controller[@model='virtio-scsi']" in
>
> I guess this short cut is OK. A true test would involve checking the
> <target bus="scsi"> on each disk and matching it back to the
> controller. In other words, a huge pain! Maybe you can add an "XXX"
> comment in the source about this.
>
> > + (Xml.xpathobj_nr_nodes obj) > 0 in
> ^ ^
> You don't need these parentheses. In functional languages, function
> application always binds tightest of all, eg:
>
> f x + 1
>
> is the same as:
>
> (f x) + 1
>
> > diff --git a/v2v/output_glance.ml b/v2v/output_glance.ml
> > index 9487f0b..2572de6 100644
> > --- a/v2v/output_glance.ml
> > +++ b/v2v/output_glance.ml
> > @@ -86,6 +86,7 @@ object
> > "hw_disk_bus",
> > (match guestcaps.gcaps_block_bus with
> > | Virtio_blk -> "virtio"
> > + | Virtio_SCSI -> "scsi"
> > | IDE -> "ide");
> > "hw_vif_model",
> > (match guestcaps.gcaps_net_bus with
>
> This is wrong, or at least, incomplete.
>
> Apparently you need:
>
> hw_disk_bus=scsi (as above)
> hw_scsi_model=virtio-scsi (additional property)
>
> See:
> http://www.sebastien-han.fr/blog/2015/02/02/openstack-and-ceph-rbd-discard/
>
> > if not (copy_drivers g inspect driverdir) then (
> > match rcaps with
> > - | { rcaps_block_bus = Some Virtio_blk }
> > + | { rcaps_block_bus = (Some Virtio_blk | Some Virtio_SCSI) }
>
> I don't think you need parens there.
Thanks a lot for the review, I'll fix the comments and respin.
Roman.
More information about the Libguestfs
mailing list