qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH] qobject: Rewrite implementation of QDict for in-order tr


From: Mark Cave-Ayland
Subject: Re: [RFC PATCH] qobject: Rewrite implementation of QDict for in-order traversal
Date: Wed, 6 Jul 2022 12:49:40 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0

On 06/07/2022 12:35, Markus Armbruster wrote:

Markus Armbruster <armbru@redhat.com> writes:

QDict is implemented as a simple hash table of fixed size.  Observe:

* Slow for large n.  Not sure this matters.

* A QDict with n entries takes 4120 + n * 32 bytes on my box.  Wastes
   space for small n, which is a common case.

* Order of traversal depends on the hash function and on insertion
   order, because it iterates first over buckets, then collision
   chains.

* Special code ensures qdict_size() takes constant time.

Replace the hash table by a linked list.  Observe:

* Even slower for large n.  Might be bad enough to matter.

* A QDict with n entries takes 32 + n * 24 bytes.

* Traversal is in insertion order.

* qdict_size() is linear in the number of entries.

This is an experiment.  Do not commit to master as is.

Forgot to mention: see also

         Subject: Re: [PULL 14/15] qdev: Base object creation on QDict rather 
than QemuOpts
         Message-ID: <87wnctzdl9.fsf@pond.sub.org>
         https://lists.nongnu.org/archive/html/qemu-devel/2022-07/msg00358.html

It looks like the reporter also reported the issue on gitlab so you could also 
add:

Fixes: #1090

as well as posting a link to the proposed patch to get some more feedback.

The change of traversal order affects expected test output.  I updated
only the tests covered by "make check" so far.  I expect some more to
hide under tests/qemu-iotests/.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
  include/qapi/qmp/qdict.h              |  15 +-
  qobject/qdict.c                       | 104 +--
  tests/unit/check-qdict.c              |   2 +-
  tests/unit/check-qobject.c            |   2 +-
  tests/qemu-iotests/043.out            |  22 +-
  tests/qemu-iotests/060.out            |  16 +-
  tests/qemu-iotests/061.out            |  52 +-
  tests/qemu-iotests/071.out            |   4 +-
  tests/qemu-iotests/099.out            |   4 +-
  tests/qemu-iotests/108.out            |  14 +-
  tests/qemu-iotests/117.out            |   2 +-
  tests/qemu-iotests/120.out            |   2 +-
  tests/qemu-iotests/127.out            |  20 +-
  tests/qemu-iotests/140.out            |   4 +-
  tests/qemu-iotests/141.out            |  76 +--
  tests/qemu-iotests/143.out            |   2 +-
  tests/qemu-iotests/156.out            |  20 +-
  tests/qemu-iotests/161.out            |  28 +-
  tests/qemu-iotests/176.out            |  16 +-
  tests/qemu-iotests/184.out            | 170 ++---
  tests/qemu-iotests/186.out            |  82 +--
  tests/qemu-iotests/190.out            |   4 +-
  tests/qemu-iotests/191.out            | 868 +++++++++++++-------------
  tests/qemu-iotests/195.out            |   4 +-
  tests/qemu-iotests/229.out            |  14 +-
  tests/qemu-iotests/244.out            |  12 +-
  tests/qemu-iotests/249.out            |  18 +-
  tests/qemu-iotests/tests/qsd-jobs.out |   8 +-
  28 files changed, 776 insertions(+), 809 deletions(-)

diff --git a/include/qapi/qmp/qdict.h b/include/qapi/qmp/qdict.h
index 82e90fc072..cf5c602286 100644
--- a/include/qapi/qmp/qdict.h
+++ b/include/qapi/qmp/qdict.h
@@ -16,8 +16,7 @@
  #include "qapi/qmp/qobject.h"
  #include "qemu/queue.h"
-#define QDICT_BUCKET_MAX 512
-
+#if 0
  typedef struct QDictEntry {
      char *key;
      QObject *value;
@@ -29,6 +28,18 @@ struct QDict {
      size_t size;
      QLIST_HEAD(,QDictEntry) table[QDICT_BUCKET_MAX];
  };
+#else
+typedef struct QDictEntry {
+    char *key;
+    QObject *value;
+    QSIMPLEQ_ENTRY(QDictEntry) next;
+} QDictEntry;
+
+struct QDict {
+    struct QObjectBase_ base;
+    QSIMPLEQ_HEAD(, QDictEntry) entries;
+};
+#endif
void qdict_unref(QDict *q); diff --git a/qobject/qdict.c b/qobject/qdict.c
index 8faff230d3..444608cbc4 100644
--- a/qobject/qdict.c
+++ b/qobject/qdict.c
@@ -29,27 +29,11 @@ QDict *qdict_new(void)
qdict = g_malloc0(sizeof(*qdict));
      qobject_init(QOBJECT(qdict), QTYPE_QDICT);
+    QSIMPLEQ_INIT(&qdict->entries);
return qdict;
  }
-/**
- * tdb_hash(): based on the hash algorithm from gdbm, via tdb
- * (from module-init-tools)
- */
-static unsigned int tdb_hash(const char *name)
-{
-    unsigned value;    /* Used to compute the hash value.  */
-    unsigned   i;      /* Used to cycle through random values. */
-
-    /* Set the initial value from the key size. */
-    for (value = 0x238F13AF * strlen(name), i = 0; name[i]; i++) {
-        value = (value + (((const unsigned char *)name)[i] << (i * 5 % 24)));
-    }
-
-    return (1103515243 * value + 12345);
-}
-
  /**
   * alloc_entry(): allocate a new QDictEntry
   */
@@ -88,15 +72,14 @@ const char *qdict_entry_key(const QDictEntry *entry)
  /**
   * qdict_find(): List lookup function
   */
-static QDictEntry *qdict_find(const QDict *qdict,
-                              const char *key, unsigned int bucket)
+static QDictEntry *qdict_find(const QDict *qdict, const char *key)
  {
      QDictEntry *entry;
- QLIST_FOREACH(entry, &qdict->table[bucket], next)
-        if (!strcmp(entry->key, key)) {
+    QSIMPLEQ_FOREACH(entry, &qdict->entries, next) {
+        if (!strcmp(key, entry->key))
              return entry;
-        }
+    }
return NULL;
  }
