On 17.04.2020 15:14, Kirill Tkhai wrote: > On 17.04.2020 15:11, Valeriy Vdovin wrote: >>> Will the function work correctly in case jf we completely remove above >>> "if"? Is this "if" optimization for init_css_set? >> >> This is indeed an optimization. And also it looks like it's the most common >> case. > > (Please, avoid top-posting in your replies. Top-posting is not welcomed. See > in Documentation/development-process/2.Process) > > Then, we should add a comment about that this is optimization, I think.
With an appropriate comment about this is optimization, you may add my Reviewed-by: to this patch in next resend. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ >> *From:* Kirill Tkhai <[email protected]> >> *Sent:* Friday, April 17, 2020 12:15 PM >> *To:* Valeriy Vdovin <[email protected]>; [email protected] >> <[email protected]>; Konstantin Khorenko <[email protected]>; Pavel >> Tikhomirov <[email protected]> >> *Subject:* Re: [PATCH v10 6/9] ve/cgroup: unmark ve-root cgroups at >> container stop >> >> On 16.04.2020 19:14, Valeriy Vdovin wrote: >>> Signed-off-by: Valeriy Vdovin <[email protected]> >>> Reviewed-by: Kirill Tkhai <[email protected]> >>> --- >>> include/linux/cgroup.h | 1 + >>> kernel/cgroup.c | 42 ++++++++++++++++++++++++++++++++++++++++++ >>> kernel/ve/ve.c | 2 ++ >>> 3 files changed, 45 insertions(+) >>> >>> diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h >>> index 0a42f93..1bd0fe7 100644 >>> --- a/include/linux/cgroup.h >>> +++ b/include/linux/cgroup.h >>> @@ -636,6 +636,7 @@ int cgroup_task_count(const struct cgroup *cgrp); >>> >>> #ifdef CONFIG_VE >>> void cgroup_mark_ve_roots(struct ve_struct *ve); >>> +void cgroup_unmark_ve_roots(struct ve_struct *ve); >>> #endif >>> >>> /* >>> diff --git a/kernel/cgroup.c b/kernel/cgroup.c >>> index 60a4ca4..1dd36ed 100644 >>> --- a/kernel/cgroup.c >>> +++ b/kernel/cgroup.c >>> @@ -635,6 +635,35 @@ static struct css_set *find_css_set( >>> } >>> >>> /* >>> + * Walk each cgroup link of a given css_set and find a cgroup that >>> + * is the child of cgroupfs_root in argument. >>> + */ >>> +static struct cgroup *css_cgroup_from_root(struct css_set *css_set, >>> + struct cgroupfs_root *root) >>> +{ >>> + struct cgroup *res = NULL; >>> + >>> + BUG_ON(!mutex_is_locked(&cgroup_mutex)); >>> + read_lock(&css_set_lock); >>> + >>> + if (css_set == &init_css_set) { >>> + res = &root->top_cgroup; >> >> Will the function work correctly in case jf we completely remove above "if"? >> Is this "if" optimization for init_css_set? >> >>> + } else { >>> + struct cg_cgroup_link *link; >>> + list_for_each_entry(link, &css_set->cg_links, cg_link_list) { >>> + struct cgroup *c = link->cgrp; >>> + if (c->root == root) { >>> + res = c; >>> + break; >>> + } >>> + } >>> + } >>> + read_unlock(&css_set_lock); >>> + BUG_ON(!res); >>> + return res; >>> +} >>> + >>> +/* >>> * Return the cgroup for "task" from the given hierarchy. Must be >>> * called with cgroup_mutex held. >>> */ >>> @@ -4237,6 +4266,19 @@ void cgroup_mark_ve_roots(struct ve_struct *ve) >>> mutex_unlock(&cgroup_mutex); >>> } >>> >>> +void cgroup_unmark_ve_roots(struct ve_struct *ve) >>> +{ >>> + struct cgroup *cgrp; >>> + struct cgroupfs_root *root; >>> + >>> + mutex_lock(&cgroup_mutex); >>> + for_each_active_root(root) { >>> + cgrp = css_cgroup_from_root(ve->root_css_set, root); >>> + clear_bit(CGRP_VE_ROOT, &cgrp->flags); >>> + } >>> + mutex_unlock(&cgroup_mutex); >>> +} >>> + >>> struct cgroup *cgroup_get_ve_root(struct cgroup *cgrp) >>> { >>> struct cgroup *ve_root = NULL; >>> diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c >>> index eedb85d..db3b600 100644 >>> --- a/kernel/ve/ve.c >>> +++ b/kernel/ve/ve.c >>> @@ -618,6 +618,8 @@ void ve_exit_ns(struct pid_namespace *pid_ns) >>> if (!ve->ve_ns || ve->ve_ns->pid_ns != pid_ns) >>> return; >>> >>> + cgroup_unmark_ve_roots(ve); >>> + >>> ve_workqueue_stop(ve); >>> >>> /* >>> >> > _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
