mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-14 21:52:18 -06:00
block: declare some coroutine functions in block/coroutines.h
We are going to keep coroutine-wrappers code (structure-packing parameters, BDRV_POLL wrapper functions) in separate auto-generated files. So, we'll need a header with declaration of original _co_ functions, for those which are static now. As well, we'll need declarations for wrapper functions. Do these declarations now, as a preparation step. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-Id: <20200924185414.28642-4-vsementsov@virtuozzo.com>
This commit is contained in:
parent
f9e694cb32
commit
21c2283ebc
3 changed files with 88 additions and 21 deletions
8
block.c
8
block.c
|
@ -48,6 +48,7 @@
|
||||||
#include "qemu/timer.h"
|
#include "qemu/timer.h"
|
||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
#include "qemu/id.h"
|
#include "qemu/id.h"
|
||||||
|
#include "block/coroutines.h"
|
||||||
|
|
||||||
#ifdef CONFIG_BSD
|
#ifdef CONFIG_BSD
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
@ -4676,8 +4677,8 @@ static void bdrv_delete(BlockDriverState *bs)
|
||||||
* free of errors) or -errno when an internal error occurred. The results of the
|
* free of errors) or -errno when an internal error occurred. The results of the
|
||||||
* check are stored in res.
|
* check are stored in res.
|
||||||
*/
|
*/
|
||||||
static int coroutine_fn bdrv_co_check(BlockDriverState *bs,
|
int coroutine_fn bdrv_co_check(BlockDriverState *bs,
|
||||||
BdrvCheckResult *res, BdrvCheckMode fix)
|
BdrvCheckResult *res, BdrvCheckMode fix)
|
||||||
{
|
{
|
||||||
if (bs->drv == NULL) {
|
if (bs->drv == NULL) {
|
||||||
return -ENOMEDIUM;
|
return -ENOMEDIUM;
|
||||||
|
@ -5781,8 +5782,7 @@ void bdrv_init_with_whitelist(void)
|
||||||
bdrv_init();
|
bdrv_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int coroutine_fn bdrv_co_invalidate_cache(BlockDriverState *bs,
|
int coroutine_fn bdrv_co_invalidate_cache(BlockDriverState *bs, Error **errp)
|
||||||
Error **errp)
|
|
||||||
{
|
{
|
||||||
BdrvChild *child, *parent;
|
BdrvChild *child, *parent;
|
||||||
uint64_t perm, shared_perm;
|
uint64_t perm, shared_perm;
|
||||||
|
|
67
block/coroutines.h
Normal file
67
block/coroutines.h
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
* Block layer I/O functions
|
||||||
|
*
|
||||||
|
* Copyright (c) 2003 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_COROUTINES_INT_H
|
||||||
|
#define BLOCK_COROUTINES_INT_H
|
||||||
|
|
||||||
|
#include "block/block_int.h"
|
||||||
|
|
||||||
|
int coroutine_fn bdrv_co_check(BlockDriverState *bs,
|
||||||
|
BdrvCheckResult *res, BdrvCheckMode fix);
|
||||||
|
int coroutine_fn bdrv_co_invalidate_cache(BlockDriverState *bs, Error **errp);
|
||||||
|
|
||||||
|
int coroutine_fn
|
||||||
|
bdrv_co_prwv(BdrvChild *child, int64_t offset, QEMUIOVector *qiov,
|
||||||
|
bool is_write, BdrvRequestFlags flags);
|
||||||
|
int
|
||||||
|
bdrv_prwv(BdrvChild *child, int64_t offset, QEMUIOVector *qiov,
|
||||||
|
bool is_write, BdrvRequestFlags flags);
|
||||||
|
|
||||||
|
int coroutine_fn
|
||||||
|
bdrv_co_common_block_status_above(BlockDriverState *bs,
|
||||||
|
BlockDriverState *base,
|
||||||
|
bool want_zero,
|
||||||
|
int64_t offset,
|
||||||
|
int64_t bytes,
|
||||||
|
int64_t *pnum,
|
||||||
|
int64_t *map,
|
||||||
|
BlockDriverState **file);
|
||||||
|
int
|
||||||
|
bdrv_common_block_status_above(BlockDriverState *bs,
|
||||||
|
BlockDriverState *base,
|
||||||
|
bool want_zero,
|
||||||
|
int64_t offset,
|
||||||
|
int64_t bytes,
|
||||||
|
int64_t *pnum,
|
||||||
|
int64_t *map,
|
||||||
|
BlockDriverState **file);
|
||||||
|
|
||||||
|
int coroutine_fn
|
||||||
|
bdrv_co_rw_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos,
|
||||||
|
bool is_read);
|
||||||
|
int
|
||||||
|
bdrv_rw_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos,
|
||||||
|
bool is_read);
|
||||||
|
|
||||||
|
#endif /* BLOCK_COROUTINES_INT_H */
|
34
block/io.c
34
block/io.c
|
@ -29,6 +29,7 @@
|
||||||
#include "block/blockjob.h"
|
#include "block/blockjob.h"
|
||||||
#include "block/blockjob_int.h"
|
#include "block/blockjob_int.h"
|
||||||
#include "block/block_int.h"
|
#include "block/block_int.h"
|
||||||
|
#include "block/coroutines.h"
|
||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
|
@ -933,9 +934,9 @@ typedef struct RwCo {
|
||||||
BdrvRequestFlags flags;
|
BdrvRequestFlags flags;
|
||||||
} RwCo;
|
} RwCo;
|
||||||
|
|
||||||
static int coroutine_fn bdrv_co_prwv(BdrvChild *child, int64_t offset,
|
int coroutine_fn bdrv_co_prwv(BdrvChild *child, int64_t offset,
|
||||||
QEMUIOVector *qiov, bool is_write,
|
QEMUIOVector *qiov, bool is_write,
|
||||||
BdrvRequestFlags flags)
|
BdrvRequestFlags flags)
|
||||||
{
|
{
|
||||||
if (is_write) {
|
if (is_write) {
|
||||||
return bdrv_co_pwritev(child, offset, qiov->size, qiov, flags);
|
return bdrv_co_pwritev(child, offset, qiov->size, qiov, flags);
|
||||||
|
@ -955,9 +956,9 @@ static int coroutine_fn bdrv_rw_co_entry(void *opaque)
|
||||||
/*
|
/*
|
||||||
* Process a vectored synchronous request using coroutines
|
* Process a vectored synchronous request using coroutines
|
||||||
*/
|
*/
|
||||||
static int bdrv_prwv(BdrvChild *child, int64_t offset,
|
int bdrv_prwv(BdrvChild *child, int64_t offset,
|
||||||
QEMUIOVector *qiov, bool is_write,
|
QEMUIOVector *qiov, bool is_write,
|
||||||
BdrvRequestFlags flags)
|
BdrvRequestFlags flags)
|
||||||
{
|
{
|
||||||
RwCo rwco = {
|
RwCo rwco = {
|
||||||
.child = child,
|
.child = child,
|
||||||
|
@ -2452,7 +2453,7 @@ early_out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int coroutine_fn
|
int coroutine_fn
|
||||||
bdrv_co_common_block_status_above(BlockDriverState *bs,
|
bdrv_co_common_block_status_above(BlockDriverState *bs,
|
||||||
BlockDriverState *base,
|
BlockDriverState *base,
|
||||||
bool want_zero,
|
bool want_zero,
|
||||||
|
@ -2509,12 +2510,12 @@ static int coroutine_fn bdrv_block_status_above_co_entry(void *opaque)
|
||||||
*
|
*
|
||||||
* See bdrv_co_block_status_above() for details.
|
* See bdrv_co_block_status_above() for details.
|
||||||
*/
|
*/
|
||||||
static int bdrv_common_block_status_above(BlockDriverState *bs,
|
int bdrv_common_block_status_above(BlockDriverState *bs,
|
||||||
BlockDriverState *base,
|
BlockDriverState *base,
|
||||||
bool want_zero, int64_t offset,
|
bool want_zero, int64_t offset,
|
||||||
int64_t bytes, int64_t *pnum,
|
int64_t bytes, int64_t *pnum,
|
||||||
int64_t *map,
|
int64_t *map,
|
||||||
BlockDriverState **file)
|
BlockDriverState **file)
|
||||||
{
|
{
|
||||||
BdrvCoBlockStatusData data = {
|
BdrvCoBlockStatusData data = {
|
||||||
.bs = bs,
|
.bs = bs,
|
||||||
|
@ -2630,7 +2631,7 @@ typedef struct BdrvVmstateCo {
|
||||||
bool is_read;
|
bool is_read;
|
||||||
} BdrvVmstateCo;
|
} BdrvVmstateCo;
|
||||||
|
|
||||||
static int coroutine_fn
|
int coroutine_fn
|
||||||
bdrv_co_rw_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos,
|
bdrv_co_rw_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos,
|
||||||
bool is_read)
|
bool is_read)
|
||||||
{
|
{
|
||||||
|
@ -2663,9 +2664,8 @@ static int coroutine_fn bdrv_co_rw_vmstate_entry(void *opaque)
|
||||||
return bdrv_co_rw_vmstate(co->bs, co->qiov, co->pos, co->is_read);
|
return bdrv_co_rw_vmstate(co->bs, co->qiov, co->pos, co->is_read);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
int bdrv_rw_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos,
|
||||||
bdrv_rw_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos,
|
bool is_read)
|
||||||
bool is_read)
|
|
||||||
{
|
{
|
||||||
BdrvVmstateCo data = {
|
BdrvVmstateCo data = {
|
||||||
.bs = bs,
|
.bs = bs,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue