<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2016-08-04 18:08 GMT+03:00 Tycho Andersen <span dir="ltr">&lt;<a href="mailto:tycho.andersen@canonical.com" target="_blank">tycho.andersen@canonical.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi Eugene,<br>
<br>
On Thu, Aug 04, 2016 at 02:49:23PM +0300, Eugene Batalov wrote:<br>
&gt; Hi Tycho,<br>
<span class="">&gt;<br>
&gt; &gt; &gt; +int gc_network_unlock(void)<br>
&gt; &gt; &gt; +{<br>
&gt; &gt; &gt; +     /*<br>
&gt; &gt; &gt; +      * Unshared ps tree net ns is destroyed after successful dump.<br>
&gt; &gt; &gt; +      * No need to call network_unlock_internal.<br>
&gt; &gt; &gt; +      * Also don&#39;t call ACT_NET_UNLOCK script because we don&#39;t<br>
&gt; &gt; &gt; +      * resume/restore ps tree - this call would break<br>
&gt; &gt; &gt; +      * ACT_NET_UNLOCK semantics.<br>
&gt; &gt; &gt; +      */<br>
&gt; &gt; &gt; +     return rst_unlock_tcp_connections();<br>
&gt; &gt;<br>
&gt; &gt; What about cpt_unlock_tcp_connections()? IIUC this list is not<br>
&gt; &gt; persisted, and so if we leave around the network lock stuff, we would<br>
&gt; &gt; never turn of TCP repair mode.<br>
&gt; &gt;<br>
&gt; &gt; Tycho<br>
&gt; &gt;<br>
&gt; Let&#39;s consider the moment when we start criu gc or criu restore. At<br>
&gt; this moment dumpee ps tree doesn&#39;t exist and ps tree sockets don&#39;t<br>
&gt; exist.<br>
<br>
</span>Hmm. Perhaps I misunderstood then. I thought the point was to be able<br>
to use --leave-stopped (so the ps tree would still exist), and then we<br>
could at a later time run `criu gc` to unlock things again and clean<br>
this up.<br></blockquote><div>Looks like this is the use case you need to support. Let&#39;s look at current implementation. Does it satisfies your needs?</div><div>We can kill whole ps tree with any standard signal based logic so it looks like there is no problem here.</div><div>But is it possible for you to have dump of this killed ps tree. criu gc needs this dump in order to do its job.</div><div>Also criu gc requires only subset of the dump (memory is not needed).</div><div><br></div><div>For now I prefer current criu gc implementation that works with dumps rather then with live ps trees.</div><div>In general If we want to c/r we always create dump from live ps tree but we don&#39;t always restore ps tree from dump.</div><div>So dump is more basic thing that criu gc relies on. The only question is about availability of such a dump for gc.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<span class=""><br>
&gt; That&#39;s why we don&#39;t need to turn any tcp repair mode off - it is per socket<br>
&gt; thing.<br>
&gt; Also cpt_unlock_tcp_connections called from network_unlock() that is called<br>
&gt; during criu restore<br>
&gt; does nothing because cpt_tcp_repair_sockets list is empty. So for me it<br>
&gt; looks like criu gc works<br>
&gt; the same as criu restore but without calling of network unlock action<br>
&gt; script.<br>
<br>
</span>I understand; it may be worth noting somewhere in the help output or<br>
patch notes what exactly the use case is. Right now I don&#39;t undersand<br>
what it is :)<br></blockquote><div> Yep. I&#39;ll add more info into criu help message in the next patch set version. Thank you for suggestion.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<span class=""><font color="#888888"><br>
Tycho<br>
</font></span><div class=""><div class="h5"><br>
&gt; &gt;<br>
&gt; &gt; &gt; +}<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt;  int veth_pair_add(char *in, char *out)<br>
&gt; &gt; &gt;  {<br>
&gt; &gt; &gt;       char *aux;<br>
&gt; &gt; &gt; diff --git a/criu/sk-tcp.c b/criu/sk-tcp.c<br>
&gt; &gt; &gt; index 13d175a..c4aa58f 100644<br>
&gt; &gt; &gt; --- a/criu/sk-tcp.c<br>
&gt; &gt; &gt; +++ b/criu/sk-tcp.c<br>
&gt; &gt; &gt; @@ -713,16 +713,19 @@ void tcp_locked_conn_add(struct inet_sk_info *ii)<br>
&gt; &gt; &gt;       ii-&gt;sk_fd = -1;<br>
&gt; &gt; &gt;  }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -void rst_unlock_tcp_connections(<wbr>void)<br>
&gt; &gt; &gt; +int rst_unlock_tcp_connections(<wbr>void)<br>
&gt; &gt; &gt;  {<br>
&gt; &gt; &gt;       struct inet_sk_info *ii;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;       /* Network will be unlocked by network-unlock scripts */<br>
&gt; &gt; &gt;       if (root_ns_mask &amp; CLONE_NEWNET)<br>
&gt; &gt; &gt; -             return;<br>
&gt; &gt; &gt; +             return 0;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;       list_for_each_entry(ii, &amp;rst_tcp_repair_sockets, rlist)<br>
&gt; &gt; &gt; -             nf_unlock_connection_info(ii);<br>
&gt; &gt; &gt; +             if (nf_unlock_connection_info(ii)<wbr>)<br>
&gt; &gt; &gt; +                     return -1;<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +     return 0;<br>
&gt; &gt; &gt;  }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;  int check_tcp(void)<br>
&gt; &gt; &gt; --<br>
&gt; &gt; &gt; 1.9.1<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; ______________________________<wbr>_________________<br>
&gt; &gt; &gt; CRIU mailing list<br>
&gt; &gt; &gt; <a href="mailto:CRIU@openvz.org">CRIU@openvz.org</a><br>
&gt; &gt; &gt; <a href="https://lists.openvz.org/mailman/listinfo/criu" rel="noreferrer" target="_blank">https://lists.openvz.org/<wbr>mailman/listinfo/criu</a><br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Best regards,<br>
&gt; Eugene Batalov.<br>
</div></div></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></div>