<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 7, 2020 at 7:16 PM Yang Xu <<a href="mailto:xuyang2018.jy@cn.fujitsu.com">xuyang2018.jy@cn.fujitsu.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Li<br>
<br>
<br>
> <br>
> <br>
> On Fri, Aug 7, 2020 at 5:42 PM Yang Xu <<a href="mailto:xuyang2018.jy@cn.fujitsu.com" target="_blank">xuyang2018.jy@cn.fujitsu.com</a> <br>
> <mailto:<a href="mailto:xuyang2018.jy@cn.fujitsu.com" target="_blank">xuyang2018.jy@cn.fujitsu.com</a>>> wrote:<br>
> <br>
>     When running cgroup test cases(like cpuset01 or oom05) about cpuset<br>
>     subsystem<br>
>     firstly, then cpuset_inherit case will fail because the value of<br>
>     cgroup.clone_children has been changed into 1 on cgroup-v1. Reset<br>
>     this value<br>
>     when calling tst_cgroupN_umount.<br>
> <br>
>     Signed-off-by: Yang Xu <<a href="mailto:xuyang2018.jy@cn.fujitsu.com" target="_blank">xuyang2018.jy@cn.fujitsu.com</a><br>
>     <mailto:<a href="mailto:xuyang2018.jy@cn.fujitsu.com" target="_blank">xuyang2018.jy@cn.fujitsu.com</a>>><br>
>     ---<br>
>       lib/tst_cgroup.c | 8 ++++++++<br>
>       1 file changed, 8 insertions(+)<br>
> <br>
>     diff --git a/lib/tst_cgroup.c b/lib/tst_cgroup.c<br>
>     index 9459f7ea0..764951afa 100644<br>
>     --- a/lib/tst_cgroup.c<br>
>     +++ b/lib/tst_cgroup.c<br>
>     @@ -9,6 +9,8 @@<br>
>       #include <stdio.h><br>
>       #include <stdlib.h><br>
>       #include <sys/mount.h><br>
>     +#include <fcntl.h><br>
>     +#include <unistd.h><br>
> <br>
>       #include "tst_test.h"<br>
>       #include "tst_safe_macros.h"<br>
>     @@ -123,6 +125,7 @@ static void tst_cgroupN_umount(const char<br>
>     *mnt_path, const char *new_path)<br>
>              FILE *fp;<br>
>              int fd;<br>
>              char s_new[BUFSIZ], s[BUFSIZ], value[BUFSIZ];<br>
>     +       char knob_path[PATH_MAX];<br>
> <br>
>              if (!tst_is_mounted(mnt_path))<br>
>                      return;<br>
>     @@ -151,6 +154,11 @@ static void tst_cgroupN_umount(const char<br>
>     *mnt_path, const char *new_path)<br>
>                                  != (ssize_t)strlen(value) - 1)<br>
>                                      tst_res(TWARN | TERRNO, "write %s", s);<br>
>              }<br>
>     +       if (tst_cg_ver & TST_CGROUP_V1) {<br>
> <br>
> <br>
> To recognize cgroup_v1 is not enough here, because it will <br>
> be failed "with no such cgroup.clone_children file" on MEMCG umount if <br>
> the system no CPUSET mounting.<br>
I has umounted cpuset, but I still see this file in memory as below:<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">It's not the same file, here set to 1 is '../cpuset/cgroup.clone_children' which belong to the CPUSET but not the MEMCG one. </div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">i.e. </div># echo 1 >/sys/fs/cgroup/memory/cgroup.clone_children <br># cat /sys/fs/cgroup/memory/cgroup.clone_children <br>1<br># cat /sys/fs/cgroup/cpuset/cgroup.clone_children <br>0<br><div class="gmail_default" style="font-size:small"><br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
#mount |grep cpuset<br>
nothing<br>
# ls -l /sys/fs/cgroup/memory/cgroup.clone_children<br>
-rw-r--r--. 1 root root 0 Aug  7 08:16 <br>
/sys/fs/cgroup/memory/cgroup.clone_children<br>
<br>
> <br>
> Maybe a smart way is to save the cgroup.clone_children value, restore it <br>
> if it has been changed in the setup phase. What do u think?<br>
We can just use print and scanf api to do this.<br>
But I don't know this whether takes bad effects on complexd nesting <br>
situation(has sub cgroup).<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">We could just do scanf that for CPUSET subsystem, and do nothing if no CPUSET mounting.</div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
> <br>
>     +               sprintf(knob_path, "%s/cgroup.clone_children",<br>
>     mnt_path);<br>
>     +               if (!access(knob_path, F_OK))<br>
Here has a check for cgroup.clone_children so it should not trigger un <br>
such file error.<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">No, the tst_cgroupN_umount just unmount the DIR but do nothing to distinguish what kind of group it is, so it will also do same thing for all cgroup types. </div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
ps: I will add clone_children swith into cpu_inherit case.<br>
<br>
Best Regards<br>
Yang Xu<br>
>     +                       SAFE_FILE_PRINTF(knob_path, "%d", 0);<br>
>     +       }<br>
>              if (fd != -1)<br>
>                      close(fd);<br>
>              if (fp != NULL)<br>
>     -- <br>
>     2.23.0<br>
> <br>
> <br>
> <br>
> <br>
> <br>
> -- <br>
> Regards,<br>
> Li Wang<br>
<br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div></div>