@@ -114,11 +97,8 @@ static QDictEntry *qdict_find(const QDict *qdict,
   */
  void qdict_put_obj(QDict *qdict, const char *key, QObject *value)
  {
-    unsigned int bucket;
-    QDictEntry *entry;
+    QDictEntry *entry = qdict_find(qdict, key);
- bucket = tdb_hash(key) % QDICT_BUCKET_MAX;
-    entry = qdict_find(qdict, key, bucket);
      if (entry) {
          /* replace key's value */
          qobject_unref(entry->value);
@@ -126,8 +106,7 @@ void qdict_put_obj(QDict *qdict, const char *key, QObject 
*value)
      } else {
          /* allocate a new entry */
          entry = alloc_entry(key, value);
-        QLIST_INSERT_HEAD(&qdict->table[bucket], entry, next);
-        qdict->size++;
+        QSIMPLEQ_INSERT_TAIL(&qdict->entries, entry, next);
      }
  }
@@ -161,8 +140,8 @@ QObject *qdict_get(const QDict *qdict, const char *key)
  {
      QDictEntry *entry;
- entry = qdict_find(qdict, key, tdb_hash(key) % QDICT_BUCKET_MAX);
-    return (entry == NULL ? NULL : entry->value);
+    entry = qdict_find(qdict, key);
+    return entry ? entry->value : NULL;
  }
/**
@@ -172,8 +151,7 @@ QObject *qdict_get(const QDict *qdict, const char *key)
   */
  int qdict_haskey(const QDict *qdict, const char *key)
  {
-    unsigned int bucket = tdb_hash(key) % QDICT_BUCKET_MAX;
-    return (qdict_find(qdict, key, bucket) == NULL ? 0 : 1);
+    return qdict_find(qdict, key) != NULL;
  }
/**
@@ -181,7 +159,14 @@ int qdict_haskey(const QDict *qdict, const char *key)
   */
  size_t qdict_size(const QDict *qdict)
  {
-    return qdict->size;
+    QDictEntry *entry;
+    size_t sz = 0;
+
+    QSIMPLEQ_FOREACH(entry, &qdict->entries, next) {
+        sz++;
+    }
+
+    return sz;
  }
/**
@@ -301,25 +286,13 @@ const char *qdict_get_try_str(const QDict *qdict, const 
char *key)
      return qstr ? qstring_get_str(qstr) : NULL;
  }
-static QDictEntry *qdict_next_entry(const QDict *qdict, int first_bucket)
-{
-    int i;
-
-    for (i = first_bucket; i < QDICT_BUCKET_MAX; i++) {
-        if (!QLIST_EMPTY(&qdict->table[i])) {
-            return QLIST_FIRST(&qdict->table[i]);
-        }
-    }
-
-    return NULL;
-}
-
  /**
   * qdict_first(): Return first qdict entry for iteration.
   */
  const QDictEntry *qdict_first(const QDict *qdict)
  {
-    return qdict_next_entry(qdict, 0);
+    return QSIMPLEQ_FIRST(&qdict->entries);
+
  }
/**
@@ -327,15 +300,7 @@ const QDictEntry *qdict_first(const QDict *qdict)
   */
  const QDictEntry *qdict_next(const QDict *qdict, const QDictEntry *entry)
  {
-    QDictEntry *ret;
-
-    ret = QLIST_NEXT(entry, next);
-    if (!ret) {
-        unsigned int bucket = tdb_hash(entry->key) % QDICT_BUCKET_MAX;
-        ret = qdict_next_entry(qdict, bucket + 1);
-    }
-
-    return ret;
+    return QSIMPLEQ_NEXT(entry, next);
  }
/**
@@ -346,14 +311,11 @@ QDict *qdict_clone_shallow(const QDict *src)
  {
      QDict *dest;
      QDictEntry *entry;
-    int i;
dest = qdict_new(); - for (i = 0; i < QDICT_BUCKET_MAX; i++) {
-        QLIST_FOREACH(entry, &src->table[i], next) {
-            qdict_put_obj(dest, entry->key, qobject_ref(entry->value));
-        }
+    QSIMPLEQ_FOREACH(entry, &src->entries, next) {
+        qdict_put_obj(dest, entry->key, qobject_ref(entry->value));
      }
return dest;
@@ -380,13 +342,11 @@ static void qentry_destroy(QDictEntry *e)
   */
  void qdict_del(QDict *qdict, const char *key)
  {
-    QDictEntry *entry;
+    QDictEntry *entry = qdict_find(qdict, key);
- entry = qdict_find(qdict, key, tdb_hash(key) % QDICT_BUCKET_MAX);
      if (entry) {
-        QLIST_REMOVE(entry, next);
+        QSIMPLEQ_REMOVE(&qdict->entries, entry, QDictEntry, next);
          qentry_destroy(entry);
-        qdict->size--;
      }
  }
@@ -424,20 +384,16 @@ bool qdict_is_equal(const QObject *x, const QObject *y)
   */
  void qdict_destroy_obj(QObject *obj)
  {
-    int i;
      QDict *qdict;
assert(obj != NULL);
      qdict = qobject_to(QDict, obj);
- for (i = 0; i < QDICT_BUCKET_MAX; i++) {
-        QDictEntry *entry = QLIST_FIRST(&qdict->table[i]);
-        while (entry) {
-            QDictEntry *tmp = QLIST_NEXT(entry, next);
-            QLIST_REMOVE(entry, next);
-            qentry_destroy(entry);
-            entry = tmp;
-        }
+    while (!QSIMPLEQ_EMPTY(&qdict->entries)) {
+        QDictEntry *entry = QSIMPLEQ_FIRST(&qdict->entries);
+
+        QSIMPLEQ_REMOVE_HEAD(&qdict->entries, next);
+        qentry_destroy(entry);
      }
g_free(qdict);
diff --git a/tests/unit/check-qdict.c b/tests/unit/check-qdict.c
index b5efa859b0..d7d3df5efb 100644
--- a/tests/unit/check-qdict.c
+++ b/tests/unit/check-qdict.c
@@ -47,7 +47,7 @@ static void qdict_put_obj_test(void)
      qdict_put_int(qdict, "", num);
g_assert(qdict_size(qdict) == 1);
-    ent = QLIST_FIRST(&qdict->table[12345 % QDICT_BUCKET_MAX]);
+    ent = QSIMPLEQ_FIRST(&qdict->entries);
      qn = qobject_to(QNum, ent->value);
      g_assert_cmpint(qnum_get_int(qn), ==, num);
diff --git a/tests/unit/check-qobject.c b/tests/unit/check-qobject.c
index 022b7c74fe..0416762f80 100644
--- a/tests/unit/check-qobject.c
+++ b/tests/unit/check-qobject.c
@@ -192,10 +192,10 @@ static void qobject_is_equal_dict_test(void)
      qdict_put_int(dict_0, "baz", 3);
      qdict_put_null(dict_0, "null");
- qdict_put_int(dict_1, "f.o", 1);
      qdict_put_int(dict_1, "bar", 2);
      qdict_put_int(dict_1, "baz", 3);
      qdict_put_null(dict_1, "null");
+    qdict_put_int(dict_1, "f.o", 1);
qdict_put_int(dict_different_key, "F.o", 1);
      qdict_put_int(dict_different_key, "bar", 2);
diff --git a/tests/qemu-iotests/043.out b/tests/qemu-iotests/043.out
index 63ecb21816..d8fcff24e9 100644
--- a/tests/qemu-iotests/043.out
+++ b/tests/qemu-iotests/043.out
@@ -40,29 +40,29 @@ cluster_size: 65536
  == finite chain of length 3 (json) ==
  [
      {
-        "virtual-size": 134217728,
          "filename": "TEST_DIR/t.IMGFMT",
-        "cluster-size": 65536,
          "format": "IMGFMT",
-        "full-backing-filename": "TEST_DIR/t.IMGFMT.2.base",
+        "dirty-flag": false,
+        "virtual-size": 134217728,
+        "cluster-size": 65536,
          "backing-filename": "TEST_DIR/t.IMGFMT.2.base",
-        "dirty-flag": false
+        "full-backing-filename": "TEST_DIR/t.IMGFMT.2.base",
      },
      {
-        "virtual-size": 134217728,
          "filename": "TEST_DIR/t.IMGFMT.2.base",
-        "cluster-size": 65536,
          "format": "IMGFMT",
-        "full-backing-filename": "TEST_DIR/t.IMGFMT.1.base",
+        "dirty-flag": false,
+        "virtual-size": 134217728,
+        "cluster-size": 65536,
          "backing-filename": "TEST_DIR/t.IMGFMT.1.base",
-        "dirty-flag": false
+        "full-backing-filename": "TEST_DIR/t.IMGFMT.1.base",
      },
      {
-        "virtual-size": 134217728,
          "filename": "TEST_DIR/t.IMGFMT.1.base",
-        "cluster-size": 65536,
          "format": "IMGFMT",
-        "dirty-flag": false
+        "dirty-flag": false,
+        "virtual-size": 134217728,
+        "cluster-size": 65536,
      }
  ]
  *** done
diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out
index 329977d9b9..f654a6579c 100644
--- a/tests/qemu-iotests/060.out
+++ b/tests/qemu-iotests/060.out
@@ -17,11 +17,11 @@ virtual size: 64 MiB (67108864 bytes)
  cluster_size: 65536
  Format specific information:
      compat: 1.1
-    compression type: COMPRESSION_TYPE
-    lazy refcounts: false
-    refcount bits: 16
-    corrupt: true
      extended l2: false
+    lazy refcounts: false
+    corrupt: true
+    refcount bits: 16
+    compression type: COMPRESSION_TYPE
  qemu-io: can't open device TEST_DIR/t.IMGFMT: IMGFMT: Image is corrupt; 
cannot be opened read/write
  no file open, try 'help open'
  read 512/512 bytes at offset 0
@@ -418,11 +418,11 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
  qcow2: Marking image as corrupt: Preventing invalid write on metadata 
(overlaps with refcount table); further corruption events will be suppressed
  QMP_VERSION
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_IMAGE_CORRUPTED", "data": {"device": "none0", "msg": 
"Preventing invalid write on metadata (overlaps with refcount table)", "offset": 65536, "node-name": "drive", "fatal": true, "size": 65536}}
+{"event": "BLOCK_IMAGE_CORRUPTED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"device": "none0", 
"node-name": "drive", "msg": "Preventing invalid write on metadata (overlaps with refcount table)", "offset": 65536, "size": 65536, "fatal": true}}
  write failed: Input/output error
  {"return": ""}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
=== Testing incoming inactive corrupted image === @@ -430,10 +430,10 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
  QMP_VERSION
  {"return": {}}
  qcow2: Image is corrupt: L2 table offset 0x2a2a2a00 unaligned (L1 index: 0); 
further non-fatal corruption events will be suppressed
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_IMAGE_CORRUPTED", "data": {"device": "", 
"msg": "L2 table offset 0x2a2a2a00 unaligned (L1 index: 0)", "node-name": "drive", "fatal": false}}
+{"event": "BLOCK_IMAGE_CORRUPTED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"device": "", 
"node-name": "drive", "msg": "L2 table offset 0x2a2a2a00 unaligned (L1 index: 0)", "fatal": false}}
  {"return": ""}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
corrupt: false
  *** done
diff --git a/tests/qemu-iotests/061.out b/tests/qemu-iotests/061.out
index 139fc68177..6a05d67378 100644
--- a/tests/qemu-iotests/061.out
+++ b/tests/qemu-iotests/061.out
@@ -497,7 +497,7 @@ wrote 65536/65536 bytes at offset 2147483648
  64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
  wrote 65536/65536 bytes at offset 3221225472
  64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-    (0.00/100%)
     (12.50/100%)
     (25.00/100%)
     (37.50/100%)
     (50.00/100%)
     (62.50/100%)
     (75.00/100%)
     (87.50/100%)
     (100.00/100%)
     (100.00/100%)
+    (0.00/100%)
     (12.50/100%)
     (25.00/100%)
     (37.50/100%)
     (50.00/100%)
     (62.50/100%)
     (75.00/100%)
     (87.50/100%)
     (100.00/100%)
     (100.00/100%)
  No errors were found on the image.
=== Testing progress report with snapshot ===
@@ -512,7 +512,7 @@ wrote 65536/65536 bytes at offset 2147483648
  64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
  wrote 65536/65536 bytes at offset 3221225472
  64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-    (0.00/100%)
     (6.25/100%)
     (12.50/100%)
     (18.75/100%)
     (25.00/100%)
     (31.25/100%)
     (37.50/100%)
     (43.75/100%)
     (50.00/100%)
     (56.25/100%)
     (62.50/100%)
     (68.75/100%)
     (75.00/100%)
     (81.25/100%)
     (87.50/100%)
     (93.75/100%)
     (100.00/100%)
     (100.00/100%)
+    (0.00/100%)
     (6.25/100%)
     (12.50/100%)
     (18.75/100%)
     (25.00/100%)
     (31.25/100%)
     (37.50/100%)
     (43.75/100%)
     (50.00/100%)
     (56.25/100%)
     (62.50/100%)
     (68.75/100%)
     (75.00/100%)
     (81.25/100%)
     (87.50/100%)
     (93.75/100%)
     (100.00/100%)
     (100.00/100%)
  No errors were found on the image.
=== Testing version downgrade with external data file ===
@@ -525,13 +525,13 @@ virtual size: 64 MiB (67108864 bytes)
  cluster_size: 65536
  Format specific information:
      compat: 1.1
-    compression type: COMPRESSION_TYPE
-    lazy refcounts: false
-    refcount bits: 16
      data file: TEST_DIR/t.IMGFMT.data
      data file raw: false
-    corrupt: false
      extended l2: false
+    lazy refcounts: false
+    corrupt: false
+    refcount bits: 16
+    compression type: COMPRESSION_TYPE
  No errors were found on the image.
=== Testing version downgrade with extended L2 entries ===
@@ -552,13 +552,13 @@ virtual size: 64 MiB (67108864 bytes)
  cluster_size: 65536
  Format specific information:
      compat: 1.1
-    compression type: COMPRESSION_TYPE
-    lazy refcounts: false
-    refcount bits: 16
      data file: foo
      data file raw: false
-    corrupt: false
      extended l2: false
+    lazy refcounts: false
+    corrupt: false
+    refcount bits: 16
+    compression type: COMPRESSION_TYPE
qemu-img: Could not open 'TEST_DIR/t.IMGFMT': 'data-file' is required for this image
  image: TEST_DIR/t.IMGFMT
@@ -567,12 +567,12 @@ virtual size: 64 MiB (67108864 bytes)
  cluster_size: 65536
  Format specific information:
      compat: 1.1
-    compression type: COMPRESSION_TYPE
-    lazy refcounts: false
-    refcount bits: 16
      data file raw: false
-    corrupt: false
      extended l2: false
+    lazy refcounts: false
+    corrupt: false
+    refcount bits: 16
+    compression type: COMPRESSION_TYPE
=== Clearing and setting data-file-raw === @@ -583,13 +583,13 @@ virtual size: 64 MiB (67108864 bytes)
  cluster_size: 65536
  Format specific information:
      compat: 1.1
-    compression type: COMPRESSION_TYPE
-    lazy refcounts: false
-    refcount bits: 16
      data file: TEST_DIR/t.IMGFMT.data
      data file raw: true
-    corrupt: false
      extended l2: false
+    lazy refcounts: false
+    corrupt: false
+    refcount bits: 16
+    compression type: COMPRESSION_TYPE
  No errors were found on the image.
  image: TEST_DIR/t.IMGFMT
  file format: IMGFMT
@@ -597,13 +597,13 @@ virtual size: 64 MiB (67108864 bytes)
  cluster_size: 65536
  Format specific information:
      compat: 1.1
-    compression type: COMPRESSION_TYPE
-    lazy refcounts: false
-    refcount bits: 16
      data file: TEST_DIR/t.IMGFMT.data
      data file raw: false
-    corrupt: false
      extended l2: false
