<div dir="ltr">Sorry, missed CRML.<br>
<br><br><div class="gmail_quote">---------- Forwarded message ----------<br>From: <b class="gmail_sendername">Pavel Tikhomirov</b> <span dir="ltr">&lt;<a href="mailto:snorcht@gmail.com">snorcht@gmail.com</a>&gt;</span><br>
Date: 2014-04-18 14:11 GMT+04:00<br>Subject: Re: [PATCH] page-xfer: repair bug with check_pagehole_in_parent<br>To: Pavel Emelyanov &lt;<a href="mailto:xemul@parallels.com">xemul@parallels.com</a>&gt;<br><br><br><div dir="ltr">
I don&#39;t think that we need some special test. This patch only checks on dumping hole that in parent images data for that hole exists.</div><div class="gmail_extra"><br clear="all"><div><div dir="ltr"><br>
Best Regards, Tikhomirov Pavel.</div></div>
<br><br><div class="gmail_quote">2014-04-18 14:06 GMT+04:00 Pavel Tikhomirov <span dir="ltr">&lt;<a href="mailto:snorcht@gmail.com" target="_blank">snorcht@gmail.com</a>&gt;</span>:<div><div class="h5"><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">It all don&#39;t create real bug now. It just don&#39;t checks, what it really need to check, as I thought.<div><br></div><div>I try to use <span style="font-family:arial,sans-serif;font-size:13px">check_pagehole_in_parent in dedup on unmap patch which I sent before, and</span></div>


<div><span style="font-family:arial,sans-serif;font-size:13px">this correction is critical for it.</span></div></div><div class="gmail_extra"><br clear="all"><div><div dir="ltr"><br>Best Regards, Tikhomirov Pavel.</div></div>



<br><br><div class="gmail_quote">2014-04-18 14:00 GMT+04:00 Pavel Emelyanov <span dir="ltr">&lt;<a href="mailto:xemul@parallels.com" target="_blank">xemul@parallels.com</a>&gt;</span>:<div><div><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div>On 04/18/2014 01:50 PM, Tikhomirov Pavel wrote:<br>
&gt; 1)it didn&#39;t find real pages it had only one step into iterative snapshots<br>
&gt; but what if real page is on the third level?<br>
&gt;<br>
&gt; patch adds recoursive check in previous images<br>
&gt;<br>
&gt; 2)it did provide whole intersected pagemap, but it will be more<br>
&gt; convinient to print only intersection part.<br>
<br>
</div>Was this all was caught by zdtm? If no, then it&#39;s worth creating<br>
a stress test on stackable images. Would you?<br>
<div><div><br>
&gt; Signed-off-by: Tikhomirov Pavel &lt;<a href="mailto:snorcht@gmail.com" target="_blank">snorcht@gmail.com</a>&gt;<br>
&gt; ---<br>
&gt;  page-xfer.c | 18 +++++++++++++++---<br>
&gt;  1 file changed, 15 insertions(+), 3 deletions(-)<br>
&gt;<br>
&gt; diff --git a/page-xfer.c b/page-xfer.c<br>
&gt; index 56e8575..0678b54 100644<br>
&gt; --- a/page-xfer.c<br>
&gt; +++ b/page-xfer.c<br>
&gt; @@ -504,7 +504,7 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)<br>
&gt;       off = (unsigned long)iov-&gt;iov_base;<br>
&gt;       end = off + iov-&gt;iov_len;<br>
&gt;       while (1) {<br>
&gt; -             struct iovec piov;<br>
&gt; +             struct iovec piov, tiov;<br>
&gt;               unsigned long pend;<br>
&gt;<br>
&gt;               ret = seek_pagemap_page(p, off, true);<br>
&gt; @@ -512,7 +512,20 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)<br>
&gt;                       return -1;<br>
&gt;<br>
&gt;               pagemap2iovec(p-&gt;pe, &amp;piov);<br>
&gt; -             pr_debug(&quot;\tFound %p/%zu\n&quot;, piov.iov_base, piov.iov_len);<br>
&gt; +             pend = (unsigned long)piov.iov_base + piov.iov_len;<br>
&gt; +<br>
&gt; +             tiov.iov_base = (void*)off;<br>
&gt; +             tiov.iov_len = min(pend, end) - off;<br>
&gt; +             if (!p-&gt;pe-&gt;in_parent) {<br>
&gt; +                     pr_debug(&quot;\tFound %p/%zu\n&quot;, tiov.iov_base, tiov.iov_len);<br>
&gt; +             } else {<br>
&gt; +                     if (p-&gt;parent)<br>
&gt; +                             check_pagehole_in_parent(p-&gt;parent, &amp;tiov);<br>
&gt; +                     else {<br>
&gt; +                             pr_err(&quot;No parent, though pagemap is in_parent&quot;);<br>
&gt; +                             return -1;<br>
&gt; +                     }<br>
&gt; +             }<br>
&gt;<br>
&gt;               /*<br>
&gt;                * The pagemap entry in parent may heppen to be<br>
&gt; @@ -520,7 +533,6 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)<br>
&gt;                * we should go ahead and check the remainder.<br>
&gt;                */<br>
&gt;<br>
&gt; -             pend = (unsigned long)piov.iov_base + piov.iov_len;<br>
&gt;               if (end &lt;= pend)<br>
&gt;                       return 0;<br>
&gt;<br>
&gt;<br>
<br>
<br>
</div></div></blockquote></div></div></div><br></div>
</blockquote></div></div></div><br></div>
</div><br></div>