[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v11 09/13] copy-on-read: skip non-guest reads if no copy need

From: Vladimir Sementsov-Ogievskiy
Subject: Re: [PATCH v11 09/13] copy-on-read: skip non-guest reads if no copy needed
Date: Thu, 22 Oct 2020 11:56:41 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.3.3

22.10.2020 10:50, Andrey Shinkevich wrote:

On 21.10.2020 23:43, Andrey Shinkevich wrote:
On 14.10.2020 18:22, Vladimir Sementsov-Ogievskiy wrote:
14.10.2020 15:51, Max Reitz wrote:
On 12.10.20 19:43, Andrey Shinkevich wrote:
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>


diff --git a/block/io.c b/block/io.c
index 11df188..bff1808 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1512,7 +1512,8 @@ static int coroutine_fn bdrv_aligned_preadv(BdrvChild 
      max_bytes = ROUND_UP(MAX(0, total_bytes - offset), align);
      if (bytes <= max_bytes && bytes <= max_transfer) {
-        ret = bdrv_driver_preadv(bs, offset, bytes, qiov, qiov_offset, 0);
+        ret = bdrv_driver_preadv(bs, offset, bytes, qiov, qiov_offset,
+                                 flags & bs->supported_read_flags);

When BDRV_REQ_PREFETCH is passed, qiov may be (and generally should be) NULL. 
This means, that we can't just drop the flag when call the driver that doesn't 
support it.

Actually, if driver doesn't support the PREFETCH flag we should do nothing.

Ah, OK.  I see.  I expected this to be a separate patch.  I still wonder
why it isn’t.

Could it be part of patch 07? I mean introduce new field supported_read_flags 
and handle it in generic code in one patch, prior to implementing support for 
it in COR driver.

We have to add the supported flags for the COR driver in the same patch. Or 
before handling the supported_read_flags at the generic layer (handling zero 
does not make a sence). Otherwise, the test #216 (where the COR-filter is 
applied) will not pass.


I have found a workaround and am going to send all the related patches as a 
separate series.

What is the problem?

If in a separate patch prior to modifying COR driver, we add new field 
supported_read_flags and add a support for it in generic layer, when no driver 
support it yet, nothing should be changed and all tests should pass..

Best regards,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]