All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit
@ 2014-06-25 19:35 Jeff Cody
  2014-06-25 19:35 ` [Qemu-devel] [PATCH v7 for 2.1 1/2] block: simplify bdrv_find_base() and bdrv_find_overlay() Jeff Cody
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Jeff Cody @ 2014-06-25 19:35 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, benoit.canet, pkrempa, famz, stefanha

This is a split of the previous series "Modify block jobs to use node-names"

This series includes some function cleanup, and making 'top' optional
for block-commit.  This in turns makes it easier for libvirt to probe
that 2.1 supports commit of the active layer.

Jeff Cody (2):
  block: simplify bdrv_find_base() and bdrv_find_overlay()
  block: make 'top' argument to block-commit optional

 block.c                | 45 ++++++++++-----------------------------------
 blockdev.c             | 16 ++++++++++++++--
 qapi/block-core.json   |  7 ++++---
 qmp-commands.hx        |  5 +++--
 tests/qemu-iotests/040 | 28 ++++++++++++++++++----------
 5 files changed, 49 insertions(+), 52 deletions(-)

-- 
1.9.3

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v7 for 2.1 1/2] block: simplify bdrv_find_base() and bdrv_find_overlay()
  2014-06-25 19:35 [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit Jeff Cody
@ 2014-06-25 19:35 ` Jeff Cody
  2014-06-25 19:35 ` [Qemu-devel] [PATCH v7 for 2.1 2/2] block: make 'top' argument to block-commit optional Jeff Cody
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Jeff Cody @ 2014-06-25 19:35 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, benoit.canet, pkrempa, famz, stefanha

This simplifies the function bdrv_find_overlay().  With this change,
bdrv_find_base() is just a subset of usage of bdrv_find_overlay(),
so this also takes advantage of that.

Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Benoit Canet <benoit@irqsave.net>
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
 block.c | 45 ++++++++++-----------------------------------
 1 file changed, 10 insertions(+), 35 deletions(-)

diff --git a/block.c b/block.c
index 217f523..a91809c 100644
--- a/block.c
+++ b/block.c
@@ -2513,32 +2513,23 @@ int bdrv_change_backing_file(BlockDriverState *bs,
  *
  * Returns NULL if bs is not found in active's image chain,
  * or if active == bs.
+ *
+ * Returns the bottommost base image if bs == NULL.
  */
 BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
                                     BlockDriverState *bs)
 {
-    BlockDriverState *overlay = NULL;
-    BlockDriverState *intermediate;
-
-    assert(active != NULL);
-    assert(bs != NULL);
-
-    /* if bs is the same as active, then by definition it has no overlay
-     */
-    if (active == bs) {
-        return NULL;
+    while (active && bs != active->backing_hd) {
+        active = active->backing_hd;
     }
 
-    intermediate = active;
-    while (intermediate->backing_hd) {
-        if (intermediate->backing_hd == bs) {
-            overlay = intermediate;
-            break;
-        }
-        intermediate = intermediate->backing_hd;
-    }
+    return active;
+}
 
-    return overlay;
+/* Given a BDS, searches for the base layer. */
+BlockDriverState *bdrv_find_base(BlockDriverState *bs)
+{
+    return bdrv_find_overlay(bs, NULL);
 }
 
 typedef struct BlkIntermediateStates {
@@ -4333,22 +4324,6 @@ int bdrv_get_backing_file_depth(BlockDriverState *bs)
     return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
 }
 
-BlockDriverState *bdrv_find_base(BlockDriverState *bs)
-{
-    BlockDriverState *curr_bs = NULL;
-
-    if (!bs) {
-        return NULL;
-    }
-
-    curr_bs = bs;
-
-    while (curr_bs->backing_hd) {
-        curr_bs = curr_bs->backing_hd;
-    }
-    return curr_bs;
-}
-
 /**************************************************************/
 /* async I/Os */
 
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v7 for 2.1 2/2] block: make 'top' argument to block-commit optional
  2014-06-25 19:35 [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit Jeff Cody
  2014-06-25 19:35 ` [Qemu-devel] [PATCH v7 for 2.1 1/2] block: simplify bdrv_find_base() and bdrv_find_overlay() Jeff Cody
