* [Qemu-devel] [PATCH v3 00/17] block: local qiov helper
@ 2019-02-07 10:24 Vladimir Sementsov-Ogievskiy
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 01/17] block: enhance QEMUIOVector structure Vladimir Sementsov-Ogievskiy
` (20 more replies)
0 siblings, 21 replies; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Hi all!
Here is a new simple helper for a very often patter
around qemu_iovec_init_external, when we need simple qiov with only
one iov, initialized from external buffer.
v3:
01-02: tiny improvements, described in patch-emails
03-17: new patches
Note: only hw/scsi/scsi-disk.c not updated, as it has too tricky
logic around @iov fields of structures. So, it is simpler to
keep it as is.
Previous series version was "[PATCH v2 0/2] block: local qiov helper: part I"
https://lists.gnu.org/archive/html/qemu-devel/2019-02/msg01610.html
Vladimir Sementsov-Ogievskiy (17):
block: enhance QEMUIOVector structure
block/io: use qemu_iovec_init_buf
block/block-backend: use QEMU_IOVEC_INIT_BUF
block/backup: use qemu_iovec_init_buf
block/commit: use QEMU_IOVEC_INIT_BUF
block/stream: use QEMU_IOVEC_INIT_BUF
block/parallels: use QEMU_IOVEC_INIT_BUF
block/qcow: use qemu_iovec_init_buf
block/qcow2: use qemu_iovec_init_buf
block/qed: use qemu_iovec_init_buf
block/vmdk: use qemu_iovec_init_buf
qemu-img: use qemu_iovec_init_buf
migration/block: use qemu_iovec_init_buf
tests/test-bdrv-drain: use QEMU_IOVEC_INIT_BUF
hw/ide: drop iov field from IDEState
hw/ide: drop iov field from IDEBufferedRequest
hw/ide: drop iov field from IDEDMA
include/hw/ide/internal.h | 3 --
include/qemu/iov.h | 64 +++++++++++++++++++++++++++-
block/backup.c | 5 +--
block/block-backend.c | 13 +-----
block/commit.c | 7 +--
block/io.c | 89 +++++++++------------------------------
block/parallels.c | 13 +++---
block/qcow.c | 21 ++-------
block/qcow2.c | 12 +-----
block/qed-table.c | 16 ++-----
block/qed.c | 31 ++++----------
block/stream.c | 7 +--
block/vmdk.c | 7 +--
hw/ide/atapi.c | 14 +++---
hw/ide/core.c | 19 ++++-----
migration/block.c | 10 ++---
qemu-img.c | 10 +----
tests/test-bdrv-drain.c | 29 ++-----------
18 files changed, 134 insertions(+), 236 deletions(-)
--
2.18.0
^ permalink raw reply [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 01/17] block: enhance QEMUIOVector structure
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 14:50 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 02/17] block/io: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
` (19 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Add a possibility of embedded iovec, for cases when we need only one
local iov.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/qemu/iov.h | 64 ++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 62 insertions(+), 2 deletions(-)
diff --git a/include/qemu/iov.h b/include/qemu/iov.h
index 5f433c7768..034b9ae080 100644
--- a/include/qemu/iov.h
+++ b/include/qemu/iov.h
@@ -133,10 +133,70 @@ size_t iov_discard_back(struct iovec *iov, unsigned int *iov_cnt,
typedef struct QEMUIOVector {
struct iovec *iov;
int niov;
- int nalloc;
- size_t size;
+
+ /*
+ * For external @iov (qemu_iovec_init_external()) or allocated @iov
+ * (qemu_iovec_init()), @size is the cumulative size of iovecs and
+ * @local_iov is invalid and unused.
+ *
+ * For embedded @iov (QEMU_IOVEC_INIT_BUF() or qemu_iovec_init_buf()),
+ * @iov is equal to &@local_iov, and @size is valid, as it has same
+ * offset and type as @local_iov.iov_len, which is guaranteed by
+ * static assertion below.
+ *
+ * @nalloc is always valid and is -1 both for embedded and external
+ * cases. It is included in the union only to ensure the padding prior
+ * to the @size field will not result in a 0-length array.
+ */
+ union {
+ struct {
+ int nalloc;
+ struct iovec local_iov;
+ };
+ struct {
+ char __pad[sizeof(int) + offsetof(struct iovec, iov_len)];
+ size_t size;
+ };
+ };
} QEMUIOVector;
+QEMU_BUILD_BUG_ON(offsetof(QEMUIOVector, size) !=
+ offsetof(QEMUIOVector, local_iov.iov_len));
+
+#define QEMU_IOVEC_INIT_BUF(self, buf, len) \
+{ \
+ .iov = &(self).local_iov, \
+ .niov = 1, \
+ .nalloc = -1, \
+ .local_iov = { \
+ .iov_base = (void *)(buf), /* cast away const */ \
+ .iov_len = (len), \
+ }, \
+}
+
+/*
+ * qemu_iovec_init_buf
+ *
+ * Initialize embedded QEMUIOVector.
+ *
+ * Note: "const" is used over @buf pointer to make it simple to pass
+ * const pointers, appearing in read functions. Then this "const" is
+ * casted away by QEMU_IOVEC_INIT_BUF().
+ */
+static inline void qemu_iovec_init_buf(QEMUIOVector *qiov,
+ const void *buf, size_t len)
+{
+ *qiov = (QEMUIOVector) QEMU_IOVEC_INIT_BUF(*qiov, buf, len);
+}
+
+static inline void *qemu_iovec_get_buf(QEMUIOVector *qiov)
+{
+ /* Only supports embedded iov */
+ assert(qiov->niov == -1 && qiov->iov == &(qiov->local_iov));
+
+ return qiov->local_iov.iov_base;
+}
+
void qemu_iovec_init(QEMUIOVector *qiov, int alloc_hint);
void qemu_iovec_init_external(QEMUIOVector *qiov, struct iovec *iov, int niov);
void qemu_iovec_add(QEMUIOVector *qiov, void *base, size_t len);
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 02/17] block/io: use qemu_iovec_init_buf
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 01/17] block: enhance QEMUIOVector structure Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 14:53 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 03/17] block/block-backend: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
` (18 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new qemu_iovec_init_buf() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
While being here, use qemu_try_blockalign0 as well.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/io.c | 89 ++++++++++++------------------------------------------
1 file changed, 20 insertions(+), 69 deletions(-)
diff --git a/block/io.c b/block/io.c
index 213ca03d8d..2ba603c7bc 100644
--- a/block/io.c
+++ b/block/io.c
@@ -843,17 +843,13 @@ static int bdrv_prwv_co(BdrvChild *child, int64_t offset,
static int bdrv_rw_co(BdrvChild *child, int64_t sector_num, uint8_t *buf,
int nb_sectors, bool is_write, BdrvRequestFlags flags)
{
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = (void *)buf,
- .iov_len = nb_sectors * BDRV_SECTOR_SIZE,
- };
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf,
+ nb_sectors * BDRV_SECTOR_SIZE);
if (nb_sectors < 0 || nb_sectors > BDRV_REQUEST_MAX_SECTORS) {
return -EINVAL;
}
- qemu_iovec_init_external(&qiov, &iov, 1);
return bdrv_prwv_co(child, sector_num << BDRV_SECTOR_BITS,
&qiov, is_write, flags);
}
@@ -880,13 +876,8 @@ int bdrv_write(BdrvChild *child, int64_t sector_num,
int bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset,
int bytes, BdrvRequestFlags flags)
{
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = NULL,
- .iov_len = bytes,
- };
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, NULL, bytes);
- qemu_iovec_init_external(&qiov, &iov, 1);
return bdrv_prwv_co(child, offset, &qiov, true,
BDRV_REQ_ZERO_WRITE | flags);
}
@@ -950,17 +941,12 @@ int bdrv_preadv(BdrvChild *child, int64_t offset, QEMUIOVector *qiov)
int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int bytes)
{
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = (void *)buf,
- .iov_len = bytes,
- };
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
if (bytes < 0) {
return -EINVAL;
}
- qemu_iovec_init_external(&qiov, &iov, 1);
return bdrv_preadv(child, offset, &qiov);
}
@@ -978,17 +964,12 @@ int bdrv_pwritev(BdrvChild *child, int64_t offset, QEMUIOVector *qiov)
int bdrv_pwrite(BdrvChild *child, int64_t offset, const void *buf, int bytes)
{
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = (void *) buf,
- .iov_len = bytes,
- };
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
if (bytes < 0) {
return -EINVAL;
}
- qemu_iovec_init_external(&qiov, &iov, 1);
return bdrv_pwritev(child, offset, &qiov);
}
@@ -1165,7 +1146,6 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child,
void *bounce_buffer;
BlockDriver *drv = bs->drv;
- struct iovec iov;
QEMUIOVector local_qiov;
int64_t cluster_offset;
int64_t cluster_bytes;
@@ -1230,9 +1210,8 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child,
if (ret <= 0) {
/* Must copy-on-read; use the bounce buffer */
- iov.iov_base = bounce_buffer;
- iov.iov_len = pnum = MIN(pnum, MAX_BOUNCE_BUFFER);
- qemu_iovec_init_external(&local_qiov, &iov, 1);
+ pnum = MIN(pnum, MAX_BOUNCE_BUFFER);
+ qemu_iovec_init_buf(&local_qiov, bounce_buffer, pnum);
ret = bdrv_driver_preadv(bs, cluster_offset, pnum,
&local_qiov, 0);
@@ -1477,7 +1456,7 @@ static int coroutine_fn bdrv_co_do_pwrite_zeroes(BlockDriverState *bs,
{
BlockDriver *drv = bs->drv;
QEMUIOVector qiov;
- struct iovec iov = {0};
+ void *buf = NULL;
int ret = 0;
bool need_flush = false;
int head = 0;
@@ -1547,16 +1526,14 @@ static int coroutine_fn bdrv_co_do_pwrite_zeroes(BlockDriverState *bs,
need_flush = true;
}
num = MIN(num, max_transfer);
- iov.iov_len = num;
- if (iov.iov_base == NULL) {
- iov.iov_base = qemu_try_blockalign(bs, num);
- if (iov.iov_base == NULL) {
+ if (buf == NULL) {
+ buf = qemu_try_blockalign0(bs, num);
+ if (buf == NULL) {
ret = -ENOMEM;
goto fail;
}
- memset(iov.iov_base, 0, num);
}
- qemu_iovec_init_external(&qiov, &iov, 1);
+ qemu_iovec_init_buf(&qiov, buf, num);
ret = bdrv_driver_pwritev(bs, offset, num, &qiov, write_flags);
@@ -1564,8 +1541,8 @@ static int coroutine_fn bdrv_co_do_pwrite_zeroes(BlockDriverState *bs,
* all future requests.
*/
if (num < max_transfer) {
- qemu_vfree(iov.iov_base);
- iov.iov_base = NULL;
+ qemu_vfree(buf);
+ buf = NULL;
}
}
@@ -1577,7 +1554,7 @@ fail:
if (ret == 0 && need_flush) {
ret = bdrv_co_flush(bs);
}
- qemu_vfree(iov.iov_base);
+ qemu_vfree(buf);
return ret;
}
@@ -1763,7 +1740,6 @@ static int coroutine_fn bdrv_co_do_zero_pwritev(BdrvChild *child,
BlockDriverState *bs = child->bs;
uint8_t *buf = NULL;
QEMUIOVector local_qiov;
- struct iovec iov;
uint64_t align = bs->bl.request_alignment;
unsigned int head_padding_bytes, tail_padding_bytes;
int ret = 0;
@@ -1775,11 +1751,7 @@ static int coroutine_fn bdrv_co_do_zero_pwritev(BdrvChild *child,
assert(flags & BDRV_REQ_ZERO_WRITE);
if (head_padding_bytes || tail_padding_bytes) {
buf = qemu_blockalign(bs, align);
- iov = (struct iovec) {
- .iov_base = buf,
- .iov_len = align,
- };
- qemu_iovec_init_external(&local_qiov, &iov, 1);
+ qemu_iovec_init_buf(&local_qiov, buf, align);
}
if (head_padding_bytes) {
uint64_t zero_bytes = MIN(bytes, align - head_padding_bytes);
@@ -1885,17 +1857,12 @@ int coroutine_fn bdrv_co_pwritev(BdrvChild *child,
if (offset & (align - 1)) {
QEMUIOVector head_qiov;
- struct iovec head_iov;
mark_request_serialising(&req, align);
wait_serialising_requests(&req);
head_buf = qemu_blockalign(bs, align);
- head_iov = (struct iovec) {
- .iov_base = head_buf,
- .iov_len = align,
- };
- qemu_iovec_init_external(&head_qiov, &head_iov, 1);
+ qemu_iovec_init_buf(&head_qiov, head_buf, align);
bdrv_debug_event(bs, BLKDBG_PWRITEV_RMW_HEAD);
ret = bdrv_aligned_preadv(child, &req, offset & ~(align - 1), align,
@@ -1924,7 +1891,6 @@ int coroutine_fn bdrv_co_pwritev(BdrvChild *child,
if ((offset + bytes) & (align - 1)) {
QEMUIOVector tail_qiov;
- struct iovec tail_iov;
size_t tail_bytes;
bool waited;
@@ -1933,11 +1899,7 @@ int coroutine_fn bdrv_co_pwritev(BdrvChild *child,
assert(!waited || !use_local_qiov);
tail_buf = qemu_blockalign(bs, align);
- tail_iov = (struct iovec) {
- .iov_base = tail_buf,
- .iov_len = align,
- };
- qemu_iovec_init_external(&tail_qiov, &tail_iov, 1);
+ qemu_iovec_init_buf(&tail_qiov, tail_buf, align);
bdrv_debug_event(bs, BLKDBG_PWRITEV_RMW_TAIL);
ret = bdrv_aligned_preadv(child, &req, (offset + bytes) & ~(align - 1),
@@ -2468,15 +2430,9 @@ bdrv_rw_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos,
int bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf,
int64_t pos, int size)
{
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = (void *) buf,
- .iov_len = size,
- };
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, size);
int ret;
- qemu_iovec_init_external(&qiov, &iov, 1);
-
ret = bdrv_writev_vmstate(bs, &qiov, pos);
if (ret < 0) {
return ret;
@@ -2493,14 +2449,9 @@ int bdrv_writev_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos)
int bdrv_load_vmstate(BlockDriverState *bs, uint8_t *buf,
int64_t pos, int size)
{
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = buf,
- .iov_len = size,
- };
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, size);
int ret;
- qemu_iovec_init_external(&qiov, &iov, 1);
ret = bdrv_readv_vmstate(bs, &qiov, pos);
if (ret < 0) {
return ret;
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 03/17] block/block-backend: use QEMU_IOVEC_INIT_BUF
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 01/17] block: enhance QEMUIOVector structure Vladimir Sementsov-Ogievskiy
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 02/17] block/io: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 14:54 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 04/17] block/backup: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
` (17 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new QEMU_IOVEC_INIT_BUF() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/block-backend.c | 13 ++-----------
1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/block/block-backend.c b/block/block-backend.c
index f6ea824308..6cc25569ef 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -1204,17 +1204,8 @@ static int blk_prw(BlockBackend *blk, int64_t offset, uint8_t *buf,
int64_t bytes, CoroutineEntry co_entry,
BdrvRequestFlags flags)
{
- QEMUIOVector qiov;
- struct iovec iov;
- BlkRwCo rwco;
-
- iov = (struct iovec) {
- .iov_base = buf,
- .iov_len = bytes,
- };
- qemu_iovec_init_external(&qiov, &iov, 1);
-
- rwco = (BlkRwCo) {
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
+ BlkRwCo rwco = {
.blk = blk,
.offset = offset,
.iobuf = &qiov,
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 04/17] block/backup: use qemu_iovec_init_buf
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (2 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 03/17] block/block-backend: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:06 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 05/17] block/commit: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
` (16 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new qemu_iovec_init_buf() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/backup.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/block/backup.c b/block/backup.c
index 435414e964..9988753249 100644
--- a/block/backup.c
+++ b/block/backup.c
@@ -107,7 +107,6 @@ static int coroutine_fn backup_cow_with_bounce_buffer(BackupBlockJob *job,
void **bounce_buffer)
{
int ret;
- struct iovec iov;
QEMUIOVector qiov;
BlockBackend *blk = job->common.blk;
int nbytes;
@@ -119,9 +118,7 @@ static int coroutine_fn backup_cow_with_bounce_buffer(BackupBlockJob *job,
if (!*bounce_buffer) {
*bounce_buffer = blk_blockalign(blk, job->cluster_size);
}
- iov.iov_base = *bounce_buffer;
- iov.iov_len = nbytes;
- qemu_iovec_init_external(&qiov, &iov, 1);
+ qemu_iovec_init_buf(&qiov, *bounce_buffer, nbytes);
ret = blk_co_preadv(blk, start, qiov.size, &qiov, read_flags);
if (ret < 0) {
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 05/17] block/commit: use QEMU_IOVEC_INIT_BUF
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (3 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 04/17] block/backup: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:07 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 06/17] block/stream: " Vladimir Sementsov-Ogievskiy
` (15 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new QEMU_IOVEC_INIT_BUF() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/commit.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/block/commit.c b/block/commit.c
index 53148e610b..d500a93068 100644
--- a/block/commit.c
+++ b/block/commit.c
@@ -47,14 +47,9 @@ static int coroutine_fn commit_populate(BlockBackend *bs, BlockBackend *base,
void *buf)
{
int ret = 0;
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = buf,
- .iov_len = bytes,
- };
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
assert(bytes < SIZE_MAX);
- qemu_iovec_init_external(&qiov, &iov, 1);
ret = blk_co_preadv(bs, offset, qiov.size, &qiov, 0);
if (ret < 0) {
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 06/17] block/stream: use QEMU_IOVEC_INIT_BUF
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (4 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 05/17] block/commit: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:08 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 07/17] block/parallels: " Vladimir Sementsov-Ogievskiy
` (14 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new QEMU_IOVEC_INIT_BUF() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/stream.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/block/stream.c b/block/stream.c
index 7a49ac0992..e14579ff80 100644
--- a/block/stream.c
+++ b/block/stream.c
@@ -41,14 +41,9 @@ static int coroutine_fn stream_populate(BlockBackend *blk,
int64_t offset, uint64_t bytes,
void *buf)
{
- struct iovec iov = {
- .iov_base = buf,
- .iov_len = bytes,
- };
- QEMUIOVector qiov;
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
assert(bytes < SIZE_MAX);
- qemu_iovec_init_external(&qiov, &iov, 1);
/* Copy-on-read the unallocated clusters */
return blk_co_preadv(blk, offset, qiov.size, &qiov, BDRV_REQ_COPY_ON_READ);
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 07/17] block/parallels: use QEMU_IOVEC_INIT_BUF
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (5 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 06/17] block/stream: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:11 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 08/17] block/qcow: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
` (13 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new QEMU_IOVEC_INIT_BUF() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/parallels.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/block/parallels.c b/block/parallels.c
index cc9445879d..6d24ee6d8e 100644
--- a/block/parallels.c
+++ b/block/parallels.c
@@ -220,23 +220,20 @@ static int64_t allocate_clusters(BlockDriverState *bs, int64_t sector_num,
if (bs->backing) {
int64_t nb_cow_sectors = to_allocate * s->tracks;
int64_t nb_cow_bytes = nb_cow_sectors << BDRV_SECTOR_BITS;
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_len = nb_cow_bytes,
- .iov_base = qemu_blockalign(bs, nb_cow_bytes)
- };
- qemu_iovec_init_external(&qiov, &iov, 1);
+ QEMUIOVector qiov =
+ QEMU_IOVEC_INIT_BUF(qiov, qemu_blockalign(bs, nb_cow_bytes),
+ nb_cow_bytes);
ret = bdrv_co_preadv(bs->backing, idx * s->tracks * BDRV_SECTOR_SIZE,
nb_cow_bytes, &qiov, 0);
if (ret < 0) {
- qemu_vfree(iov.iov_base);
+ qemu_vfree(qemu_iovec_get_buf(&qiov));
return ret;
}
ret = bdrv_co_pwritev(bs->file, s->data_end * BDRV_SECTOR_SIZE,
nb_cow_bytes, &qiov, 0);
- qemu_vfree(iov.iov_base);
+ qemu_vfree(qemu_iovec_get_buf(&qiov));
if (ret < 0) {
return ret;
}
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 08/17] block/qcow: use qemu_iovec_init_buf
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (6 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 07/17] block/parallels: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:13 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 09/17] block/qcow2: " Vladimir Sementsov-Ogievskiy
` (12 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new qemu_iovec_init_buf() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/qcow.c | 21 ++++-----------------
1 file changed, 4 insertions(+), 17 deletions(-)
diff --git a/block/qcow.c b/block/qcow.c
index 0a235bf393..409c700d33 100644
--- a/block/qcow.c
+++ b/block/qcow.c
@@ -628,7 +628,6 @@ static coroutine_fn int qcow_co_preadv(BlockDriverState *bs, uint64_t offset,
int offset_in_cluster;
int ret = 0, n;
uint64_t cluster_offset;
- struct iovec hd_iov;
QEMUIOVector hd_qiov;
uint8_t *buf;
void *orig_buf;
@@ -661,9 +660,7 @@ static coroutine_fn int qcow_co_preadv(BlockDriverState *bs, uint64_t offset,
if (!cluster_offset) {
if (bs->backing) {
/* read from the base image */
- hd_iov.iov_base = (void *)buf;
- hd_iov.iov_len = n;
- qemu_iovec_init_external(&hd_qiov, &hd_iov, 1);
+ qemu_iovec_init_buf(&hd_qiov, buf, n);
qemu_co_mutex_unlock(&s->lock);
/* qcow2 emits this on bs->file instead of bs->backing */
BLKDBG_EVENT(bs->file, BLKDBG_READ_BACKING_AIO);
@@ -688,9 +685,7 @@ static coroutine_fn int qcow_co_preadv(BlockDriverState *bs, uint64_t offset,
ret = -EIO;
break;
}
- hd_iov.iov_base = (void *)buf;
- hd_iov.iov_len = n;
- qemu_iovec_init_external(&hd_qiov, &hd_iov, 1);
+ qemu_iovec_init_buf(&hd_qiov, buf, n);
qemu_co_mutex_unlock(&s->lock);
BLKDBG_EVENT(bs->file, BLKDBG_READ_AIO);
ret = bdrv_co_preadv(bs->file, cluster_offset + offset_in_cluster,
@@ -733,7 +728,6 @@ static coroutine_fn int qcow_co_pwritev(BlockDriverState *bs, uint64_t offset,
int offset_in_cluster;
uint64_t cluster_offset;
int ret = 0, n;
- struct iovec hd_iov;
QEMUIOVector hd_qiov;
uint8_t *buf;
void *orig_buf;
@@ -779,9 +773,7 @@ static coroutine_fn int qcow_co_pwritev(BlockDriverState *bs, uint64_t offset,
}
}
- hd_iov.iov_base = (void *)buf;
- hd_iov.iov_len = n;
- qemu_iovec_init_external(&hd_qiov, &hd_iov, 1);
+ qemu_iovec_init_buf(&hd_qiov, buf, n);
qemu_co_mutex_unlock(&s->lock);
BLKDBG_EVENT(bs->file, BLKDBG_WRITE_AIO);
ret = bdrv_co_pwritev(bs->file, cluster_offset + offset_in_cluster,
@@ -1062,7 +1054,6 @@ qcow_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset,
{
BDRVQcowState *s = bs->opaque;
QEMUIOVector hd_qiov;
- struct iovec iov;
z_stream strm;
int ret, out_len;
uint8_t *buf, *out_buf;
@@ -1128,11 +1119,7 @@ qcow_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset,
}
cluster_offset &= s->cluster_offset_mask;
- iov = (struct iovec) {
- .iov_base = out_buf,
- .iov_len = out_len,
- };
- qemu_iovec_init_external(&hd_qiov, &iov, 1);
+ qemu_iovec_init_buf(&hd_qiov, out_buf, out_len);
BLKDBG_EVENT(bs->file, BLKDBG_WRITE_COMPRESSED);
ret = bdrv_co_pwritev(bs->file, cluster_offset, out_len, &hd_qiov, 0);
if (ret < 0) {
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 09/17] block/qcow2: use qemu_iovec_init_buf
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (7 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 08/17] block/qcow: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:15 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 10/17] block/qed: " Vladimir Sementsov-Ogievskiy
` (11 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new qemu_iovec_init_buf() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/qcow2.c | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index 8c91b92865..1f413a75bf 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -3894,7 +3894,6 @@ qcow2_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset,
{
BDRVQcow2State *s = bs->opaque;
QEMUIOVector hd_qiov;
- struct iovec iov;
int ret;
size_t out_len;
uint8_t *buf, *out_buf;
@@ -3960,11 +3959,7 @@ qcow2_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset,
goto fail;
}
- iov = (struct iovec) {
- .iov_base = out_buf,
- .iov_len = out_len,
- };
- qemu_iovec_init_external(&hd_qiov, &iov, 1);
+ qemu_iovec_init_buf(&hd_qiov, out_buf, out_len);
BLKDBG_EVENT(bs->file, BLKDBG_WRITE_COMPRESSED);
ret = bdrv_co_pwritev(bs->file, cluster_offset, out_len, &hd_qiov, 0);
@@ -3990,7 +3985,6 @@ qcow2_co_preadv_compressed(BlockDriverState *bs,
int ret = 0, csize, nb_csectors;
uint64_t coffset;
uint8_t *buf, *out_buf;
- struct iovec iov;
QEMUIOVector local_qiov;
int offset_in_cluster = offset_into_cluster(s, offset);
@@ -4002,9 +3996,7 @@ qcow2_co_preadv_compressed(BlockDriverState *bs,
if (!buf) {
return -ENOMEM;
}
- iov.iov_base = buf;
- iov.iov_len = csize;
- qemu_iovec_init_external(&local_qiov, &iov, 1);
+ qemu_iovec_init_buf(&local_qiov, buf, csize);
out_buf = qemu_blockalign(bs, s->cluster_size);
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 10/17] block/qed: use qemu_iovec_init_buf
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (8 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 09/17] block/qcow2: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:18 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 11/17] block/vmdk: " Vladimir Sementsov-Ogievskiy
` (10 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new qemu_iovec_init_buf() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/qed-table.c | 16 +++-------------
block/qed.c | 31 +++++++++----------------------
2 files changed, 12 insertions(+), 35 deletions(-)
diff --git a/block/qed-table.c b/block/qed-table.c
index 7df5680adb..c497bd4aec 100644
--- a/block/qed-table.c
+++ b/block/qed-table.c
@@ -21,16 +21,11 @@
/* Called with table_lock held. */
static int qed_read_table(BDRVQEDState *s, uint64_t offset, QEDTable *table)
{
- QEMUIOVector qiov;
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(
+ qiov, table->offsets, s->header.cluster_size * s->header.table_size);
int noffsets;
int i, ret;
- struct iovec iov = {
- .iov_base = table->offsets,
- .iov_len = s->header.cluster_size * s->header.table_size,
- };
- qemu_iovec_init_external(&qiov, &iov, 1);
-
trace_qed_read_table(s, offset, table);
qemu_co_mutex_unlock(&s->table_lock);
@@ -71,7 +66,6 @@ static int qed_write_table(BDRVQEDState *s, uint64_t offset, QEDTable *table,
unsigned int sector_mask = BDRV_SECTOR_SIZE / sizeof(uint64_t) - 1;
unsigned int start, end, i;
QEDTable *new_table;
- struct iovec iov;
QEMUIOVector qiov;
size_t len_bytes;
int ret;
@@ -85,11 +79,7 @@ static int qed_write_table(BDRVQEDState *s, uint64_t offset, QEDTable *table,
len_bytes = (end - start) * sizeof(uint64_t);
new_table = qemu_blockalign(s->bs, len_bytes);
- iov = (struct iovec) {
- .iov_base = new_table->offsets,
- .iov_len = len_bytes,
- };
- qemu_iovec_init_external(&qiov, &iov, 1);
+ qemu_iovec_init_buf(&qiov, new_table->offsets, len_bytes);
/* Byteswap table */
for (i = start; i < end; i++) {
diff --git a/block/qed.c b/block/qed.c
index 1280870024..a010e5b349 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -113,18 +113,13 @@ static int coroutine_fn qed_write_header(BDRVQEDState *s)
int nsectors = DIV_ROUND_UP(sizeof(QEDHeader), BDRV_SECTOR_SIZE);
size_t len = nsectors * BDRV_SECTOR_SIZE;
uint8_t *buf;
- struct iovec iov;
QEMUIOVector qiov;
int ret;
assert(s->allocating_acb || s->allocating_write_reqs_plugged);
buf = qemu_blockalign(s->bs, len);
- iov = (struct iovec) {
- .iov_base = buf,
- .iov_len = len,
- };
- qemu_iovec_init_external(&qiov, &iov, 1);
+ qemu_iovec_init_buf(&qiov, buf, len);
ret = bdrv_co_preadv(s->bs->file, 0, qiov.size, &qiov, 0);
if (ret < 0) {
@@ -913,7 +908,6 @@ static int coroutine_fn qed_copy_from_backing_file(BDRVQEDState *s,
{
QEMUIOVector qiov;
QEMUIOVector *backing_qiov = NULL;
- struct iovec iov;
int ret;
/* Skip copy entirely if there is no work to do */
@@ -921,11 +915,7 @@ static int coroutine_fn qed_copy_from_backing_file(BDRVQEDState *s,
return 0;
}
- iov = (struct iovec) {
- .iov_base = qemu_blockalign(s->bs, len),
- .iov_len = len,
- };
- qemu_iovec_init_external(&qiov, &iov, 1);
+ qemu_iovec_init_buf(&qiov, qemu_blockalign(s->bs, len), len);
ret = qed_read_backing_file(s, pos, &qiov, &backing_qiov);
@@ -946,7 +936,7 @@ static int coroutine_fn qed_copy_from_backing_file(BDRVQEDState *s,
}
ret = 0;
out:
- qemu_vfree(iov.iov_base);
+ qemu_vfree(qemu_iovec_get_buf(&qiov));
return ret;
}
@@ -1447,8 +1437,12 @@ static int coroutine_fn bdrv_qed_co_pwrite_zeroes(BlockDriverState *bs,
BdrvRequestFlags flags)
{
BDRVQEDState *s = bs->opaque;
- QEMUIOVector qiov;
- struct iovec iov;
+
+ /*
+ * Zero writes start without an I/O buffer. If a buffer becomes necessary
+ * then it will be allocated during request processing.
+ */
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, NULL, bytes);
/* Fall back if the request is not aligned */
if (qed_offset_into_cluster(s, offset) ||
@@ -1456,13 +1450,6 @@ static int coroutine_fn bdrv_qed_co_pwrite_zeroes(BlockDriverState *bs,
return -ENOTSUP;
}
- /* Zero writes start without an I/O buffer. If a buffer becomes necessary
- * then it will be allocated during request processing.
- */
- iov.iov_base = NULL;
- iov.iov_len = bytes;
-
- qemu_iovec_init_external(&qiov, &iov, 1);
return qed_co_request(bs, offset >> BDRV_SECTOR_BITS, &qiov,
bytes >> BDRV_SECTOR_BITS,
QED_AIOCB_WRITE | QED_AIOCB_ZERO);
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 11/17] block/vmdk: use qemu_iovec_init_buf
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (9 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 10/17] block/qed: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:19 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 12/17] qemu-img: " Vladimir Sementsov-Ogievskiy
` (9 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new qemu_iovec_init_buf() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/vmdk.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/block/vmdk.c b/block/vmdk.c
index 682ad93aa1..4e331832df 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -1371,7 +1371,6 @@ static int vmdk_write_extent(VmdkExtent *extent, int64_t cluster_offset,
VmdkGrainMarker *data = NULL;
uLongf buf_len;
QEMUIOVector local_qiov;
- struct iovec iov;
int64_t write_offset;
int64_t write_end_sector;
@@ -1399,11 +1398,7 @@ static int vmdk_write_extent(VmdkExtent *extent, int64_t cluster_offset,
data->size = cpu_to_le32(buf_len);
n_bytes = buf_len + sizeof(VmdkGrainMarker);
- iov = (struct iovec) {
- .iov_base = data,
- .iov_len = n_bytes,
- };
- qemu_iovec_init_external(&local_qiov, &iov, 1);
+ qemu_iovec_init_buf(&local_qiov, data, n_bytes);
BLKDBG_EVENT(extent->file, BLKDBG_WRITE_COMPRESSED);
} else {
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 12/17] qemu-img: use qemu_iovec_init_buf
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (10 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 11/17] block/vmdk: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:20 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 13/17] migration/block: " Vladimir Sementsov-Ogievskiy
` (8 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new qemu_iovec_init_buf() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
qemu-img.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
index 25288c4d18..7853935049 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -1670,7 +1670,6 @@ static int coroutine_fn convert_co_read(ImgConvertState *s, int64_t sector_num,
{
int n, ret;
QEMUIOVector qiov;
- struct iovec iov;
assert(nb_sectors <= s->buf_sectors);
while (nb_sectors > 0) {
@@ -1686,9 +1685,7 @@ static int coroutine_fn convert_co_read(ImgConvertState *s, int64_t sector_num,
bs_sectors = s->src_sectors[src_cur];
n = MIN(nb_sectors, bs_sectors - (sector_num - src_cur_offset));
- iov.iov_base = buf;
- iov.iov_len = n << BDRV_SECTOR_BITS;
- qemu_iovec_init_external(&qiov, &iov, 1);
+ qemu_iovec_init_buf(&qiov, buf, n << BDRV_SECTOR_BITS);
ret = blk_co_preadv(
blk, (sector_num - src_cur_offset) << BDRV_SECTOR_BITS,
@@ -1712,7 +1709,6 @@ static int coroutine_fn convert_co_write(ImgConvertState *s, int64_t sector_num,
{
int ret;
QEMUIOVector qiov;
- struct iovec iov;
while (nb_sectors > 0) {
int n = nb_sectors;
@@ -1740,9 +1736,7 @@ static int coroutine_fn convert_co_write(ImgConvertState *s, int64_t sector_num,
(s->compressed &&
!buffer_is_zero(buf, n * BDRV_SECTOR_SIZE)))
{
- iov.iov_base = buf;
- iov.iov_len = n << BDRV_SECTOR_BITS;
- qemu_iovec_init_external(&qiov, &iov, 1);
+ qemu_iovec_init_buf(&qiov, buf, n << BDRV_SECTOR_BITS);
ret = blk_co_pwritev(s->target, sector_num << BDRV_SECTOR_BITS,
n << BDRV_SECTOR_BITS, &qiov, flags);
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 13/17] migration/block: use qemu_iovec_init_buf
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (11 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 12/17] qemu-img: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:20 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 14/17] tests/test-bdrv-drain: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
` (7 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new qemu_iovec_init_buf() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
migration/block.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/migration/block.c b/migration/block.c
index 0e24e18d13..83c633fb3f 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -83,7 +83,6 @@ typedef struct BlkMigBlock {
BlkMigDevState *bmds;
int64_t sector;
int nr_sectors;
- struct iovec iov;
QEMUIOVector qiov;
BlockAIOCB *aiocb;
@@ -314,9 +313,7 @@ static int mig_save_device_bulk(QEMUFile *f, BlkMigDevState *bmds)
blk->sector = cur_sector;
blk->nr_sectors = nr_sectors;
- blk->iov.iov_base = blk->buf;
- blk->iov.iov_len = nr_sectors * BDRV_SECTOR_SIZE;
- qemu_iovec_init_external(&blk->qiov, &blk->iov, 1);
+ qemu_iovec_init_buf(&blk->qiov, blk->buf, nr_sectors * BDRV_SECTOR_SIZE);
blk_mig_lock();
block_mig_state.submitted++;
@@ -556,9 +553,8 @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
blk->nr_sectors = nr_sectors;
if (is_async) {
- blk->iov.iov_base = blk->buf;
- blk->iov.iov_len = nr_sectors * BDRV_SECTOR_SIZE;
- qemu_iovec_init_external(&blk->qiov, &blk->iov, 1);
+ qemu_iovec_init_buf(&blk->qiov, blk->buf,
+ nr_sectors * BDRV_SECTOR_SIZE);
blk->aiocb = blk_aio_preadv(bmds->blk,
sector * BDRV_SECTOR_SIZE,
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 14/17] tests/test-bdrv-drain: use QEMU_IOVEC_INIT_BUF
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (12 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 13/17] migration/block: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:21 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 15/17] hw/ide: drop iov field from IDEState Vladimir Sementsov-Ogievskiy
` (6 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
Use new QEMU_IOVEC_INIT_BUF() instead of
qemu_iovec_init_external( ... , 1), which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
tests/test-bdrv-drain.c | 29 ++++-------------------------
1 file changed, 4 insertions(+), 25 deletions(-)
diff --git a/tests/test-bdrv-drain.c b/tests/test-bdrv-drain.c
index ee1740ff06..821be405f0 100644
--- a/tests/test-bdrv-drain.c
+++ b/tests/test-bdrv-drain.c
@@ -204,12 +204,7 @@ static void test_drv_cb_common(enum drain_type drain_type, bool recursive)
BlockAIOCB *acb;
int aio_ret;
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = NULL,
- .iov_len = 0,
- };
- qemu_iovec_init_external(&qiov, &iov, 1);
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, NULL, 0);
blk = blk_new(BLK_PERM_ALL, BLK_PERM_ALL);
bs = bdrv_new_open_driver(&bdrv_test, "test-node", BDRV_O_RDWR,
@@ -670,12 +665,7 @@ static void test_iothread_common(enum drain_type drain_type, int drain_thread)
AioContext *ctx_a = iothread_get_aio_context(a);
AioContext *ctx_b = iothread_get_aio_context(b);
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = NULL,
- .iov_len = 0,
- };
- qemu_iovec_init_external(&qiov, &iov, 1);
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, NULL, 0);
/* bdrv_drain_all() may only be called from the main loop thread */
if (drain_type == BDRV_DRAIN_ALL && drain_thread != 0) {
@@ -1148,13 +1138,7 @@ static void coroutine_fn test_co_delete_by_drain(void *opaque)
BlockDriverState *bs = blk_bs(blk);
BDRVTestTopState *tts = bs->opaque;
void *buffer = g_malloc(65536);
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = buffer,
- .iov_len = 65536,
- };
-
- qemu_iovec_init_external(&qiov, &iov, 1);
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buffer, 65536);
/* Pretend some internal write operation from parent to child.
* Important: We have to read from the child, not from the parent!
@@ -1365,12 +1349,7 @@ static void test_detach_indirect(bool by_parent_cb)
BdrvChild *child_a, *child_b;
BlockAIOCB *acb;
- QEMUIOVector qiov;
- struct iovec iov = {
- .iov_base = NULL,
- .iov_len = 0,
- };
- qemu_iovec_init_external(&qiov, &iov, 1);
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, NULL, 0);
if (!by_parent_cb) {
detach_by_driver_cb_role = child_file;
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 15/17] hw/ide: drop iov field from IDEState
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (13 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 14/17] tests/test-bdrv-drain: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:23 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 16/17] hw/ide: drop iov field from IDEBufferedRequest Vladimir Sementsov-Ogievskiy
` (5 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
@iov is used only to initialize @qiov. Let's use new
qemu_iovec_init_buf() instead, which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/hw/ide/internal.h | 1 -
hw/ide/atapi.c | 9 ++++-----
hw/ide/core.c | 8 ++------
3 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/include/hw/ide/internal.h b/include/hw/ide/internal.h
index 880413ddc7..fa99486d7a 100644
--- a/include/hw/ide/internal.h
+++ b/include/hw/ide/internal.h
@@ -405,7 +405,6 @@ struct IDEState {
int atapi_dma; /* true if dma is requested for the packet cmd */
BlockAcctCookie acct;
BlockAIOCB *pio_aiocb;
- struct iovec iov;
QEMUIOVector qiov;
QLIST_HEAD(, IDEBufferedRequest) buffered_requests;
/* ATA DMA state */
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index 39e473f9c2..4de86555d9 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -174,16 +174,15 @@ static void cd_read_sector_cb(void *opaque, int ret)
static int cd_read_sector(IDEState *s)
{
+ void *buf;
+
if (s->cd_sector_size != 2048 && s->cd_sector_size != 2352) {
block_acct_invalid(blk_get_stats(s->blk), BLOCK_ACCT_READ);
return -EINVAL;
}
- s->iov.iov_base = (s->cd_sector_size == 2352) ?
- s->io_buffer + 16 : s->io_buffer;
-
- s->iov.iov_len = ATAPI_SECTOR_SIZE;
- qemu_iovec_init_external(&s->qiov, &s->iov, 1);
+ buf = (s->cd_sector_size == 2352) ? s->io_buffer + 16 : s->io_buffer;
+ qemu_iovec_init_buf(&s->qiov, buf, ATAPI_SECTOR_SIZE);
trace_cd_read_sector(s->lba);
diff --git a/hw/ide/core.c b/hw/ide/core.c
index c3d779db6e..e94ba8c488 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -774,9 +774,7 @@ static void ide_sector_read(IDEState *s)
return;
}
- s->iov.iov_base = s->io_buffer;
- s->iov.iov_len = n * BDRV_SECTOR_SIZE;
- qemu_iovec_init_external(&s->qiov, &s->iov, 1);
+ qemu_iovec_init_buf(&s->qiov, s->io_buffer, n * BDRV_SECTOR_SIZE);
block_acct_start(blk_get_stats(s->blk), &s->acct,
n * BDRV_SECTOR_SIZE, BLOCK_ACCT_READ);
@@ -1045,9 +1043,7 @@ static void ide_sector_write(IDEState *s)
return;
}
- s->iov.iov_base = s->io_buffer;
- s->iov.iov_len = n * BDRV_SECTOR_SIZE;
- qemu_iovec_init_external(&s->qiov, &s->iov, 1);
+ qemu_iovec_init_buf(&s->qiov, s->io_buffer, n * BDRV_SECTOR_SIZE);
block_acct_start(blk_get_stats(s->blk), &s->acct,
n * BDRV_SECTOR_SIZE, BLOCK_ACCT_WRITE);
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 16/17] hw/ide: drop iov field from IDEBufferedRequest
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (14 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 15/17] hw/ide: drop iov field from IDEState Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:38 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 17/17] hw/ide: drop iov field from IDEDMA Vladimir Sementsov-Ogievskiy
` (4 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
@iov is used only to initialize @qiov. Let's use new
qemu_iovec_init_buf() instead, which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/hw/ide/internal.h | 1 -
hw/ide/core.c | 11 ++++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/include/hw/ide/internal.h b/include/hw/ide/internal.h
index fa99486d7a..1b02bb9151 100644
--- a/include/hw/ide/internal.h
+++ b/include/hw/ide/internal.h
@@ -346,7 +346,6 @@ extern const char *IDE_DMA_CMD_lookup[IDE_DMA__COUNT];
typedef struct IDEBufferedRequest {
QLIST_ENTRY(IDEBufferedRequest) list;
- struct iovec iov;
QEMUIOVector qiov;
QEMUIOVector *original_qiov;
BlockCompletionFunc *original_cb;
diff --git a/hw/ide/core.c b/hw/ide/core.c
index e94ba8c488..1cf87fdefe 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -629,13 +629,15 @@ static void ide_buffered_readv_cb(void *opaque, int ret)
IDEBufferedRequest *req = opaque;
if (!req->orphaned) {
if (!ret) {
- qemu_iovec_from_buf(req->original_qiov, 0, req->iov.iov_base,
+ assert(req->qiov.size == req->original_qiov->size);
+ qemu_iovec_from_buf(req->original_qiov, 0,
+ req->qiov.local_iov.iov_base,
req->original_qiov->size);
}
req->original_cb(req->original_opaque, ret);
}
QLIST_REMOVE(req, list);
- qemu_vfree(req->iov.iov_base);
+ qemu_vfree(qemu_iovec_get_buf(&req->qiov));
g_free(req);
}
@@ -660,9 +662,8 @@ BlockAIOCB *ide_buffered_readv(IDEState *s, int64_t sector_num,
req->original_qiov = iov;
req->original_cb = cb;
req->original_opaque = opaque;
- req->iov.iov_base = qemu_blockalign(blk_bs(s->blk), iov->size);
- req->iov.iov_len = iov->size;
- qemu_iovec_init_external(&req->qiov, &req->iov, 1);
+ qemu_iovec_init_buf(&req->qiov, blk_blockalign(s->blk, iov->size),
+ iov->size);
aioreq = blk_aio_preadv(s->blk, sector_num << BDRV_SECTOR_BITS,
&req->qiov, 0, ide_buffered_readv_cb, req);
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [Qemu-devel] [PATCH v3 17/17] hw/ide: drop iov field from IDEDMA
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (15 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 16/17] hw/ide: drop iov field from IDEBufferedRequest Vladimir Sementsov-Ogievskiy
@ 2019-02-07 10:24 ` Vladimir Sementsov-Ogievskiy
2019-02-07 15:39 ` Eric Blake
2019-02-11 6:03 ` [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Stefan Hajnoczi
` (3 subsequent siblings)
20 siblings, 1 reply; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-07 10:24 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: dgilbert, quintela, jsnow, den, fam, stefanha, mreitz, kwolf,
jcody, vsementsov
@iov is used only to initialize @qiov. Let's use new
qemu_iovec_init_buf() instead, which simplifies the code.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/hw/ide/internal.h | 1 -
hw/ide/atapi.c | 5 ++---
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/include/hw/ide/internal.h b/include/hw/ide/internal.h
index 1b02bb9151..8efd03132b 100644
--- a/include/hw/ide/internal.h
+++ b/include/hw/ide/internal.h
@@ -455,7 +455,6 @@ struct IDEDMAOps {
struct IDEDMA {
const struct IDEDMAOps *ops;
- struct iovec iov;
QEMUIOVector qiov;
BlockAIOCB *aiocb;
};
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index 4de86555d9..1b0f66cc08 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -420,9 +420,8 @@ static void ide_atapi_cmd_read_dma_cb(void *opaque, int ret)
data_offset = 0;
}
trace_ide_atapi_cmd_read_dma_cb_aio(s, s->lba, n);
- s->bus->dma->iov.iov_base = (void *)(s->io_buffer + data_offset);
- s->bus->dma->iov.iov_len = n * ATAPI_SECTOR_SIZE;
- qemu_iovec_init_external(&s->bus->dma->qiov, &s->bus->dma->iov, 1);
+ qemu_iovec_init_buf(&s->bus->dma->qiov, s->io_buffer + data_offset,
+ n * ATAPI_SECTOR_SIZE);
s->bus->dma->aiocb = ide_buffered_readv(s, (int64_t)s->lba << 2,
&s->bus->dma->qiov, n * 4,
--
2.18.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 01/17] block: enhance QEMUIOVector structure
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 01/17] block: enhance QEMUIOVector structure Vladimir Sementsov-Ogievskiy
@ 2019-02-07 14:50 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 14:50 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 1405 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Add a possibility of embedded iovec, for cases when we need only one
> local iov.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> include/qemu/iov.h | 64 ++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 62 insertions(+), 2 deletions(-)
>
> +/*
> + * qemu_iovec_init_buf
> + *
> + * Initialize embedded QEMUIOVector.
> + *
> + * Note: "const" is used over @buf pointer to make it simple to pass
> + * const pointers, appearing in read functions. Then this "const" is
> + * casted away by QEMU_IOVEC_INIT_BUF().
s/casted/cast/ (one of those funny irregular English verbs)
> + */
> +static inline void qemu_iovec_init_buf(QEMUIOVector *qiov,
> + const void *buf, size_t len)
> +{
> + *qiov = (QEMUIOVector) QEMU_IOVEC_INIT_BUF(*qiov, buf, len);
> +}
> +
> +static inline void *qemu_iovec_get_buf(QEMUIOVector *qiov)
> +{
> + /* Only supports embedded iov */
> + assert(qiov->niov == -1 && qiov->iov == &(qiov->local_iov));
The inner () aren't needed here.
> +
> + return qiov->local_iov.iov_base;
> +}
> +
Both minor, so:
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 02/17] block/io: use qemu_iovec_init_buf
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 02/17] block/io: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
@ 2019-02-07 14:53 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 14:53 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 1858 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new qemu_iovec_init_buf() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> While being here, use qemu_try_blockalign0 as well.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/io.c | 89 ++++++++++++------------------------------------------
> 1 file changed, 20 insertions(+), 69 deletions(-)
>
> @@ -1477,7 +1456,7 @@ static int coroutine_fn bdrv_co_do_pwrite_zeroes(BlockDriverState *bs,
> {
> BlockDriver *drv = bs->drv;
> QEMUIOVector qiov;
> - struct iovec iov = {0};
> + void *buf = NULL;
> int ret = 0;
> bool need_flush = false;
> int head = 0;
> @@ -1547,16 +1526,14 @@ static int coroutine_fn bdrv_co_do_pwrite_zeroes(BlockDriverState *bs,
> need_flush = true;
> }
> num = MIN(num, max_transfer);
> - iov.iov_len = num;
> - if (iov.iov_base == NULL) {
> - iov.iov_base = qemu_try_blockalign(bs, num);
> - if (iov.iov_base == NULL) {
> + if (buf == NULL) {
> + buf = qemu_try_blockalign0(bs, num);
> + if (buf == NULL) {
> ret = -ENOMEM;
> goto fail;
> }
> - memset(iov.iov_base, 0, num);
> }
> - qemu_iovec_init_external(&qiov, &iov, 1);
> + qemu_iovec_init_buf(&qiov, buf, num);
The use of qemu_try_blockalign0() is new to this revision, but fits in
well enough that I don't think you need to split the patch.
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 03/17] block/block-backend: use QEMU_IOVEC_INIT_BUF
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 03/17] block/block-backend: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
@ 2019-02-07 14:54 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 14:54 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 532 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new QEMU_IOVEC_INIT_BUF() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/block-backend.c | 13 ++-----------
> 1 file changed, 2 insertions(+), 11 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 04/17] block/backup: use qemu_iovec_init_buf
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 04/17] block/backup: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:06 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:06 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 514 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new qemu_iovec_init_buf() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/backup.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 05/17] block/commit: use QEMU_IOVEC_INIT_BUF
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 05/17] block/commit: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:07 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:07 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 516 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new QEMU_IOVEC_INIT_BUF() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/commit.c | 7 +------
> 1 file changed, 1 insertion(+), 6 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 06/17] block/stream: use QEMU_IOVEC_INIT_BUF
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 06/17] block/stream: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:08 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:08 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 516 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new QEMU_IOVEC_INIT_BUF() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/stream.c | 7 +------
> 1 file changed, 1 insertion(+), 6 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 07/17] block/parallels: use QEMU_IOVEC_INIT_BUF
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 07/17] block/parallels: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:11 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:11 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 2015 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new QEMU_IOVEC_INIT_BUF() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/parallels.c | 13 +++++--------
> 1 file changed, 5 insertions(+), 8 deletions(-)
>
> diff --git a/block/parallels.c b/block/parallels.c
> index cc9445879d..6d24ee6d8e 100644
> --- a/block/parallels.c
> +++ b/block/parallels.c
> @@ -220,23 +220,20 @@ static int64_t allocate_clusters(BlockDriverState *bs, int64_t sector_num,
> if (bs->backing) {
> int64_t nb_cow_sectors = to_allocate * s->tracks;
> int64_t nb_cow_bytes = nb_cow_sectors << BDRV_SECTOR_BITS;
> - QEMUIOVector qiov;
> - struct iovec iov = {
> - .iov_len = nb_cow_bytes,
> - .iov_base = qemu_blockalign(bs, nb_cow_bytes)
> - };
> - qemu_iovec_init_external(&qiov, &iov, 1);
> + QEMUIOVector qiov =
> + QEMU_IOVEC_INIT_BUF(qiov, qemu_blockalign(bs, nb_cow_bytes),
> + nb_cow_bytes);
I might have done:
char *buf = qemu_blockalign(bs, nb_cow_bytes);
QEMUIOVector qiov = QEME_IOVEC_INIT_BUF(qiov, buf, nb_cow_bytes);
>
> ret = bdrv_co_preadv(bs->backing, idx * s->tracks * BDRV_SECTOR_SIZE,
> nb_cow_bytes, &qiov, 0);
> if (ret < 0) {
> - qemu_vfree(iov.iov_base);
> + qemu_vfree(qemu_iovec_get_buf(&qiov));
and then qemu_vfree(buf);
Depending on how much else in the series needs qemu_iovec_get_buf(),
that function may not actually be needed in patch 1.
But since my proposed changes are aesthetic rather than semantic, and
yours works as written, I'm also okay giving:
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 08/17] block/qcow: use qemu_iovec_init_buf
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 08/17] block/qcow: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:13 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:13 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 531 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new qemu_iovec_init_buf() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/qcow.c | 21 ++++-----------------
> 1 file changed, 4 insertions(+), 17 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 09/17] block/qcow2: use qemu_iovec_init_buf
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 09/17] block/qcow2: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:15 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:15 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 521 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new qemu_iovec_init_buf() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/qcow2.c | 12 ++----------
> 1 file changed, 2 insertions(+), 10 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 10/17] block/qed: use qemu_iovec_init_buf
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 10/17] block/qed: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:18 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:18 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 1385 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new qemu_iovec_init_buf() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/qed-table.c | 16 +++-------------
> block/qed.c | 31 +++++++++----------------------
> 2 files changed, 12 insertions(+), 35 deletions(-)
>
> @@ -921,11 +915,7 @@ static int coroutine_fn qed_copy_from_backing_file(BDRVQEDState *s,
> return 0;
> }
>
> - iov = (struct iovec) {
> - .iov_base = qemu_blockalign(s->bs, len),
> - .iov_len = len,
> - };
> - qemu_iovec_init_external(&qiov, &iov, 1);
> + qemu_iovec_init_buf(&qiov, qemu_blockalign(s->bs, len), len);
>
> ret = qed_read_backing_file(s, pos, &qiov, &backing_qiov);
>
> @@ -946,7 +936,7 @@ static int coroutine_fn qed_copy_from_backing_file(BDRVQEDState *s,
> }
> ret = 0;
> out:
> - qemu_vfree(iov.iov_base);
> + qemu_vfree(qemu_iovec_get_buf(&qiov));
Matching my comments on 7/17, a separate variable to hold the allocated
buffer may mean that you don't need qemu_iovec_get_buf().
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 11/17] block/vmdk: use qemu_iovec_init_buf
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 11/17] block/vmdk: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:19 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:19 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 514 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new qemu_iovec_init_buf() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/vmdk.c | 7 +------
> 1 file changed, 1 insertion(+), 6 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 12/17] qemu-img: use qemu_iovec_init_buf
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 12/17] qemu-img: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:20 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:20 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 517 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new qemu_iovec_init_buf() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> qemu-img.c | 10 ++--------
> 1 file changed, 2 insertions(+), 8 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 13/17] migration/block: use qemu_iovec_init_buf
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 13/17] migration/block: " Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:20 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:20 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 522 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new qemu_iovec_init_buf() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> migration/block.c | 10 +++-------
> 1 file changed, 3 insertions(+), 7 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 14/17] tests/test-bdrv-drain: use QEMU_IOVEC_INIT_BUF
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 14/17] tests/test-bdrv-drain: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:21 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:21 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 550 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> Use new QEMU_IOVEC_INIT_BUF() instead of
> qemu_iovec_init_external( ... , 1), which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> tests/test-bdrv-drain.c | 29 ++++-------------------------
> 1 file changed, 4 insertions(+), 25 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 15/17] hw/ide: drop iov field from IDEState
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 15/17] hw/ide: drop iov field from IDEState Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:23 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:23 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 618 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> @iov is used only to initialize @qiov. Let's use new
> qemu_iovec_init_buf() instead, which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> include/hw/ide/internal.h | 1 -
> hw/ide/atapi.c | 9 ++++-----
> hw/ide/core.c | 8 ++------
> 3 files changed, 6 insertions(+), 12 deletions(-)
>
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 16/17] hw/ide: drop iov field from IDEBufferedRequest
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 16/17] hw/ide: drop iov field from IDEBufferedRequest Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:38 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:38 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 2249 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> @iov is used only to initialize @qiov. Let's use new
> qemu_iovec_init_buf() instead, which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> include/hw/ide/internal.h | 1 -
> hw/ide/core.c | 11 ++++++-----
> 2 files changed, 6 insertions(+), 6 deletions(-)
> +++ b/hw/ide/core.c
> @@ -629,13 +629,15 @@ static void ide_buffered_readv_cb(void *opaque, int ret)
> IDEBufferedRequest *req = opaque;
> if (!req->orphaned) {
> if (!ret) {
> - qemu_iovec_from_buf(req->original_qiov, 0, req->iov.iov_base,
> + assert(req->qiov.size == req->original_qiov->size);
> + qemu_iovec_from_buf(req->original_qiov, 0,
> + req->qiov.local_iov.iov_base,
> req->original_qiov->size);
> }
> req->original_cb(req->original_opaque, ret);
> }
> QLIST_REMOVE(req, list);
> - qemu_vfree(req->iov.iov_base);
> + qemu_vfree(qemu_iovec_get_buf(&req->qiov));
Okay, I can see that freeing this variable in the callback needs some
way to get at the buffer that was allocated earlier from a different
function. Still, do we need qemu_iovec_get_buf(), or can we just
open-code it as qemu_vfree(req->qiov.local_iov.iov_base), since we
open-coded it in the qemu_iovec_from_buf() a few lines earlier?
> g_free(req);
> }
>
> @@ -660,9 +662,8 @@ BlockAIOCB *ide_buffered_readv(IDEState *s, int64_t sector_num,
> req->original_qiov = iov;
> req->original_cb = cb;
> req->original_opaque = opaque;
> - req->iov.iov_base = qemu_blockalign(blk_bs(s->blk), iov->size);
> - req->iov.iov_len = iov->size;
> - qemu_iovec_init_external(&req->qiov, &req->iov, 1);
> + qemu_iovec_init_buf(&req->qiov, blk_blockalign(s->blk, iov->size),
> + iov->size);
>
Took me longer to review this one, but looks like a correct conversion.
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 17/17] hw/ide: drop iov field from IDEDMA
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 17/17] hw/ide: drop iov field from IDEDMA Vladimir Sementsov-Ogievskiy
@ 2019-02-07 15:39 ` Eric Blake
0 siblings, 0 replies; 41+ messages in thread
From: Eric Blake @ 2019-02-07 15:39 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
Cc: fam, kwolf, quintela, jcody, dgilbert, mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 566 bytes --]
On 2/7/19 4:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> @iov is used only to initialize @qiov. Let's use new
> qemu_iovec_init_buf() instead, which simplifies the code.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> include/hw/ide/internal.h | 1 -
> hw/ide/atapi.c | 5 ++---
> 2 files changed, 2 insertions(+), 4 deletions(-)
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/17] block: local qiov helper
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (16 preceding siblings ...)
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 17/17] hw/ide: drop iov field from IDEDMA Vladimir Sementsov-Ogievskiy
@ 2019-02-11 6:03 ` Stefan Hajnoczi
2019-02-11 6:04 ` Stefan Hajnoczi
` (2 subsequent siblings)
20 siblings, 0 replies; 41+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11 6:03 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy
Cc: qemu-devel, qemu-block, dgilbert, quintela, jsnow, den, fam,
mreitz, kwolf, jcody
[-- Attachment #1: Type: text/plain, Size: 2426 bytes --]
On Thu, Feb 07, 2019 at 01:24:28PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> Hi all!
>
> Here is a new simple helper for a very often patter
> around qemu_iovec_init_external, when we need simple qiov with only
> one iov, initialized from external buffer.
>
> v3:
> 01-02: tiny improvements, described in patch-emails
> 03-17: new patches
>
> Note: only hw/scsi/scsi-disk.c not updated, as it has too tricky
> logic around @iov fields of structures. So, it is simpler to
> keep it as is.
>
> Previous series version was "[PATCH v2 0/2] block: local qiov helper: part I"
> https://lists.gnu.org/archive/html/qemu-devel/2019-02/msg01610.html
>
> Vladimir Sementsov-Ogievskiy (17):
> block: enhance QEMUIOVector structure
> block/io: use qemu_iovec_init_buf
> block/block-backend: use QEMU_IOVEC_INIT_BUF
> block/backup: use qemu_iovec_init_buf
> block/commit: use QEMU_IOVEC_INIT_BUF
> block/stream: use QEMU_IOVEC_INIT_BUF
> block/parallels: use QEMU_IOVEC_INIT_BUF
> block/qcow: use qemu_iovec_init_buf
> block/qcow2: use qemu_iovec_init_buf
> block/qed: use qemu_iovec_init_buf
> block/vmdk: use qemu_iovec_init_buf
> qemu-img: use qemu_iovec_init_buf
> migration/block: use qemu_iovec_init_buf
> tests/test-bdrv-drain: use QEMU_IOVEC_INIT_BUF
> hw/ide: drop iov field from IDEState
> hw/ide: drop iov field from IDEBufferedRequest
> hw/ide: drop iov field from IDEDMA
>
> include/hw/ide/internal.h | 3 --
> include/qemu/iov.h | 64 +++++++++++++++++++++++++++-
> block/backup.c | 5 +--
> block/block-backend.c | 13 +-----
> block/commit.c | 7 +--
> block/io.c | 89 +++++++++------------------------------
> block/parallels.c | 13 +++---
> block/qcow.c | 21 ++-------
> block/qcow2.c | 12 +-----
> block/qed-table.c | 16 ++-----
> block/qed.c | 31 ++++----------
> block/stream.c | 7 +--
> block/vmdk.c | 7 +--
> hw/ide/atapi.c | 14 +++---
> hw/ide/core.c | 19 ++++-----
> migration/block.c | 10 ++---
> qemu-img.c | 10 +----
> tests/test-bdrv-drain.c | 29 ++-----------
> 18 files changed, 134 insertions(+), 236 deletions(-)
>
> --
> 2.18.0
>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/17] block: local qiov helper
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (17 preceding siblings ...)
2019-02-11 6:03 ` [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Stefan Hajnoczi
@ 2019-02-11 6:04 ` Stefan Hajnoczi
2019-02-12 17:41 ` Vladimir Sementsov-Ogievskiy
2019-02-13 7:52 ` Stefan Hajnoczi
2019-02-13 8:19 ` Stefan Hajnoczi
20 siblings, 1 reply; 41+ messages in thread
From: Stefan Hajnoczi @ 2019-02-11 6:04 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy
Cc: qemu-devel, qemu-block, dgilbert, quintela, jsnow, den, fam,
mreitz, kwolf, jcody
[-- Attachment #1: Type: text/plain, Size: 181 bytes --]
On Thu, Feb 07, 2019 at 01:24:28PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> v3:
Will you send a v4 based on Eric's comments or do you want to keep the
series as it is?
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/17] block: local qiov helper
2019-02-11 6:04 ` Stefan Hajnoczi
@ 2019-02-12 17:41 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-12 17:41 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, qemu-block, dgilbert, quintela, jsnow, Denis Lunev,
fam, mreitz, kwolf, jcody
On 11.02.2019 6:04, Stefan Hajnoczi wrote:
> On Thu, Feb 07, 2019 at 01:24:28PM +0300, Vladimir Sementsov-Ogievskiy wrote:
>> v3:
>
> Will you send a v4 based on Eric's comments or do you want to keep the
> series as it is?
>
I don't really want to resend, and I don't think that open-coding in 16
is a good practice. With my helper we at least have and assertion. I'd be
grateful if tiny improvements of 01 are applied in-flight. Anyway, I don't
strongly against other Eric's suggestions to be applied, and can resend if
it needed.
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/17] block: local qiov helper
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (18 preceding siblings ...)
2019-02-11 6:04 ` Stefan Hajnoczi
@ 2019-02-13 7:52 ` Stefan Hajnoczi
2019-02-13 8:19 ` Stefan Hajnoczi
20 siblings, 0 replies; 41+ messages in thread
From: Stefan Hajnoczi @ 2019-02-13 7:52 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy
Cc: qemu-devel, qemu-block, fam, kwolf, quintela, jcody, dgilbert,
mreitz, stefanha, den, jsnow
[-- Attachment #1: Type: text/plain, Size: 2515 bytes --]
On Thu, Feb 07, 2019 at 01:24:28PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> Hi all!
>
> Here is a new simple helper for a very often patter
> around qemu_iovec_init_external, when we need simple qiov with only
> one iov, initialized from external buffer.
>
> v3:
> 01-02: tiny improvements, described in patch-emails
> 03-17: new patches
>
> Note: only hw/scsi/scsi-disk.c not updated, as it has too tricky
> logic around @iov fields of structures. So, it is simpler to
> keep it as is.
>
> Previous series version was "[PATCH v2 0/2] block: local qiov helper: part I"
> https://lists.gnu.org/archive/html/qemu-devel/2019-02/msg01610.html
>
> Vladimir Sementsov-Ogievskiy (17):
> block: enhance QEMUIOVector structure
> block/io: use qemu_iovec_init_buf
> block/block-backend: use QEMU_IOVEC_INIT_BUF
> block/backup: use qemu_iovec_init_buf
> block/commit: use QEMU_IOVEC_INIT_BUF
> block/stream: use QEMU_IOVEC_INIT_BUF
> block/parallels: use QEMU_IOVEC_INIT_BUF
> block/qcow: use qemu_iovec_init_buf
> block/qcow2: use qemu_iovec_init_buf
> block/qed: use qemu_iovec_init_buf
> block/vmdk: use qemu_iovec_init_buf
> qemu-img: use qemu_iovec_init_buf
> migration/block: use qemu_iovec_init_buf
> tests/test-bdrv-drain: use QEMU_IOVEC_INIT_BUF
> hw/ide: drop iov field from IDEState
> hw/ide: drop iov field from IDEBufferedRequest
> hw/ide: drop iov field from IDEDMA
>
> include/hw/ide/internal.h | 3 --
> include/qemu/iov.h | 64 +++++++++++++++++++++++++++-
> block/backup.c | 5 +--
> block/block-backend.c | 13 +-----
> block/commit.c | 7 +--
> block/io.c | 89 +++++++++------------------------------
> block/parallels.c | 13 +++---
> block/qcow.c | 21 ++-------
> block/qcow2.c | 12 +-----
> block/qed-table.c | 16 ++-----
> block/qed.c | 31 ++++----------
> block/stream.c | 7 +--
> block/vmdk.c | 7 +--
> hw/ide/atapi.c | 14 +++---
> hw/ide/core.c | 19 ++++-----
> migration/block.c | 10 ++---
> qemu-img.c | 10 +----
> tests/test-bdrv-drain.c | 29 ++-----------
> 18 files changed, 134 insertions(+), 236 deletions(-)
>
> --
> 2.18.0
I made the changes suggested by Eric in Patch 1.
Thanks, applied to my block tree:
https://github.com/stefanha/qemu/commits/block
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/17] block: local qiov helper
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
` (19 preceding siblings ...)
2019-02-13 7:52 ` Stefan Hajnoczi
@ 2019-02-13 8:19 ` Stefan Hajnoczi
2019-02-18 10:24 ` Vladimir Sementsov-Ogievskiy
20 siblings, 1 reply; 41+ messages in thread
From: Stefan Hajnoczi @ 2019-02-13 8:19 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy
Cc: qemu-devel, qemu-block, dgilbert, quintela, jsnow, den, fam,
mreitz, kwolf, jcody
[-- Attachment #1: Type: text/plain, Size: 567 bytes --]
On Thu, Feb 07, 2019 at 01:24:28PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> Hi all!
>
> Here is a new simple helper for a very often patter
> around qemu_iovec_init_external, when we need simple qiov with only
> one iov, initialized from external buffer.
>
> v3:
Hi Vladimir,
"make check" is failing:
TEST check-qtest-x86_64: tests/ide-test
qemu-system-x86_64: /home/stefanha/qemu/include/qemu/iov.h:195: qemu_iovec_get_buf: Assertion `qiov->niov == -1 && qiov->iov == &qiov->local_iov' failed.
Please take a look and send v4.
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/17] block: local qiov helper
2019-02-13 8:19 ` Stefan Hajnoczi
@ 2019-02-18 10:24 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 41+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2019-02-18 10:24 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, qemu-block, dgilbert, quintela, jsnow, Denis Lunev,
fam, mreitz, kwolf, jcody
13.02.2019 11:19, Stefan Hajnoczi wrote:
> On Thu, Feb 07, 2019 at 01:24:28PM +0300, Vladimir Sementsov-Ogievskiy wrote:
>> Hi all!
>>
>> Here is a new simple helper for a very often patter
>> around qemu_iovec_init_external, when we need simple qiov with only
>> one iov, initialized from external buffer.
>>
>> v3:
>
> Hi Vladimir,
> "make check" is failing:
>
> TEST check-qtest-x86_64: tests/ide-test
> qemu-system-x86_64: /home/stefanha/qemu/include/qemu/iov.h:195: qemu_iovec_get_buf: Assertion `qiov->niov == -1 && qiov->iov == &qiov->local_iov' failed.
>
> Please take a look and send v4.
>
> Stefan
>
Oops, sorry for this, it obviously should be qiov->nalloc == -1 in assertion. I'll resend and rename s/qemu_iovec_get_buf/qemu_iovec_embedded_buf/ to make it more obvious.
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 41+ messages in thread
end of thread, other threads:[~2019-02-18 10:24 UTC | newest]
Thread overview: 41+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-07 10:24 [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Vladimir Sementsov-Ogievskiy
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 01/17] block: enhance QEMUIOVector structure Vladimir Sementsov-Ogievskiy
2019-02-07 14:50 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 02/17] block/io: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
2019-02-07 14:53 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 03/17] block/block-backend: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
2019-02-07 14:54 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 04/17] block/backup: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
2019-02-07 15:06 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 05/17] block/commit: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
2019-02-07 15:07 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 06/17] block/stream: " Vladimir Sementsov-Ogievskiy
2019-02-07 15:08 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 07/17] block/parallels: " Vladimir Sementsov-Ogievskiy
2019-02-07 15:11 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 08/17] block/qcow: use qemu_iovec_init_buf Vladimir Sementsov-Ogievskiy
2019-02-07 15:13 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 09/17] block/qcow2: " Vladimir Sementsov-Ogievskiy
2019-02-07 15:15 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 10/17] block/qed: " Vladimir Sementsov-Ogievskiy
2019-02-07 15:18 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 11/17] block/vmdk: " Vladimir Sementsov-Ogievskiy
2019-02-07 15:19 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 12/17] qemu-img: " Vladimir Sementsov-Ogievskiy
2019-02-07 15:20 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 13/17] migration/block: " Vladimir Sementsov-Ogievskiy
2019-02-07 15:20 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 14/17] tests/test-bdrv-drain: use QEMU_IOVEC_INIT_BUF Vladimir Sementsov-Ogievskiy
2019-02-07 15:21 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 15/17] hw/ide: drop iov field from IDEState Vladimir Sementsov-Ogievskiy
2019-02-07 15:23 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 16/17] hw/ide: drop iov field from IDEBufferedRequest Vladimir Sementsov-Ogievskiy
2019-02-07 15:38 ` Eric Blake
2019-02-07 10:24 ` [Qemu-devel] [PATCH v3 17/17] hw/ide: drop iov field from IDEDMA Vladimir Sementsov-Ogievskiy
2019-02-07 15:39 ` Eric Blake
2019-02-11 6:03 ` [Qemu-devel] [PATCH v3 00/17] block: local qiov helper Stefan Hajnoczi
2019-02-11 6:04 ` Stefan Hajnoczi
2019-02-12 17:41 ` Vladimir Sementsov-Ogievskiy
2019-02-13 7:52 ` Stefan Hajnoczi
2019-02-13 8:19 ` Stefan Hajnoczi
2019-02-18 10:24 ` Vladimir Sementsov-Ogievskiy
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.