Subject: blkcg: dirty rate accounting Date: Sat Apr 02 20:15:28 CST 2011 To be used by the balance_dirty_pages() async write IO controller. Signed-off-by: Wu Fengguang --- block/blk-cgroup.c | 4 ++++ include/linux/blk-cgroup.h | 1 + mm/page-writeback.c | 4 ++++ 3 files changed, 9 insertions(+) --- linux-next.orig/block/blk-cgroup.c 2011-04-02 20:17:08.000000000 +0800 +++ linux-next/block/blk-cgroup.c 2011-04-02 21:59:24.000000000 +0800 @@ -1458,6 +1458,7 @@ static void blkiocg_destroy(struct cgrou free_css_id(&blkio_subsys, &blkcg->css); rcu_read_unlock(); + percpu_counter_destroy(&blkcg->nr_dirtied); if (blkcg != &blkio_root_cgroup) kfree(blkcg); } @@ -1483,6 +1484,9 @@ done: INIT_HLIST_HEAD(&blkcg->blkg_list); INIT_LIST_HEAD(&blkcg->policy_list); + + percpu_counter_init(&blkcg->nr_dirtied, 0); + return &blkcg->css; } --- linux-next.orig/include/linux/blk-cgroup.h 2011-04-02 20:17:08.000000000 +0800 +++ linux-next/include/linux/blk-cgroup.h 2011-04-02 21:59:02.000000000 +0800 @@ -111,6 +111,7 @@ struct blkio_cgroup { spinlock_t lock; struct hlist_head blkg_list; struct list_head policy_list; /* list of blkio_policy_node */ + struct percpu_counter nr_dirtied; }; struct blkio_group_stats { --- linux-next.orig/mm/page-writeback.c 2011-04-02 20:17:08.000000000 +0800 +++ linux-next/mm/page-writeback.c 2011-04-02 21:59:02.000000000 +0800 @@ -34,6 +34,7 @@ #include #include #include +#include #include /* @@ -221,6 +222,9 @@ EXPORT_SYMBOL_GPL(bdi_writeout_inc); void task_dirty_inc(struct task_struct *tsk) { + struct blkio_cgroup *blkcg = task_to_blkio_cgroup(tsk); + if (blkcg) + __percpu_counter_add(&blkcg->nr_dirtied, 1, BDI_STAT_BATCH); prop_inc_single(&vm_dirties, &tsk->dirties); }