<div dir="ltr">Pavel,<div><br></div><div>The patch above is completely independent from the missing properties patches that I split into 2. Please merge this as it fixes a completely unrelated bug. </div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Fri, Aug 15, 2014 at 12:25 PM, Pavel Emelyanov <span dir="ltr">&lt;<a href="mailto:xemul@parallels.com" target="_blank">xemul@parallels.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="">On 08/15/2014 11:15 PM, Serge Hallyn wrote:<br>
&gt; That&#39;s going to be a painful thing to do item-by-item.  One way to address<br>
&gt; this - not urgent to do soon imo - would be to have the restart mark itself<br>
&gt; as failed, but not immediately halt;  have it write outa a file with all of<br>
&gt; the absent features;  Then the user edits that file marking all of the<br>
&gt; ok-to-ignore things, and passes it in with a &#39;--ignore-absent &lt;file&gt;&#39;<br>
&gt; argument, which criu then honors.<br>
<br>
</div>I like the idea to postpone the failure and ask the caller what to do.<br>
How about pushing the list of not found properties into the &quot;post-restore&quot;<br>
script letting it decide what to do next? Or even introduce yet another<br>
one, e.g. &quot;cgroup-restore&quot;.<br>
<div><div class="h5"><br>
&gt; Just a thought, but it seems like the only sane way to handle it.<br>
&gt;<br>
&gt; Quoting Pavel Emelyanov (<a href="mailto:xemul@parallels.com">xemul@parallels.com</a>):<br>
&gt;&gt; On 08/15/2014 08:54 PM, Ying Han wrote:<br>
&gt;&gt;&gt; Ping?<br>
&gt;&gt;<br>
&gt;&gt; We all agreed to commit the change that makes _dumping_ of absent properties<br>
&gt;&gt; non-fatal (I&#39;ll do that soon). As far as writing is concerned -- it looks like<br>
&gt;&gt; just ignoring the absence of properties from image dumps is not good as generic<br>
&gt;&gt; solution. Instead, for restore we need some fine-grained control over which<br>
&gt;&gt; properties to restore and which to ignore.<br>
&gt;&gt;<br>
&gt;&gt; Thanks,<br>
&gt;&gt; Pavel<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Wed, Aug 13, 2014 at 11:59 AM, &lt;<a href="mailto:gbellack@google.com">gbellack@google.com</a> &lt;mailto:<a href="mailto:gbellack@google.com">gbellack@google.com</a>&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     From: Garrison Bellack &lt;<a href="mailto:gbellack@google.com">gbellack@google.com</a> &lt;mailto:<a href="mailto:gbellack@google.com">gbellack@google.com</a>&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     When writing the system default for memory.limit_in_bytes (which is a LLONG_MAX)<br>
&gt;&gt;&gt;     the write fails. The number is equivalent to -1 (unlimited). So during dump,<br>
&gt;&gt;&gt;     store the number -1 instead.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     Change-Id: Iafccc96bf5dbade763d7addaeda24194616e4d5f<br>
&gt;&gt;&gt;     Signed-off-by: Garrison Bellack &lt;<a href="mailto:gbellack@google.com">gbellack@google.com</a> &lt;mailto:<a href="mailto:gbellack@google.com">gbellack@google.com</a>&gt;&gt;<br>
&gt;&gt;&gt;     ---<br>
&gt;&gt;&gt;      cgroup.c | 9 +++++++++<br>
&gt;&gt;&gt;      1 file changed, 9 insertions(+)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     diff --git a/cgroup.c b/cgroup.c<br>
&gt;&gt;&gt;     index 7ac2dd8..f8dbbde 100644<br>
&gt;&gt;&gt;     --- a/cgroup.c<br>
&gt;&gt;&gt;     +++ b/cgroup.c<br>
&gt;&gt;&gt;     @@ -288,6 +288,7 @@ static int read_cgroup_prop(struct cgroup_prop *property, const char *fpath)<br>
&gt;&gt;&gt;      {<br>
&gt;&gt;&gt;             char pbuf[PATH_MAX], buf[100];<br>
&gt;&gt;&gt;             FILE *f;<br>
&gt;&gt;&gt;     +       char *endptr;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;             if (snprintf(pbuf, PATH_MAX, &quot;%s/%s&quot;, fpath, property-&gt;name) &gt;= PATH_MAX) {<br>
&gt;&gt;&gt;                     pr_err(&quot;snprintf output was truncated&quot;);<br>
&gt;&gt;&gt;     @@ -315,6 +316,14 @@ static int read_cgroup_prop(struct cgroup_prop *property, const char *fpath)<br>
&gt;&gt;&gt;                     return -1;<br>
&gt;&gt;&gt;             }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     +       if (strtoll(buf, &amp;endptr, 10) == LLONG_MAX)<br>
&gt;&gt;&gt;     +               strcpy(buf, &quot;-1&quot;);<br>
&gt;&gt;&gt;     +<br>
&gt;&gt;&gt;     +       if (strcmp(endptr, &quot;\n&quot;)) {<br>
&gt;&gt;&gt;     +               pr_perror(&quot;Failed parsing %s, with strtoll\n&quot;, buf);<br>
&gt;&gt;&gt;     +               return -1;<br>
&gt;&gt;&gt;     +       }<br>
&gt;&gt;&gt;     +<br>
&gt;&gt;&gt;             property-&gt;value = xstrdup(buf);<br>
&gt;&gt;&gt;             if (!property-&gt;value)<br>
&gt;&gt;&gt;                     return -1;<br>
&gt;&gt;&gt;     --<br>
&gt;&gt;&gt;     2.1.0.rc2.206.gedb03e5<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     _______________________________________________<br>
&gt;&gt;&gt;     CRIU mailing list<br>
&gt;&gt;&gt;     <a href="mailto:CRIU@openvz.org">CRIU@openvz.org</a> &lt;mailto:<a href="mailto:CRIU@openvz.org">CRIU@openvz.org</a>&gt;<br>
&gt;&gt;&gt;     <a href="https://lists.openvz.org/mailman/listinfo/criu" target="_blank">https://lists.openvz.org/mailman/listinfo/criu</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; CRIU mailing list<br>
&gt;&gt; <a href="mailto:CRIU@openvz.org">CRIU@openvz.org</a><br>
&gt;&gt; <a href="https://lists.openvz.org/mailman/listinfo/criu" target="_blank">https://lists.openvz.org/mailman/listinfo/criu</a><br>
</div></div>&gt; .<br>
&gt;<br>
<br>
</blockquote></div><br></div>