<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2015-08-05 13:36 GMT-07:00 Pavel Emelyanov <span dir="ltr">&lt;<a href="mailto:xemul@parallels.com" target="_blank">xemul@parallels.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 08/05/2015 08:51 PM, Gabriel Guimaraes wrote:<br>
&gt; Hi Pavel,<br>
&gt;<br>
&gt; Thanks for the review.<br>
&gt;<br>
</span><span class="">&gt; On Wed, Aug 5, 2015 at 4:00 AM, Pavel Emelyanov &lt;<a href="mailto:xemul@parallels.com">xemul@parallels.com</a> &lt;mailto:<a href="mailto:xemul@parallels.com">xemul@parallels.com</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt;     Gabriel,<br>
&gt;<br>
&gt;     Please, find my comments inline.<br>
&gt;<br>
&gt;     &gt; diff --git a/crtools.c b/crtools.c<br>
&gt;     &gt; index 6af6080..521d0ff 100644<br>
&gt;     &gt; --- a/crtools.c<br>
&gt;     &gt; +++ b/crtools.c<br>
&gt;     &gt; @@ -235,6 +235,7 @@ int main(int argc, char *argv[], char *envp[])<br>
&gt;     &gt;               { &quot;enable-fs&quot;,                  required_argument,      0, 1065 },<br>
&gt;     &gt;               { &quot;enable-external-sharing&quot;,    no_argument,            0, 1066 },<br>
&gt;     &gt;               { &quot;enable-external-masters&quot;,    no_argument,            0, 1067 },<br>
&gt;     &gt; +             { &quot;overlayfs&quot;,                  no_argument,            0, 1068 },<br>
&gt;<br>
&gt;     With AUFS workaround we ended up with auto-detection scheme -- when<br>
&gt;     meeting an AUFS mount the opts.aufs is set to true. Can we do the<br>
&gt;     same with overlayfs?<br>
&gt;<br>
&gt;<br>
&gt; Technically we could always enable overlayfs by default, since we only do something if there<br>
&gt; is an overlayfs mounted entry in the mountinfo table. Should I enable it always?<br>
<br>
</span>In the fill_fdlink() there&#39;s fd_parms structure with fs_type field filled from<br>
statfs() syscall. If we check for this value being overlayfs magic, we can silently<br>
imply the workaround is on and go calling fixup_overlayfs().<br>
<span class=""><br></span></blockquote><div>Per man statfs, I don&#39;t think Overlayfs has a magic number. OverlayFS just overlays two filesystems on top of each other. From statfs&#39; point of view, a file&#39;s filesystem type is the original one, not OverlayFS.</div><div><br></div><div>More information here:</div><div><a href="https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt">https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt</a><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
&gt;     &gt; +static struct mount_info *__lookup_overlayfs(struct mount_info *list, char *rpath,<br>
&gt;     &gt; +                                             unsigned int st_dev, unsigned int st_ino,<br>
&gt;     &gt; +                                             unsigned int mnt_id)<br>
&gt;     &gt; +{<br>
&gt;     &gt; +     /*<br>
&gt;     &gt; +      * Goes through all entries in the mountinfo table<br>
&gt;     &gt; +      * looking for a mount point that contains the file specified<br>
&gt;     &gt; +      * in rpath. Uses the device number st_dev and the inode number st_ino<br>
&gt;     &gt; +      * to make sure the file is correct.<br>
&gt;     &gt; +      */<br>
&gt;     &gt; +     struct mount_info *mi_ret = NULL;<br>
&gt;     &gt; +     struct mount_info *m;<br>
&gt;     &gt; +<br>
&gt;     &gt; +     for (m = list; m != NULL; m = m-&gt;next) {<br>
&gt;     &gt; +             /* Case 1: If mnt_id is correct, don&#39;t do anything */<br>
&gt;     &gt; +             if (st_dev == m-&gt;s_dev &amp;&amp; mnt_id == m-&gt;mnt_id)<br>
&gt;     &gt; +                     return NULL;<br>
&gt;<br>
&gt;     Shouldn&#39;t this if () be under the next one, so that everything that happens<br>
&gt;     here applies to overlayfs only?<br>
&gt;<br>
&gt;<br>
&gt; This if () is basically a check to see if the bug exists. We look for all instances of the device<br>
&gt; st_dev and see if any of them match our mnt_id. If that&#39;s not the case, the bug exists and we want<br>
&gt; to proceed to try to fix it.<br>
<br>
</span>OK<br>
<span class=""><br>
&gt; I could have left this as a separate for loop to make this more clear, but this way we only use<br>
&gt; one for loop for both. I believe it&#39;s better if we separate it into two for loops since we prevent<br>
&gt; some unnecessary stating. I can also move this part to lookup_overlayfs, before dealing with<br>
&gt; namespaces. What do you think?<br>
<br>
</span>Yup, makes sense to me.<br>
<br>
</blockquote></div><br></div></div>