|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 8/9] libxl_disk: Use ev_qmp in libxl_cdrom_insert
Anthony PERARD writes ("[PATCH 8/9] libxl_disk: Use ev_qmp in
libxl_cdrom_insert"):
> libxl_cdrom_insert is now asynchronous when QEMU is involve. And the
> cdrom is now openned by libxl before sending a file descriptor to QEMU.
This patch has much of the meat. It seems to contain the appropriate
pieces and I generally like it.
I have only minor style quibbles.
I think conventional English grammar in commit messages is to use the
present tense for the situation which exists *before* the commit in
question. I think you mean:
Make libxl_cdrom_insert asynchronous when QEMU is involved. And
have the cdrom opened by libxl, sending a file descriptor to QEMU.
> if (rc) goto out;
> + asynchronous_callback = true;
> + } else {
> + asynchronous_callback = false;
...
> - } else {
> - cdrom_insert_ejected(egc, cis); /* must be last */
> + } else if (!asynchronous_callback) {
> + /* Only called if no asynchronous callback are set. */
> + cdrom_insert_ejected(egc, &cis->qmp, NULL, 0); /* must be last */
This flag variable is pretty ugly. Indeed the exit path from this
function is quite fiddly now. But I can't think of a much prettier
way, and it looks like it is correct to me.
Another possibility would be to move all the variables like t and
d_config into the libxl__cdrom_insert_state, and then the cleanup
would be centralised. But the lock lifetime of the userdata lock
might be wrong.
So, err, I guess, leave it like this unless you have any better ideas.
> - if (cis->dm_ver == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
> - rc = libxl__qmp_insert_cdrom(gc, domid, disk);
> + if (cis->dm_ver == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN &&
> + disk->format != LIBXL_DISK_FORMAT_EMPTY) {
> + libxl__json_object *args = NULL;
> +
That this doesn't ever leak payload_fd is not entirely clear. How
about adding, here
+ assert(qmp->payload_fd == -1);
? Since the rule seems to be that the exit path will clean it up, but
that implies that overwriting it might leak a previous fd (of which
there isn't one right now...)
> + qmp->payload_fd = open(disk->pdev_path, O_RDONLY);
> + if (qmp->payload_fd < 0) {
> + LOGED(ERROR, domid, "Failed to open cdrom file %s",
> + disk->pdev_path);
> + rc = ERROR_FAIL;
> + goto out;
> + }
> +
> + /* This free form parameter is not use by QEMU or libxl. */
> + QMP_PARAMETERS_SPRINTF(&args, "opaque", "%s:%s",
> + libxl_disk_format_to_string(disk->format),
> + disk->pdev_path);
> + qmp->callback = cdrom_insert_addfd_cb;
> + rc = libxl__ev_qmp_send(gc, qmp, "add-fd", args);
Assuming you at least change the commit message, and regardless of
your opinion about the assert:
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Thanks,
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |