All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: Li Zefan <lizefan@huawei.com>,
	hannes@cmpxchg.org, peterz@infradead.org, mingo@redhat.com,
	longman@redhat.com
Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org,
	kernel-team@fb.com, pjt@google.com, luto@amacapital.net,
	efault@gmx.de, torvalds@linux-foundation.org,
	Tejun Heo <tj@kernel.org>
Subject: [PATCH 01/10] cgroup: separate out cgroup_has_tasks()
Date: Sat, 10 Jun 2017 10:03:42 -0400	[thread overview]
Message-ID: <20170610140351.10703-2-tj@kernel.org> (raw)
In-Reply-To: <20170610140351.10703-1-tj@kernel.org>

Separate out cgroup_has_tasks() test from
cgroup_subtree_control_write().  This will be used by the following
changes.

This patch doesn't cause any behavior changes.

Signed-off-by: Tejun Heo <tj@kernel.org>
---
 kernel/cgroup/cgroup.c | 49 +++++++++++++++++++++++++++----------------------
 1 file changed, 27 insertions(+), 22 deletions(-)

diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 8d4e85eae42c..dcd120af4084 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -581,6 +581,30 @@ static bool css_set_populated(struct css_set *cset)
 	return !list_empty(&cset->tasks) || !list_empty(&cset->mg_tasks);
 }
 
+static bool cgroup_has_tasks(struct cgroup *cgrp)
+{
+	struct cgrp_cset_link *link;
+	bool has_tasks = false;
+
+	/*
+	 * Because namespaces pin csets too, @cgrp->cset_links
+	 * might not be empty even when @cgrp is empty.  Walk and
+	 * verify each cset.
+	 */
+	spin_lock_irq(&css_set_lock);
+
+	list_for_each_entry(link, &cgrp->cset_links, cset_link) {
+		if (css_set_populated(link->cset)) {
+			has_tasks = true;
+			break;
+		}
+	}
+
+	spin_unlock_irq(&css_set_lock);
+
+	return has_tasks;
+}
+
 /**
  * cgroup_update_populated - updated populated count of a cgroup
  * @cgrp: the target cgroup
@@ -2886,28 +2910,9 @@ static ssize_t cgroup_subtree_control_write(struct kernfs_open_file *of,
 	 * Except for the root, subtree_control must be zero for a cgroup
 	 * with tasks so that child cgroups don't compete against tasks.
 	 */
