block/qed: add missed coroutine_fn markers

qed_read_table and qed_write_table use coroutine-only interfaces but
are not marked coroutine_fn. Happily, they are called only from
coroutine context, so we only need to add missed markers.

Reported-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
stable-4.1
Vladimir Sementsov-Ogievskiy 2019-04-30 15:36:11 +03:00 committed by Kevin Wolf
parent a2aa8b07cd
commit 54277a2aab
4 changed files with 41 additions and 29 deletions

View File

@ -106,7 +106,7 @@ static unsigned int qed_check_l2_table(QEDCheck *check, QEDTable *table)
/** /**
* Descend tables and check each cluster is referenced once only * Descend tables and check each cluster is referenced once only
*/ */
static int qed_check_l1_table(QEDCheck *check, QEDTable *table) static int coroutine_fn qed_check_l1_table(QEDCheck *check, QEDTable *table)
{ {
BDRVQEDState *s = check->s; BDRVQEDState *s = check->s;
unsigned int i, num_invalid_l1 = 0; unsigned int i, num_invalid_l1 = 0;
@ -218,7 +218,7 @@ static void qed_check_mark_clean(BDRVQEDState *s, BdrvCheckResult *result)
} }
/* Called with table_lock held. */ /* Called with table_lock held. */
int qed_check(BDRVQEDState *s, BdrvCheckResult *result, bool fix) int coroutine_fn qed_check(BDRVQEDState *s, BdrvCheckResult *result, bool fix)
{ {
QEDCheck check = { QEDCheck check = {
.s = s, .s = s,

View File

@ -19,7 +19,8 @@
#include "qemu/bswap.h" #include "qemu/bswap.h"
/* Called with table_lock held. */ /* Called with table_lock held. */
static int qed_read_table(BDRVQEDState *s, uint64_t offset, QEDTable *table) static int coroutine_fn qed_read_table(BDRVQEDState *s, uint64_t offset,
QEDTable *table)
{ {
unsigned int bytes = s->header.cluster_size * s->header.table_size; unsigned int bytes = s->header.cluster_size * s->header.table_size;
@ -60,8 +61,9 @@ out:
* *
* Called with table_lock held. * Called with table_lock held.
*/ */
static int qed_write_table(BDRVQEDState *s, uint64_t offset, QEDTable *table, static int coroutine_fn qed_write_table(BDRVQEDState *s, uint64_t offset,
unsigned int index, unsigned int n, bool flush) QEDTable *table, unsigned int index,
unsigned int n, bool flush)
{ {
unsigned int sector_mask = BDRV_SECTOR_SIZE / sizeof(uint64_t) - 1; unsigned int sector_mask = BDRV_SECTOR_SIZE / sizeof(uint64_t) - 1;
unsigned int start, end, i; unsigned int start, end, i;
@ -109,27 +111,29 @@ out:
return ret; return ret;
} }
int qed_read_l1_table_sync(BDRVQEDState *s) int coroutine_fn qed_read_l1_table_sync(BDRVQEDState *s)
{ {
return qed_read_table(s, s->header.l1_table_offset, s->l1_table); return qed_read_table(s, s->header.l1_table_offset, s->l1_table);
} }
/* Called with table_lock held. */ /* Called with table_lock held. */
int qed_write_l1_table(BDRVQEDState *s, unsigned int index, unsigned int n) int coroutine_fn qed_write_l1_table(BDRVQEDState *s, unsigned int index,
unsigned int n)
{ {
BLKDBG_EVENT(s->bs->file, BLKDBG_L1_UPDATE); BLKDBG_EVENT(s->bs->file, BLKDBG_L1_UPDATE);
return qed_write_table(s, s->header.l1_table_offset, return qed_write_table(s, s->header.l1_table_offset,
s->l1_table, index, n, false); s->l1_table, index, n, false);
} }
int qed_write_l1_table_sync(BDRVQEDState *s, unsigned int index, int coroutine_fn qed_write_l1_table_sync(BDRVQEDState *s, unsigned int index,
unsigned int n) unsigned int n)
{ {
return qed_write_l1_table(s, index, n); return qed_write_l1_table(s, index, n);
} }
/* Called with table_lock held. */ /* Called with table_lock held. */
int qed_read_l2_table(BDRVQEDState *s, QEDRequest *request, uint64_t offset) int coroutine_fn qed_read_l2_table(BDRVQEDState *s, QEDRequest *request,
uint64_t offset)
{ {
int ret; int ret;
@ -166,22 +170,25 @@ int qed_read_l2_table(BDRVQEDState *s, QEDRequest *request, uint64_t offset)
return ret; return ret;
} }
int qed_read_l2_table_sync(BDRVQEDState *s, QEDRequest *request, uint64_t offset) int coroutine_fn qed_read_l2_table_sync(BDRVQEDState *s, QEDRequest *request,
uint64_t offset)
{ {
return qed_read_l2_table(s, request, offset); return qed_read_l2_table(s, request, offset);
} }
/* Called with table_lock held. */ /* Called with table_lock held. */
int qed_write_l2_table(BDRVQEDState *s, QEDRequest *request, int coroutine_fn qed_write_l2_table(BDRVQEDState *s, QEDRequest *request,
unsigned int index, unsigned int n, bool flush) unsigned int index, unsigned int n,
bool flush)
{ {
BLKDBG_EVENT(s->bs->file, BLKDBG_L2_UPDATE); BLKDBG_EVENT(s->bs->file, BLKDBG_L2_UPDATE);
return qed_write_table(s, request->l2_table->offset, return qed_write_table(s, request->l2_table->offset,
request->l2_table->table, index, n, flush); request->l2_table->table, index, n, flush);
} }
int qed_write_l2_table_sync(BDRVQEDState *s, QEDRequest *request, int coroutine_fn qed_write_l2_table_sync(BDRVQEDState *s, QEDRequest *request,
unsigned int index, unsigned int n, bool flush) unsigned int index, unsigned int n,
bool flush)
{ {
return qed_write_l2_table(s, request, index, n, flush); return qed_write_l2_table(s, request, index, n, flush);
} }

View File

@ -1604,8 +1604,9 @@ static void coroutine_fn bdrv_qed_co_invalidate_cache(BlockDriverState *bs,
} }
} }
static int bdrv_qed_co_check(BlockDriverState *bs, BdrvCheckResult *result, static int coroutine_fn bdrv_qed_co_check(BlockDriverState *bs,
BdrvCheckMode fix) BdrvCheckResult *result,
BdrvCheckMode fix)
{ {
BDRVQEDState *s = bs->opaque; BDRVQEDState *s = bs->opaque;
int ret; int ret;

View File

@ -201,17 +201,21 @@ void qed_commit_l2_cache_entry(L2TableCache *l2_cache, CachedL2Table *l2_table);
/** /**
* Table I/O functions * Table I/O functions
*/ */
int qed_read_l1_table_sync(BDRVQEDState *s); int coroutine_fn qed_read_l1_table_sync(BDRVQEDState *s);
int qed_write_l1_table(BDRVQEDState *s, unsigned int index, unsigned int n); int coroutine_fn qed_write_l1_table(BDRVQEDState *s, unsigned int index,
int qed_write_l1_table_sync(BDRVQEDState *s, unsigned int index, unsigned int n);
unsigned int n); int coroutine_fn qed_write_l1_table_sync(BDRVQEDState *s, unsigned int index,
int qed_read_l2_table_sync(BDRVQEDState *s, QEDRequest *request, unsigned int n);
uint64_t offset); int coroutine_fn qed_read_l2_table_sync(BDRVQEDState *s, QEDRequest *request,
int qed_read_l2_table(BDRVQEDState *s, QEDRequest *request, uint64_t offset); uint64_t offset);
int qed_write_l2_table(BDRVQEDState *s, QEDRequest *request, int coroutine_fn qed_read_l2_table(BDRVQEDState *s, QEDRequest *request,
unsigned int index, unsigned int n, bool flush); uint64_t offset);
int qed_write_l2_table_sync(BDRVQEDState *s, QEDRequest *request, int coroutine_fn qed_write_l2_table(BDRVQEDState *s, QEDRequest *request,
unsigned int index, unsigned int n, bool flush); unsigned int index, unsigned int n,
bool flush);
int coroutine_fn qed_write_l2_table_sync(BDRVQEDState *s, QEDRequest *request,
unsigned int index, unsigned int n,
bool flush);
/** /**
* Cluster functions * Cluster functions
@ -223,7 +227,7 @@ int coroutine_fn qed_find_cluster(BDRVQEDState *s, QEDRequest *request,
/** /**
* Consistency check * Consistency check
*/ */
int qed_check(BDRVQEDState *s, BdrvCheckResult *result, bool fix); int coroutine_fn qed_check(BDRVQEDState *s, BdrvCheckResult *result, bool fix);
QEDTable *qed_alloc_table(BDRVQEDState *s); QEDTable *qed_alloc_table(BDRVQEDState *s);