+    lazy refcounts: false
+    corrupt: false
+    refcount bits: 16
+    compression type: COMPRESSION_TYPE
  No errors were found on the image.
  qemu-img: data-file-raw cannot be set on existing images
  image: TEST_DIR/t.IMGFMT
@@ -612,12 +612,12 @@ virtual size: 64 MiB (67108864 bytes)
  cluster_size: 65536
  Format specific information:
      compat: 1.1
-    compression type: COMPRESSION_TYPE
-    lazy refcounts: false
-    refcount bits: 16
      data file: TEST_DIR/t.IMGFMT.data
      data file raw: false
-    corrupt: false
      extended l2: false
+    lazy refcounts: false
+    corrupt: false
+    refcount bits: 16
+    compression type: COMPRESSION_TYPE
  No errors were found on the image.
  *** done
diff --git a/tests/qemu-iotests/071.out b/tests/qemu-iotests/071.out
index bca0c02f5c..ff00da1ad1 100644
--- a/tests/qemu-iotests/071.out
+++ b/tests/qemu-iotests/071.out
@@ -46,7 +46,7 @@ QMP_VERSION
  read failed: Input/output error
  {"return": ""}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
=== Testing blkverify on existing block device ===
@@ -85,7 +85,7 @@ wrote 512/512 bytes at offset 0
  read failed: Input/output error
  {"return": ""}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  QEMU_PROG: Failed to flush the L2 table cache: Input/output error
  QEMU_PROG: Failed to flush the refcount block cache: Input/output error
diff --git a/tests/qemu-iotests/099.out b/tests/qemu-iotests/099.out
index 8cce627529..5726466bc6 100644
--- a/tests/qemu-iotests/099.out
+++ b/tests/qemu-iotests/099.out
@@ -12,11 +12,11 @@ blkverify:TEST_DIR/t.IMGFMT.compare:TEST_DIR/t.IMGFMT
=== Testing JSON filename for blkdebug === -json:{"driver": "IMGFMT", "file": {"image": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "driver": "blkdebug", "inject-error.0.event": "l1_update"}}
+json:{"driver": "IMGFMT", "file": {"driver": "blkdebug", "inject-error.0.event": "l1_update", "image": 
{"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}}}
=== Testing indirectly enforced JSON filename === -json:{"driver": "raw", "file": {"test": {"driver": "IMGFMT", "file": {"image": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "driver": "blkdebug", "inject-error.0.event": "l1_update"}}, "driver": "blkverify", "raw": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT.compare"}}}
+json:{"driver": "raw", "file": {"driver": "blkverify", "test": {"driver": "IMGFMT", "file": {"driver": "blkdebug", "inject-error.0.event": "l1_update", "image": 
{"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}}}, "raw": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT.compare"}}}
=== Testing plain filename for blkdebug === diff --git a/tests/qemu-iotests/108.out b/tests/qemu-iotests/108.out
index b5401d788d..faaabbcdf3 100644
--- a/tests/qemu-iotests/108.out
+++ b/tests/qemu-iotests/108.out
@@ -163,18 +163,18 @@ OK: Reftable is where we expect it
                 "size": 67108864,
                 "cluster-size": 512
             } } }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "create"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "create"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "running"}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "waiting", "id": "create"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "pending", "id": "create"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "create"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "waiting"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "pending"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "concluded"}}
  { "execute": "job-dismiss", "arguments": { "id": "create" } }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "create"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "null"}}
  {"return": {}}
  { "execute": "quit" }
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
wrote 65536/65536 bytes at offset 0
  64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
diff --git a/tests/qemu-iotests/117.out b/tests/qemu-iotests/117.out
index 735ffd25c6..015c971197 100644
--- a/tests/qemu-iotests/117.out
+++ b/tests/qemu-iotests/117.out
@@ -19,7 +19,7 @@ wrote 65536/65536 bytes at offset 0
  {"return": ""}
  { 'execute': 'quit' }
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  No errors were found on the image.
  read 65536/65536 bytes at offset 0
  64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
diff --git a/tests/qemu-iotests/120.out b/tests/qemu-iotests/120.out
index 0744c1f136..d677c72599 100644
--- a/tests/qemu-iotests/120.out
+++ b/tests/qemu-iotests/120.out
@@ -6,7 +6,7 @@ wrote 65536/65536 bytes at offset 0
  64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
  {"return": ""}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  read 65536/65536 bytes at offset 0
  64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
  read 65536/65536 bytes at offset 0
diff --git a/tests/qemu-iotests/127.out b/tests/qemu-iotests/127.out
index 1685c4850a..863832d162 100644
--- a/tests/qemu-iotests/127.out
+++ b/tests/qemu-iotests/127.out
@@ -14,20 +14,20 @@ wrote 42/42 bytes at offset 0
             'mode':   'existing',
             'sync':   'top'
         } }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "mirror"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "mirror"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "mirror", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "mirror", "status": "running"}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "ready", "id": "mirror"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_READY", "data": {"device": "mirror", 
"len": 65536, "offset": 65536, "speed": 0, "type": "mirror"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "mirror", "status": "ready"}}
+{"event": "BLOCK_JOB_READY", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "mirror", 
"device": "mirror", "len": 65536, "offset": 65536, "speed": 0}}
  { 'execute': 'block-job-complete',
         'arguments': { 'device': 'mirror' } }
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "waiting", "id": "mirror"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "pending", "id": "mirror"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "mirror", 
"len": 65536, "offset": 65536, "speed": 0, "type": "mirror"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "mirror", "status": "waiting"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "mirror", "status": "pending"}}
+{"event": "BLOCK_JOB_COMPLETED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "mirror", 
"device": "mirror", "len": 65536, "offset": 65536, "speed": 0}}
  { 'execute': 'quit' }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "mirror"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "mirror"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "mirror", "status": "concluded"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "mirror", "status": "null"}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  *** done
diff --git a/tests/qemu-iotests/140.out b/tests/qemu-iotests/140.out
index 312f76d5da..586b64b24e 100644
--- a/tests/qemu-iotests/140.out
+++ b/tests/qemu-iotests/140.out
@@ -15,10 +15,10 @@ read 65536/65536 bytes at offset 0
  64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
  { 'execute': 'eject',
         'arguments': { 'device': 'drv' }}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", 
"data": {"id": "drv"}}
+{"event": "BLOCK_EXPORT_DELETED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, 
"data": {"id": "drv"}}
  qemu-io: can't open device nbd+unix:///drv?socket=SOCK_DIR/nbd: Requested 
export not available
  server reported: export 'drv' not present
  { 'execute': 'quit' }
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  *** done
diff --git a/tests/qemu-iotests/141.out b/tests/qemu-iotests/141.out
index 63203d9944..4d8c7b598c 100644
--- a/tests/qemu-iotests/141.out
+++ b/tests/qemu-iotests/141.out
@@ -23,20 +23,20 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 
backing_file=TEST_DIR/m.
  'format': 'IMGFMT',
  'sync': 'none'}}
  Formatting 'TEST_DIR/o.IMGFMT', fmt=IMGFMT size=1048576 
backing_file=TEST_DIR/t.IMGFMT backing_fmt=IMGFMT
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "paused", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "running"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "paused"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "running"}}
  {'execute': 'blockdev-del',
            'arguments': {'node-name': 'drv0'}}
  {"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: node is used as 
backing hd of 'NODE_NAME'"}}
  {'execute': 'block-job-cancel',
            'arguments': {'device': 'job0'}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "aborting", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_CANCELLED", "data": {"device": "job0", 
"len": 1048576, "offset": 0, "speed": 0, "type": "backup"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "aborting"}}
+{"event": "BLOCK_JOB_CANCELLED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "backup", 
"device": "job0", "len": 1048576, "offset": 0, "speed": 0}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "concluded"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "null"}}
  {'execute': 'blockdev-del',
            'arguments': {'node-name': 'drv0'}}
  {"return": {}}
@@ -59,21 +59,21 @@ Formatting 'TEST_DIR/o.IMGFMT', fmt=IMGFMT size=1048576 
backing_file=TEST_DIR/t.
  'format': 'IMGFMT',
  'sync': 'none'}}
  Formatting 'TEST_DIR/o.IMGFMT', fmt=IMGFMT size=1048576 
backing_file=TEST_DIR/t.IMGFMT backing_fmt=IMGFMT
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "ready", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_READY", "data": {"device": "job0", 
"len": 0, "offset": 0, "speed": 0, "type": "mirror"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "running"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "ready"}}
+{"event": "BLOCK_JOB_READY", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "mirror", 
"device": "job0", "len": 0, "offset": 0, "speed": 0}}
  {'execute': 'blockdev-del',
            'arguments': {'node-name': 'drv0'}}
  {"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is 
in use by block job: mirror"}}
  {'execute': 'block-job-cancel',
            'arguments': {'device': 'job0'}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "waiting", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "pending", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "job0", 
"len": 0, "offset": 0, "speed": 0, "type": "mirror"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "waiting"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "pending"}}
+{"event": "BLOCK_JOB_COMPLETED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "mirror", 
"device": "job0", "len": 0, "offset": 0, "speed": 0}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "concluded"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "null"}}
  {'execute': 'blockdev-del',
            'arguments': {'node-name': 'drv0'}}
  {"return": {}}
@@ -91,21 +91,21 @@ Formatting 'TEST_DIR/o.IMGFMT', fmt=IMGFMT size=1048576 
backing_file=TEST_DIR/t.
  {"return": {}}
  {'execute': 'block-commit',
  'arguments': {'job-id': 'job0', 'device': 'drv0'}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "ready", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_READY", "data": {"device": "job0", 
"len": 0, "offset": 0, "speed": 0, "type": "commit"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "running"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "ready"}}
+{"event": "BLOCK_JOB_READY", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "commit", 
"device": "job0", "len": 0, "offset": 0, "speed": 0}}
  {'execute': 'blockdev-del',
            'arguments': {'node-name': 'drv0'}}
  {"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is 
in use by block job: commit"}}
  {'execute': 'block-job-cancel',
            'arguments': {'device': 'job0'}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "waiting", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "pending", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "job0", 
"len": 0, "offset": 0, "speed": 0, "type": "commit"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "waiting"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "pending"}}
+{"event": "BLOCK_JOB_COMPLETED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "commit", 
"device": "job0", "len": 0, "offset": 0, "speed": 0}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "concluded"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "null"}}
  {'execute': 'blockdev-del',
            'arguments': {'node-name': 'drv0'}}
  {"return": {}}
@@ -128,18 +128,18 @@ wrote 1048576/1048576 bytes at offset 0
  'device': 'drv0',
  'top':    'TEST_DIR/m.IMGFMT',
  'speed':  1}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "running"}}
  {'execute': 'blockdev-del',
            'arguments': {'node-name': 'drv0'}}
  {"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is 
in use by block job: commit"}}
  {'execute': 'block-job-cancel',
            'arguments': {'device': 'job0'}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "aborting", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_CANCELLED", "data": {"device": "job0", 
"len": 1048576, "offset": 524288, "speed": 1, "type": "commit"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "aborting"}}
+{"event": "BLOCK_JOB_CANCELLED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "commit", 
"device": "job0", "len": 1048576, "offset": 524288, "speed": 1}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "concluded"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "null"}}
  {'execute': 'blockdev-del',
            'arguments': {'node-name': 'drv0'}}
  {"return": {}}
