diff mbox series

lib: rewrite cgroup_find_ctrl with using for_each_ctrl

Message ID 20220113123418.1911231-1-liwang@redhat.com
State Accepted
Headers show
Series lib: rewrite cgroup_find_ctrl with using for_each_ctrl | expand

Commit Message

Li Wang Jan. 13, 2022, 12:34 p.m. UTC
It is safe to start from controllers[0] to traverse each of
the controller whatever V2 or V1, then we can make use of it
in the cgroup_find_ctrl() function.

Signed-off-by: Li Wang <liwang@redhat.com>
---
 lib/tst_cgroup.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

Comments

Richard Palethorpe Jan. 17, 2022, 9:05 a.m. UTC | #1
Hello Li,

Li Wang <liwang@redhat.com> writes:

> It is safe to start from controllers[0] to traverse each of
> the controller whatever V2 or V1, then we can make use of it
> in the cgroup_find_ctrl() function.

Right, it seems we never set ctrl_root on "cgroup" nor is it added to
ctrl_field. So it will be skipped in other loops. This might not be what
people expect, but I'm not sure what to do about that.

>
> Signed-off-by: Li Wang <liwang@redhat.com>
> ---
>  lib/tst_cgroup.c | 15 +++++++--------
>  1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/lib/tst_cgroup.c b/lib/tst_cgroup.c
> index 2ef599d9e..10b65364b 100644
> --- a/lib/tst_cgroup.c
> +++ b/lib/tst_cgroup.c
> @@ -214,7 +214,7 @@ static const char *cgroup_v2_ltp_mount = "unified";
>  #define for_each_v1_root(r)			\
>  	for ((r) = roots + 1; (r)->ver; (r)++)
>  #define for_each_ctrl(ctrl)			\
> -	for ((ctrl) = controllers + 1; (ctrl)->ctrl_name; (ctrl)++)
> +	for ((ctrl) = controllers; (ctrl)->ctrl_name; (ctrl)++)
>  
>  /* In all cases except one, this only loops once.
>   *
> @@ -325,15 +325,14 @@ void tst_cgroup_print_config(void)
>  __attribute__ ((nonnull, warn_unused_result))
>  static struct cgroup_ctrl *cgroup_find_ctrl(const char *const ctrl_name)
>  {
> -	struct cgroup_ctrl *ctrl = controllers;
> -
> -	while (ctrl->ctrl_name && strcmp(ctrl_name, ctrl->ctrl_name))
> -		ctrl++;
> +	struct cgroup_ctrl *ctrl;
>  
> -	if (!ctrl->ctrl_name)
> -		ctrl = NULL;
> +	for_each_ctrl(ctrl) {
> +		if (!strcmp(ctrl_name, ctrl->ctrl_name))
> +			return ctrl;
> +	}
>  
> -	return ctrl;
> +	return NULL;
>  }
>  
>  /* Determine if a mounted cgroup hierarchy is unique and record it if so.

Nice simplification!

Reviewed-by: Richard Palethorpe <rpalethorpe@suse.com>
Li Wang Jan. 18, 2022, 9:02 a.m. UTC | #2
Richard Palethorpe <rpalethorpe@suse.de> wrote:

> > It is safe to start from controllers[0] to traverse each of
> > the controller whatever V2 or V1, then we can make use of it
> > in the cgroup_find_ctrl() function.
>
> Right, it seems we never set ctrl_root on "cgroup" nor is it added to
> ctrl_field. So it will be skipped in other loops. This might not be what
> people expect, but I'm not sure what to do about that.

Yes, but that's fine. It's because of the difference between V1 and V2.


> >
> >  /* Determine if a mounted cgroup hierarchy is unique and record it if so.
>
> Nice simplification!
>
> Reviewed-by: Richard Palethorpe <rpalethorpe@suse.com>

Thanks for the review, I will merge this after the new release.
Petr Vorel Jan. 21, 2022, 5:23 a.m. UTC | #3
Hi Li,

LGTM.
Reviewed-by: Petr Vorel <pvorel@suse.cz>

Kind regards,
Petr
Li Wang Jan. 24, 2022, 12:28 a.m. UTC | #4
Hi all,

Patch merged, thanks!

On Fri, Jan 21, 2022 at 1:23 PM Petr Vorel <pvorel@suse.cz> wrote:
>
> Hi Li,
>
> LGTM.
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
>
> Kind regards,
> Petr
>
diff mbox series

Patch

diff --git a/lib/tst_cgroup.c b/lib/tst_cgroup.c
index 2ef599d9e..10b65364b 100644
--- a/lib/tst_cgroup.c
+++ b/lib/tst_cgroup.c
@@ -214,7 +214,7 @@  static const char *cgroup_v2_ltp_mount = "unified";
 #define for_each_v1_root(r)			\
 	for ((r) = roots + 1; (r)->ver; (r)++)
 #define for_each_ctrl(ctrl)			\
-	for ((ctrl) = controllers + 1; (ctrl)->ctrl_name; (ctrl)++)
+	for ((ctrl) = controllers; (ctrl)->ctrl_name; (ctrl)++)
 
 /* In all cases except one, this only loops once.
  *
@@ -325,15 +325,14 @@  void tst_cgroup_print_config(void)
 __attribute__ ((nonnull, warn_unused_result))
 static struct cgroup_ctrl *cgroup_find_ctrl(const char *const ctrl_name)
 {
-	struct cgroup_ctrl *ctrl = controllers;
-
-	while (ctrl->ctrl_name && strcmp(ctrl_name, ctrl->ctrl_name))
-		ctrl++;
+	struct cgroup_ctrl *ctrl;
 
-	if (!ctrl->ctrl_name)
-		ctrl = NULL;
+	for_each_ctrl(ctrl) {
+		if (!strcmp(ctrl_name, ctrl->ctrl_name))
+			return ctrl;
+	}
 
-	return ctrl;
+	return NULL;
 }
 
 /* Determine if a mounted cgroup hierarchy is unique and record it if so.