[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 03/17] block: Switch BlockRequest to byte-based
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH 03/17] block: Switch BlockRequest to byte-based |
Date: |
Wed, 22 Jun 2016 09:51:00 -0600 |
BlockRequest is the internal struct used by bdrv_aio_*. At the
moment, all such calls were sector-based, but we will eventually
convert to byte-based; start by changing the internal variables
to be byte-based. No change to behavior, although the read and
write code can now go byte-based through more of the stack.
Signed-off-by: Eric Blake <address@hidden>
---
block/io.c | 64 +++++++++++++++++++++++++++++++-------------------------------
1 file changed, 32 insertions(+), 32 deletions(-)
diff --git a/block/io.c b/block/io.c
index 305e5c5..d442ce7 100644
--- a/block/io.c
+++ b/block/io.c
@@ -33,14 +33,13 @@
#define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress
*/
-static BlockAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
- int64_t sector_num,
- QEMUIOVector *qiov,
- int nb_sectors,
- BdrvRequestFlags flags,
- BlockCompletionFunc *cb,
- void *opaque,
- bool is_write);
+static BlockAIOCB *bdrv_co_aio_prw_vector(BlockDriverState *bs,
+ int64_t offset,
+ QEMUIOVector *qiov,
+ BdrvRequestFlags flags,
+ BlockCompletionFunc *cb,
+ void *opaque,
+ bool is_write);
static void coroutine_fn bdrv_co_do_rw(void *opaque);
static int coroutine_fn bdrv_co_do_pwrite_zeroes(BlockDriverState *bs,
int64_t offset, int count, BdrvRequestFlags flags);
@@ -2010,8 +2009,9 @@ BlockAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t
sector_num,
{
trace_bdrv_aio_readv(bs, sector_num, nb_sectors, opaque);
- return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0,
- cb, opaque, false);
+ assert(nb_sectors << BDRV_SECTOR_BITS == qiov->size);
+ return bdrv_co_aio_prw_vector(bs, sector_num << BDRV_SECTOR_BITS, qiov, 0,
+ cb, opaque, false);
}
BlockAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num,
@@ -2020,8 +2020,9 @@ BlockAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t
sector_num,
{
trace_bdrv_aio_writev(bs, sector_num, nb_sectors, opaque);
- return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0,
- cb, opaque, true);
+ assert(nb_sectors << BDRV_SECTOR_BITS == qiov->size);
+ return bdrv_co_aio_prw_vector(bs, sector_num << BDRV_SECTOR_BITS, qiov, 0,
+ cb, opaque, true);
}
void bdrv_aio_cancel(BlockAIOCB *acb)
@@ -2057,8 +2058,8 @@ typedef struct BlockRequest {
union {
/* Used during read, write, trim */
struct {
- int64_t sector;
- int nb_sectors;
+ int64_t offset;
+ int bytes;
int flags;
QEMUIOVector *qiov;
};
@@ -2122,24 +2123,23 @@ static void coroutine_fn bdrv_co_do_rw(void *opaque)
BlockDriverState *bs = acb->common.bs;
if (!acb->is_write) {
- acb->req.error = bdrv_co_do_readv(bs, acb->req.sector,
- acb->req.nb_sectors, acb->req.qiov, acb->req.flags);
+ acb->req.error = bdrv_co_preadv(bs, acb->req.offset,
+ acb->req.qiov->size, acb->req.qiov, acb->req.flags);
} else {
- acb->req.error = bdrv_co_do_writev(bs, acb->req.sector,
- acb->req.nb_sectors, acb->req.qiov, acb->req.flags);
+ acb->req.error = bdrv_co_pwritev(bs, acb->req.offset,
+ acb->req.qiov->size, acb->req.qiov, acb->req.flags);
}
bdrv_co_complete(acb);
}
-static BlockAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
- int64_t sector_num,
- QEMUIOVector *qiov,
- int nb_sectors,
- BdrvRequestFlags flags,
- BlockCompletionFunc *cb,
- void *opaque,
- bool is_write)
+static BlockAIOCB *bdrv_co_aio_prw_vector(BlockDriverState *bs,
+ int64_t offset,
+ QEMUIOVector *qiov,
+ BdrvRequestFlags flags,
+ BlockCompletionFunc *cb,
+ void *opaque,
+ bool is_write)
{
Coroutine *co;
BlockAIOCBCoroutine *acb;
@@ -2147,8 +2147,7 @@ static BlockAIOCB *bdrv_co_aio_rw_vector(BlockDriverState
*bs,
acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
acb->need_bh = true;
acb->req.error = -EINPROGRESS;
- acb->req.sector = sector_num;
- acb->req.nb_sectors = nb_sectors;
+ acb->req.offset = offset;
acb->req.qiov = qiov;
acb->req.flags = flags;
acb->is_write = is_write;
@@ -2193,8 +2192,8 @@ static void coroutine_fn bdrv_aio_discard_co_entry(void
*opaque)
BlockAIOCBCoroutine *acb = opaque;
BlockDriverState *bs = acb->common.bs;
- acb->req.error = bdrv_co_pdiscard(bs, acb->req.sector << BDRV_SECTOR_BITS,
- acb->req.nb_sectors << BDRV_SECTOR_BITS);
+ acb->req.error = bdrv_co_pdiscard(bs, acb->req.offset,
+ acb->req.qiov->size);
bdrv_co_complete(acb);
}
@@ -2204,14 +2203,15 @@ BlockAIOCB *bdrv_aio_discard(BlockDriverState *bs,
{
Coroutine *co;
BlockAIOCBCoroutine *acb;
+ QEMUIOVector qiov = { .size = nb_sectors << BDRV_SECTOR_BITS, };
trace_bdrv_aio_discard(bs, sector_num, nb_sectors, opaque);
acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
acb->need_bh = true;
acb->req.error = -EINPROGRESS;
- acb->req.sector = sector_num;
- acb->req.nb_sectors = nb_sectors;
+ acb->req.offset = sector_num << BDRV_SECTOR_BITS;
+ acb->req.qiov = &qiov;
co = qemu_coroutine_create(bdrv_aio_discard_co_entry);
qemu_coroutine_enter(co, acb);
--
2.5.5
- [Qemu-devel] [PATCH 00/17] byte-based block discard, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 09/17] block: Add .bdrv_co_pdiscard() driver callback, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 07/17] rbd: Switch rbd_start_aio() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 10/17] blkreplay: Switch .bdrv_co_discard() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 04/17] block: Convert bdrv_aio_discard() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 08/17] block: Convert .bdrv_aio_discard() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 12/17] iscsi: Switch .bdrv_co_discard() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 02/17] block: Convert bdrv_discard() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 05/17] block: Convert BB interface to byte-based discards, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 03/17] block: Switch BlockRequest to byte-based,
Eric Blake <=
- [Qemu-devel] [PATCH 01/17] block: Convert bdrv_co_discard() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 06/17] raw-posix: Switch paio_submit() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 13/17] nbd: Switch .bdrv_co_discard() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 15/17] raw_bsd: Switch .bdrv_co_discard() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 17/17] block: Kill .bdrv_co_discard(), Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 14/17] qcow2: Switch .bdrv_co_discard() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 16/17] sheepdog: Switch .bdrv_co_discard() to byte-based, Eric Blake, 2016/06/22
- [Qemu-devel] [PATCH 11/17] gluster: Switch .bdrv_co_discard() to byte-based, Eric Blake, 2016/06/22