@@ -161,18 +161,18 @@ wrote 1048576/1048576 bytes at offset 0
  'arguments': {'job-id': 'job0',
  'device': 'drv0',
  'speed': 1}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "running"}}
  {'execute': 'blockdev-del',
            'arguments': {'node-name': 'drv0'}}
  {"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is 
in use by block job: stream"}}
  {'execute': 'block-job-cancel',
            'arguments': {'device': 'job0'}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "aborting", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_CANCELLED", "data": {"device": "job0", 
"len": 1048576, "offset": 524288, "speed": 1, "type": "stream"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "aborting"}}
+{"event": "BLOCK_JOB_CANCELLED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "stream", 
"device": "job0", "len": 1048576, "offset": 524288, "speed": 1}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "concluded"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "null"}}
  {'execute': 'blockdev-del',
            'arguments': {'node-name': 'drv0'}}
  {"return": {}}
diff --git a/tests/qemu-iotests/143.out b/tests/qemu-iotests/143.out
index 9ec5888e0e..ec58b08e43 100644
--- a/tests/qemu-iotests/143.out
+++ b/tests/qemu-iotests/143.out
@@ -11,5 +11,5 @@ qemu-io: can't open device 
nbd+unix:///aa--aa1?socket=SOCK_DIR/nbd: Requested ex
  server reported: export 'aa--aa...' not present
  { 'execute': 'quit' }
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  *** done
diff --git a/tests/qemu-iotests/156.out b/tests/qemu-iotests/156.out
index 4a22f0c41a..bb01818fc7 100644
--- a/tests/qemu-iotests/156.out
+++ b/tests/qemu-iotests/156.out
@@ -26,11 +26,11 @@ Formatting 'TEST_DIR/t.IMGFMT.target.overlay', fmt=IMGFMT 
size=1048576 backing_f
                        'target': 'TEST_DIR/t.IMGFMT.target.overlay',
                        'mode': 'existing',
                        'sync': 'top' } }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "source"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "source"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "source", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "source", "status": "running"}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "ready", "id": "source"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_READY", "data": {"device": "source", 
"len": 131072, "offset": 131072, "speed": 0, "type": "mirror"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "source", "status": "ready"}}
+{"event": "BLOCK_JOB_READY", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "mirror", 
"device": "source", "len": 131072, "offset": 131072, "speed": 0}}
  { 'execute': 'human-monitor-command',
         'arguments': { 'command-line':
                        'qemu-io source "write -P 4 192k 64k"' } }
@@ -40,11 +40,11 @@ wrote 65536/65536 bytes at offset 196608
  { 'execute': 'block-job-complete',
         'arguments': { 'device': 'source' } }
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "waiting", "id": "source"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "pending", "id": "source"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "source", 
"len": 196608, "offset": 196608, "speed": 0, "type": "mirror"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "source"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "source"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "source", "status": "waiting"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "source", "status": "pending"}}
+{"event": "BLOCK_JOB_COMPLETED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "mirror", 
"device": "source", "len": 196608, "offset": 196608, "speed": 0}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "source", "status": "concluded"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "source", "status": "null"}}
{ 'execute': 'human-monitor-command',
         'arguments': { 'command-line':
@@ -73,7 +73,7 @@ read 65536/65536 bytes at offset 196608
{ 'execute': 'quit' }
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
read 65536/65536 bytes at offset 0
  64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
diff --git a/tests/qemu-iotests/161.out b/tests/qemu-iotests/161.out
index 6cc285afcf..c62657639a 100644
--- a/tests/qemu-iotests/161.out
+++ b/tests/qemu-iotests/161.out
@@ -18,17 +18,17 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 
backing_file=TEST_DIR/t.
  {"return": {}}
  { 'execute': 'block-stream',        'arguments': { 'device': 'none0',
                        'base': 'TEST_DIR/t.IMGFMT.base' } }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "none0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "none0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "running"}}
  {"return": {}}
  { 'execute': 'human-monitor-command',
         'arguments': { 'command-line':
                        'qemu-io none0 "reopen -o backing.detect-zeroes=on"' } }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "waiting", "id": "none0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "pending", "id": "none0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "none0", 
"len": 1048576, "offset": 1048576, "speed": 0, "type": "stream"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "none0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "none0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "waiting"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "pending"}}
+{"event": "BLOCK_JOB_COMPLETED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "stream", 
"device": "none0", "len": 1048576, "offset": 1048576, "speed": 0}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "concluded"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "null"}}
  {"return": ""}
*** Commit and then change an option on the backing file
@@ -40,16 +40,16 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 
backing_file=TEST_DIR/t.
  {"return": {}}
  { 'execute': 'block-commit',        'arguments': { 'device': 'none0',
                        'top': 'TEST_DIR/t.IMGFMT.int' } }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "none0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "none0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "running"}}
  {"return": {}}
  { 'execute': 'human-monitor-command',
         'arguments': { 'command-line':
                        'qemu-io none0 "reopen -o backing.detect-zeroes=on"' } }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "waiting", "id": "none0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "pending", "id": "none0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "none0", 
"len": 1048576, "offset": 1048576, "speed": 0, "type": "commit"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "none0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "none0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "waiting"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "pending"}}
+{"event": "BLOCK_JOB_COMPLETED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "commit", 
"device": "none0", "len": 1048576, "offset": 1048576, "speed": 0}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "concluded"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "none0", "status": "null"}}
  {"return": ""}
  *** done