@ 2014-06-25 19:35 ` Jeff Cody
  2014-06-30 13:14   ` [Qemu-devel] [PATCH v8 " Kevin Wolf
  2014-06-25 19:41 ` [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit Jeff Cody
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 8+ messages in thread
From: Jeff Cody @ 2014-06-25 19:35 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, benoit.canet, pkrempa, famz, stefanha

Now that active layer block-commit is supported, the 'top' argument
no longer needs to be mandatory.

Change it to optional, with the default being the active layer in the
device chain.

Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Benoit Canet <benoit@irqsave.net>
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
 blockdev.c             | 16 ++++++++++++++--
 qapi/block-core.json   |  7 ++++---
 qmp-commands.hx        |  5 +++--
 tests/qemu-iotests/040 | 28 ++++++++++++++++++----------
 4 files changed, 39 insertions(+), 17 deletions(-)

diff --git a/blockdev.c b/blockdev.c
index 03ab153..858bd75 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1908,7 +1908,8 @@ void qmp_block_stream(const char *device, bool has_base,
 }
 
 void qmp_block_commit(const char *device,
-                      bool has_base, const char *base, const char *top,
+                      bool has_base, const char *base,
+                      bool has_top, const char *top,
                       bool has_speed, int64_t speed,
                       Error **errp)
 {
@@ -1927,6 +1928,11 @@ void qmp_block_commit(const char *device,
     /* drain all i/o before commits */
     bdrv_drain_all();
 
+    /* Important Note:
+     *  libvirt relies on the DeviceNotFound error class in order to probe for
+     *  live commit feature versions; for this to work, we must make sure to
+     *  perform the device lookup before any generic errors that may occur in a
+     *  scenario in which all optional arguments are omitted. */
     bs = bdrv_find(device);
     if (!bs) {
         error_set(errp, QERR_DEVICE_NOT_FOUND, device);
@@ -1940,7 +1946,7 @@ void qmp_block_commit(const char *device,
     /* default top_bs is the active layer */
     top_bs = bs;
 
-    if (top) {
+    if (has_top && top) {
         if (strcmp(bs->filename, top) != 0) {
             top_bs = bdrv_find_backing_image(bs, top);
         }
@@ -1962,6 +1968,12 @@ void qmp_block_commit(const char *device,
         return;
     }
 
+    /* Do not allow attempts to commit an image into itself */
+    if (top_bs == base_bs) {
+        error_setg(errp, "cannot commit an image into itself");
+        return;
+    }
+
     if (top_bs == bs) {
         commit_active_start(bs, base_bs, speed, on_error, block_job_cb,
                             bs, &local_err);
diff --git a/qapi/block-core.json b/qapi/block-core.json
index af6b436..ecd90ee 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -690,8 +690,9 @@
 # @base:   #optional The file name of the backing image to write data into.
 #                    If not specified, this is the deepest backing image
 #
-# @top:              The file name of the backing image within the image chain,
-#                    which contains the topmost data to be committed down.
+# @top:    #optional The file name of the backing image within the image chain,
+#                    which contains the topmost data to be committed down. If
+#                    not specified, this is the active layer.
 #
 #                    If top == base, that is an error.
 #                    If top == active, the job will not be completed by itself,
@@ -719,7 +720,7 @@
 #
 ##
 { 'command': 'block-commit',
-  'data': { 'device': 'str', '*base': 'str', 'top': 'str',
+  'data': { 'device': 'str', '*base': 'str', '*top': 'str',
             '*speed': 'int' } }
 
 ##
diff --git a/qmp-commands.hx b/qmp-commands.hx
index e4a1c80..a6a8fec 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -985,7 +985,7 @@ EQMP
 
     {
         .name       = "block-commit",
-        .args_type  = "device:B,base:s?,top:s,speed:o?",
+        .args_type  = "device:B,base:s?,top:s?,speed:o?",
         .mhandler.cmd_new = qmp_marshal_input_block_commit,
     },
 
@@ -1003,7 +1003,8 @@ Arguments:
           If not specified, this is the deepest backing image
           (json-string, optional)
 - "top":  The file name of the backing image within the image chain,
-          which contains the topmost data to be committed down.
+          which contains the topmost data to be committed down. If
+          not specified, this is the active layer. (json-string, optional)
 
           If top == base, that is an error.
           If top == active, the job will not be completed by itself,
diff --git a/tests/qemu-iotests/040 b/tests/qemu-iotests/040
index 734b6a6..803b0c7 100755
--- a/tests/qemu-iotests/040
+++ b/tests/qemu-iotests/040
@@ -35,11 +35,7 @@ test_img = os.path.join(iotests.test_dir, 'test.img')
 class ImageCommitTestCase(iotests.QMPTestCase):
     '''Abstract base class for image commit test cases'''
 
-    def run_commit_test(self, top, base):
-        self.assert_no_active_block_jobs()
-        result = self.vm.qmp('block-commit', device='drive0', top=top, base=base)
-        self.assert_qmp(result, 'return', {})
-
+    def wait_for_complete(self):
         completed = False
         while not completed:
             for event in self.vm.get_qmp_events(wait=True):
@@ -58,6 +54,18 @@ class ImageCommitTestCase(iotests.QMPTestCase):
         self.assert_no_active_block_jobs()
         self.vm.shutdown()
 
+    def run_commit_test(self, top, base):
+        self.assert_no_active_block_jobs()
+        result = self.vm.qmp('block-commit', device='drive0', top=top, base=base)
+        self.assert_qmp(result, 'return', {})
+        self.wait_for_complete()
+
+    def run_default_commit_test(self):
+        self.assert_no_active_block_jobs()
+        result = self.vm.qmp('block-commit', device='drive0')
+        self.assert_qmp(result, 'return', {})
+        self.wait_for_complete()
+
 class TestSingleDrive(ImageCommitTestCase):
     image_len = 1 * 1024 * 1024
     test_len = 1 * 1024 * 256
@@ -109,17 +117,17 @@ class TestSingleDrive(ImageCommitTestCase):
         self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', backing_img).find("verification failed"))
         self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', backing_img).find("verification failed"))
 
+    def test_top_is_default_active(self):
+        self.run_default_commit_test()
+        self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', backing_img).find("verification failed"))
+        self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', backing_img).find("verification failed"))
+
     def test_top_and_base_reversed(self):
         self.assert_no_active_block_jobs()
         result = self.vm.qmp('block-commit', device='drive0', top='%s' % backing_img, base='%s' % mid_img)
         self.assert_qmp(result, 'error/class', 'GenericError')
         self.assert_qmp(result, 'error/desc', 'Base \'%s\' not found' % mid_img)
 
-    def test_top_omitted(self):
-        self.assert_no_active_block_jobs()
-        result = self.vm.qmp('block-commit', device='drive0')
-        self.assert_qmp(result, 'error/class', 'GenericError')
-        self.assert_qmp(result, 'error/desc', "Parameter 'top' is missing")
 
 class TestRelativePaths(ImageCommitTestCase):
     image_len = 1 * 1024 * 1024
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit
  2014-06-25 19:35 [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit Jeff Cody
  2014-06-25 19:35 ` [Qemu-devel] [PATCH v7 for 2.1 1/2] block: simplify bdrv_find_base() and bdrv_find_overlay() Jeff Cody
  2014-06-25 19:35 ` [Qemu-devel] [PATCH v7 for 2.1 2/2] block: make 'top' argument to block-commit optional Jeff Cody
@ 2014-06-25 19:41 ` Jeff Cody
  2014-06-25 19:53 ` Eric Blake
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Jeff Cody @ 2014-06-25 19:41 UTC (permalink / raw)
  To: qemu-devel

On Wed, Jun 25, 2014 at 03:35:25PM -0400, Jeff Cody wrote:
> This is a split of the previous series "Modify block jobs to use node-names"
> 
> This series includes some function cleanup, and making 'top' optional
> for block-commit.  This in turns makes it easier for libvirt to probe
> that 2.1 supports commit of the active layer.
> 
> Jeff Cody (2):
>   block: simplify bdrv_find_base() and bdrv_find_overlay()
>   block: make 'top' argument to block-commit optional
> 
>  block.c                | 45 ++++++++++-----------------------------------
>  blockdev.c             | 16 ++++++++++++++--
>  qapi/block-core.json   |  7 ++++---
>  qmp-commands.hx        |  5 +++--
>  tests/qemu-iotests/040 | 28 ++++++++++++++++++----------
>  5 files changed, 49 insertions(+), 52 deletions(-)
> 
> -- 
> 1.9.3
> 

Eric,

Sorry, meant to cc you on this series

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit
  2014-06-25 19:35 [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit Jeff Cody
                   ` (2 preceding siblings ...)
  2014-06-25 19:41 ` [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit Jeff Cody
@ 2014-06-25 19:53 ` Eric Blake
  2014-06-30 13:09 ` Kevin Wolf
  2014-06-30 15:19 ` Stefan Hajnoczi
  5 siblings, 0 replies; 8+ messages in thread
From: Eric Blake @ 2014-06-25 19:53 UTC (permalink / raw)
  To: Jeff Cody, qemu-devel; +Cc: kwolf, benoit.canet, pkrempa, famz, stefanha

[-- Attachment #1: Type: text/plain, Size: 641 bytes --]

On 06/25/2014 01:35 PM, Jeff Cody wrote:
> This is a split of the previous series "Modify block jobs to use node-names"
> 
> This series includes some function cleanup, and making 'top' optional
> for block-commit.  This in turns makes it easier for libvirt to probe
> that 2.1 supports commit of the active layer.
> 
> Jeff Cody (2):
>   block: simplify bdrv_find_base() and bdrv_find_overlay()
>   block: make 'top' argument to block-commit optional

This series is ready to go now, and should be non-controversial.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit
  2014-06-25 19:35 [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit Jeff Cody
                   ` (3 preceding siblings ...)
  2014-06-25 19:53 ` Eric Blake
@ 2014-06-30 13:09 ` Kevin Wolf
  2014-06-30 15:19 ` Stefan Hajnoczi
  5 siblings, 0 replies; 8+ messages in thread
From: Kevin Wolf @ 2014-06-30 13:09 UTC (permalink / raw)
  To: Jeff Cody; +Cc: benoit.canet, pkrempa, famz, qemu-devel, stefanha

Am 25.06.2014 um 21:35 hat Jeff Cody geschrieben:
> This is a split of the previous series "Modify block jobs to use node-names"
> 
> This series includes some function cleanup, and making 'top' optional
> for block-commit.  This in turns makes it easier for libvirt to probe
> that 2.1 supports commit of the active layer.
> 
> Jeff Cody (2):
>   block: simplify bdrv_find_base() and bdrv_find_overlay()
>   block: make 'top' argument to block-commit optional

Reviewed-by: Kevin Wolf <kwolf@redhat.com>

Patch 2 has a conflict in the test case. I'll post a v8 for it.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v8 2/2] block: make 'top' argument to block-commit optional
  2014-06-25 19:35 ` [Qemu-devel] [PATCH v7 for 2.1 2/2] block: make 'top' argument to block-commit optional Jeff Cody
@ 2014-06-30 13:14   ` Kevin Wolf
  0 siblings, 0 replies; 8+ messages in thread
From: Kevin Wolf @ 2014-06-30 13:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, benoit.canet, pkrempa, famz, jcody, stefanha

From: Jeff Cody <jcody@redhat.com>

Now that active layer block-commit is supported, the 'top' argument
no longer needs to be mandatory.

Change it to optional, with the default being the active layer in the
device chain.

[kwolf: Rebased and resolved conflict in tests/qemu-iotests/040]

Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Benoit Canet <benoit@irqsave.net>
Signed-off-by: Jeff Cody <jcody@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 blockdev.c             | 16 ++++++++++++++--
 qapi/block-core.json   |  7 ++++---
 qmp-commands.hx        |  5 +++--
 tests/qemu-iotests/040 | 28 ++++++++++++++++++----------
 4 files changed, 39 insertions(+), 17 deletions(-)

diff --git a/blockdev.c b/blockdev.c
index 69b7c2a..79ce52b 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1913,7 +1913,8 @@ void qmp_block_stream(const char *device, bool has_base,
 }
 
 void qmp_block_commit(const char *device,
-                      bool has_base, const char *base, const char *top,
+                      bool has_base, const char *base,
+                      bool has_top, const char *top,
                       bool has_speed, int64_t speed,
                       Error **errp)
 {
@@ -1932,6 +1933,11 @@ void qmp_block_commit(const char *device,
     /* drain all i/o before commits */
     bdrv_drain_all();
 
+    /* Important Note:
+     *  libvirt relies on the DeviceNotFound error class in order to probe for
+     *  live commit feature versions; for this to work, we must make sure to
+     *  perform the device lookup before any generic errors that may occur in a
+     *  scenario in which all optional arguments are omitted. */
     bs = bdrv_find(device);
     if (!bs) {
         error_set(errp, QERR_DEVICE_NOT_FOUND, device);
@@ -1945,7 +1951,7 @@ void qmp_block_commit(const char *device,
     /* default top_bs is the active layer */
     top_bs = bs;
 
-    if (top) {
+    if (has_top && top) {
         if (strcmp(bs->filename, top) != 0) {
             top_bs = bdrv_find_backing_image(bs, top);
         }
@@ -1967,6 +1973,12 @@ void qmp_block_commit(const char *device,
         return;
     }
 
+    /* Do not allow attempts to commit an image into itself */
+    if (top_bs == base_bs) {
+        error_setg(errp, "cannot commit an image into itself");
+        return;
+    }
+
     if (top_bs == bs) {
         commit_active_start(bs, base_bs, speed, on_error, block_job_cb,
                             bs, &local_err);
diff --git a/qapi/block-core.json b/qapi/block-core.json
index faf394c..6a697f1 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -690,8 +690,9 @@
 # @base:   #optional The file name of the backing image to write data into.
 #                    If not specified, this is the deepest backing image
 #
-# @top:              The file name of the backing image within the image chain,
-#                    which contains the topmost data to be committed down.
+# @top:    #optional The file name of the backing image within the image chain,
+#                    which contains the topmost data to be committed down. If
+#                    not specified, this is the active layer.
 #
 #                    If top == base, that is an error.
 #                    If top == active, the job will not be completed by itself,
@@ -719,7 +720,7 @@
 #
 ##
 { 'command': 'block-commit',
-  'data': { 'device': 'str', '*base': 'str', 'top': 'str',
+  'data': { 'device': 'str', '*base': 'str', '*top': 'str',
             '*speed': 'int' } }
 
 ##
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 1ea18b2..8c5fdb5 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -985,7 +985,7 @@ EQMP
 
     {
         .name       = "block-commit",
-        .args_type  = "device:B,base:s?,top:s,speed:o?",
+        .args_type  = "device:B,base:s?,top:s?,speed:o?",
         .mhandler.cmd_new = qmp_marshal_input_block_commit,
     },
 
@@ -1003,7 +1003,8 @@ Arguments:
           If not specified, this is the deepest backing image
           (json-string, optional)
 - "top":  The file name of the backing image within the image chain,
-          which contains the topmost data to be committed down.
+          which contains the topmost data to be committed down. If
+          not specified, this is the active layer. (json-string, optional)
 
           If top == base, that is an error.
           If top == active, the job will not be completed by itself,
diff --git a/tests/qemu-iotests/040 b/tests/qemu-iotests/040
index d166810..f1e16c1 100755
--- a/tests/qemu-iotests/040
+++ b/tests/qemu-iotests/040
@@ -35,11 +35,7 @@ test_img = os.path.join(iotests.test_dir, 'test.img')
 class ImageCommitTestCase(iotests.QMPTestCase):
     '''Abstract base class for image commit test cases'''
 
-    def run_commit_test(self, top, base, need_ready=False):
-        self.assert_no_active_block_jobs()
-        result = self.vm.qmp('block-commit', device='drive0', top=top, base=base)
-        self.assert_qmp(result, 'return', {})
-
+    def wait_for_complete(self, need_ready=False):
         completed = False
         ready = False
         while not completed:
@@ -62,6 +58,18 @@ class ImageCommitTestCase(iotests.QMPTestCase):
         self.assert_no_active_block_jobs()
         self.vm.shutdown()
 
+    def run_commit_test(self, top, base, need_ready=False):
+        self.assert_no_active_block_jobs()
+        result = self.vm.qmp('block-commit', device='drive0', top=top, base=base)
+        self.assert_qmp(result, 'return', {})
+        self.wait_for_complete(need_ready)
+
+    def run_default_commit_test(self):
+        self.assert_no_active_block_jobs()
+        result = self.vm.qmp('block-commit', device='drive0')
+        self.assert_qmp(result, 'return', {})
+        self.wait_for_complete()
+
 class TestSingleDrive(ImageCommitTestCase):
     image_len = 1 * 1024 * 1024
     test_len = 1 * 1024 * 256
@@ -113,17 +121,17 @@ class TestSingleDrive(ImageCommitTestCase):
         self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', backing_img).find("verification failed"))
         self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', backing_img).find("verification failed"))
 
+    def test_top_is_default_active(self):
+        self.run_default_commit_test()
+        self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', backing_img).find("verification failed"))
+        self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', backing_img).find("verification failed"))
+
     def test_top_and_base_reversed(self):
         self.assert_no_active_block_jobs()
         result = self.vm.qmp('block-commit', device='drive0', top='%s' % backing_img, base='%s' % mid_img)
         self.assert_qmp(result, 'error/class', 'GenericError')
         self.assert_qmp(result, 'error/desc', 'Base \'%s\' not found' % mid_img)
 
-    def test_top_omitted(self):
-        self.assert_no_active_block_jobs()
-        result = self.vm.qmp('block-commit', device='drive0')
-        self.assert_qmp(result, 'error/class', 'GenericError')
-        self.assert_qmp(result, 'error/desc', "Parameter 'top' is missing")
 
 class TestRelativePaths(ImageCommitTestCase):
     image_len = 1 * 1024 * 1024
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit
  2014-06-25 19:35 [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit Jeff Cody
                   ` (4 preceding siblings ...)
  2014-06-30 13:09 ` Kevin Wolf
@ 2014-06-30 15:19 ` Stefan Hajnoczi
  5 siblings, 0 replies; 8+ messages in thread
From: Stefan Hajnoczi @ 2014-06-30 15:19 UTC (permalink / raw)
  To: Jeff Cody; +Cc: kwolf, benoit.canet, pkrempa, famz, qemu-devel, stefanha

[-- Attachment #1: Type: text/plain, Size: 928 bytes --]

On Wed, Jun 25, 2014 at 03:35:25PM -0400, Jeff Cody wrote:
> This is a split of the previous series "Modify block jobs to use node-names"
> 
> This series includes some function cleanup, and making 'top' optional
> for block-commit.  This in turns makes it easier for libvirt to probe
> that 2.1 supports commit of the active layer.
> 
> Jeff Cody (2):
>   block: simplify bdrv_find_base() and bdrv_find_overlay()
>   block: make 'top' argument to block-commit optional
> 
>  block.c                | 45 ++++++++++-----------------------------------
>  blockdev.c             | 16 ++++++++++++++--
>  qapi/block-core.json   |  7 ++++---
>  qmp-commands.hx        |  5 +++--
>  tests/qemu-iotests/040 | 28 ++++++++++++++++++----------
>  5 files changed, 49 insertions(+), 52 deletions(-)
> 
> -- 
> 1.9.3
> 
> 

Thanks, applied to my block tree:
https://github.com/stefanha/qemu/commits/block

Stefan

[-- Attachment #2: Type: application/pgp-signature, Size: 473 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-06-30 15:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-25 19:35 [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit Jeff Cody
2014-06-25 19:35 ` [Qemu-devel] [PATCH v7 for 2.1 1/2] block: simplify bdrv_find_base() and bdrv_find_overlay() Jeff Cody
2014-06-25 19:35 ` [Qemu-devel] [PATCH v7 for 2.1 2/2] block: make 'top' argument to block-commit optional Jeff Cody
2014-06-30 13:14   ` [Qemu-devel] [PATCH v8 " Kevin Wolf
2014-06-25 19:41 ` [Qemu-devel] [PATCH v7 for 2.1 0/2] Make 'top' optional to block commit Jeff Cody
2014-06-25 19:53 ` Eric Blake
2014-06-30 13:09 ` Kevin Wolf
2014-06-30 15:19 ` Stefan Hajnoczi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.