<div dir="ltr">This test checks for cases not supported by current anon shmem implementation. New fixed implementation should pass them.<div>We don&#39;t want to forget about this failed cases. So we need to commit this test and even add to CI.</div><div>So the developer of new anon shmem changes tracking won&#39;t forget about this case.</div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-10-12 11:03 GMT+03:00 Pavel Emelyanov <span dir="ltr">&lt;<a href="mailto:xemul@virtuozzo.com" target="_blank">xemul@virtuozzo.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 10/12/2016 02:00 AM, Andrei Vagin wrote:<br>
&gt; Pavel, could you commit this patch?<br>
<br>
</span>But this new test fails as I see from the commit message. Also, we&#39;ve<br>
disabled the shmem pre-dump, so what&#39;s the point?<br>
<div><div class="h5"><br>
&gt; On Fri, Sep 16, 2016 at 03:31:28PM +0300, Andrei Vagin wrote:<br>
&gt;&gt; From: Andrei Vagin &lt;<a href="mailto:avagin@virtuozzo.com">avagin@virtuozzo.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; [root@fc24 criu]# python test/zdtm.py run -t zdtm/transition/shmem  --pre 3<br>
&gt;&gt; === Run 1/1 ================<br>
&gt;&gt;<br>
&gt;&gt; ======================== Run zdtm/transition/shmem in h ========================<br>
&gt;&gt; cc -g -O2 -Wall -Werror -fno-strict-aliasing  -iquote ../lib/arch/x86/include -I../lib   shmem.c ../lib/libzdtmtst.a ../lib/libzdtmtst.a -o shmem<br>
&gt;&gt; Start test<br>
&gt;&gt; ./shmem --pidfile=shmem.pid --outfile=shmem.out<br>
&gt;&gt; Run criu pre-dump<br>
&gt;&gt; Run criu pre-dump<br>
&gt;&gt; Run criu pre-dump<br>
&gt;&gt; Run criu dump<br>
&gt;&gt; Run criu restore<br>
&gt;&gt; Send the 15 signal to  33<br>
&gt;&gt; Wait for zdtm/transition/shmem(33) to die for 0.100000<br>
&gt;&gt; Test output: ==============================<wbr>==<br>
&gt;&gt; 15:12:25.444:    33: FAIL: shmem.c:70: checksum mismatch: ea71000 109c9000<br>
&gt;&gt;<br>
&gt;&gt; Cc: Eugene Batalov &lt;<a href="mailto:eabatalov89@gmail.com">eabatalov89@gmail.com</a>&gt;<br>
&gt;&gt; Signed-off-by: Andrei Vagin &lt;<a href="mailto:avagin@virtuozzo.com">avagin@virtuozzo.com</a>&gt;<br>
&gt;&gt; ---<br>
&gt;&gt;  test/zdtm/transition/Makefile |  1 +<br>
&gt;&gt;  test/zdtm/transition/shmem.c  | 82 ++++++++++++++++++++++++++++++<wbr>+++++++++++++<br>
&gt;&gt;  2 files changed, 83 insertions(+)<br>
&gt;&gt;  create mode 100644 test/zdtm/transition/shmem.c<br>
&gt;&gt;<br>
&gt;&gt; diff --git a/test/zdtm/transition/<wbr>Makefile b/test/zdtm/transition/<wbr>Makefile<br>
&gt;&gt; index f3797ad..7ddb238 100644<br>
&gt;&gt; --- a/test/zdtm/transition/<wbr>Makefile<br>
&gt;&gt; +++ b/test/zdtm/transition/<wbr>Makefile<br>
&gt;&gt; @@ -23,6 +23,7 @@ TST_NOFILE =       \<br>
&gt;&gt;              file_aio        \<br>
&gt;&gt;              socket-tcp      \<br>
&gt;&gt;              socket-tcp6     \<br>
&gt;&gt; +            shmem           \<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;  TST_FILE    =       \<br>
&gt;&gt; diff --git a/test/zdtm/transition/shmem.c b/test/zdtm/transition/shmem.c<br>
&gt;&gt; new file mode 100644<br>
&gt;&gt; index 0000000..f6b093c<br>
&gt;&gt; --- /dev/null<br>
&gt;&gt; +++ b/test/zdtm/transition/shmem.c<br>
&gt;&gt; @@ -0,0 +1,82 @@<br>
&gt;&gt; +#define _GNU_SOURCE<br>
&gt;&gt; +#include &lt;errno.h&gt;<br>
&gt;&gt; +#include &lt;stdlib.h&gt;<br>
&gt;&gt; +#include &lt;string.h&gt;<br>
&gt;&gt; +#include &lt;sys/mman.h&gt;<br>
&gt;&gt; +#include &lt;signal.h&gt;<br>
&gt;&gt; +#include &lt;sys/wait.h&gt;<br>
&gt;&gt; +<br>
&gt;&gt; +#include &quot;zdtmtst.h&quot;<br>
&gt;&gt; +<br>
&gt;&gt; +const char *test_author     = &quot;Andrei Vagin &lt;<a href="mailto:avagin@virtuozzo.com">avagin@virtuozzo.com</a>&gt;&quot;;<br>
&gt;&gt; +<br>
&gt;&gt; +#define MEM_SIZE (1&lt;&lt;25)<br>
&gt;&gt; +<br>
&gt;&gt; +int main(int argc, char **argv)<br>
&gt;&gt; +{<br>
&gt;&gt; +    pid_t pid;<br>
&gt;&gt; +    void *addr;<br>
&gt;&gt; +    int *sum, status;<br>
&gt;&gt; +    long size;<br>
&gt;&gt; +<br>
&gt;&gt; +    test_init(argc, argv);<br>
&gt;&gt; +<br>
&gt;&gt; +    sum = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_SHARED, -1, 0);<br>
&gt;&gt; +    if (sum == MAP_FAILED)<br>
&gt;&gt; +            return 1;<br>
&gt;&gt; +    addr = mmap(NULL, MEM_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_SHARED, -1, 0);<br>
&gt;&gt; +    if (addr == MAP_FAILED)<br>
&gt;&gt; +            return 1;<br>
&gt;&gt; +<br>
&gt;&gt; +    pid = fork();<br>
&gt;&gt; +    if (pid &lt; 0)<br>
&gt;&gt; +            return 1;<br>
&gt;&gt; +<br>
&gt;&gt; +    if (pid == 0) {<br>
&gt;&gt; +            int i = 0;<br>
&gt;&gt; +            long size = PAGE_SIZE, old_size = MEM_SIZE;<br>
&gt;&gt; +<br>
&gt;&gt; +            status = 0;<br>
&gt;&gt; +            while (test_go()) {<br>
&gt;&gt; +                    addr = mremap(addr, old_size, size, MREMAP_MAYMOVE);<br>
&gt;&gt; +<br>
&gt;&gt; +                    status -= *((int *)(addr + size - PAGE_SIZE));<br>
&gt;&gt; +<br>
&gt;&gt; +                    *((int *)(addr + size - PAGE_SIZE)) = i++;<br>
&gt;&gt; +<br>
&gt;&gt; +                    status += *((int *)(addr + size - PAGE_SIZE));<br>
&gt;&gt; +<br>
&gt;&gt; +                    old_size = size;<br>
&gt;&gt; +                    size += PAGE_SIZE;<br>
&gt;&gt; +                    if (size &gt; MEM_SIZE)<br>
&gt;&gt; +                            size = PAGE_SIZE;<br>
&gt;&gt; +            }<br>
&gt;&gt; +            *sum = status;<br>
&gt;&gt; +            return 0;<br>
&gt;&gt; +    }<br>
&gt;&gt; +<br>
&gt;&gt; +    test_daemon();<br>
&gt;&gt; +    test_waitsig();<br>
&gt;&gt; +<br>
&gt;&gt; +    kill(pid, SIGTERM);<br>
&gt;&gt; +    status = -1;<br>
&gt;&gt; +    waitpid(pid, &amp;status, 0);<br>
&gt;&gt; +    if (status) {<br>
&gt;&gt; +            pr_perror(&quot;The child return non-zero code: %d\n&quot;, status);<br>
&gt;&gt; +            return 1;<br>
&gt;&gt; +    }<br>
&gt;&gt; +<br>
&gt;&gt; +    status = 0;<br>
&gt;&gt; +    for (size = PAGE_SIZE; size &lt;= MEM_SIZE; size += PAGE_SIZE) {<br>
&gt;&gt; +            status += *((int *)(addr + size - PAGE_SIZE));<br>
&gt;&gt; +    }<br>
&gt;&gt; +<br>
&gt;&gt; +    if (status != *sum) {<br>
&gt;&gt; +            fail(&quot;checksum mismatch: %x %x\n&quot;, status, *sum);<br>
&gt;&gt; +            return 1;<br>
&gt;&gt; +    }<br>
&gt;&gt; +<br>
&gt;&gt; +    pass();<br>
&gt;&gt; +<br>
&gt;&gt; +    return 0;<br>
&gt;&gt; +}<br>
&gt;&gt; --<br>
&gt;&gt; 2.7.4<br>
&gt;&gt;<br>
</div></div>&gt; .<br>
&gt;<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Best regards,<br>Eugene Batalov.</div>
</div>