On 14.07.2016 15:28, Kevin Wolf wrote: > In order to remove the necessity to use BlockBackend names in the > external API, we want to allow node-names everywhere. This converts > drive-backup and the corresponding transaction action to accept a > node-name without lifting the restriction that we're operating at a root > node. > > In case of an invalid device name, the command returns the GenericError > error class now instead of DeviceNotFound, because this is what > qmp_get_root_bs() returns. > > Signed-off-by: Kevin Wolf <[email protected]> > --- > blockdev.c | 36 +++++++++--------------------------- > qapi/block-core.json | 4 ++-- > qmp-commands.hx | 2 +- > tests/qemu-iotests/055 | 7 ++----- > 4 files changed, 14 insertions(+), 35 deletions(-) > > diff --git a/blockdev.c b/blockdev.c > index 6b1f2f0..b89b5f8 100644 > --- a/blockdev.c > +++ b/blockdev.c
[...]
> @@ -3203,24 +3195,14 @@ static void do_drive_backup(const char *job_id, const
> char *device,
> mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
> }
>
> - blk = blk_by_name(device);
> - if (!blk) {
> - error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
> - "Device '%s' not found", device);
> + bs = qmp_get_root_bs(device, errp);
> + if (!bs) {
> return;
> }
>
> - aio_context = blk_get_aio_context(blk);
> + aio_context = bdrv_get_aio_context(bs);
> aio_context_acquire(aio_context);
>
> - /* Although backup_run has this check too, we need to use bs->drv below,
> so
> - * do an early check redundantly. */
This comment makes a good point, bs->drv may be NULL. I think you should
either call bdrv_is_inserted() or check bs->drv directly.
Max
> - if (!blk_is_available(blk)) {
> - error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
> - goto out;
> - }
> - bs = blk_bs(blk);
> -
> if (!has_format) {
> format = mode == NEW_IMAGE_MODE_EXISTING ? NULL :
> bs->drv->format_name;
> }
signature.asc
Description: OpenPGP digital signature