-	if (enable && cgroup_parent(cgrp)) {
-		struct cgrp_cset_link *link;
-
-		/*
-		 * Because namespaces pin csets too, @cgrp->cset_links
-		 * might not be empty even when @cgrp is empty.  Walk and
-		 * verify each cset.
-		 */
-		spin_lock_irq(&css_set_lock);
-
-		ret = 0;
-		list_for_each_entry(link, &cgrp->cset_links, cset_link) {
-			if (css_set_populated(link->cset)) {
-				ret = -EBUSY;
-				break;
-			}
-		}
-
-		spin_unlock_irq(&css_set_lock);
-
-		if (ret)
-			goto out_unlock;
+	if (enable && cgroup_parent(cgrp) && cgroup_has_tasks(cgrp)) {
+		ret = -EBUSY;
+		goto out_unlock;
 	}
 
 	/* save and update control masks and prepare csses */
-- 
2.13.0


  reply	other threads:[~2017-06-10 14:03 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-10 14:03 [PATCHSET for-4.13] cgroup: implement cgroup2 thread mode, v2 Tejun Heo
2017-06-10 14:03 ` Tejun Heo
2017-06-10 14:03 ` Tejun Heo [this message]
2017-06-10 14:03 ` [PATCH 02/10] cgroup: reorganize cgroup.procs / task write path Tejun Heo
2017-06-10 14:03 ` [PATCH 03/10] cgroup: Fix reference counting bug in cgroup_procs_write() Tejun Heo
2017-06-10 14:03 ` [PATCH 04/10] cgroup: add @flags to css_task_iter_start() and implement CSS_TASK_ITER_PROCS Tejun Heo
2017-06-10 14:03 ` [PATCH 05/10] cgroup: introduce cgroup->proc_cgrp and threaded css_set handling Tejun Heo
2017-06-10 14:03 ` [PATCH 08/10] sched: Misc preps for cgroup unified hierarchy interface Tejun Heo
2017-06-10 14:03 ` [PATCH 09/10] sched: Implement interface for cgroup unified hierarchy Tejun Heo
     [not found] ` <20170610140351.10703-1-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-06-10 14:03   ` [PATCH 06/10] cgroup: implement CSS_TASK_ITER_THREADED Tejun Heo
2017-06-10 14:03     ` Tejun Heo
2017-06-10 14:03   ` [PATCH 07/10] cgroup: implement cgroup v2 thread support Tejun Heo
2017-06-10 14:03     ` Tejun Heo
     [not found]     ` <20170610140351.10703-8-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-06-12 15:41       ` Waiman Long
2017-06-12 15:41         ` Waiman Long
2017-06-13 14:06         ` Tejun Heo
2017-06-15 20:14       ` [PATCH v3 " Tejun Heo
2017-06-15 20:14         ` Tejun Heo
2017-06-10 14:03   ` [PATCH 10/10] sched: Make cpu/cpuacct threaded controllers Tejun Heo
2017-06-10 14:03     ` Tejun Heo
2017-06-12 12:31   ` [PATCHSET for-4.13] cgroup: implement cgroup2 thread mode, v2 Peter Zijlstra
2017-06-12 12:31     ` Peter Zijlstra
     [not found]     ` <20170612123150.scopfxela7v26dct-Nxj+rRp3nVydTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2017-06-12 21:27       ` Tejun Heo
2017-06-12 21:27         ` Tejun Heo
     [not found]         ` <20170612212753.GN19206-piEFEHQLUPpN0TnZuCh8vA@public.gmane.org>
2017-06-15 20:16           ` Tejun Heo
2017-06-15 20:16             ` Tejun Heo
2017-06-27  7:01           ` Peter Zijlstra
2017-06-27  7:01             ` Peter Zijlstra
2017-06-30 13:23             ` Tejun Heo
2017-06-30 13:23               ` Tejun Heo
2017-07-10  8:32               ` Peter Zijlstra
     [not found]                 ` <20170710083200.poevcjo7x47hy5ni-Nxj+rRp3nVydTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2017-07-10 21:01                   ` Waiman Long
2017-07-10 21:01                     ` Waiman Long
     [not found]                     ` <8f9c83d7-cadf-3a41-8e56-5828d5abfa26-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-07-11 12:15                       ` Peter Zijlstra
2017-07-11 12:15                         ` Peter Zijlstra
     [not found]                         ` <20170711121527.imshmmoe4cj7dkig-Nxj+rRp3nVydTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2017-07-11 14:14                           ` Waiman Long
2017-07-11 14:14                             ` Waiman Long
     [not found]                             ` <a554d16c-af40-756e-a611-a453451c40a9-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-07-11 16:52                               ` Peter Zijlstra
2017-07-11 16:52                                 ` Peter Zijlstra
     [not found]                                 ` <20170711165233.xx6wko4pdxk4rb72-Nxj+rRp3nVydTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2017-07-11 21:12                                   ` Waiman Long
2017-07-11 21:12                                     ` Waiman Long
     [not found]                                     ` <0659619a-067d-b542-918c-e468c51feb23-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-07-12  7:45                                       ` Peter Zijlstra
2017-07-12  7:45                                         ` Peter Zijlstra
     [not found]                                         ` <20170712074555.slefkebvdpfjse34-Nxj+rRp3nVydTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2017-07-12 14:00                                           ` Waiman Long
2017-07-12 14:00                                             ` Waiman Long
2017-06-15 20:17   ` [PATCH] cgroup: update debug controller to print out thread mode information Tejun Heo
2017-06-15 20:17     ` Tejun Heo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170610140351.10703-2-tj@kernel.org \
    --to=tj@kernel.org \
    --cc=cgroups@vger.kernel.org \
    --cc=efault@gmx.de \
    --cc=hannes@cmpxchg.org \
    --cc=kernel-team@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizefan@huawei.com \
    --cc=longman@redhat.com \
    --cc=luto@amacapital.net \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pjt@google.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.