Message ID | 421ff837d7c7dc9f661d71b2606c25b5a2b8ac3c.1350398238.git.jcody@redhat.com |
---|---|
State | New |
Headers | show |
On 10/16/2012 08:44 AM, Jeff Cody wrote: > This simplifies some code and error checking, and also fixes a bug. > > bdrv_find_backing_image() should only be passed absolute filenames, > or filenames relative to the chain. In the QMP message handler for > block commit, when looking up the base do so from the determined top > image, so we know it is reachable from top. > > Signed-off-by: Jeff Cody <jcody@redhat.com> > --- > block/commit.c | 9 --------- > blockdev.c | 21 +++++++++++---------- > 2 files changed, 11 insertions(+), 19 deletions(-) As long as you are touching this code: > @@ -1182,6 +1172,17 @@ void qmp_block_commit(const char *device, > return; > } > > + if (base && has_base) { please swap this to 'has_base && base' to avoid any potential of valgrind warnings about conditional jump based on uninitialized memory. Also, I raised another bug[1] about a bad error message regarding top_bs, if the user passes a different spelling than the canonical name of the active image. Is that worth fixing in this series, or is it okay to leave it until you actually add support for committing the top image? [1] https://lists.gnu.org/archive/html/qemu-devel/2012-10/msg02067.html
On 10/16/2012 11:22 AM, Eric Blake wrote: > On 10/16/2012 08:44 AM, Jeff Cody wrote: >> This simplifies some code and error checking, and also fixes a bug. >> >> bdrv_find_backing_image() should only be passed absolute filenames, >> or filenames relative to the chain. In the QMP message handler for >> block commit, when looking up the base do so from the determined top >> image, so we know it is reachable from top. >> >> Signed-off-by: Jeff Cody <jcody@redhat.com> >> --- >> block/commit.c | 9 --------- >> blockdev.c | 21 +++++++++++---------- >> 2 files changed, 11 insertions(+), 19 deletions(-) > > As long as you are touching this code: > >> @@ -1182,6 +1172,17 @@ void qmp_block_commit(const char *device, >> return; >> } >> >> + if (base && has_base) { > > please swap this to 'has_base && base' to avoid any potential of > valgrind warnings about conditional jump based on uninitialized memory. > OK. > Also, I raised another bug[1] about a bad error message regarding > top_bs, if the user passes a different spelling than the canonical name > of the active image. Is that worth fixing in this series, or is it okay > to leave it until you actually add support for committing the top image? > > [1] https://lists.gnu.org/archive/html/qemu-devel/2012-10/msg02067.html > Since this doesn't pose an actual issue now, I was planning on just addressing that with the stage-2 patches, since that will likely touch other related areas of the code anyway. If you have major heartburn over this, I'll change it now.
On 10/16/2012 09:31 AM, Jeff Cody wrote: >> Also, I raised another bug[1] about a bad error message regarding >> top_bs, if the user passes a different spelling than the canonical name >> of the active image. Is that worth fixing in this series, or is it okay >> to leave it until you actually add support for committing the top image? >> >> [1] https://lists.gnu.org/archive/html/qemu-devel/2012-10/msg02067.html >> > > Since this doesn't pose an actual issue now, I was planning on just > addressing that with the stage-2 patches, since that will likely touch > other related areas of the code anyway. If you have major heartburn > over this, I'll change it now. Nah, waiting is fine. As I said in the original bug report, it is only a poor quality error message at the moment, and fixing it may be easier once you have additional pieces in place for committing the active image. I just wanted to make sure the report wasn't lost.
diff --git a/block/commit.c b/block/commit.c index 733c914..13d9e82 100644 --- a/block/commit.c +++ b/block/commit.c @@ -211,15 +211,6 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base, return; } - /* top and base may be valid, but let's make sure that base is reachable - * from top */ - if (bdrv_find_backing_image(top, base->filename) != base) { - error_setg(errp, - "Base (%s) is not reachable from top (%s)", - base->filename, top->filename); - return; - } - overlay_bs = bdrv_find_overlay(bs, top); if (overlay_bs == NULL) { diff --git a/blockdev.c b/blockdev.c index 99828ad..7052287 100644 --- a/blockdev.c +++ b/blockdev.c @@ -1157,16 +1157,6 @@ void qmp_block_commit(const char *device, error_set(errp, QERR_DEVICE_NOT_FOUND, device); return; } - if (base && has_base) { - base_bs = bdrv_find_backing_image(bs, base); - } else { - base_bs = bdrv_find_base(bs); - } - - if (base_bs == NULL) { - error_set(errp, QERR_BASE_NOT_FOUND, base ? base : "NULL"); - return; - } /* default top_bs is the active layer */ top_bs = bs; @@ -1182,6 +1172,17 @@ void qmp_block_commit(const char *device, return; } + if (base && has_base) { + base_bs = bdrv_find_backing_image(top_bs, base); + } else { + base_bs = bdrv_find_base(top_bs); + } + + if (base_bs == NULL) { + error_set(errp, QERR_BASE_NOT_FOUND, base ? base : "NULL"); + return; + } + commit_start(bs, base_bs, top_bs, speed, on_error, block_job_cb, bs, &local_err); if (local_err != NULL) {
This simplifies some code and error checking, and also fixes a bug. bdrv_find_backing_image() should only be passed absolute filenames, or filenames relative to the chain. In the QMP message handler for block commit, when looking up the base do so from the determined top image, so we know it is reachable from top. Signed-off-by: Jeff Cody <jcody@redhat.com> --- block/commit.c | 9 --------- blockdev.c | 21 +++++++++++---------- 2 files changed, 11 insertions(+), 19 deletions(-)