block-backend: convert blk_aio_ functions to int64_t bytes paramter
1. Convert bytes in BlkAioEmAIOCB: aio->bytes is only passed to already int64_t interfaces, and set in blk_aio_prwv, which is updated here. 2. For all updated functions the parameter type becomes wider so callers are safe. 3. In blk_aio_prwv we only store bytes to BlkAioEmAIOCB, which is updated here. 4. Other updated functions are wrappers on blk_aio_prwv. Note that blk_aio_preadv and blk_aio_pwritev become safer: before this commit, it's theoretically possible to pass qiov with size exceeding INT_MAX, which than converted to int argument of blk_aio_prwv. Now it's converted to int64_t which is a lot better. Still add assertions. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20211006131718.214235-11-vsementsov@virtuozzo.com> Reviewed-by: Eric Blake <eblake@redhat.com> [eblake: tweak assertion and grammar] Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
e192179bb2
commit
a93d81c84a
|
@ -1380,7 +1380,7 @@ BlockAIOCB *blk_abort_aio_request(BlockBackend *blk,
|
||||||
typedef struct BlkAioEmAIOCB {
|
typedef struct BlkAioEmAIOCB {
|
||||||
BlockAIOCB common;
|
BlockAIOCB common;
|
||||||
BlkRwCo rwco;
|
BlkRwCo rwco;
|
||||||
int bytes;
|
int64_t bytes;
|
||||||
bool has_returned;
|
bool has_returned;
|
||||||
} BlkAioEmAIOCB;
|
} BlkAioEmAIOCB;
|
||||||
|
|
||||||
|
@ -1412,7 +1412,8 @@ static void blk_aio_complete_bh(void *opaque)
|
||||||
blk_aio_complete(acb);
|
blk_aio_complete(acb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BlockAIOCB *blk_aio_prwv(BlockBackend *blk, int64_t offset, int bytes,
|
static BlockAIOCB *blk_aio_prwv(BlockBackend *blk, int64_t offset,
|
||||||
|
int64_t bytes,
|
||||||
void *iobuf, CoroutineEntry co_entry,
|
void *iobuf, CoroutineEntry co_entry,
|
||||||
BdrvRequestFlags flags,
|
BdrvRequestFlags flags,
|
||||||
BlockCompletionFunc *cb, void *opaque)
|
BlockCompletionFunc *cb, void *opaque)
|
||||||
|
@ -1469,10 +1470,10 @@ static void blk_aio_write_entry(void *opaque)
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockAIOCB *blk_aio_pwrite_zeroes(BlockBackend *blk, int64_t offset,
|
BlockAIOCB *blk_aio_pwrite_zeroes(BlockBackend *blk, int64_t offset,
|
||||||
int count, BdrvRequestFlags flags,
|
int64_t bytes, BdrvRequestFlags flags,
|
||||||
BlockCompletionFunc *cb, void *opaque)
|
BlockCompletionFunc *cb, void *opaque)
|
||||||
{
|
{
|
||||||
return blk_aio_prwv(blk, offset, count, NULL, blk_aio_write_entry,
|
return blk_aio_prwv(blk, offset, bytes, NULL, blk_aio_write_entry,
|
||||||
flags | BDRV_REQ_ZERO_WRITE, cb, opaque);
|
flags | BDRV_REQ_ZERO_WRITE, cb, opaque);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1530,6 +1531,7 @@ BlockAIOCB *blk_aio_preadv(BlockBackend *blk, int64_t offset,
|
||||||
QEMUIOVector *qiov, BdrvRequestFlags flags,
|
QEMUIOVector *qiov, BdrvRequestFlags flags,
|
||||||
BlockCompletionFunc *cb, void *opaque)
|
BlockCompletionFunc *cb, void *opaque)
|
||||||
{
|
{
|
||||||
|
assert((uint64_t)qiov->size <= INT64_MAX);
|
||||||
return blk_aio_prwv(blk, offset, qiov->size, qiov,
|
return blk_aio_prwv(blk, offset, qiov->size, qiov,
|
||||||
blk_aio_read_entry, flags, cb, opaque);
|
blk_aio_read_entry, flags, cb, opaque);
|
||||||
}
|
}
|
||||||
|
@ -1538,6 +1540,7 @@ BlockAIOCB *blk_aio_pwritev(BlockBackend *blk, int64_t offset,
|
||||||
QEMUIOVector *qiov, BdrvRequestFlags flags,
|
QEMUIOVector *qiov, BdrvRequestFlags flags,
|
||||||
BlockCompletionFunc *cb, void *opaque)
|
BlockCompletionFunc *cb, void *opaque)
|
||||||
{
|
{
|
||||||
|
assert(qiov->size <= INT64_MAX);
|
||||||
return blk_aio_prwv(blk, offset, qiov->size, qiov,
|
return blk_aio_prwv(blk, offset, qiov->size, qiov,
|
||||||
blk_aio_write_entry, flags, cb, opaque);
|
blk_aio_write_entry, flags, cb, opaque);
|
||||||
}
|
}
|
||||||
|
@ -1618,7 +1621,7 @@ static void blk_aio_pdiscard_entry(void *opaque)
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockAIOCB *blk_aio_pdiscard(BlockBackend *blk,
|
BlockAIOCB *blk_aio_pdiscard(BlockBackend *blk,
|
||||||
int64_t offset, int bytes,
|
int64_t offset, int64_t bytes,
|
||||||
BlockCompletionFunc *cb, void *opaque)
|
BlockCompletionFunc *cb, void *opaque)
|
||||||
{
|
{
|
||||||
return blk_aio_prwv(blk, offset, bytes, NULL, blk_aio_pdiscard_entry, 0,
|
return blk_aio_prwv(blk, offset, bytes, NULL, blk_aio_pdiscard_entry, 0,
|
||||||
|
|
|
@ -157,7 +157,7 @@ static inline int coroutine_fn blk_co_pwrite(BlockBackend *blk, int64_t offset,
|
||||||
int blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
|
int blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
|
||||||
int64_t bytes, BdrvRequestFlags flags);
|
int64_t bytes, BdrvRequestFlags flags);
|
||||||
BlockAIOCB *blk_aio_pwrite_zeroes(BlockBackend *blk, int64_t offset,
|
BlockAIOCB *blk_aio_pwrite_zeroes(BlockBackend *blk, int64_t offset,
|
||||||
int bytes, BdrvRequestFlags flags,
|
int64_t bytes, BdrvRequestFlags flags,
|
||||||
BlockCompletionFunc *cb, void *opaque);
|
BlockCompletionFunc *cb, void *opaque);
|
||||||
int blk_make_zero(BlockBackend *blk, BdrvRequestFlags flags);
|
int blk_make_zero(BlockBackend *blk, BdrvRequestFlags flags);
|
||||||
int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes);
|
int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes);
|
||||||
|
@ -174,7 +174,7 @@ BlockAIOCB *blk_aio_pwritev(BlockBackend *blk, int64_t offset,
|
||||||
BlockCompletionFunc *cb, void *opaque);
|
BlockCompletionFunc *cb, void *opaque);
|
||||||
BlockAIOCB *blk_aio_flush(BlockBackend *blk,
|
BlockAIOCB *blk_aio_flush(BlockBackend *blk,
|
||||||
BlockCompletionFunc *cb, void *opaque);
|
BlockCompletionFunc *cb, void *opaque);
|
||||||
BlockAIOCB *blk_aio_pdiscard(BlockBackend *blk, int64_t offset, int bytes,
|
BlockAIOCB *blk_aio_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes,
|
||||||
BlockCompletionFunc *cb, void *opaque);
|
BlockCompletionFunc *cb, void *opaque);
|
||||||
void blk_aio_cancel(BlockAIOCB *acb);
|
void blk_aio_cancel(BlockAIOCB *acb);
|
||||||
void blk_aio_cancel_async(BlockAIOCB *acb);
|
void blk_aio_cancel_async(BlockAIOCB *acb);
|
||||||
|
|
Loading…
Reference in New Issue