* [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
* [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 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
* 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.