[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v10 6/9] copy-on-read: skip non-guest reads if no copy needed
From: |
Andrey Shinkevich |
Subject: |
[PATCH v10 6/9] copy-on-read: skip non-guest reads if no copy needed |
Date: |
Tue, 29 Sep 2020 15:38:26 +0300 |
If the flag BDRV_REQ_PREFETCH was set, pass it further to the
COR-driver to skip unneeded reading. It can be taken into account for
the COR-algorithms optimization. That check is being made during the
block stream job by the moment.
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
---
block/copy-on-read.c | 14 ++++++++++----
block/io.c | 2 +-
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/block/copy-on-read.c b/block/copy-on-read.c
index f53f7e0..5389dca 100644
--- a/block/copy-on-read.c
+++ b/block/copy-on-read.c
@@ -145,10 +145,16 @@ static int coroutine_fn
cor_co_preadv_part(BlockDriverState *bs,
}
}
- ret = bdrv_co_preadv_part(bs->file, offset, n, qiov, qiov_offset,
- local_flags);
- if (ret < 0) {
- return ret;
+ if ((flags & BDRV_REQ_PREFETCH) &
+ !(local_flags & BDRV_REQ_COPY_ON_READ)) {
+ /* Skip non-guest reads if no copy needed */
+ } else {
+
+ ret = bdrv_co_preadv_part(bs->file, offset, n, qiov, qiov_offset,
+ local_flags);
+ if (ret < 0) {
+ return ret;
+ }
}
offset += n;
diff --git a/block/io.c b/block/io.c
index 11df188..62b75a5 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1388,7 +1388,7 @@ static int coroutine_fn
bdrv_co_do_copy_on_readv(BdrvChild *child,
qemu_iovec_init_buf(&local_qiov, bounce_buffer, pnum);
ret = bdrv_driver_preadv(bs, cluster_offset, pnum,
- &local_qiov, 0, 0);
+ &local_qiov, 0, flags &
BDRV_REQ_PREFETCH);
if (ret < 0) {
goto err;
}
--
1.8.3.1
- [PATCH v10 0/9] Apply COR-filter to the block-stream permanently, Andrey Shinkevich, 2020/09/29
- [PATCH v10 1/9] copy-on-read: Support preadv/pwritev_part functions, Andrey Shinkevich, 2020/09/29
- [PATCH v10 2/9] copy-on-read: add filter append/drop functions, Andrey Shinkevich, 2020/09/29
- [PATCH v10 3/9] qapi: add filter-node-name to block-stream, Andrey Shinkevich, 2020/09/29
- [PATCH v10 4/9] copy-on-read: pass base node name to COR driver, Andrey Shinkevich, 2020/09/29
- [PATCH v10 5/9] copy-on-read: limit guest COR activity to base in COR driver, Andrey Shinkevich, 2020/09/29
- [PATCH v10 6/9] copy-on-read: skip non-guest reads if no copy needed,
Andrey Shinkevich <=
- [PATCH v10 7/9] stream: skip filters when writing backing file name to QCOW2 header, Andrey Shinkevich, 2020/09/29
- [PATCH v10 8/9] block: remove unused backing-file name parameter, Andrey Shinkevich, 2020/09/29
- [PATCH v10 9/9] block: apply COR-filter to block-stream jobs, Andrey Shinkevich, 2020/09/29