diff --git a/tests/qemu-iotests/176.out b/tests/qemu-iotests/176.out
index 9d09b60452..b46b743850 100644
--- a/tests/qemu-iotests/176.out
+++ b/tests/qemu-iotests/176.out
@@ -170,7 +170,7 @@ QMP_VERSION
  {"return": {}}
  {"return": {}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  wrote 196608/196608 bytes at offset 2147287040
  192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
  wrote 131072/131072 bytes at offset 2147352576
@@ -207,7 +207,7 @@ QMP_VERSION
  {"return": {}}
  {"return": {"sha256": HASH}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
=== Test pass bitmap.1 === @@ -219,7 +219,7 @@ QMP_VERSION
  {"return": {}}
  {"return": {}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  wrote 196608/196608 bytes at offset 2147287040
  192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
  wrote 131072/131072 bytes at offset 2147352576
@@ -257,7 +257,7 @@ QMP_VERSION
  {"return": {}}
  {"return": {"sha256": HASH}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
=== Test pass bitmap.2 === @@ -269,7 +269,7 @@ QMP_VERSION
  {"return": {}}
  {"return": {}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  wrote 196608/196608 bytes at offset 2147287040
  192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
  wrote 131072/131072 bytes at offset 2147352576
@@ -307,7 +307,7 @@ QMP_VERSION
  {"return": {}}
  {"return": {"sha256": HASH}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
=== Test pass bitmap.3 === @@ -319,7 +319,7 @@ QMP_VERSION
  {"return": {}}
  {"return": {}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  wrote 196608/196608 bytes at offset 2147287040
  192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
  wrote 131072/131072 bytes at offset 2147352576
@@ -354,5 +354,5 @@ QMP_VERSION
  {"return": {}}
  {"return": {"sha256": HASH}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": 
{"guest": false, "reason": "host-qmp-quit"}}
+{"event": "SHUTDOWN", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"guest": false, "reason": "host-qmp-quit"}}
  *** done
diff --git a/tests/qemu-iotests/184.out b/tests/qemu-iotests/184.out
index 77e5489d65..93e33ba20a 100644
--- a/tests/qemu-iotests/184.out
+++ b/tests/qemu-iotests/184.out
@@ -24,64 +24,64 @@ Testing:
  {
      "return": [
          {
-            "iops_rd": 0,
+            "file": "json:{\"driver\": \"throttle\", \"throttle-group\": \"group0\", \"file\": 
{\"driver\": \"null-co\"}}",
+            "node-name": "throttle0",
+            "ro": false,
+            "drv": "throttle",
+            "backing_file_depth": 1,
+            "encrypted": false,
              "detect_zeroes": "off",
+            "bps": 0,
+            "bps_rd": 0,
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
              "image": {
+                "filename": "json:{\"driver\": \"throttle\", \"throttle-group\": \"group0\", \"file\": 
{\"driver\": \"null-co\"}}",
+                "format": "throttle",
+                "actual-size": 0,
+                "virtual-size": 1073741824,
                  "backing-image": {
-                    "virtual-size": 1073741824,
                      "filename": "null-co://",
                      "format": "null-co",
-                    "actual-size": 0
-                },
-                "virtual-size": 1073741824,
-                "filename": "json:{\"throttle-group\": \"group0\", \"driver\": \"throttle\", \"file\": 
{\"driver\": \"null-co\"}}",
-                "format": "throttle",
-                "actual-size": 0
+                    "actual-size": 0,
+                    "virtual-size": 1073741824
+                }
              },
-            "iops_wr": 0,
-            "ro": false,
-            "node-name": "throttle0",
-            "backing_file_depth": 1,
-            "drv": "throttle",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
-            "encrypted": false,
-            "bps": 0,
-            "bps_rd": 0,
              "cache": {
-                "no-flush": false,
+                "writeback": true,
                  "direct": false,
-                "writeback": true
+                "no-flush": false
              },
-            "file": "json:{\"throttle-group\": \"group0\", \"driver\": \"throttle\", \"file\": 
{\"driver\": \"null-co\"}}"
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
-            "detect_zeroes": "off",
-            "image": {
-                "virtual-size": 1073741824,
-                "filename": "null-co://",
-                "format": "null-co",
-                "actual-size": 0
-            },
-            "iops_wr": 0,
-            "ro": false,
+            "file": "null-co://",
              "node-name": "disk0",
-            "backing_file_depth": 0,
+            "ro": false,
              "drv": "null-co",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
+            "backing_file_depth": 0,
              "encrypted": false,
+            "detect_zeroes": "off",
              "bps": 0,
              "bps_rd": 0,
-            "cache": {
-                "no-flush": false,
-                "direct": false,
-                "writeback": true
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
+            "image": {
+                "filename": "null-co://",
+                "format": "null-co",
+                "actual-size": 0,
+                "virtual-size": 1073741824
              },
-            "file": "null-co://"
+            "cache": {
+                "writeback": true,
+                "direct": false,
+                "no-flush": false
+            },
+            "write_threshold": 0
          }
      ]
  }
@@ -94,11 +94,11 @@ Testing:
      }
  }
  {
+    "event": "SHUTDOWN",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "SHUTDOWN",
      "data": {
          "guest": false,
          "reason": "host-qmp-quit"
@@ -121,52 +121,25 @@ Testing:
  }
  {
      "return": {
-        "bps-read-max-length": 1,
-        "iops-read-max-length": 1,
-        "bps-read-max": 0,
-        "bps-total": 0,
-        "iops-total-max-length": 1,
          "iops-total": 1000,
-        "iops-write-max": 0,
-        "bps-write": 0,
-        "bps-total-max": 0,
-        "bps-write-max": 0,
-        "iops-size": 0,
-        "iops-read": 0,
-        "iops-write-max-length": 1,
-        "iops-write": 0,
-        "bps-total-max-length": 1,
-        "iops-read-max": 0,
-        "bps-read": 0,
-        "bps-write-max-length": 1,
-        "iops-total-max": 0
-    }
-}
-{
-    "return": {
-    }
-}
-{
-    "return": {
-        "bps-read-max-length": 1,
-        "iops-read-max-length": 1,
-        "bps-read-max": 0,
-        "bps-total": 0,
+        "iops-total-max": 0,
          "iops-total-max-length": 1,
-        "iops-total": 0,
-        "iops-write-max": 0,
-        "bps-write": 0,
-        "bps-total-max": 0,
-        "bps-write-max": 0,
-        "iops-size": 0,
          "iops-read": 0,
-        "iops-write-max-length": 1,
-        "iops-write": 0,
-        "bps-total-max-length": 1,
          "iops-read-max": 0,
+        "iops-read-max-length": 1,
+        "iops-write": 0,
+        "iops-write-max": 0,
+        "iops-write-max-length": 1,
+        "bps-total": 0,
+        "bps-total-max": 0,
+        "bps-total-max-length": 1,
          "bps-read": 0,
+        "bps-read-max": 0,
+        "bps-read-max-length": 1,
+        "bps-write": 0,
+        "bps-write-max": 0,
          "bps-write-max-length": 1,
-        "iops-total-max": 0
+        "iops-size": 0
      }
  }
  {
@@ -174,11 +147,38 @@ Testing:
      }
  }
  {
+    "return": {
+        "iops-total": 0,
+        "iops-total-max": 0,
+        "iops-total-max-length": 1,
+        "iops-read": 0,
+        "iops-read-max": 0,
+        "iops-read-max-length": 1,
+        "iops-write": 0,
+        "iops-write-max": 0,
+        "iops-write-max-length": 1,
+        "bps-total": 0,
+        "bps-total-max": 0,
+        "bps-total-max-length": 1,
+        "bps-read": 0,
+        "bps-read-max": 0,
+        "bps-read-max-length": 1,
+        "bps-write": 0,
+        "bps-write-max": 0,
+        "bps-write-max-length": 1,
+        "iops-size": 0
+    }
+}
+{
+    "return": {
+    }
+}
+{
+    "event": "SHUTDOWN",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "SHUTDOWN",
      "data": {
          "guest": false,
          "reason": "host-qmp-quit"
@@ -216,11 +216,11 @@ Testing:
      }
  }
  {
+    "event": "SHUTDOWN",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "SHUTDOWN",
      "data": {
          "guest": false,
          "reason": "host-qmp-quit"
@@ -252,11 +252,11 @@ Testing:
      }
  }
  {
+    "event": "SHUTDOWN",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "SHUTDOWN",
      "data": {
          "guest": false,
          "reason": "host-qmp-quit"
diff --git a/tests/qemu-iotests/186.out b/tests/qemu-iotests/186.out
index 01530040e5..12ea630222 100644
--- a/tests/qemu-iotests/186.out
+++ b/tests/qemu-iotests/186.out
@@ -57,7 +57,7 @@ qdev_id: [not inserted]
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
ide-hd,drive=null
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]
      Cache mode:       writeback
  (qemu) quit
@@ -65,7 +65,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
ide-hd,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      qdev_id
      Cache mode:       writeback
  (qemu) quit
@@ -73,7 +73,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
scsi-hd,drive=null
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]
      Cache mode:       writeback
  (qemu) quit
@@ -81,7 +81,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
scsi-hd,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      qdev_id
      Cache mode:       writeback
  (qemu) quit
@@ -89,7 +89,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
virtio-blk-pci,drive=null
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]/virtio-backend
      Cache mode:       writeback
  (qemu) quit
@@ -97,7 +97,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
virtio-blk-pci,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      /machine/peripheral/qdev_id/virtio-backend
      Cache mode:       writeback
  (qemu) quit
@@ -105,7 +105,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
floppy,drive=null
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -114,7 +114,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
floppy,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      qdev_id
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -123,7 +123,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
ide-cd,drive=null
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -132,7 +132,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
ide-cd,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      qdev_id
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -141,7 +141,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
scsi-cd,drive=null
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -150,7 +150,7 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -blockdev driver=null-co,read-zeroes=on,node-name=null -device 
scsi-cd,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-null: json:{"read-zeroes": true, "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": true} (null-co)
      Attached to:      qdev_id
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -162,11 +162,11 @@ null: json:{"read-zeroes": true, "driver": "null-co"} 
(null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
ide-hd,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Removable device: not locked, tray closed
      Cache mode:       writeback
-null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      qdev_id
      Cache mode:       writeback
  (qemu) quit
@@ -174,11 +174,11 @@ null: json:{"read-zeroes": "on", "driver": "null-co"} 
(null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
scsi-hd,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Removable device: not locked, tray closed
      Cache mode:       writeback
-null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      qdev_id
      Cache mode:       writeback
  (qemu) quit
@@ -186,11 +186,11 @@ null: json:{"read-zeroes": "on", "driver": "null-co"} 
(null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
virtio-blk-pci,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Removable device: not locked, tray closed
      Cache mode:       writeback
-null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/peripheral/qdev_id/virtio-backend
      Cache mode:       writeback
  (qemu) quit
@@ -198,11 +198,11 @@ null: json:{"read-zeroes": "on", "driver": "null-co"} 
(null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
floppy,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Removable device: not locked, tray closed
      Cache mode:       writeback
-null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      qdev_id
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -211,11 +211,11 @@ null: json:{"read-zeroes": "on", "driver": "null-co"} 
(null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
ide-cd,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Removable device: not locked, tray closed
      Cache mode:       writeback
-null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      qdev_id
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -224,11 +224,11 @@ null: json:{"read-zeroes": "on", "driver": "null-co"} 
(null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
scsi-cd,drive=null,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Removable device: not locked, tray closed
      Cache mode:       writeback
-null: json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+null: json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      qdev_id
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -240,7 +240,7 @@ null: json:{"read-zeroes": "on", "driver": "null-co"} 
(null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
ide-hd,drive=none0
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]
      Cache mode:       writeback
  (qemu) quit
@@ -248,7 +248,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
ide-hd,drive=none0,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      qdev_id
      Cache mode:       writeback
  (qemu) quit
@@ -256,7 +256,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
scsi-hd,drive=none0
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]
      Cache mode:       writeback
  (qemu) quit
@@ -264,7 +264,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
scsi-hd,drive=none0,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      qdev_id
      Cache mode:       writeback
  (qemu) quit
@@ -272,7 +272,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
virtio-blk-pci,drive=none0
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]/virtio-backend
      Cache mode:       writeback
  (qemu) quit
@@ -280,7 +280,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
virtio-blk-pci,drive=none0,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/peripheral/qdev_id/virtio-backend
      Cache mode:       writeback
  (qemu) quit
@@ -288,7 +288,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
floppy,drive=none0
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -297,7 +297,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
floppy,drive=none0,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      qdev_id
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -306,7 +306,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
ide-cd,drive=none0
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -315,7 +315,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
ide-cd,drive=none0,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      qdev_id
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -324,7 +324,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
scsi-cd,drive=none0
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -333,7 +333,7 @@ none0 (null): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=none,driver=null-co,read-zeroes=on,node-name=null -device 
scsi-cd,drive=none0,id=qdev_id
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-none0 (null): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+none0 (null): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      qdev_id
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -411,7 +411,7 @@ floppy0: [not inserted]
  Testing: -drive if=floppy,driver=null-co,read-zeroes=on
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-floppy0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+floppy0 (NODE_NAME): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/unattached/device[N]
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -420,7 +420,7 @@ floppy0 (NODE_NAME): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=ide,driver=null-co,read-zeroes=on
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-ide0-hd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+ide0-hd0 (NODE_NAME): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/unattached/device[N]
      Cache mode:       writeback
  (qemu) quit
@@ -436,7 +436,7 @@ ide0-cd0: [not inserted]
  Testing: -drive if=ide,driver=null-co,read-zeroes=on,media=cdrom
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-ide0-cd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} 
(null-co, read-only)
+ide0-cd0 (NODE_NAME): json:{"driver": "null-co", "read-zeroes": "on"} 
(null-co, read-only)
      Attached to:      /machine/unattached/device[N]
      Removable device: not locked, tray closed
      Cache mode:       writeback
@@ -445,7 +445,7 @@ ide0-cd0 (NODE_NAME): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co,
  Testing: -drive if=virtio,driver=null-co,read-zeroes=on
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-virtio0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co"} (null-co)
+virtio0 (NODE_NAME): json:{"driver": "null-co", "read-zeroes": "on"} (null-co)
      Attached to:      /machine/peripheral-anon/device[N]/virtio-backend
      Cache mode:       writeback
  (qemu) quit
@@ -453,7 +453,7 @@ virtio0 (NODE_NAME): json:{"read-zeroes": "on", "driver": 
"null-co"} (null-co)
  Testing: -drive if=pflash,driver=null-co,read-zeroes=on,size=1M
  QEMU X.Y.Z monitor - type 'help' for more information
  (qemu) info block
-pflash0 (NODE_NAME): json:{"read-zeroes": "on", "driver": "null-co", "size": 
"1M"} (null-co)
+pflash0 (NODE_NAME): json:{"driver": "null-co", "size": "1M", "read-zeroes": 
"on"} (null-co)
      Attached to:      /machine/system.flash0
      Cache mode:       writeback
  (qemu) quit
diff --git a/tests/qemu-iotests/190.out b/tests/qemu-iotests/190.out
index ed9d8214eb..2acea9982c 100644
--- a/tests/qemu-iotests/190.out
+++ b/tests/qemu-iotests/190.out
@@ -29,8 +29,8 @@ bitmaps size: 537198592
expected bitmap 545259520
  {
-    "bitmaps": 545259520,
      "required": 18874368,
-    "fully-allocated": 2199042129920
+    "fully-allocated": 2199042129920,
+    "bitmaps": 545259520
  }
  *** done
diff --git a/tests/qemu-iotests/191.out b/tests/qemu-iotests/191.out
index ea88777374..a7dfb22080 100644
--- a/tests/qemu-iotests/191.out
+++ b/tests/qemu-iotests/191.out
@@ -22,25 +22,25 @@ wrote 65536/65536 bytes at offset 1048576
                        'base':'TEST_DIR/t.IMGFMT.base',
                        'top': 'TEST_DIR/t.IMGFMT.mid' } }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "created",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "created"
      }
  }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "running",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "running"
      }
  }
  {
@@ -48,61 +48,61 @@ wrote 65536/65536 bytes at offset 1048576
      }
  }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "waiting",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "waiting"
      }
  }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "pending",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "pending"
      }
  }
  {
-    "timestamp": {
-        "seconds":  TIMESTAMP,
-        "microseconds":  TIMESTAMP
-    },
      "event": "BLOCK_JOB_COMPLETED",
+    "timestamp": {
+        "seconds":  TIMESTAMP,
+        "microseconds":  TIMESTAMP
+    },
      "data": {
+        "type": "commit",
          "device": "commit0",
          "len": 67108864,
          "offset": 67108864,
-        "speed": 0,
-        "type": "commit"
+        "speed": 0
      }
  }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "concluded",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "concluded"
      }
  }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "null",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "null"
      }
  }
