Il 26/02/2013 15:55, Jeff Cody ha scritto: > During a commit of 'all' using the HMP non-live commit, the operation > is aborted and returns error on the first error enountered. When > non-COW drives are in use (e.g. ejected floppy, cdrom, or drives without > a backing parent), that means a commit all will return an error of either > -ENOMEDIUM or -ENOTSUP. This is not desirable, so for the 'all' commit > case, only attempt the commit if both bs->drv and bs->backing_hd are > present. > > More succinctly: 'commit all' now means a commit on all COW drives. > > This means an individual commit to a specific non-COW drive will still > return the appropriate error (-ENOMEDIUM if eject / not present, -ENOTSUP > if no backing file). > > Reported-by: Jan Kiszka <jan.kis...@web.de> > Signed-off-by: Jeff Cody <jc...@redhat.com> > --- > block.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/block.c b/block.c > index 50dab8e..7a105dc 100644 > --- a/block.c > +++ b/block.c > @@ -1620,9 +1620,11 @@ int bdrv_commit_all(void) > BlockDriverState *bs; > > QTAILQ_FOREACH(bs, &bdrv_states, list) { > - int ret = bdrv_commit(bs); > - if (ret < 0) { > - return ret; > + if (bs->drv && bs->backing_hd) { > + int ret = bdrv_commit(bs); > + if (ret < 0) { > + return ret; > + } > } > } > return 0; >
Reviewed-by: Paolo Bonzini <pbonz...@redhat.com>