aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/include/linux/kthread.h
diff options
context:
space:
mode:
authorShaohua Li <shli@fb.com>2017-09-14 14:02:04 -0700
committerJens Axboe <axboe@kernel.dk>2017-09-26 07:41:22 -0600
commit05e3db95ebfc5c06a29a1d8c7a3e02f46f3a25a7 (patch)
tree796d817c452db9d6f64595238f28d9c7af2e1119 /include/linux/kthread.h
parentMerge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs (diff)
downloadwireguard-linux-05e3db95ebfc5c06a29a1d8c7a3e02f46f3a25a7.tar.xz
wireguard-linux-05e3db95ebfc5c06a29a1d8c7a3e02f46f3a25a7.zip
kthread: add a mechanism to store cgroup info
kthread usually runs jobs on behalf of other threads. The jobs should be charged to cgroup of original threads. But the jobs run in a kthread, where we lose the cgroup context of original threads. The patch adds a machanism to record cgroup info of original threads in kthread context. Later we can retrieve the cgroup info and attach the cgroup info to jobs. Since this mechanism is only required by kthread, we store the cgroup info in kthread data instead of generic task_struct. Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Shaohua Li <shli@fb.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'include/linux/kthread.h')
-rw-r--r--include/linux/kthread.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/kthread.h b/include/linux/kthread.h
index 82e197eeac91..bd4369c83dfb 100644
--- a/include/linux/kthread.h
+++ b/include/linux/kthread.h
@@ -3,6 +3,7 @@
/* Simple interface for creating and stopping kernel threads without mess. */
#include <linux/err.h>
#include <linux/sched.h>
+#include <linux/cgroup.h>
__printf(4, 5)
struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),
@@ -198,4 +199,14 @@ bool kthread_cancel_delayed_work_sync(struct kthread_delayed_work *work);
void kthread_destroy_worker(struct kthread_worker *worker);
+#ifdef CONFIG_CGROUPS
+void kthread_associate_blkcg(struct cgroup_subsys_state *css);
+struct cgroup_subsys_state *kthread_blkcg(void);
+#else
+static inline void kthread_associate_blkcg(struct cgroup_subsys_state *css) { }
+static inline struct cgroup_subsys_state *kthread_blkcg(void)
+{
+ return NULL;
+}
+#endif
#endif /* _LINUX_KTHREAD_H */