@@ -112,268 +112,268 @@ wrote 65536/65536 bytes at offset 1048576
  {
      "return": [
          {
-            "iops_rd": 0,
-            "detect_zeroes": "off",
-            "image": {
-                "backing-image": {
-                    "virtual-size": 67108864,
-                    "filename": "TEST_DIR/t.IMGFMT.base",
-                    "cluster-size": 65536,
-                    "format": "IMGFMT",
-                    "actual-size": SIZE,
-                    "dirty-flag": false
-                },
-                "backing-filename-format": "IMGFMT",
-                "virtual-size": 67108864,
-                "filename": "TEST_DIR/t.IMGFMT.ovl2",
-                "cluster-size": 65536,
-                "format": "IMGFMT",
-                "actual-size": SIZE,
-                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
-                "backing-filename": "TEST_DIR/t.IMGFMT.base",
-                "dirty-flag": false
-            },
-            "iops_wr": 0,
-            "ro": false,
+            "file": "TEST_DIR/t.IMGFMT.ovl2",
              "node-name": "top2",
-            "backing_file_depth": 1,
+            "ro": false,
              "drv": "IMGFMT",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
              "backing_file": "TEST_DIR/t.IMGFMT.base",
+            "backing_file_depth": 1,
              "encrypted": false,
+            "detect_zeroes": "off",
              "bps": 0,
              "bps_rd": 0,
-            "cache": {
-                "no-flush": false,
-                "direct": false,
-                "writeback": true
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
+            "image": {
+                "filename": "TEST_DIR/t.IMGFMT.ovl2",
+                "format": "IMGFMT",
+                "dirty-flag": false,
+                "actual-size": SIZE,
+                "virtual-size": 67108864,
+                "cluster-size": 65536,
+                "backing-filename": "TEST_DIR/t.IMGFMT.base",
+                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
+                "backing-filename-format": "IMGFMT",
+                "backing-image": {
+                    "filename": "TEST_DIR/t.IMGFMT.base",
+                    "format": "IMGFMT",
+                    "dirty-flag": false,
+                    "actual-size": SIZE,
+                    "virtual-size": 67108864,
+                    "cluster-size": 65536,
+                },
              },
-            "file": "TEST_DIR/t.IMGFMT.ovl2"
+            "cache": {
+                "writeback": true,
+                "direct": false,
+                "no-flush": false
+            },
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
+            "file": "TEST_DIR/t.IMGFMT.ovl2",
+            "node-name": "NODE_NAME",
+            "ro": false,
+            "drv": "file",
+            "backing_file_depth": 0,
+            "encrypted": false,
              "detect_zeroes": "off",
+            "bps": 0,
+            "bps_rd": 0,
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
              "image": {
-                "virtual-size": 197120,
                  "filename": "TEST_DIR/t.IMGFMT.ovl2",
                  "format": "file",
+                "dirty-flag": false,
                  "actual-size": SIZE,
-                "dirty-flag": false
+                "virtual-size": 197120
              },
-            "iops_wr": 0,
-            "ro": false,
-            "node-name": "NODE_NAME",
-            "backing_file_depth": 0,
-            "drv": "file",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
-            "encrypted": false,
-            "bps": 0,
-            "bps_rd": 0,
              "cache": {
-                "no-flush": false,
+                "writeback": true,
                  "direct": false,
-                "writeback": true
+                "no-flush": false
              },
-            "file": "TEST_DIR/t.IMGFMT.ovl2"
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
-            "detect_zeroes": "off",
-            "image": {
-                "backing-image": {
-                    "virtual-size": 67108864,
-                    "filename": "TEST_DIR/t.IMGFMT.base",
-                    "cluster-size": 65536,
-                    "format": "IMGFMT",
-                    "actual-size": SIZE,
-                    "dirty-flag": false
-                },
-                "backing-filename-format": "IMGFMT",
-                "virtual-size": 67108864,
-                "filename": "TEST_DIR/t.IMGFMT",
-                "cluster-size": 65536,
-                "format": "IMGFMT",
-                "actual-size": SIZE,
-                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
-                "backing-filename": "TEST_DIR/t.IMGFMT.base",
-                "dirty-flag": false
-            },
-            "iops_wr": 0,
-            "ro": false,
+            "file": "TEST_DIR/t.IMGFMT",
              "node-name": "top",
-            "backing_file_depth": 1,
+            "ro": false,
              "drv": "IMGFMT",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
              "backing_file": "TEST_DIR/t.IMGFMT.base",
+            "backing_file_depth": 1,
              "encrypted": false,
+            "detect_zeroes": "off",
              "bps": 0,
              "bps_rd": 0,
-            "cache": {
-                "no-flush": false,
-                "direct": false,
-                "writeback": true
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
+            "image": {
+                "filename": "TEST_DIR/t.IMGFMT",
+                "format": "IMGFMT",
+                "dirty-flag": false,
+                "actual-size": SIZE,
+                "virtual-size": 67108864,
+                "cluster-size": 65536,
+                "backing-filename": "TEST_DIR/t.IMGFMT.base",
+                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
+                "backing-filename-format": "IMGFMT",
+                "backing-image": {
+                    "filename": "TEST_DIR/t.IMGFMT.base",
+                    "format": "IMGFMT",
+                    "dirty-flag": false,
+                    "actual-size": SIZE,
+                    "virtual-size": 67108864,
+                    "cluster-size": 65536,
+                },
              },
-            "file": "TEST_DIR/t.IMGFMT"
+            "cache": {
+                "writeback": true,
+                "direct": false,
+                "no-flush": false
+            },
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
+            "file": "TEST_DIR/t.IMGFMT",
+            "node-name": "NODE_NAME",
+            "ro": false,
+            "drv": "file",
+            "backing_file_depth": 0,
+            "encrypted": false,
              "detect_zeroes": "off",
+            "bps": 0,
+            "bps_rd": 0,
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
              "image": {
-                "virtual-size": 197120,
                  "filename": "TEST_DIR/t.IMGFMT",
                  "format": "file",
+                "dirty-flag": false,
                  "actual-size": SIZE,
-                "dirty-flag": false
+                "virtual-size": 197120
              },
-            "iops_wr": 0,
-            "ro": false,
-            "node-name": "NODE_NAME",
-            "backing_file_depth": 0,
-            "drv": "file",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
-            "encrypted": false,
-            "bps": 0,
-            "bps_rd": 0,
              "cache": {
-                "no-flush": false,
+                "writeback": true,
                  "direct": false,
-                "writeback": true
+                "no-flush": false
              },
-            "file": "TEST_DIR/t.IMGFMT"
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
-            "detect_zeroes": "off",
-            "image": {
-                "backing-image": {
-                    "virtual-size": 67108864,
-                    "filename": "TEST_DIR/t.IMGFMT.base",
-                    "cluster-size": 65536,
-                    "format": "IMGFMT",
-                    "actual-size": SIZE,
-                    "dirty-flag": false
-                },
-                "backing-filename-format": "IMGFMT",
-                "virtual-size": 67108864,
-                "filename": "TEST_DIR/t.IMGFMT.mid",
-                "cluster-size": 65536,
-                "format": "IMGFMT",
-                "actual-size": SIZE,
-                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
-                "backing-filename": "TEST_DIR/t.IMGFMT.base",
-                "dirty-flag": false
-            },
-            "iops_wr": 0,
-            "ro": false,
+            "file": "TEST_DIR/t.IMGFMT.mid",
              "node-name": "mid",
-            "backing_file_depth": 1,
+            "ro": false,
              "drv": "IMGFMT",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
              "backing_file": "TEST_DIR/t.IMGFMT.base",
+            "backing_file_depth": 1,
              "encrypted": false,
+            "detect_zeroes": "off",
              "bps": 0,
              "bps_rd": 0,
-            "cache": {
-                "no-flush": false,
-                "direct": false,
-                "writeback": true
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
+            "image": {
+                "filename": "TEST_DIR/t.IMGFMT.mid",
+                "format": "IMGFMT",
+                "dirty-flag": false,
+                "actual-size": SIZE,
+                "virtual-size": 67108864,
+                "cluster-size": 65536,
+                "backing-filename": "TEST_DIR/t.IMGFMT.base",
+                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
+                "backing-filename-format": "IMGFMT",
+                "backing-image": {
+                    "filename": "TEST_DIR/t.IMGFMT.base",
+                    "format": "IMGFMT",
+                    "dirty-flag": false,
+                    "actual-size": SIZE,
+                    "virtual-size": 67108864,
+                    "cluster-size": 65536,
+                },
              },
-            "file": "TEST_DIR/t.IMGFMT.mid"
+            "cache": {
+                "writeback": true,
+                "direct": false,
+                "no-flush": false
+            },
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
+            "file": "TEST_DIR/t.IMGFMT.mid",
+            "node-name": "NODE_NAME",
+            "ro": false,
+            "drv": "file",
+            "backing_file_depth": 0,
+            "encrypted": false,
              "detect_zeroes": "off",
+            "bps": 0,
+            "bps_rd": 0,
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
              "image": {
-                "virtual-size": 393216,
                  "filename": "TEST_DIR/t.IMGFMT.mid",
                  "format": "file",
+                "dirty-flag": false,
                  "actual-size": SIZE,
-                "dirty-flag": false
+                "virtual-size": 393216
              },
-            "iops_wr": 0,
-            "ro": false,
-            "node-name": "NODE_NAME",
-            "backing_file_depth": 0,
-            "drv": "file",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
-            "encrypted": false,
-            "bps": 0,
-            "bps_rd": 0,
              "cache": {
-                "no-flush": false,
+                "writeback": true,
                  "direct": false,
-                "writeback": true
+                "no-flush": false
              },
-            "file": "TEST_DIR/t.IMGFMT.mid"
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
-            "detect_zeroes": "off",
-            "image": {
-                "virtual-size": 67108864,
-                "filename": "TEST_DIR/t.IMGFMT.base",
-                "cluster-size": 65536,
-                "format": "IMGFMT",
-                "actual-size": SIZE,
-                "dirty-flag": false
-            },
-            "iops_wr": 0,
-            "ro": false,
+            "file": "TEST_DIR/t.IMGFMT.base",
              "node-name": "base",
-            "backing_file_depth": 0,
+            "ro": false,
              "drv": "IMGFMT",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
+            "backing_file_depth": 0,
              "encrypted": false,
+            "detect_zeroes": "off",
              "bps": 0,
              "bps_rd": 0,
-            "cache": {
-                "no-flush": false,
-                "direct": false,
-                "writeback": true
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
+            "image": {
+                "filename": "TEST_DIR/t.IMGFMT.base",
+                "format": "IMGFMT",
+                "dirty-flag": false,
+                "actual-size": SIZE,
+                "virtual-size": 67108864,
+                "cluster-size": 65536,
              },
-            "file": "TEST_DIR/t.IMGFMT.base"
+            "cache": {
+                "writeback": true,
+                "direct": false,
+                "no-flush": false
+            },
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
+            "file": "TEST_DIR/t.IMGFMT.base",
+            "node-name": "NODE_NAME",
+            "ro": false,
+            "drv": "file",
+            "backing_file_depth": 0,
+            "encrypted": false,
              "detect_zeroes": "off",
+            "bps": 0,
+            "bps_rd": 0,
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
              "image": {
-                "virtual-size": 393216,
                  "filename": "TEST_DIR/t.IMGFMT.base",
                  "format": "file",
+                "dirty-flag": false,
                  "actual-size": SIZE,
-                "dirty-flag": false
+                "virtual-size": 393216
              },
-            "iops_wr": 0,
-            "ro": false,
-            "node-name": "NODE_NAME",
-            "backing_file_depth": 0,
-            "drv": "file",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
-            "encrypted": false,
-            "bps": 0,
-            "bps_rd": 0,
              "cache": {
-                "no-flush": false,
+                "writeback": true,
                  "direct": false,
-                "writeback": true
+                "no-flush": false
              },
-            "file": "TEST_DIR/t.IMGFMT.base"
+            "write_threshold": 0
          }
      ]
  }
@@ -383,11 +383,11 @@ wrote 65536/65536 bytes at offset 1048576
      }
  }
  {
+    "event": "SHUTDOWN",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "SHUTDOWN",
      "data": {
          "guest": false,
          "reason": "host-qmp-quit"
@@ -429,25 +429,25 @@ wrote 65536/65536 bytes at offset 1048576
                        'base':'TEST_DIR/t.IMGFMT.base',
                        'top': 'TEST_DIR/t.IMGFMT.mid' } }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "created",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "created"
      }
  }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "running",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "running"
      }
  }
  {
@@ -455,61 +455,61 @@ wrote 65536/65536 bytes at offset 1048576
      }
  }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "waiting",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "waiting"
      }
  }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "pending",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "pending"
      }
  }
  {
-    "timestamp": {
-        "seconds":  TIMESTAMP,
-        "microseconds":  TIMESTAMP
-    },
      "event": "BLOCK_JOB_COMPLETED",
+    "timestamp": {
+        "seconds":  TIMESTAMP,
+        "microseconds":  TIMESTAMP
+    },
      "data": {
+        "type": "commit",
          "device": "commit0",
          "len": 67108864,
          "offset": 67108864,
-        "speed": 0,
-        "type": "commit"
+        "speed": 0
      }
  }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "concluded",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "concluded"
      }
  }
  {
+    "event": "JOB_STATUS_CHANGE",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "JOB_STATUS_CHANGE",
      "data": {
-        "status": "null",
-        "id": "commit0"
+        "id": "commit0",
+        "status": "null"
      }
  }
