<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 24, 2015 at 10:57 AM, 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:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">On 03/24/2015 08:25 PM, Saied Kazemi wrote:<br>
&gt; For the easy case of comparing pathname strings on the command line (-D and --root), I<br>
&gt; think it&#39;s better to error and exit instead of restoring with all the cgyard mounts<br>
&gt; leaked into the restored process tree.<br>
<br>
</span>I rather agree with this. It&#39;s quite uncommon (from my perspective) that images sit<br>
in the container&#39;s root, so preventing this usage doesn&#39;t (shouldn&#39;t) break anything<br>
critical. Does it?<br></blockquote><div><br></div><div>It wouldn&#39;t break anything because nothing has been merged yet.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">
&gt; For a more general solution, is it possible to make sure that after fini_cgroup() the<br>
&gt; cgyard mount points have been successfully removed from the restored tree?<br>
<br>
</span>What if we call umount with detach flag on cgyard dir inside restore_task_mnt_ns()?<br>
Would this resolve this?<br></blockquote><div><br></div><div>I just quickly tried the following patch, first calling umount_cgyard() before if and then after if.  Neither case worked :(</div><div><br></div><div>--Saied</div><div><br></div><div>diff --git a/cgroup.c b/cgroup.c</div><div>index b1a2f92..fa94853 100644</div><div>--- a/cgroup.c</div><div>+++ b/cgroup.c</div><div>@@ -951,6 +951,12 @@ void fini_cgroup(void)</div><div>        cg_yard = NULL;</div><div> }</div><div> </div><div>+void umount_cgyard(void)</div><div>+{</div><div>+       if (cg_yard)</div><div>+               umount2(cg_yard, MNT_DETACH);</div><div>+}</div><div>+</div><div> static int restore_cgroup_prop(const CgroupPropEntry * cg_prop_entry_p,</div><div>                               char *path, int off)</div><div> {</div><div>diff --git a/include/cgroup.h b/include/cgroup.h</div><div>index 14fef67..5bcf028 100644</div><div>--- a/include/cgroup.h</div><div>+++ b/include/cgroup.h</div><div>@@ -10,6 +10,7 @@ int prepare_cgroup(void);</div><div> /* Restore things like cpu_limit in known cgroups. */</div><div> int prepare_cgroup_properties(void);</div><div> void fini_cgroup(void);</div><div>+void umount_cgyard(void);</div><div> </div><div> struct cg_controller;</div><div> </div><div>diff --git a/mount.c b/mount.c</div><div>index e59cb0d..b0b34cb 100644</div><div>--- a/mount.c</div><div>+++ b/mount.c</div><div>@@ -2028,6 +2028,7 @@ int restore_task_mnt_ns(struct pstree_item *current)</div><div> </div><div>                if (do_restore_task_mnt_ns(nsid))</div><div>                        return -1;</div><div>+               umount_cgyard();</div><div>        }</div><div> </div><div>        return 0;</div><div><br></div></div></div></div>