提交 902ec5b6 编写于 作者: S Shaohua Li 提交者: Jens Axboe

block: make blkcg aware of kthread stored original cgroup info

bio_blkcg is the only API to get cgroup info for a bio right now. If
bio_blkcg finds current task is a kthread and has original blkcg
associated, it will use the css instead of associating the bio to
current task. This makes it possible that kthread dispatches bios on
behalf of other threads.
Acked-by: NTejun Heo <tj@kernel.org>
Signed-off-by: NShaohua Li <shli@fb.com>
Signed-off-by: NJens Axboe <axboe@kernel.dk>
上级 af551fb3
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/radix-tree.h> #include <linux/radix-tree.h>
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/kthread.h>
/* percpu_counter batch for blkg_[rw]stats, per-cpu drift doesn't matter */ /* percpu_counter batch for blkg_[rw]stats, per-cpu drift doesn't matter */
#define BLKG_STAT_CPU_BATCH (INT_MAX / 2) #define BLKG_STAT_CPU_BATCH (INT_MAX / 2)
...@@ -223,16 +224,16 @@ static inline struct blkcg *css_to_blkcg(struct cgroup_subsys_state *css) ...@@ -223,16 +224,16 @@ static inline struct blkcg *css_to_blkcg(struct cgroup_subsys_state *css)
return css ? container_of(css, struct blkcg, css) : NULL; return css ? container_of(css, struct blkcg, css) : NULL;
} }
static inline struct blkcg *task_blkcg(struct task_struct *tsk)
{
return css_to_blkcg(task_css(tsk, io_cgrp_id));
}
static inline struct blkcg *bio_blkcg(struct bio *bio) static inline struct blkcg *bio_blkcg(struct bio *bio)
{ {
struct cgroup_subsys_state *css;
if (bio && bio->bi_css) if (bio && bio->bi_css)
return css_to_blkcg(bio->bi_css); return css_to_blkcg(bio->bi_css);
return task_blkcg(current); css = kthread_blkcg();
if (css)
return css_to_blkcg(css);
return css_to_blkcg(task_css(current, io_cgrp_id));
} }
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册