@@ -519,279 +519,279 @@ wrote 65536/65536 bytes at offset 1048576
  {
      "return": [
          {
-            "iops_rd": 0,
-            "detect_zeroes": "off",
-            "image": {
-                "backing-image": {
-                    "virtual-size": 67108864,
-                    "filename": "TEST_DIR/t.IMGFMT.base",
-                    "cluster-size": 65536,
-                    "format": "IMGFMT",
-                    "actual-size": SIZE,
-                    "dirty-flag": false
-                },
-                "backing-filename-format": "IMGFMT",
-                "virtual-size": 67108864,
-                "filename": "TEST_DIR/t.IMGFMT.ovl2",
-                "cluster-size": 65536,
-                "format": "IMGFMT",
-                "actual-size": SIZE,
-                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
-                "backing-filename": "TEST_DIR/t.IMGFMT.base",
-                "dirty-flag": false
-            },
-            "iops_wr": 0,
-            "ro": true,
+            "file": "TEST_DIR/t.IMGFMT.ovl2",
              "node-name": "NODE_NAME",
-            "backing_file_depth": 1,
+            "ro": true,
              "drv": "IMGFMT",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
              "backing_file": "TEST_DIR/t.IMGFMT.base",
+            "backing_file_depth": 1,
              "encrypted": false,
+            "detect_zeroes": "off",
              "bps": 0,
              "bps_rd": 0,
-            "cache": {
-                "no-flush": false,
-                "direct": false,
-                "writeback": true
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
+            "image": {
+                "filename": "TEST_DIR/t.IMGFMT.ovl2",
+                "format": "IMGFMT",
+                "dirty-flag": false,
+                "actual-size": SIZE,
+                "virtual-size": 67108864,
+                "cluster-size": 65536,
+                "backing-filename": "TEST_DIR/t.IMGFMT.base",
+                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
+                "backing-filename-format": "IMGFMT",
+                "backing-image": {
+                    "filename": "TEST_DIR/t.IMGFMT.base",
+                    "format": "IMGFMT",
+                    "dirty-flag": false,
+                    "actual-size": SIZE,
+                    "virtual-size": 67108864,
+                    "cluster-size": 65536,
+                },
              },
-            "file": "TEST_DIR/t.IMGFMT.ovl2"
+            "cache": {
+                "writeback": true,
+                "direct": false,
+                "no-flush": false
+            },
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
+            "file": "TEST_DIR/t.IMGFMT.ovl2",
+            "node-name": "NODE_NAME",
+            "ro": true,
+            "drv": "file",
+            "backing_file_depth": 0,
+            "encrypted": false,
              "detect_zeroes": "off",
+            "bps": 0,
+            "bps_rd": 0,
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
              "image": {
-                "virtual-size": 197120,
                  "filename": "TEST_DIR/t.IMGFMT.ovl2",
                  "format": "file",
+                "dirty-flag": false,
                  "actual-size": SIZE,
-                "dirty-flag": false
+                "virtual-size": 197120
              },
-            "iops_wr": 0,
-            "ro": true,
-            "node-name": "NODE_NAME",
-            "backing_file_depth": 0,
-            "drv": "file",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
-            "encrypted": false,
-            "bps": 0,
-            "bps_rd": 0,
              "cache": {
-                "no-flush": false,
+                "writeback": true,
                  "direct": false,
-                "writeback": true
+                "no-flush": false
              },
-            "file": "TEST_DIR/t.IMGFMT.ovl2"
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
-            "detect_zeroes": "off",
-            "image": {
-                "backing-image": {
-                    "backing-image": {
-                        "virtual-size": 67108864,
-                        "filename": "TEST_DIR/t.IMGFMT.base",
-                        "cluster-size": 65536,
-                        "format": "IMGFMT",
-                        "actual-size": SIZE,
-                        "dirty-flag": false
-                    },
-                    "backing-filename-format": "IMGFMT",
-                    "virtual-size": 67108864,
-                    "filename": "TEST_DIR/t.IMGFMT.ovl2",
-                    "cluster-size": 65536,
-                    "format": "IMGFMT",
-                    "actual-size": SIZE,
-                    "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
-                    "backing-filename": "TEST_DIR/t.IMGFMT.base",
-                    "dirty-flag": false
-                },
-                "backing-filename-format": "IMGFMT",
-                "virtual-size": 67108864,
-                "filename": "TEST_DIR/t.IMGFMT.ovl3",
-                "cluster-size": 65536,
-                "format": "IMGFMT",
-                "actual-size": SIZE,
-                "full-backing-filename": "TEST_DIR/t.IMGFMT.ovl2",
-                "backing-filename": "TEST_DIR/t.IMGFMT.ovl2",
-                "dirty-flag": false
-            },
-            "iops_wr": 0,
-            "ro": false,
+            "file": "TEST_DIR/t.IMGFMT.ovl3",
              "node-name": "top2",
-            "backing_file_depth": 2,
+            "ro": false,
              "drv": "IMGFMT",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
              "backing_file": "TEST_DIR/t.IMGFMT.ovl2",
+            "backing_file_depth": 2,
              "encrypted": false,
+            "detect_zeroes": "off",
              "bps": 0,
              "bps_rd": 0,
-            "cache": {
-                "no-flush": false,
-                "direct": false,
-                "writeback": true
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
+            "image": {
+                "filename": "TEST_DIR/t.IMGFMT.ovl3",
+                "format": "IMGFMT",
+                "dirty-flag": false,
+                "actual-size": SIZE,
+                "virtual-size": 67108864,
+                "cluster-size": 65536,
+                "backing-filename": "TEST_DIR/t.IMGFMT.ovl2",
+                "full-backing-filename": "TEST_DIR/t.IMGFMT.ovl2",
+                "backing-filename-format": "IMGFMT",
+                "backing-image": {
+                    "filename": "TEST_DIR/t.IMGFMT.ovl2",
+                    "format": "IMGFMT",
+                    "dirty-flag": false,
+                    "actual-size": SIZE,
+                    "virtual-size": 67108864,
+                    "cluster-size": 65536,
+                    "backing-filename": "TEST_DIR/t.IMGFMT.base",
+                    "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
+                    "backing-filename-format": "IMGFMT",
+                    "backing-image": {
+                        "filename": "TEST_DIR/t.IMGFMT.base",
+                        "format": "IMGFMT",
+                        "dirty-flag": false,
+                        "actual-size": SIZE,
+                        "virtual-size": 67108864,
+                        "cluster-size": 65536,
+                    },
+                },
              },
-            "file": "TEST_DIR/t.IMGFMT.ovl3"
+            "cache": {
+                "writeback": true,
+                "direct": false,
+                "no-flush": false
+            },
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
+            "file": "TEST_DIR/t.IMGFMT.ovl3",
+            "node-name": "NODE_NAME",
+            "ro": false,
+            "drv": "file",
+            "backing_file_depth": 0,
+            "encrypted": false,
              "detect_zeroes": "off",
+            "bps": 0,
+            "bps_rd": 0,
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
              "image": {
-                "virtual-size": 197120,
                  "filename": "TEST_DIR/t.IMGFMT.ovl3",
                  "format": "file",
+                "dirty-flag": false,
                  "actual-size": SIZE,
-                "dirty-flag": false
+                "virtual-size": 197120
              },
-            "iops_wr": 0,
-            "ro": false,
-            "node-name": "NODE_NAME",
-            "backing_file_depth": 0,
-            "drv": "file",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
-            "encrypted": false,
-            "bps": 0,
-            "bps_rd": 0,
              "cache": {
-                "no-flush": false,
+                "writeback": true,
                  "direct": false,
-                "writeback": true
+                "no-flush": false
              },
-            "file": "TEST_DIR/t.IMGFMT.ovl3"
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
-            "detect_zeroes": "off",
-            "image": {
-                "virtual-size": 67108864,
-                "filename": "TEST_DIR/t.IMGFMT.base",
-                "cluster-size": 65536,
-                "format": "IMGFMT",
-                "actual-size": SIZE,
-                "dirty-flag": false
-            },
-            "iops_wr": 0,
+            "file": "TEST_DIR/t.IMGFMT.base",
+            "node-name": "NODE_NAME",
              "ro": true,
-            "node-name": "NODE_NAME",
-            "backing_file_depth": 0,
              "drv": "IMGFMT",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
+            "backing_file_depth": 0,
              "encrypted": false,
+            "detect_zeroes": "off",
              "bps": 0,
              "bps_rd": 0,
-            "cache": {
-                "no-flush": false,
-                "direct": false,
-                "writeback": true
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
+            "image": {
+                "filename": "TEST_DIR/t.IMGFMT.base",
+                "format": "IMGFMT",
+                "dirty-flag": false,
+                "actual-size": SIZE,
+                "virtual-size": 67108864,
+                "cluster-size": 65536,
              },
-            "file": "TEST_DIR/t.IMGFMT.base"
+            "cache": {
+                "writeback": true,
+                "direct": false,
+                "no-flush": false
+            },
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
+            "file": "TEST_DIR/t.IMGFMT.base",
+            "node-name": "NODE_NAME",
+            "ro": true,
+            "drv": "file",
+            "backing_file_depth": 0,
+            "encrypted": false,
              "detect_zeroes": "off",
+            "bps": 0,
+            "bps_rd": 0,
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
              "image": {
-                "virtual-size": 393216,
                  "filename": "TEST_DIR/t.IMGFMT.base",
                  "format": "file",
+                "dirty-flag": false,
                  "actual-size": SIZE,
-                "dirty-flag": false
+                "virtual-size": 393216
              },
-            "iops_wr": 0,
-            "ro": true,
-            "node-name": "NODE_NAME",
-            "backing_file_depth": 0,
-            "drv": "file",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
-            "encrypted": false,
-            "bps": 0,
-            "bps_rd": 0,
              "cache": {
-                "no-flush": false,
+                "writeback": true,
                  "direct": false,
-                "writeback": true
+                "no-flush": false
              },
-            "file": "TEST_DIR/t.IMGFMT.base"
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
-            "detect_zeroes": "off",
-            "image": {
-                "backing-image": {
-                    "virtual-size": 67108864,
-                    "filename": "TEST_DIR/t.IMGFMT.base",
-                    "cluster-size": 65536,
-                    "format": "IMGFMT",
-                    "actual-size": SIZE,
-                    "dirty-flag": false
-                },
-                "backing-filename-format": "IMGFMT",
-                "virtual-size": 67108864,
-                "filename": "TEST_DIR/t.IMGFMT",
-                "cluster-size": 65536,
-                "format": "IMGFMT",
-                "actual-size": SIZE,
-                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
-                "backing-filename": "TEST_DIR/t.IMGFMT.base",
-                "dirty-flag": false
-            },
-            "iops_wr": 0,
-            "ro": false,
+            "file": "TEST_DIR/t.IMGFMT",
              "node-name": "top",
-            "backing_file_depth": 1,
+            "ro": false,
              "drv": "IMGFMT",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
              "backing_file": "TEST_DIR/t.IMGFMT.base",
+            "backing_file_depth": 1,
              "encrypted": false,
+            "detect_zeroes": "off",
              "bps": 0,
              "bps_rd": 0,
-            "cache": {
-                "no-flush": false,
-                "direct": false,
-                "writeback": true
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
+            "image": {
+                "filename": "TEST_DIR/t.IMGFMT",
+                "format": "IMGFMT",
+                "dirty-flag": false,
+                "actual-size": SIZE,
+                "virtual-size": 67108864,
+                "cluster-size": 65536,
+                "backing-filename": "TEST_DIR/t.IMGFMT.base",
+                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
+                "backing-filename-format": "IMGFMT",
+                "backing-image": {
+                    "filename": "TEST_DIR/t.IMGFMT.base",
+                    "format": "IMGFMT",
+                    "dirty-flag": false,
+                    "actual-size": SIZE,
+                    "virtual-size": 67108864,
+                    "cluster-size": 65536,
+                },
              },
-            "file": "TEST_DIR/t.IMGFMT"
+            "cache": {
+                "writeback": true,
+                "direct": false,
+                "no-flush": false
+            },
+            "write_threshold": 0
          },
          {
-            "iops_rd": 0,
-            "detect_zeroes": "off",
-            "image": {
-                "virtual-size": 197120,
-                "filename": "TEST_DIR/t.IMGFMT",
-                "format": "file",
-                "actual-size": SIZE,
-                "dirty-flag": false
-            },
-            "iops_wr": 0,
-            "ro": false,
+            "file": "TEST_DIR/t.IMGFMT",
              "node-name": "NODE_NAME",
-            "backing_file_depth": 0,
+            "ro": false,
              "drv": "file",
-            "iops": 0,
-            "bps_wr": 0,
-            "write_threshold": 0,
+            "backing_file_depth": 0,
              "encrypted": false,
+            "detect_zeroes": "off",
              "bps": 0,
              "bps_rd": 0,
-            "cache": {
-                "no-flush": false,
-                "direct": false,
-                "writeback": true
+            "bps_wr": 0,
+            "iops": 0,
+            "iops_rd": 0,
+            "iops_wr": 0,
+            "image": {
+                "filename": "TEST_DIR/t.IMGFMT",
+                "format": "file",
+                "dirty-flag": false,
+                "actual-size": SIZE,
+                "virtual-size": 197120
              },
-            "file": "TEST_DIR/t.IMGFMT"
+            "cache": {
+                "writeback": true,
+                "direct": false,
+                "no-flush": false
+            },
+            "write_threshold": 0
          }
      ]
  }
@@ -801,11 +801,11 @@ wrote 65536/65536 bytes at offset 1048576
      }
  }
  {
+    "event": "SHUTDOWN",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "SHUTDOWN",
      "data": {
          "guest": false,
          "reason": "host-qmp-quit"
diff --git a/tests/qemu-iotests/195.out b/tests/qemu-iotests/195.out
index ec84df5012..485d7a1115 100644
--- a/tests/qemu-iotests/195.out
+++ b/tests/qemu-iotests/195.out
@@ -22,11 +22,11 @@ Testing: -drive 
if=none,file=TEST_DIR/t.IMGFMT,backing.node-name=mid
      }
  }
  {
+    "event": "SHUTDOWN",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "SHUTDOWN",
      "data": {
          "guest": false,
          "reason": "host-qmp-quit"
@@ -60,11 +60,11 @@ Testing: -drive if=none,file=TEST_DIR/t.IMGFMT,node-name=top
      }
  }
  {
+    "event": "SHUTDOWN",
      "timestamp": {
          "seconds":  TIMESTAMP,
          "microseconds":  TIMESTAMP
      },
-    "event": "SHUTDOWN",
      "data": {
          "guest": false,
          "reason": "host-qmp-quit"
diff --git a/tests/qemu-iotests/229.out b/tests/qemu-iotests/229.out
index 7d2bfbfbe6..3f4391df6e 100644
--- a/tests/qemu-iotests/229.out
+++ b/tests/qemu-iotests/229.out
@@ -16,19 +16,19 @@ wrote 2097152/2097152 bytes at offset 0
                                 'mode':   'existing',
                                 'on-source-error': 'stop',
                                 'on-target-error': 'stop' }}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "testdisk"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "testdisk"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "testdisk", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "testdisk", "status": "running"}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": 
"testdisk", "operation": "write", "action": "stop"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "paused", "id": "testdisk"}}
+{"event": "BLOCK_JOB_ERROR", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"device": 
"testdisk", "operation": "write", "action": "stop"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "testdisk", "status": "paused"}}
=== Force cancel job paused in error state === {'execute': 'block-job-cancel',
                   'arguments': { 'device': 'testdisk',
                                  'force': true}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "testdisk"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "testdisk", "status": "running"}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "aborting", "id": "testdisk"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_CANCELLED", "data": {"device": 
