From: Anthony PERARD <anthony.perard@citrix.com>
To: xen-devel@lists.xenproject.org
Cc: Anthony PERARD <anthony.perard@citrix.com>,
Wei Liu <wei.liu2@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>
Subject: [PATCH 5/9] libxl_disk: Reorganise libxl_cdrom_insert
Date: Tue, 9 Apr 2019 17:45:38 +0100 [thread overview]
Message-ID: <20190409164542.30274-6-anthony.perard@citrix.com> (raw)
In-Reply-To: <20190409164542.30274-1-anthony.perard@citrix.com>
This is in preparation of cutting libxl_cdrom_insert into several
functions to allow asynchronous callbacks.
No functional changes.
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
tools/libxl/libxl_disk.c | 58 ++++++++++++++++++++++------------------
1 file changed, 32 insertions(+), 26 deletions(-)
diff --git a/tools/libxl/libxl_disk.c b/tools/libxl/libxl_disk.c
index 79e30f8d52..f7a1b75ae1 100644
--- a/tools/libxl/libxl_disk.c
+++ b/tools/libxl/libxl_disk.c
@@ -666,7 +666,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
{
AO_CREATE(ctx, domid, ao_how);
int num = 0, i;
- libxl_device_disk *disks = NULL, disk_saved, disk_empty;
+ libxl_device_disk *disks = NULL, disk_saved;
libxl_domain_config d_config;
int rc, dm_ver;
libxl__device device;
@@ -677,16 +677,9 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
flexarray_t *insert = NULL, *empty = NULL;
libxl_domain_config_init(&d_config);
- libxl_device_disk_init(&disk_empty);
libxl_device_disk_init(&disk_saved);
libxl_device_disk_copy(ctx, &disk_saved, disk);
- disk_empty.format = LIBXL_DISK_FORMAT_EMPTY;
- disk_empty.vdev = libxl__strdup(NOGC, disk->vdev);
- disk_empty.pdev_path = libxl__strdup(NOGC, "");
- disk_empty.is_cdrom = 1;
- libxl__device_disk_setdefault(gc, domid, &disk_empty, false);
-
libxl_domain_type type = libxl__domain_type(gc, domid);
if (type == LIBXL_DOMAIN_TYPE_INVALID) {
rc = ERROR_FAIL;
@@ -740,23 +733,6 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
be_path = libxl__device_backend_path(gc, &device);
libxl_path = libxl__device_libxl_path(gc, &device);
- insert = flexarray_make(gc, 4, 1);
-
- flexarray_append_pair(insert, "type",
- libxl__device_disk_string_of_backend(disk->backend));
- if (disk->format != LIBXL_DISK_FORMAT_EMPTY)
- flexarray_append_pair(insert, "params",
- GCSPRINTF("%s:%s",
- libxl__device_disk_string_of_format(disk->format),
- disk->pdev_path));
- else
- flexarray_append_pair(insert, "params", "");
-
- empty = flexarray_make(gc, 4, 1);
- flexarray_append_pair(empty, "type",
- libxl__device_disk_string_of_backend(disk->backend));
- flexarray_append_pair(empty, "params", "");
-
/* Note: CTX lock is already held at this point so lock hierarchy
* is maintained.
*/
@@ -769,11 +745,27 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
/* We need to eject the original image first. This is implemented
* by inserting empty media. JSON is not updated.
*/
+
if (dm_ver == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
+ libxl_device_disk disk_empty;
+
+ libxl_device_disk_init(&disk_empty);
+ disk_empty.format = LIBXL_DISK_FORMAT_EMPTY;
+ disk_empty.vdev = libxl__strdup(NOGC, disk->vdev);
+ disk_empty.pdev_path = libxl__strdup(NOGC, "");
+ disk_empty.is_cdrom = 1;
+ libxl__device_disk_setdefault(gc, domid, &disk_empty, false);
+
rc = libxl__qmp_insert_cdrom(gc, domid, &disk_empty);
+ libxl_device_disk_dispose(&disk_empty);
if (rc) goto out;
}
+ empty = flexarray_make(gc, 4, 1);
+ flexarray_append_pair(empty, "type",
+ libxl__device_disk_string_of_backend(disk->backend));
+ flexarray_append_pair(empty, "params", "");
+
for (;;) {
rc = libxl__xs_transaction_start(gc, &t);
if (rc) goto out;
@@ -800,6 +792,10 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
if (rc < 0) goto out;
}
+ /*
+ * Now that the drive is empty, we can insert the new media.
+ */
+
rc = libxl__get_domain_configuration(gc, domid, &d_config);
if (rc) goto out;
@@ -813,6 +809,17 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
if (rc) goto out;
}
+ insert = flexarray_make(gc, 4, 1);
+ flexarray_append_pair(insert, "type",
+ libxl__device_disk_string_of_backend(disk->backend));
+ if (disk->format != LIBXL_DISK_FORMAT_EMPTY)
+ flexarray_append_pair(insert, "params",
+ GCSPRINTF("%s:%s",
+ libxl__device_disk_string_of_format(disk->format),
+ disk->pdev_path));
+ else
+ flexarray_append_pair(insert, "params", "");
+
for (;;) {
rc = libxl__xs_transaction_start(gc, &t);
if (rc) goto out;
@@ -850,7 +857,6 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
out:
libxl__xs_transaction_abort(gc, &t);
libxl__device_list_free(&libxl__disk_devtype, disks, num);
- libxl_device_disk_dispose(&disk_empty);
libxl_device_disk_dispose(&disk_saved);
libxl_domain_config_dispose(&d_config);
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
WARNING: multiple messages have this Message-ID (diff)
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
Wei Liu <wei.liu2@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>
Subject: [Xen-devel] [PATCH 5/9] libxl_disk: Reorganise libxl_cdrom_insert
Date: Tue, 9 Apr 2019 17:45:38 +0100 [thread overview]
Message-ID: <20190409164542.30274-6-anthony.perard@citrix.com> (raw)
Message-ID: <20190409164538.TGjD4vg9sNTmGNFwCO1dHpn5ZGEy0lUlXOcTQF3_jmY@z> (raw)
In-Reply-To: <20190409164542.30274-1-anthony.perard@citrix.com>
This is in preparation of cutting libxl_cdrom_insert into several
functions to allow asynchronous callbacks.
No functional changes.
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
tools/libxl/libxl_disk.c | 58 ++++++++++++++++++++++------------------
1 file changed, 32 insertions(+), 26 deletions(-)
diff --git a/tools/libxl/libxl_disk.c b/tools/libxl/libxl_disk.c
index 79e30f8d52..f7a1b75ae1 100644
--- a/tools/libxl/libxl_disk.c
+++ b/tools/libxl/libxl_disk.c
@@ -666,7 +666,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
{
AO_CREATE(ctx, domid, ao_how);
int num = 0, i;
- libxl_device_disk *disks = NULL, disk_saved, disk_empty;
+ libxl_device_disk *disks = NULL, disk_saved;
libxl_domain_config d_config;
int rc, dm_ver;
libxl__device device;
@@ -677,16 +677,9 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
flexarray_t *insert = NULL, *empty = NULL;
libxl_domain_config_init(&d_config);
- libxl_device_disk_init(&disk_empty);
libxl_device_disk_init(&disk_saved);
libxl_device_disk_copy(ctx, &disk_saved, disk);
- disk_empty.format = LIBXL_DISK_FORMAT_EMPTY;
- disk_empty.vdev = libxl__strdup(NOGC, disk->vdev);
- disk_empty.pdev_path = libxl__strdup(NOGC, "");
- disk_empty.is_cdrom = 1;
- libxl__device_disk_setdefault(gc, domid, &disk_empty, false);
-
libxl_domain_type type = libxl__domain_type(gc, domid);
if (type == LIBXL_DOMAIN_TYPE_INVALID) {
rc = ERROR_FAIL;
@@ -740,23 +733,6 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
be_path = libxl__device_backend_path(gc, &device);
libxl_path = libxl__device_libxl_path(gc, &device);
- insert = flexarray_make(gc, 4, 1);
-
- flexarray_append_pair(insert, "type",
- libxl__device_disk_string_of_backend(disk->backend));
- if (disk->format != LIBXL_DISK_FORMAT_EMPTY)
- flexarray_append_pair(insert, "params",
- GCSPRINTF("%s:%s",
- libxl__device_disk_string_of_format(disk->format),
- disk->pdev_path));
- else
- flexarray_append_pair(insert, "params", "");
-
- empty = flexarray_make(gc, 4, 1);
- flexarray_append_pair(empty, "type",
- libxl__device_disk_string_of_backend(disk->backend));
- flexarray_append_pair(empty, "params", "");
-
/* Note: CTX lock is already held at this point so lock hierarchy
* is maintained.
*/
@@ -769,11 +745,27 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
/* We need to eject the original image first. This is implemented
* by inserting empty media. JSON is not updated.
*/
+
if (dm_ver == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
+ libxl_device_disk disk_empty;
+
+ libxl_device_disk_init(&disk_empty);
+ disk_empty.format = LIBXL_DISK_FORMAT_EMPTY;
+ disk_empty.vdev = libxl__strdup(NOGC, disk->vdev);
+ disk_empty.pdev_path = libxl__strdup(NOGC, "");
+ disk_empty.is_cdrom = 1;
+ libxl__device_disk_setdefault(gc, domid, &disk_empty, false);
+
rc = libxl__qmp_insert_cdrom(gc, domid, &disk_empty);
+ libxl_device_disk_dispose(&disk_empty);
if (rc) goto out;
}
+ empty = flexarray_make(gc, 4, 1);
+ flexarray_append_pair(empty, "type",
+ libxl__device_disk_string_of_backend(disk->backend));
+ flexarray_append_pair(empty, "params", "");
+
for (;;) {
rc = libxl__xs_transaction_start(gc, &t);
if (rc) goto out;
@@ -800,6 +792,10 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
if (rc < 0) goto out;
}
+ /*
+ * Now that the drive is empty, we can insert the new media.
+ */
+
rc = libxl__get_domain_configuration(gc, domid, &d_config);
if (rc) goto out;
@@ -813,6 +809,17 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
if (rc) goto out;
}
+ insert = flexarray_make(gc, 4, 1);
+ flexarray_append_pair(insert, "type",
+ libxl__device_disk_string_of_backend(disk->backend));
+ if (disk->format != LIBXL_DISK_FORMAT_EMPTY)
+ flexarray_append_pair(insert, "params",
+ GCSPRINTF("%s:%s",
+ libxl__device_disk_string_of_format(disk->format),
+ disk->pdev_path));
+ else
+ flexarray_append_pair(insert, "params", "");
+
for (;;) {
rc = libxl__xs_transaction_start(gc, &t);
if (rc) goto out;
@@ -850,7 +857,6 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
out:
libxl__xs_transaction_abort(gc, &t);
libxl__device_list_free(&libxl__disk_devtype, disks, num);
- libxl_device_disk_dispose(&disk_empty);
libxl_device_disk_dispose(&disk_saved);
libxl_domain_config_dispose(&d_config);
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2019-04-09 16:45 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-09 16:45 [PATCH 0/9] libxl: New slow lock + fix libxl_cdrom_insert with QEMU depriv Anthony PERARD
2019-04-09 16:45 ` [Xen-devel] " Anthony PERARD
2019-04-09 16:45 ` [PATCH 1/9] libxl_internal: Remove lost comment Anthony PERARD
2019-04-09 16:45 ` [Xen-devel] " Anthony PERARD
2019-04-10 9:18 ` Wei Liu
2019-04-10 9:18 ` [Xen-devel] " Wei Liu
2019-06-04 16:42 ` Ian Jackson
2019-04-09 16:45 ` [PATCH 2/9] libxl: Pointer on usage of libxl__domain_userdata_lock Anthony PERARD
2019-04-09 16:45 ` [Xen-devel] " Anthony PERARD
2019-06-04 16:46 ` Ian Jackson
2019-04-09 16:45 ` [PATCH 3/9] libxl_internal: Split out userdata lock function Anthony PERARD
2019-04-09 16:45 ` [Xen-devel] " Anthony PERARD
2019-06-04 16:55 ` Ian Jackson
2019-04-09 16:45 ` [PATCH 4/9] libxl_internal: Create new lock for devices hotplug via QMP Anthony PERARD
2019-04-09 16:45 ` [Xen-devel] " Anthony PERARD
2019-06-04 17:11 ` Ian Jackson
2019-06-05 14:10 ` Anthony PERARD
2019-06-05 14:32 ` Ian Jackson
2019-04-09 16:45 ` Anthony PERARD [this message]
2019-04-09 16:45 ` [Xen-devel] [PATCH 5/9] libxl_disk: Reorganise libxl_cdrom_insert Anthony PERARD
2019-06-04 17:16 ` Ian Jackson
2019-04-09 16:45 ` [PATCH 6/9] libxl_disk: Cut libxl_cdrom_insert into steps Anthony PERARD
2019-04-09 16:45 ` [Xen-devel] " Anthony PERARD
2019-06-04 17:29 ` Ian Jackson
2019-06-07 17:22 ` Anthony PERARD
2019-04-09 16:45 ` [PATCH 7/9] libxl: Move qmp_parameters_* prototypes to libxl_internal.h Anthony PERARD
2019-04-09 16:45 ` [Xen-devel] " Anthony PERARD
2019-06-04 17:32 ` Ian Jackson
2019-04-09 16:45 ` [PATCH 8/9] libxl_disk: Use ev_qmp in libxl_cdrom_insert Anthony PERARD
2019-04-09 16:45 ` [Xen-devel] " Anthony PERARD
2019-06-04 17:45 ` Ian Jackson
2019-04-09 16:45 ` [PATCH 9/9] libxl_disk: Implement missing timeout for libxl_cdrom_insert Anthony PERARD
2019-04-09 16:45 ` [Xen-devel] " Anthony PERARD
2019-06-04 17:47 ` Ian Jackson
2019-06-05 14:22 ` Anthony PERARD
2019-06-05 14:33 ` Ian Jackson
2019-06-04 10:54 ` [Xen-devel] Ping: [PATCH 0/9] libxl: New slow lock + fix libxl_cdrom_insert with QEMU depriv Anthony PERARD
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190409164542.30274-6-anthony.perard@citrix.com \
--to=anthony.perard@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.