Thread (11 messages) 11 messages, 2 authors, 2017-09-13

Re: [PATCH V2 1/4] kthread: add a mechanism to store cgroup info

From: Shaohua Li <shli@kernel.org>
Date: 2017-09-13 22:30:08
Also in: lkml

On Wed, Sep 13, 2017 at 02:38:20PM -0700, Tejun Heo wrote:
Hello,

On Wed, Sep 13, 2017 at 02:01:26PM -0700, Shaohua Li wrote:
quoted
diff --git a/kernel/kthread.c b/kernel/kthread.c
index 26db528..3107eee 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -20,7 +20,6 @@
 #include <linux/freezer.h>
 #include <linux/ptrace.h>
 #include <linux/uaccess.h>
-#include <linux/cgroup.h>
 #include <trace/events/sched.h>
 
 static DEFINE_SPINLOCK(kthread_create_lock);
@@ -47,6 +46,7 @@ struct kthread {
 	void *data;
 	struct completion parked;
 	struct completion exited;
maybe #ifdef CONFIG_CGROUPS?
quoted
+	struct cgroup_subsys_state *blkcg_css;
Ah, I thought cgroup_subsys_state is always defined, let me double check.
quoted
 };
...
quoted
+void kthread_associate_blkcg(struct cgroup_subsys_state *css)
+{
+	struct kthread *kthread;
+
+	if (!(current->flags & PF_KTHREAD) || !current->set_child_tid)
+		return;
+	kthread = to_kthread(current);
+	if (css) {
+		css_get(css);
+		kthread->blkcg_css = css;
+	} else if (kthread->blkcg_css) {
+		css_put(kthread->blkcg_css);
+		kthread->blkcg_css = NULL;
+	}
+}
+EXPORT_SYMBOL(kthread_associate_blkcg);
Maybe doing sth like the following is less error-prone?

kthread_associate_blkcg(@css)
{
	if (current's kthread->blkcg_css)
		put kthread->blkcg_css and set it to NULL;
	if (@css)
		get @css and set kthread->blkcg;
}
Sounds good.

Thanks,
Shaohua
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help