"testdisk", "len": 2097152, "offset": OFFSET, "speed": 0, "type": "mirror"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "testdisk", "status": "aborting"}}
+{"event": "BLOCK_JOB_CANCELLED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "mirror", 
"device": "testdisk", "len": 2097152, "offset": OFFSET, "speed": 0}}
  *** done
diff --git a/tests/qemu-iotests/244.out b/tests/qemu-iotests/244.out
index 5e03add054..57cffee1ea 100644
--- a/tests/qemu-iotests/244.out
+++ b/tests/qemu-iotests/244.out
@@ -156,14 +156,14 @@ wrote 1048576/1048576 bytes at offset 0
                 "data-file": "data",
                 "data-file-raw": true
             } } }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "create"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "create"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "running"}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "waiting", "id": "create"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "pending", "id": "create"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "create"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "waiting"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "pending"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "concluded"}}
  { "execute": "job-dismiss", "arguments": { "id": "create" } }
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "create"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "create", "status": "null"}}
  {"return": {}}
Comparing pattern:
diff --git a/tests/qemu-iotests/249.out b/tests/qemu-iotests/249.out
index d2bf9be85e..a1a1a1b851 100644
--- a/tests/qemu-iotests/249.out
+++ b/tests/qemu-iotests/249.out
@@ -16,8 +16,8 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 
backing_file=TEST_DIR/t.
  { 'execute': 'block-commit',
         'arguments': {'job-id': 'job0', 'device': 'none1', 'top-node': 'int',
                       'filter-node-name': '1234'}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "null"}}
  {"error": {"class": "GenericError", "desc": "Invalid node-name: '1234'"}}
=== Send a write command to a drive opened in read-only mode (2)
@@ -30,14 +30,14 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 
backing_file=TEST_DIR/t.
{ 'execute': 'block-commit',
         'arguments': {'job-id': 'job0', 'device': 'none1', 'top-node': 'int'}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "running", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "running"}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "waiting", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "pending", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "job0", 
"len": 1048576, "offset": 1048576, "speed": 0, "type": "commit"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "concluded", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "waiting"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "pending"}}
+{"event": "BLOCK_JOB_COMPLETED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "commit", 
"device": "job0", "len": 1048576, "offset": 1048576, "speed": 0}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "concluded"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "null"}}
=== Send a write command to a drive opened in read-only mode (3) diff --git a/tests/qemu-iotests/tests/qsd-jobs.out b/tests/qemu-iotests/tests/qsd-jobs.out
index c1bc9b8356..336a5c3946 100644
--- a/tests/qemu-iotests/tests/qsd-jobs.out
+++ b/tests/qemu-iotests/tests/qsd-jobs.out
@@ -8,15 +8,15 @@ QMP_VERSION
  {"return": {}}
  {"return": {}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_JOB_CANCELLED", "data": {"device": "job0", 
"len": 0, "offset": 0, "speed": 0, "type": "commit"}}
+{"event": "BLOCK_JOB_CANCELLED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": {"type": "commit", 
"device": "job0", "len": 0, "offset": 0, "speed": 0}}
=== Streaming can't get permission on base node === QMP_VERSION
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "created", "id": "job0"}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": 
{"status": "null", "id": "job0"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "created"}}
+{"event": "JOB_STATUS_CHANGE", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "data": 
{"id": "job0", "status": "null"}}
  {"error": {"class": "GenericError", "desc": "Permission conflict on node 
'fmt_base': permissions 'write' are both required by an unnamed block device (uses node 'fmt_base' as 'root' child) and unshared 
by stream job 'job0' (uses node 'fmt_base' as 'intermediate node' child)."}}
  {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", 
"data": {"id": "export1"}}
+{"event": "BLOCK_EXPORT_DELETED", "timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, 
"data": {"id": "export1"}}
  *** done


ATB,

Mark.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]