Convert the remaining functions to make the QMP commands query-block and query-named-block-nodes run in their entirety in a coroutine. With this, any yield from those commands will return all the way back to the main loop. This releases the BQL and the main loop and avoids having the QMP command block another more important task from running. Both commands need to be converted at once because hmp_info_block calls both and it needs to be moved to a coroutine as well. Now the wrapper for bdrv_co_get_allocated_file_size() can be made not mixed and the wrapper for bdrv_co_block_device_info() can be removed. Link: https://lore.kernel.org/r/20240409145917.6780-1-farosas@suse.de Signed-off-by: Lin Ma <lma@suse.com> References: bsc#1211000 Signed-off-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Dario Faggioli <dfaggioli@suse.com>
61 lines
2.6 KiB
C
61 lines
2.6 KiB
C
/*
|
|
* Block layer qmp and info dump related functions
|
|
*
|
|
* Copyright (c) 2003-2008 Fabrice Bellard
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
|
|
#ifndef BLOCK_QAPI_H
|
|
#define BLOCK_QAPI_H
|
|
|
|
#include "block/block-common.h"
|
|
#include "block/graph-lock.h"
|
|
#include "block/snapshot.h"
|
|
#include "qapi/qapi-types-block-core.h"
|
|
|
|
BlockDeviceInfo *coroutine_fn GRAPH_RDLOCK
|
|
bdrv_co_block_device_info(BlockBackend *blk, BlockDriverState *bs, bool flat,
|
|
Error **errp);
|
|
int GRAPH_RDLOCK
|
|
bdrv_query_snapshot_info_list(BlockDriverState *bs,
|
|
SnapshotInfoList **p_list,
|
|
Error **errp);
|
|
void coroutine_fn GRAPH_RDLOCK
|
|
bdrv_co_query_image_info(BlockDriverState *bs, ImageInfo **p_info, bool flat,
|
|
bool skip_implicit_filters, Error **errp);
|
|
|
|
void coroutine_fn GRAPH_RDLOCK
|
|
bdrv_co_query_block_graph_info(BlockDriverState *bs, BlockGraphInfo **p_info,
|
|
Error **errp);
|
|
void co_wrapper_bdrv_rdlock
|
|
bdrv_query_block_graph_info(BlockDriverState *bs, BlockGraphInfo **p_info,
|
|
Error **errp);
|
|
|
|
void bdrv_snapshot_dump(QEMUSnapshotInfo *sn);
|
|
void bdrv_image_info_specific_dump(ImageInfoSpecific *info_spec,
|
|
const char *prefix,
|
|
int indentation);
|
|
void bdrv_node_info_dump(BlockNodeInfo *info, int indentation, bool protocol);
|
|
|
|
void coroutine_fn GRAPH_RDLOCK
|
|
bdrv_co_do_query_node_info(BlockDriverState *bs, BlockNodeInfo *info,
|
|
Error **errp);
|
|
#endif
|