Files
android_kernel_xiaomi_sm8450/include/linux
Sha Zhengju 3ea67d06e4 memcg: add per cgroup writeback pages accounting
Add memcg routines to count writeback pages, later dirty pages will also
be accounted.

After Kame's commit 89c06bd52f ("memcg: use new logic for page stat
accounting"), we can use 'struct page' flag to test page state instead
of per page_cgroup flag.  But memcg has a feature to move a page from a
cgroup to another one and may have race between "move" and "page stat
accounting".  So in order to avoid the race we have designed a new lock:

         mem_cgroup_begin_update_page_stat()
         modify page information        -->(a)
         mem_cgroup_update_page_stat()  -->(b)
         mem_cgroup_end_update_page_stat()

It requires both (a) and (b)(writeback pages accounting) to be pretected
in mem_cgroup_{begin/end}_update_page_stat().  It's full no-op for
!CONFIG_MEMCG, almost no-op if memcg is disabled (but compiled in), rcu
read lock in the most cases (no task is moving), and spin_lock_irqsave
on top in the slow path.

There're two writeback interfaces to modify: test_{clear/set}_page_writeback().
And the lock order is:
	--> memcg->move_lock
	  --> mapping->tree_lock

Signed-off-by: Sha Zhengju <handai.szj@taobao.com>
Acked-by: Michal Hocko <mhocko@suse.cz>
Reviewed-by: Greg Thelen <gthelen@google.com>
Cc: Fengguang Wu <fengguang.wu@intel.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-09-12 15:38:02 -07:00
..
2013-08-26 14:09:03 -04:00
2013-08-14 13:55:15 +05:30
2013-03-01 13:39:00 -08:00
2013-06-17 14:38:54 -04:00
2013-05-07 19:46:02 -07:00
2013-05-29 15:50:34 -04:00
2013-07-03 16:07:39 -07:00
2013-08-26 18:40:56 -04:00
2013-08-27 01:44:40 +02:00
2013-03-12 11:30:04 -07:00
2013-09-05 20:46:06 -04:00
2013-05-01 16:36:22 +05:30
2013-07-23 16:01:28 -07:00
2013-02-26 02:46:08 -05:00
2013-07-15 11:25:00 +09:30
2013-05-07 18:38:27 -07:00
2013-03-15 15:09:43 +10:30
2013-04-29 18:28:40 -07:00
2013-08-26 20:15:23 +09:00
2013-06-17 16:38:57 -07:00
2013-08-22 22:13:54 -07:00
2013-06-19 23:32:07 -04:00
2013-08-02 11:34:30 +08:00
2013-08-23 10:22:29 +02:00
2013-06-13 17:51:04 -07:00
2013-07-18 13:05:23 -07:00
2013-08-22 20:30:15 -07:00
2013-09-11 15:59:42 -07:00
2013-06-17 16:38:57 -07:00
2013-08-09 10:49:00 +02:00
2013-07-26 16:19:48 -07:00
2013-04-30 17:04:06 -07:00
2013-08-28 21:35:14 -07:00
2013-04-01 11:04:50 -07:00
2013-07-16 22:00:14 -07:00
2013-05-31 00:48:22 -07:00
2013-08-12 15:27:01 +00:00
2013-09-08 20:20:23 -04:00
2013-07-03 16:08:05 -07:00
2013-06-08 16:20:14 -04:00
2013-05-04 14:47:26 -04:00
2013-09-03 16:40:32 -04:00
2013-08-12 15:27:01 +00:00
2013-06-12 12:37:30 +01:00
2013-04-29 15:54:28 -07:00
2013-05-31 17:19:05 -07:00
2013-06-21 11:32:51 +02:00
2013-04-12 10:26:23 +02:00
2013-07-03 16:08:05 -07:00
2013-06-17 16:38:57 -07:00
2013-02-19 08:43:34 +01:00
2013-06-17 18:09:53 +09:00
2013-04-30 15:50:12 +05:30
2013-09-11 15:57:31 -07:00
2013-05-21 12:25:02 -05:00
2013-07-24 15:12:53 -07:00
2013-03-20 12:10:38 -04:00
2013-08-05 10:52:36 -06:00
2013-05-27 10:57:53 +09:00
2013-07-10 18:11:34 -07:00