/* @p_info will be set only on success. */ static void bdrv_query_info(BlockBackend *blk, BlockInfo **p_info, Error **errp) { BlockInfo *info = g_malloc0(sizeof(*info)); BlockDriverState *bs = blk_bs(blk); char *qdev; /* Skip automatically inserted nodes that the user isn't aware of */ while (bs && bs->drv && bs->implicit) { bs = backing_bs(bs); } info->device = g_strdup(blk_name(blk)); info->type = g_strdup("unknown"); info->locked = blk_dev_is_medium_locked(blk); info->removable = blk_dev_has_removable_media(blk); qdev = blk_get_attached_dev_id(blk); if (qdev && *qdev) { info->has_qdev = true; info->qdev = qdev; } else { g_free(qdev); } if (blk_dev_has_tray(blk)) { info->has_tray_open = true; info->tray_open = blk_dev_is_tray_open(blk); } if (blk_iostatus_is_enabled(blk)) { info->has_io_status = true; info->io_status = blk_iostatus(blk); } if (bs && !QLIST_EMPTY(&bs->dirty_bitmaps)) { info->has_dirty_bitmaps = true; info->dirty_bitmaps = bdrv_query_dirty_bitmaps(bs); } if (bs && bs->drv) { info->has_inserted = true; info->inserted = bdrv_block_device_info(blk, bs, errp); if (info->inserted == NULL) { goto err; } } *p_info = info; return; err: qapi_free_BlockInfo(info); }
/* @p_info will be set only on success. */ static void bdrv_query_info(BlockBackend *blk, BlockInfo **p_info, Error **errp) { BlockInfo *info = g_malloc0(sizeof(*info)); BlockDriverState *bs = blk_bs(blk); info->device = g_strdup(blk_name(blk)); info->type = g_strdup("unknown"); info->locked = blk_dev_is_medium_locked(blk); info->removable = blk_dev_has_removable_media(blk); if (blk_dev_has_tray(blk)) { info->has_tray_open = true; info->tray_open = blk_dev_is_tray_open(blk); } if (blk_iostatus_is_enabled(blk)) { info->has_io_status = true; info->io_status = blk_iostatus(blk); } if (bs && !QLIST_EMPTY(&bs->dirty_bitmaps)) { info->has_dirty_bitmaps = true; info->dirty_bitmaps = bdrv_query_dirty_bitmaps(bs); } if (bs && bs->drv) { info->has_inserted = true; info->inserted = bdrv_block_device_info(blk, bs, errp); if (info->inserted == NULL) { goto err; } } *p_info = info; return; err: qapi_free_BlockInfo(info); }