[pve-devel] [PATCH] qmp_snapshot_drive: add aiocontext

Alexandre Derumier aderumier at odiso.com
Tue Sep 13 04:22:33 CEST 2016


Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
 savevm-async.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/savevm-async.c b/savevm-async.c
index 6a2266c..308ac61 100644
--- a/savevm-async.c
+++ b/savevm-async.c
@@ -345,6 +345,7 @@ void qmp_snapshot_drive(const char *device, const char *name, Error **errp)
     BlockBackend *blk;
     BlockDriverState *bs;
     QEMUSnapshotInfo sn1, *sn = &sn1;
+    AioContext *aio_context;
     int ret;
 #ifdef _WIN32
     struct _timeb tb;
@@ -371,20 +372,23 @@ void qmp_snapshot_drive(const char *device, const char *name, Error **errp)
         return;
     }
 
+    aio_context = bdrv_get_aio_context(bs);
+    aio_context_acquire(aio_context);
+
     if (bdrv_is_read_only(bs)) {
         error_setg(errp, "Node '%s' is read only", device);
-        return;
+        goto out;
     }
 
     if (!bdrv_can_snapshot(bs)) {
         error_setg(errp, QERR_UNSUPPORTED);
-        return;
+        goto out;
     }
 
     if (bdrv_snapshot_find(bs, sn, name) >= 0) {
         error_set(errp, ERROR_CLASS_GENERIC_ERROR,
                   "snapshot '%s' already exists", name);
-        return;
+        goto out;
     }
 
     sn = &sn1;
@@ -409,8 +413,11 @@ void qmp_snapshot_drive(const char *device, const char *name, Error **errp)
     if (ret < 0) {
         error_set(errp, ERROR_CLASS_GENERIC_ERROR,
                   "Error while creating snapshot on '%s'\n", device);
-        return;
+        goto out;
     }
+
+out:
+    aio_context_release(aio_context);
 }
 
 void qmp_delete_drive_snapshot(const char *device, const char *name,
-- 
2.1.4



More information about the pve-devel mailing list