From: Eric Blake <eblake@redhat.com>
To: qemu-devel@nongnu.org
Cc: Fam Zheng <fam@euphon.net>, Kevin Wolf <kwolf@redhat.com>,
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
"open list:Block I/O path" <qemu-block@nongnu.org>,
Max Reitz <mreitz@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>
Subject: [PULL 10/20] block/io: use int64_t bytes in driver wrappers
Date: Tue, 2 Feb 2021 16:45:19 -0600 [thread overview]
Message-ID: <20210202224529.642055-11-eblake@redhat.com> (raw)
In-Reply-To: <20210202224529.642055-1-eblake@redhat.com>
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
We are generally moving to int64_t for both offset and bytes parameters
on all io paths.
Main motivation is realization of 64-bit write_zeroes operation for
fast zeroing large disk chunks, up to the whole disk.
We chose signed type, to be consistent with off_t (which is signed) and
with possibility for signed return type (where negative value means
error).
So, convert driver wrappers parameters which are already 64bit to
signed type.
Requests in block/io.c must never exceed BDRV_MAX_LENGTH (which is less
than INT64_MAX), which makes the conversion to signed 64bit type safe.
Add corresponding assertions.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <20201211183934.169161-10-vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
---
block/io.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/block/io.c b/block/io.c
index 1c23587d18c6..cb5064155b6a 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1125,7 +1125,7 @@ static void bdrv_co_io_em_complete(void *opaque, int ret)
}
static int coroutine_fn bdrv_driver_preadv(BlockDriverState *bs,
- uint64_t offset, uint64_t bytes,
+ int64_t offset, int64_t bytes,
QEMUIOVector *qiov,
size_t qiov_offset, int flags)
{
@@ -1135,6 +1135,7 @@ static int coroutine_fn bdrv_driver_preadv(BlockDriverState *bs,
QEMUIOVector local_qiov;
int ret;
+ bdrv_check_qiov_request(offset, bytes, qiov, qiov_offset, &error_abort);
assert(!(flags & ~BDRV_REQ_MASK));
assert(!(flags & BDRV_REQ_NO_FALLBACK));
@@ -1194,7 +1195,7 @@ out:
}
static int coroutine_fn bdrv_driver_pwritev(BlockDriverState *bs,
- uint64_t offset, uint64_t bytes,
+ int64_t offset, int64_t bytes,
QEMUIOVector *qiov,
size_t qiov_offset, int flags)
{
@@ -1204,6 +1205,7 @@ static int coroutine_fn bdrv_driver_pwritev(BlockDriverState *bs,
QEMUIOVector local_qiov;
int ret;
+ bdrv_check_qiov_request(offset, bytes, qiov, qiov_offset, &error_abort);
assert(!(flags & ~BDRV_REQ_MASK));
assert(!(flags & BDRV_REQ_NO_FALLBACK));
@@ -1274,14 +1276,16 @@ emulate_flags:
}
static int coroutine_fn
-bdrv_driver_pwritev_compressed(BlockDriverState *bs, uint64_t offset,
- uint64_t bytes, QEMUIOVector *qiov,
+bdrv_driver_pwritev_compressed(BlockDriverState *bs, int64_t offset,
+ int64_t bytes, QEMUIOVector *qiov,
size_t qiov_offset)
{
BlockDriver *drv = bs->drv;
QEMUIOVector local_qiov;
int ret;
+ bdrv_check_qiov_request(offset, bytes, qiov, qiov_offset, &error_abort);
+
if (!drv) {
return -ENOMEDIUM;
}
--
2.30.0
next prev parent reply other threads:[~2021-02-02 22:48 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-02 22:45 [PULL 00/20] NBD patches for 2021-02-02 Eric Blake
2021-02-02 22:45 ` [PULL 01/20] iotests: Fix expected whitespace for 185 Eric Blake
2021-02-02 22:45 ` [PULL 02/20] block: refactor bdrv_check_request: add errp Eric Blake
2021-02-02 22:45 ` [PULL 03/20] util/iov: make qemu_iovec_init_extended() honest Eric Blake
2021-02-02 22:45 ` [PULL 04/20] block: fix theoretical overflow in bdrv_init_padding() Eric Blake
2021-02-02 22:45 ` [PULL 05/20] block/io: refactor bdrv_pad_request(): move bdrv_pad_request() up Eric Blake
2021-02-02 22:45 ` [PULL 06/20] block/io: bdrv_pad_request(): support qemu_iovec_init_extended failure Eric Blake
2021-02-02 22:45 ` [PULL 07/20] block/throttle-groups: throttle_group_co_io_limits_intercept(): 64bit bytes Eric Blake
2021-02-02 22:45 ` [PULL 08/20] block/io: improve bdrv_check_request: check qiov too Eric Blake
2021-02-02 22:45 ` [PULL 09/20] block: use int64_t as bytes type in tracked requests Eric Blake
2021-02-02 22:45 ` Eric Blake [this message]
2021-02-02 22:45 ` [PULL 11/20] block/io: support int64_t bytes in bdrv_co_do_pwrite_zeroes() Eric Blake
2021-02-02 22:45 ` [PULL 12/20] block/io: support int64_t bytes in bdrv_aligned_pwritev() Eric Blake
2021-02-02 22:45 ` [PULL 13/20] block/io: support int64_t bytes in bdrv_co_do_copy_on_readv() Eric Blake
2021-02-02 22:45 ` [PULL 14/20] block/io: support int64_t bytes in bdrv_aligned_preadv() Eric Blake
2021-02-02 22:45 ` [PULL 15/20] block/io: support int64_t bytes in bdrv_co_p{read, write}v_part() Eric Blake
2021-02-02 22:45 ` [PULL 16/20] block/io: support int64_t bytes in read/write wrappers Eric Blake
2021-02-02 22:45 ` [PULL 17/20] block/io: use int64_t bytes in copy_range Eric Blake
2021-02-02 22:45 ` [PULL 18/20] block/nbd: only detach existing iochannel from aio_context Eric Blake
2021-02-02 22:45 ` [PULL 19/20] block/nbd: only enter connection coroutine if it's present Eric Blake
2021-02-02 22:45 ` [PULL 20/20] nbd: make nbd_read* return -EIO on error Eric Blake
2021-02-02 23:12 ` [PULL 00/20] NBD patches for 2021-02-02 no-reply
2021-02-03 13:25 ` Eric Blake
2021-02-03 13:27 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210202224529.642055-11-eblake@redhat.com \
--to=eblake@redhat.com \
--cc=fam@euphon.net \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vsementsov@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).