)]}'
{
  "log": [
    {
      "commit": "3f134619393cb6c6dfab7890a617d0ceca6d05d7",
      "tree": "39e05b42c99189cd4496e61a3e16107e065b0f04",
      "parents": [
        "3afe36b1fe7d1e3f66752bb9548a763942f3a104"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Tue May 29 15:07:11 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:28 2012 -0700"
      },
      "message": "memcg: decrement static keys at real destroy time\n\nWe call the destroy function when a cgroup starts to be removed, such as\nby a rmdir event.\n\nHowever, because of our reference counters, some objects are still\ninflight.  Right now, we are decrementing the static_keys at destroy()\ntime, meaning that if we get rid of the last static_key reference, some\nobjects will still have charges, but the code to properly uncharge them\nwon\u0027t be run.\n\nThis becomes a problem specially if it is ever enabled again, because now\nnew charges will be added to the staled charges making keeping it pretty\nmuch impossible.\n\nWe just need to be careful with the static branch activation: since there\nis no particular preferred order of their activation, we need to make sure\nthat we only start using it after all call sites are active.  This is\nachieved by having a per-memcg flag that is only updated after\nstatic_key_slow_inc() returns.  At this time, we are sure all sites are\nactive.\n\nThis is made per-memcg, not global, for a reason: it also has the effect\nof making socket accounting more consistent.  The first memcg to be\nlimited will trigger static_key() activation, therefore, accounting.  But\nall the others will then be accounted no matter what.  After this patch,\nonly limited memcgs will have its sockets accounted.\n\n[akpm@linux-foundation.org: move enum sock_flag_bits into sock.h,\n                            document enum sock_flag_bits,\n                            convert memcg_proto_active() and memcg_proto_activated() to test_bit(),\n                            redo tcp_update_limit() comment to 80 cols]\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: David Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3afe36b1fe7d1e3f66752bb9548a763942f3a104",
      "tree": "7cb138ee742517f2924c1cbc1ae18c4d6afab12b",
      "parents": [
        "fa9add641b1b1c564db916accac1db346e7a2759"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Tue May 29 15:07:10 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:28 2012 -0700"
      },
      "message": "memcg: always free struct memcg through schedule_work()\n\nRight now we free struct memcg with kfree right after a rcu grace period,\nbut defer it if we need to use vfree() to get rid of that memory area.  We\ndo that by need, because we need vfree to be called in a process context.\n\nThis patch unifies this behavior, by ensuring that even kfree will happen\nin a separate thread.  The goal is to have a stable place to call the\nupcoming jump label destruction function outside the realm of the\ncomplicated and quite far-reaching cgroup lock (that can\u0027t be held when\nholding either the cpu_hotplug.lock or jump_label_mutex)\n\n[akpm@linux-foundation.org: tweak comment]\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fa9add641b1b1c564db916accac1db346e7a2759",
      "tree": "875e74ec4d7fed0018fdbc134ad899949c5e3384",
      "parents": [
        "75b00af77ed5b5a3d55549f9e0c33f3969b9330c"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:07:09 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:28 2012 -0700"
      },
      "message": "mm/memcg: apply add/del_page to lruvec\n\nTake lruvec further: pass it instead of zone to add_page_to_lru_list() and\ndel_page_from_lru_list(); and pagevec_lru_move_fn() pass lruvec down to\nits target functions.\n\nThis cleanup eliminates a swathe of cruft in memcontrol.c, including\nmem_cgroup_lru_add_list(), mem_cgroup_lru_del_list() and\nmem_cgroup_lru_move_lists() - which never actually touched the lists.\n\nIn their place, mem_cgroup_page_lruvec() to decide the lruvec, previously\na side-effect of add, and mem_cgroup_update_lru_size() to maintain the\nlru_size stats.\n\nWhilst these are simplifications in their own right, the goal is to bring\nthe evaluation of lruvec next to the spin_locking of the lrus, in\npreparation for a future patch.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4d7dcca213921fbaf08ee05359d28e4aaf2245f1",
      "tree": "1c31ea8e8f9f88ca60864fbdaf9dfa74b09be96f",
      "parents": [
        "af7c4b0ec257ea9abb9c6749dd5a5ba0b8fae1fd"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:07:08 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:28 2012 -0700"
      },
      "message": "mm/memcg: get_lru_size not get_lruvec_size\n\nKonstantin just introduced mem_cgroup_get_lruvec_size() and\nget_lruvec_size(), I\u0027m about to add mem_cgroup_update_lru_size(): but\nwe\u0027re dealing with the same thing, lru_size[lru].  We ought to agree on\nthe naming, and I do think lru_size is the more correct: so rename his\nones to get_lru_size().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "af7c4b0ec257ea9abb9c6749dd5a5ba0b8fae1fd",
      "tree": "f5abf6b2e7301fc0daa61de46021b1c102cdd4cc",
      "parents": [
        "fad02c2de0623fc6d4ff12ca72b60ea521118681"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue May 29 15:07:08 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:28 2012 -0700"
      },
      "message": "mm: memcg: print statistics from live counters\n\nDirectly print statistics and event counters instead of going through an\nintermediate accumulation stage into a separate array, which used to\nrequire defining statistic items in more than one place.\n\n[akpm@linux-foundation.org: checkpatch fixes]\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fad02c2de0623fc6d4ff12ca72b60ea521118681",
      "tree": "c94040481a13fae1215176356606e7f322affdad",
      "parents": [
        "13114716c744afe165c2148c944ed0306658921c"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue May 29 15:07:07 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:28 2012 -0700"
      },
      "message": "mm: memcg: group swapped-out statistics counter logically\n\nThe counter of currently swapped out pages in a memcg (hierarchy) is\nsitting amidst ever-increasing event counters.  Move this item to the\nother counters that reflect current state rather than history.\n\nThis technically breaks the kernel ABI, but hopefully nobody relies on the\norder of items in memory.stat.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "13114716c744afe165c2148c944ed0306658921c",
      "tree": "3b0d3022ae3b9725bc0243414e6f74939bbdaeb1",
      "parents": [
        "78ccf5b5ab834080db25d8128e7dd33594cbf4df"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue May 29 15:07:07 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:27 2012 -0700"
      },
      "message": "mm: memcg: keep ratelimit counter separate from event counters\n\nAll events except the ratelimit counter are statistics exported to\nuserspace.  Keep this internal value out of the event count array.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "78ccf5b5ab834080db25d8128e7dd33594cbf4df",
      "tree": "999ce4d31c0b98d6bb437a9cb001ad6d938a6489",
      "parents": [
        "fada52ca0e48d227f055134e8cc32f583c5b8b53"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue May 29 15:07:06 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:27 2012 -0700"
      },
      "message": "mm: memcg: print statistics directly to seq_file\n\nBeing able to use seq_printf() allows being smarter about statistics\nname strings, which are currently listed twice, with the only difference\nbeing a \"total_\" prefix on the hierarchical version.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fada52ca0e48d227f055134e8cc32f583c5b8b53",
      "tree": "2dc0b35e8a73679222d5257cd98411d324892148",
      "parents": [
        "6104621de4ffd94d66eae59cedc70d742a92316b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue May 29 15:07:06 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:27 2012 -0700"
      },
      "message": "mm: memcg: convert numa stat to read_seq_string interface\n\nInstead of using the raw seq_file file interface, switch over to the\nread_seq_string cftype callback and let cgroup core code set up the\nseq_file.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6104621de4ffd94d66eae59cedc70d742a92316b",
      "tree": "b3e84fba03bde89409d8707029e743f238ef8d46",
      "parents": [
        "04eac7ffdea1090f81bc33bd8f4bf072b1fe5bdb"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue May 29 15:07:05 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:27 2012 -0700"
      },
      "message": "mm: memcg: remove obsolete statistics array boundary enum item\n\nMEM_CGROUP_STAT_DATA is a leftover from when item counters were living in\nthe same array as ever-increasing event counters.  It\u0027s no longer needed,\nuse MEM_CGROUP_STAT_NSTATS to iterate over the stat array.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2f3479b1478e223f142fe9cd27a2d2a4c3573c53",
      "tree": "87290215e74631106498dde89c43fa378bf9ede1",
      "parents": [
        "cc926f78420705817b807dbec0c5d3643827eba3"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue May 29 15:07:04 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:27 2012 -0700"
      },
      "message": "memcg: don\u0027t uncharge in mem_cgroup_move_account()\n\nNow, all callers pass \u0027false\u0027 for \u0027bool uncharge\u0027 so remove this argument.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nReviewed-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cc926f78420705817b807dbec0c5d3643827eba3",
      "tree": "fea47aea4b5963fbf06e77c593abeee3afb1958b",
      "parents": [
        "d01dd17f1067ca50dbb9d1d3400d33221ce339e7"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue May 29 15:07:04 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:27 2012 -0700"
      },
      "message": "memcg: move charges to root cgroup if use_hierarchy\u003d0\n\nPresently, at removal of cgroup, -\u003epre_destroy() is called and moves\ncharges to the parent cgroup.  A major reason for returning -EBUSY from\n-\u003epre_destroy() is that the \u0027moving\u0027 hits the parent\u0027s resource\nlimitation.  It happens only when use_hierarchy\u003d0.\n\nConsidering use_hierarchy\u003d0, all cgroups should be flat.  So, no one\ncannot justify moving charges to parent...parent and children are in flat\nconfiguration, not hierarchical.\n\nThis patch modifes the code to move charges to the root cgroup at\nrmdir/force_empty if use_hierarchy\u003d\u003d0.  This will much simplify rmdir()\nand reduce error in -\u003epre_destroy.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nReviewed-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d01dd17f1067ca50dbb9d1d3400d33221ce339e7",
      "tree": "07c8f7da424666c7fd81bb4a5b8288e68b87d094",
      "parents": [
        "2bb2ba9d51a8044a71a29608d2c4ef8f5b2d57a2"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue May 29 15:07:03 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:27 2012 -0700"
      },
      "message": "memcg: use res_counter_uncharge_until() in move_parent()\n\nBy using res_counter_uncharge_until(), we can avoid race and unnecessary\ncharging.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nReviewed-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c56d5c7dfeb5cc754e17fa3d423086a3c551c219",
      "tree": "4c89ad9692dbd3a2e0eaf96de0162a5d3066925e",
      "parents": [
        "074291fea8bcedeabf295360e2ddd9bbb5830b4a"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Tue May 29 15:07:00 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:26 2012 -0700"
      },
      "message": "mm/vmscan: push lruvec pointer into inactive_list_is_low()\n\nSwitch mem_cgroup_inactive_anon_is_low() to lruvec pointers,\nmem_cgroup_get_lruvec_size() is more effective than\nmem_cgroup_zone_nr_lru_pages()\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "074291fea8bcedeabf295360e2ddd9bbb5830b4a",
      "tree": "01531a2ca7e9b648a4d8cd9bc772aa484ed2190d",
      "parents": [
        "27ac81d85e5cfcc755dd5fa3f04dc883ab5d821b"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Tue May 29 15:07:00 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:26 2012 -0700"
      },
      "message": "mm/vmscan: replace zone_nr_lru_pages() with get_lruvec_size()\n\nIf memory cgroup is enabled we always use lruvecs which are embedded into\nstruct mem_cgroup_per_zone, so we can reach lru_size counters via\ncontainer_of().\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7f5e86c2ccc1480946d2c869d7f7d5278e828092",
      "tree": "704612422963868042c9d240b4a395bd7bce8469",
      "parents": [
        "9e3b2f8cd340e13353a44c9a34caef2848131ed7"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Tue May 29 15:06:58 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:26 2012 -0700"
      },
      "message": "mm: add link from struct lruvec to struct zone\n\nThis is the first stage of struct mem_cgroup_zone removal.  Further\npatches replace struct mem_cgroup_zone with a pointer to struct lruvec.\n\nIf CONFIG_CGROUP_MEM_RES_CTLR\u003dn lruvec_zone() is just container_of().\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "748dad36d645f5c4517a115d60bb3a0e8f877ac0",
      "tree": "0f3206a06c3d58b922535957083d5216467eddb9",
      "parents": [
        "a0db00fcf5da79911b7ff2db63ea7c0a5711e096"
      ],
      "author": {
        "name": "Sha Zhengju",
        "email": "handai.szj@taobao.com",
        "time": "Tue May 29 15:06:57 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:25 2012 -0700"
      },
      "message": "memcg: make threshold index in the right position\n\nIndex current_threshold may point to threshold that just equal to usage\nafter last call of __mem_cgroup_threshold.  But after registering a new\nevent, it will change (pointing to threshold just below usage).  So make\nit consistent here.\n\nFor example:\nnow:\n\tthreshold array:  3  [5]  7  9   (usage \u003d 6, [index] \u003d 5)\n\nnext turn (after calling __mem_cgroup_threshold):\n\tthreshold array:  3   5  [7]  9   (usage \u003d 7, [index] \u003d 7)\n\nafter registering a new event (threshold \u003d 10):\n\tthreshold array:  3  [5]  7  9  10 (usage \u003d 7, [index] \u003d 5)\n\nSigned-off-by: Sha Zhengju \u003chandai.szj@taobao.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a0db00fcf5da79911b7ff2db63ea7c0a5711e096",
      "tree": "1b398808dbe3e672344049820a11b69889e3791e",
      "parents": [
        "3a7951b4cf8c6be48e20523b724d9188f6c91ba7"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Tue May 29 15:06:56 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:25 2012 -0700"
      },
      "message": "memcg: remove redundant parentheses\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3a7951b4cf8c6be48e20523b724d9188f6c91ba7",
      "tree": "c87db2590663ec59da24169522d289996b7357d6",
      "parents": [
        "92ba39a7acafb4f979fddcd22545603a11c349bb"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Tue May 29 15:06:56 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:25 2012 -0700"
      },
      "message": "memcg: mark stat field of mem_cgroup struct as __percpu\n\nIt fixes a lot of sparse warnings.\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "92ba39a7acafb4f979fddcd22545603a11c349bb",
      "tree": "6feeca5992d43a4613100711bdbdb11b05dcf647",
      "parents": [
        "6bbda35ce1e854eae147d1365ac827eb6e229063"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Tue May 29 15:06:55 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:25 2012 -0700"
      },
      "message": "memcg: remove unused variable\n\nmm/memcontrol.c: In function `mc_handle_file_pte\u0027:\nmm/memcontrol.c:5206:16: warning: variable `inode\u0027 set but not used [-Wunused-but-set-variable]\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6bbda35ce1e854eae147d1365ac827eb6e229063",
      "tree": "e222ac89aaef14e96f2a06f3f54beea6161f79fb",
      "parents": [
        "bbf808ed7de68fdf626fd4f9718d88cf03ce13a9"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Tue May 29 15:06:55 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:25 2012 -0700"
      },
      "message": "memcg: mark more functions/variables as static\n\nBased on sparse output.\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bbf808ed7de68fdf626fd4f9718d88cf03ce13a9",
      "tree": "91f3dc3eb619f2b809cdd9c1239a6db0e62c97ed",
      "parents": [
        "f3fd4a61928a5edf5b033a417e761b488b43e203"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Tue May 29 15:06:54 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:25 2012 -0700"
      },
      "message": "mm/memcg: kill mem_cgroup_lru_del()\n\nThis patch kills mem_cgroup_lru_del(), we can use\nmem_cgroup_lru_del_list() instead.  On 0-order isolation we already have\nright lru list id.\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Minchan Kim \u003cminchan@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "89abfab133ef1f5902abafb744df72793213ac19",
      "tree": "29df29e2a34a0af3649417d2e430480c7e7e5fa1",
      "parents": [
        "c3c787e8c38557ccf44c670d73aebe630a2b1479"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:53 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:25 2012 -0700"
      },
      "message": "mm/memcg: move reclaim_stat into lruvec\n\nWith mem_cgroup_disabled() now explicit, it becomes clear that the\nzone_reclaim_stat structure actually belongs in lruvec, per-zone when\nmemcg is disabled but per-memcg per-zone when it\u0027s enabled.\n\nWe can delete mem_cgroup_get_reclaim_stat(), and change\nupdate_page_reclaim_stat() to update just the one set of stats, the one\nwhich get_scan_count() will actually use.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Minchan Kim \u003cminchan@kernel.org\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "86493009d3b7e51eee38575f9537b754f5b6c536",
      "tree": "2a9c53575daed7b025fee2c728e102095d364749",
      "parents": [
        "e91cbb42531626cd4fd0673ca01daf53e338d8f9"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:52 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:24 2012 -0700"
      },
      "message": "memcg swap: use mem_cgroup_uncharge_swap()\n\nThat stuff __mem_cgroup_commit_charge_swapin() does with a swap entry, it\nhas a name and even a declaration: just use mem_cgroup_uncharge_swap().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e91cbb42531626cd4fd0673ca01daf53e338d8f9",
      "tree": "a7138650c4a4914e539f3eeeb69e39d22dba4242",
      "parents": [
        "4b91355e9dc9ac1eb3d69e56de093899ff2677ef"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:51 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:24 2012 -0700"
      },
      "message": "memcg swap: mem_cgroup_move_swap_account never needs fixup\n\nThe need_fixup arg to mem_cgroup_move_swap_account() is always false,\nso just remove it.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4b91355e9dc9ac1eb3d69e56de093899ff2677ef",
      "tree": "b6d18618013eadd3b3e3144c90b16d0d5f07b3af",
      "parents": [
        "181eb39425f2b9275afcb015eaa547d11f71a02f"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue May 29 15:06:51 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:24 2012 -0700"
      },
      "message": "memcg: fix/change behavior of shared anon at moving task\n\nThis patch changes memcg\u0027s behavior at task_move().\n\nAt task_move(), the kernel scans a task\u0027s page table and move the changes\nfor mapped pages from source cgroup to target cgroup.  There has been a\nbug at handling shared anonymous pages for a long time.\n\nBefore patch:\n  - The spec says \u0027shared anonymous pages are not moved.\u0027\n  - The implementation was \u0027shared anonymoys pages may be moved\u0027.\n    If page_mapcount \u003c\u003d2, shared anonymous pages\u0027s charge were moved.\n\nAfter patch:\n  - The spec says \u0027all anonymous pages are moved\u0027.\n  - The implementation is \u0027all anonymous pages are moved\u0027.\n\nConsidering usage of memcg, this will not affect user\u0027s experience.\n\u0027shared anonymous\u0027 pages only exists between a tree of processes which\ndon\u0027t do exec().  Moving one of process without exec() seems not sane.\nFor example, libcgroup will not be affected by this change.  (Anyway, no\none noticed the implementation for a long time...)\n\nBelow is a discussion log:\n\n - current spec/implementation are complex\n - Now, shared file caches are moved\n - It adds unclear check as page_mapcount(). To do correct check,\n   we should check swap users, etc.\n - No one notice this implementation behavior. So, no one get benefit\n   from the design.\n - In general, once task is moved to a cgroup for running, it will not\n   be moved....\n - Finally, we have control knob as memory.move_charge_at_immigrate.\n\nHere is a patch to allow moving shared pages, completely. This makes\nmemcg simpler and fix current broken code.\n\nSuggested-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bde05d1ccd512696b09db9dd2e5f33ad19152605",
      "tree": "affa2c836136cac6ec0e503ce8996670d385ebbb",
      "parents": [
        "5ceb9ce6fe9462a298bb2cd5c9f1ca6cb80a0199"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:38 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:22 2012 -0700"
      },
      "message": "shmem: replace page if mapping excludes its zone\n\nThe GMA500 GPU driver uses GEM shmem objects, but with a new twist: the\nbacking RAM has to be below 4GB.  Not a problem while the boards\nsupported only 4GB: but now Intel\u0027s D2700MUD boards support 8GB, and\ntheir GMA3600 is managed by the GMA500 driver.\n\nshmem/tmpfs has never pretended to support hardware restrictions on the\nbacking memory, but it might have appeared to do so before v3.1, and\neven now it works fine until a page is swapped out then back in.  When\nread_cache_page_gfp() supplied a freshly allocated page for copy, that\ncompensated for whatever choice might have been made by earlier swapin\nreadahead; but swapoff was likely to destroy the illusion.\n\nWe\u0027d like to continue to support GMA500, so now add a new\nshmem_should_replace_page() check on the zone when about to move a page\nfrom swapcache to filecache (in swapin and swapoff cases), with\nshmem_replace_page() to allocate and substitute a suitable page (given\ngma500/gem.c\u0027s mapping_set_gfp_mask GFP_KERNEL | __GFP_DMA32).\n\nThis does involve a minor extension to mem_cgroup_replace_page_cache()\n(the page may or may not have already been charged); and I\u0027ve removed a\ncomment and call to mem_cgroup_uncharge_cache_page(), which in fact is\nalways a no-op while PageSwapCache.\n\nAlso removed optimization of an unlikely path in shmem_getpage_gfp(),\nnow that we need to check PageSwapCache more carefully (a racing caller\nmight already have made the copy).  And at one point shmem_unuse_inode()\nneeds to use the hitherto private page_swapcount(), to guard against\nracing with inode eviction.\n\nIt would make sense to extend shmem_should_replace_page(), to cover\ncpuset and NUMA mempolicy restrictions too, but set that aside for now:\nneeds a cleanup of shmem mempolicy handling, and more testing, and ought\nto handle swap faults in do_swap_page() as well as shmem.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Alan Cox \u003calan@lxorguk.ukuu.org.uk\u003e\nCc: Stephane Marchesin \u003cmarcheu@chromium.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Dave Airlie \u003cairlied@gmail.com\u003e\nCc: Daniel Vetter \u003cdaniel@ffwll.ch\u003e\nCc: Rob Clark \u003crob.clark@linaro.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c3ac9a8ade65ccbfd145fbff895ae8d8d62d09b0",
      "tree": "4df684151388ffa6407d714dd39d1fe94f72d424",
      "parents": [
        "91c63734f6908425903aed69c04035592f18d398"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue May 29 15:06:25 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:20 2012 -0700"
      },
      "message": "mm: memcg: count pte references from every member of the reclaimed hierarchy\n\nThe rmap walker checking page table references has historically ignored\nreferences from VMAs that were not part of the memcg that was being\nreclaimed during memcg hard limit reclaim.\n\nWhen transitioning global reclaim to memcg hierarchy reclaim, I missed\nthat bit and now references from outside a memcg are ignored even during\nglobal reclaim.\n\nReverting back to traditional behaviour - count all references during\nglobal reclaim and only mind references of the memcg being reclaimed\nduring limit reclaim would be one option.\n\nHowever, the more generic idea is to ignore references exactly then when\nthey are outside the hierarchy that is currently under reclaim; because\nonly then will their reclamation be of any use to help the pressure\nsituation.  It makes no sense to ignore references from a sibling memcg\nand then evict a page that will be immediately refaulted by that sibling\nwhich contributes to the same usage of the common ancestor under\nreclaim.\n\nThe solution: make the rmap walker ignore references from VMAs that are\nnot part of the hierarchy that is being reclaimed.\n\nFlat limit reclaim will stay the same, hierarchical limit reclaim will\nmind the references only to pages that the hierarchy owns.  Global\nreclaim, since it reclaims from all memcgs, will be fixed to regard all\nreferences.\n\n[akpm@linux-foundation.org: name the args in the declaration]\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReported-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nAcked-by: Konstantin Khlebnikov\u003ckhlebnikov@openvz.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "91c63734f6908425903aed69c04035592f18d398",
      "tree": "6790827ab915b17c63d5c39d8c72c47f3764f868",
      "parents": [
        "0ce72d4f7333248efbef1f3309770c7edb1b2625"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue May 29 15:06:24 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:20 2012 -0700"
      },
      "message": "kernel: cgroup: push rcu read locking from css_is_ancestor() to callsite\n\nLibrary functions should not grab locks when the callsites can do it,\neven if the lock nests like the rcu read-side lock does.\n\nPush the rcu_read_lock() from css_is_ancestor() to its single user,\nmem_cgroup_same_or_subtree() in preparation for another user that may\nalready hold the rcu read-side lock.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e709ffd6169ccd259eb5874e853303e91e94e829",
      "tree": "796b56c2507b8581492da73e354d651c9dd7076b",
      "parents": [
        "edad9d2c337d43278a9d5aeb0ed531c2e838f8a6"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Tue May 29 15:06:18 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:19 2012 -0700"
      },
      "message": "mm: remove swap token code\n\nThe swap token code no longer fits in with the current VM model.  It\ndoes not play well with cgroups or the better NUMA placement code in\ndevelopment, since we have only one swap token globally.\n\nIt also has the potential to mess with scalability of the system, by\nincreasing the number of non-reclaimable pages on the active and\ninactive anon LRU lists.\n\nLast but not least, the swap token code has been broken for a year\nwithout complaints, as reported by Konstantin Khlebnikov.  This suggests\nwe no longer have much use for it.\n\nThe days of sub-1G memory systems with heavy use of swap are over.  If\nwe ever need thrashing reducing code in the future, we will have to\nimplement something that does scale.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Bob Picco \u003cbpicco@meloft.net\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "88d6ae8dc33af12fe1c7941b1fae2767374046fd",
      "tree": "8f17415c0722b0a4d7511ac170cfb4e3802e1ad2",
      "parents": [
        "f5c101892fbd3d2f6d2729bc7eb7b3f6c31dbddd",
        "0d4dde1ac9a5af74ac76c6ab90557d1ae7b8f5d8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 22 17:40:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 22 17:40:19 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.5\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup updates from Tejun Heo:\n \"cgroup file type addition / removal is updated so that file types are\n  added and removed instead of individual files so that dynamic file\n  type addition / removal can be implemented by cgroup and used by\n  controllers.  blkio controller changes which will come through block\n  tree are dependent on this.  Other changes include res_counter cleanup\n  and disallowing kthread / PF_THREAD_BOUND threads to be attached to\n  non-root cgroups.\n\n  There\u0027s a reported bug with the file type addition / removal handling\n  which can lead to oops on cgroup umount.  The issue is being looked\n  into.  It shouldn\u0027t cause problems for most setups and isn\u0027t a\n  security concern.\"\n\nFix up trivial conflict in Documentation/feature-removal-schedule.txt\n\n* \u0027for-3.5\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: (21 commits)\n  res_counter: Account max_usage when calling res_counter_charge_nofail()\n  res_counter: Merge res_counter_charge and res_counter_charge_nofail\n  cgroups: disallow attaching kthreadd or PF_THREAD_BOUND threads\n  cgroup: remove cgroup_subsys-\u003epopulate()\n  cgroup: get rid of populate for memcg\n  cgroup: pass struct mem_cgroup instead of struct cgroup to socket memcg\n  cgroup: make css-\u003erefcnt clearing on cgroup removal optional\n  cgroup: use negative bias on css-\u003erefcnt to block css_tryget()\n  cgroup: implement cgroup_rm_cftypes()\n  cgroup: introduce struct cfent\n  cgroup: relocate __d_cgrp() and __d_cft()\n  cgroup: remove cgroup_add_file[s]()\n  cgroup: convert memcg controller to the new cftype interface\n  memcg: always create memsw files if CONFIG_CGROUP_MEM_RES_CTLR_SWAP\n  cgroup: convert all non-memcg controllers to the new cftype interface\n  cgroup: relocate cftype and cgroup_subsys definitions in controllers\n  cgroup: merge cft_release_agent cftype array into the base files array\n  cgroup: implement cgroup_add_cftypes() and friends\n  cgroup: build list of all cgroups under a given cgroupfs_root\n  cgroup: move cgroup_clear_directory() call out of cgroup_populate_dir()\n  ...\n"
    },
    {
      "commit": "62ade86ab6c7e26409229ca45503cae97bf698cf",
      "tree": "569ce54e1fce1f985cc9525712c39b2b020e1fdf",
      "parents": [
        "b1dab2f0409c478fd2d9e227c2c018524eca9603"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Fri May 18 11:28:34 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 19 10:10:27 2012 -0700"
      },
      "message": "memcg,thp: fix res_counter:96 regression\n\nOccasionally, testing memcg\u0027s move_charge_at_immigrate on rc7 shows\na flurry of hundreds of warnings at kernel/res_counter.c:96, where\nres_counter_uncharge_locked() does WARN_ON(counter-\u003eusage \u003c val).\n\nThe first trace of each flurry implicates __mem_cgroup_cancel_charge()\nof mc.precharge, and an audit of mc.precharge handling points to\nmem_cgroup_move_charge_pte_range()\u0027s THP handling in commit 12724850e806\n(\"memcg: avoid THP split in task migration\").\n\nChecking !mc.precharge is good everywhere else, when a single page is to\nbe charged; but here the \"mc.precharge -\u003d HPAGE_PMD_NR\" likely to\nfollow, is liable to result in underflow (a lot can change since the\nprecharge was estimated).\n\nSimply check against HPAGE_PMD_NR: there\u0027s probably a better\nalternative, trying precharge for more, splitting if unsuccessful; but\nthis one-liner is safer for now - no kernel/res_counter.c:96 warnings\nseen in 26 hours.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8c7577637ca31385e92769a77e2ab5b428e8b99c",
      "tree": "ecf350b4defdd9ad31a9d1eb6353b890c5951eb9",
      "parents": [
        "5e2bf0142231194d36fdc9596b36a261ed2b9fe7"
      ],
      "author": {
        "name": "Sha Zhengju",
        "email": "handai.szj@taobao.com",
        "time": "Thu May 10 13:01:45 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 10 15:06:44 2012 -0700"
      },
      "message": "memcg: free spare array to avoid memory leak\n\nWhen the last event is unregistered, there is no need to keep the spare\narray anymore.  So free it to avoid memory leak.\n\nSigned-off-by: Sha Zhengju \u003chandai.szj@taobao.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ce587e65e8c669eec61df7fb1c515720302e3cc0",
      "tree": "fcda8e91609e1a74f629c1a7b0e95c3e76cab75e",
      "parents": [
        "4e1c2b284461fd8aa8d7b295a1e911fc4390755b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Apr 24 20:22:33 2012 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 25 21:22:35 2012 -0700"
      },
      "message": "mm: memcg: move pc lookup point to commit_charge()\n\nNone of the callsites actually need the page_cgroup descriptor\nthemselves, so just pass the page and do the look up in there.\n\nWe already had two bugs (6568d4a \u0027mm: memcg: update the correct soft\nlimit tree during migration\u0027 and \u0027memcg: fix Bad page state after\nreplace_page_cache\u0027) where the passed page and pc were not referring\nto the same page frame.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9b7f43afd417a6feb80841d30ced4051c362eb5d",
      "tree": "695f97a4d028a3463c8e7edaa4c6d410a941d0bb",
      "parents": [
        "932e9f352b5d685725076f21b237f7c7d804b29c"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Apr 18 23:34:46 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 18 23:40:57 2012 -0700"
      },
      "message": "memcg: fix Bad page state after replace_page_cache\n\nMy 9ce70c0240d0 \"memcg: fix deadlock by inverting lrucare nesting\" put a\nnasty little bug into v3.3\u0027s version of mem_cgroup_replace_page_cache(),\nsometimes used for FUSE.  Replacing __mem_cgroup_commit_charge_lrucare()\nby __mem_cgroup_commit_charge(), I used the \"pc\" pointer set up earlier:\nbut it\u0027s for oldpage, and needs now to be for newpage.  Once oldpage was\nfreed, its PageCgroupUsed bit (cleared above but set again here) caused\n\"Bad page state\" messages - and perhaps worse, being missed from newpage.\n(I didn\u0027t find this by using FUSE, but in reusing the function for tmpfs.)\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: stable@vger.kernel.org [v3.3 only]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "569530fb1b40ab2d2ca147ee79898ac807ebdf90",
      "tree": "e9f4f9a04a9a8f2a94a919aff55629f8946b30f4",
      "parents": [
        "32050017cf3bf2b983571a90351328b4f66e463d"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Thu Apr 12 12:49:13 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 12 13:12:12 2012 -0700"
      },
      "message": "memcg: do not open code accesses to res_counter members\n\nWe should use the accessor res_counter_read_u64 for that.\n\nAlthough a purely cosmetic change is sometimes better delayed, to avoid\nconflicting with other people\u0027s work, we are starting to have people\ntouching this code as well, and reproducing the open code behavior\nbecause that\u0027s the standard \u003d)\n\nTime to fix it, then.\n\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d833049bd20570cbbadeb5228c579f9f3aaa4e03",
      "tree": "2995af0705ce161cba50739048e90b89ea3991e2",
      "parents": [
        "6252efcc3626bdcde1c1c2d8a83be0bc66b8cc2c"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Thu Apr 12 12:49:11 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 12 13:12:11 2012 -0700"
      },
      "message": "memcg: fix broken boolen expression\n\naction !\u003d CPU_DEAD || action !\u003d CPU_DEAD_FROZEN is always true.\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cbe128e348e5994516304f94865ff90c40c1c5ae",
      "tree": "f982d2110d3adb21a9b11f279e18096906fa98be",
      "parents": [
        "1d62e43657c63a858560c98069706c705d20505d"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Mon Apr 09 19:36:34 2012 -0300"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Apr 10 10:04:07 2012 -0700"
      },
      "message": "cgroup: get rid of populate for memcg\n\nThe last man standing justifying the need for populate() is the\nsock memcg initialization functions. Now that we are able to pass\na struct mem_cgroup instead of a struct cgroup to the socket\ninitialization, there is nothing that stops us from initializing\neverything in create().\n\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nAcked-by: Kamezawa Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCC: Li Zefan \u003clizefan@huawei.com\u003e\nCC: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCC: Michal Hocko \u003cmhocko@suse.cz\u003e\n"
    },
    {
      "commit": "1d62e43657c63a858560c98069706c705d20505d",
      "tree": "8b55403e0cf1efaab0c0fd7a2e53751dd21f1ebd",
      "parents": [
        "48ddbe194623ae089cc0576e60363f2d2e85662a"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Mon Apr 09 19:36:33 2012 -0300"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Apr 10 10:04:07 2012 -0700"
      },
      "message": "cgroup: pass struct mem_cgroup instead of struct cgroup to socket memcg\n\nThe only reason cgroup was used, was to be consistent with the populate()\ninterface. Now that we\u0027re getting rid of it, not only we no longer need\nit, but we also *can\u0027t* call it this way.\n\nSince we will no longer rely on populate(), this will be called from\ncreate(). During create, the association between struct mem_cgroup\nand struct cgroup does not yet exist, since cgroup internals hasn\u0027t\nyet initialized its bookkeeping. This means we would not be able\nto draw the memcg pointer from the cgroup pointer in these\nfunctions, which is highly undesirable.\n\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nAcked-by: Kamezawa Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCC: Li Zefan \u003clizefan@huawei.com\u003e\nCC: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCC: Michal Hocko \u003cmhocko@suse.cz\u003e\n"
    },
    {
      "commit": "48ddbe194623ae089cc0576e60363f2d2e85662a",
      "tree": "bf9f9fc29e28b6440c64727f5e0a57a9ccd8ec5d",
      "parents": [
        "28b4c27b8e6bb6d7ff2875281a8484f8898a87ef"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:56 2012 -0700"
      },
      "message": "cgroup: make css-\u003erefcnt clearing on cgroup removal optional\n\nCurrently, cgroup removal tries to drain all css references.  If there\nare active css references, the removal logic waits and retries\n-\u003epre_detroy() until either all refs drop to zero or removal is\ncancelled.\n\nThis semantics is unusual and adds non-trivial complexity to cgroup\ncore and IMHO is fundamentally misguided in that it couples internal\nimplementation details (references to internal data structure) with\nexternally visible operation (rmdir).  To userland, this is a behavior\npeculiarity which is unnecessary and difficult to expect (css refs is\notherwise invisible from userland), and, to policy implementations,\nthis is an unnecessary restriction (e.g. blkcg wants to hold css refs\nfor caching purposes but can\u0027t as that becomes visible as rmdir hang).\n\nUnfortunately, memcg currently depends on -\u003epre_destroy() retrials and\ncgroup removal vetoing and can\u0027t be immmediately switched to the new\nbehavior.  This patch introduces the new behavior of not waiting for\ncss refs to drain and maintains the old behavior for subsystems which\nhave __DEPRECATED_clear_css_refs set.\n\nOnce, memcg is updated, we can drop the code paths for the old\nbehavior as proposed in the following patch.  Note that the following\npatch is incorrect in that dput work item is in cgroup and may lose\nsome of dputs when multiples css\u0027s are released back-to-back, and\n__css_put() triggers check_for_release() when refcnt reaches 0 instead\nof 1; however, it shows what part can be removed.\n\n  http://thread.gmane.org/gmane.linux.kernel.containers/22559/focus\u003d75251\n\nNote that, in not-too-distant future, cgroup core will start emitting\nwarning messages for subsys which require the old behavior, so please\nget moving.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\n"
    },
    {
      "commit": "6bc103498f5fe512928496fc7802d639cc2d1d20",
      "tree": "15a9628ff89b48889ab7cf81822d689e0173ca2b",
      "parents": [
        "af36f906c0f4c2ffa0482ecdf856a33dc88ae8c5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "cgroup: convert memcg controller to the new cftype interface\n\nConvert memcg to use the new cftype based interface.  kmem support\nabuses -\u003epopulate() for mem_cgroup_sockets_init() so it can\u0027t be\nremoved at the moment.\n\ntcp_memcontrol is updated so that tcp_files[] is registered via a\n__initcall.  This change also allows removing the forward declaration\nof tcp_files[].  Removed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\n"
    },
    {
      "commit": "af36f906c0f4c2ffa0482ecdf856a33dc88ae8c5",
      "tree": "bbeb3d558e52dc064c74f028907b5b525f88cd14",
      "parents": [
        "4baf6e33251b37f111e21289f8ee71fe4cce236e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sun Apr 01 12:09:55 2012 -0700"
      },
      "message": "memcg: always create memsw files if CONFIG_CGROUP_MEM_RES_CTLR_SWAP\n\nInstead of conditioning creation of memsw files on do_swap_account,\nalways create the files if compiled-in and fail read/write attempts\nwith -EOPNOTSUPP if !do_swap_account.\n\nThis is suggested by KAMEZAWA to simplify memcg file creation so that\nit can use cgroup-\u003esubsys_cftypes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "45f83cefe3a5f0476ac3f96382ebfdc3fe4caab2",
      "tree": "b2f7d3c02923d89db5a551c6a7923121db9610c4",
      "parents": [
        "623e3db9f9b7d6e7b2a99180f9cf0825c936ab7a"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Wed Mar 28 14:42:40 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 17:14:35 2012 -0700"
      },
      "message": "mm: thp: fix up pmd_trans_unstable() locations\n\npmd_trans_unstable() should be called before pmd_offset_map() in the\nlocations where the mmap_sem is held for reading.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Ulrich Obergfell \u003cuobergfe@redhat.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Mark Salter \u003cmsalter@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "12724850e8064f64b6223d26d78c0597c742c65a",
      "tree": "f0b91eeae069fe92906db7ad9d0d8a8003f05db4",
      "parents": [
        "d8c37c480678ebe09bc570f33e085e28049db035"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Mar 21 16:34:28 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "memcg: avoid THP split in task migration\n\nCurrently we can\u0027t do task migration among memory cgroups without THP\nsplit, which means processes heavily using THP experience large overhead\nin task migration.  This patch introduces the code for moving charge of\nTHP and makes THP more valuable.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nAcked-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8d32ff84401f1addb961c7af2c8d9baceb0ab9ba",
      "tree": "bf62513b239dce072f0105c0b06ed694634a77d4",
      "parents": [
        "a488428871265979bcf2c46298a04c1d5826e6cb"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Mar 21 16:34:27 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "memcg: clean up existing move charge code\n\n- Replace lengthy function name is_target_pte_for_mc() with a shorter\n  one in order to avoid ugly line breaks.\n\n- explicitly use MC_TARGET_* instead of simply using integers.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a488428871265979bcf2c46298a04c1d5826e6cb",
      "tree": "87126bade942bcff8f36e538c8f45605fd080fd0",
      "parents": [
        "45f3e385b7a639c633d7a4b1e863c2d52b918258"
      ],
      "author": {
        "name": "Jeff Liu",
        "email": "jeff.liu@oracle.com",
        "time": "Wed Mar 21 16:34:27 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "mm/memcontrol.c: remove unnecessary \u0027break\u0027 in mem_cgroup_read()\n\nSigned-off-by: Jie Liu \u003cjeff.liu@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "45f3e385b7a639c633d7a4b1e863c2d52b918258",
      "tree": "8f0c068aff36cc4f915899ed68d2e8686d75b069",
      "parents": [
        "13fd1dd9db345f6b2babd1e80a1c929092eb4896"
      ],
      "author": {
        "name": "Anton Vorontsov",
        "email": "anton.vorontsov@linaro.org",
        "time": "Wed Mar 21 16:34:26 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "mm/memcontrol.c: remove redundant BUG_ON() in mem_cgroup_usage_unregister_event()\n\nIn the following code:\n\n\tif (type \u003d\u003d _MEM)\n\t\tthresholds \u003d \u0026memcg-\u003ethresholds;\n\telse if (type \u003d\u003d _MEMSWAP)\n\t\tthresholds \u003d \u0026memcg-\u003ememsw_thresholds;\n\telse\n\t\tBUG();\n\n\tBUG_ON(!thresholds);\n\nThe BUG_ON() seems redundant.\n\nSigned-off-by: Anton Vorontsov \u003canton.vorontsov@linaro.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "13fd1dd9db345f6b2babd1e80a1c929092eb4896",
      "tree": "03d5fd77f06780bd5c164b82c6ba04b56a259b06",
      "parents": [
        "4331f7d339ee0b54603344b9d13662a9c022540c"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Wed Mar 21 16:34:26 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "mm/memcontrol.c: s/stealed/stolen/\n\nA grammatical fix.\n\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4331f7d339ee0b54603344b9d13662a9c022540c",
      "tree": "ea67ad19a4dff0f8bf7d335bb7ab148ecfb4d329",
      "parents": [
        "2ff76f1193f8481f7e6c29304eea4006e8e51569"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:26 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "memcg: fix performance of mem_cgroup_begin_update_page_stat()\n\nmem_cgroup_begin_update_page_stat() should be very fast because it\u0027s\ncalled very frequently.  Now, it needs to look up page_cgroup and its\nmemcg....this is slow.\n\nThis patch adds a global variable to check \"any memcg is moving or not\".\nWith this, the caller doesn\u0027t need to visit page_cgroup and memcg.\n\nHere is a test result.  A test program makes page faults onto a file,\nMAP_SHARED and makes each page\u0027s page_mapcount(page) \u003e 1, and free the\nrange by madvise() and page fault again.  This program causes 26214400\ntimes of page fault onto a file(size was 1G.) and shows shows the cost of\nmem_cgroup_begin_update_page_stat().\n\nBefore this patch for mem_cgroup_begin_update_page_stat()\n\n    [kamezawa@bluextal test]$ time ./mmap 1G\n\n    real    0m21.765s\n    user    0m5.999s\n    sys     0m15.434s\n\n    27.46%     mmap  mmap               [.] reader\n    21.15%     mmap  [kernel.kallsyms]  [k] page_fault\n     9.17%     mmap  [kernel.kallsyms]  [k] filemap_fault\n     2.96%     mmap  [kernel.kallsyms]  [k] __do_fault\n     2.83%     mmap  [kernel.kallsyms]  [k] __mem_cgroup_begin_update_page_stat\n\nAfter this patch\n\n    [root@bluextal test]# time ./mmap 1G\n\n    real    0m21.373s\n    user    0m6.113s\n    sys     0m15.016s\n\nIn usual path, calls to __mem_cgroup_begin_update_page_stat() goes away.\n\nNote: we may be able to remove this optimization in future if\n      we can get pointer to memcg directly from struct page.\n\n[akpm@linux-foundation.org: don\u0027t return a void]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2ff76f1193f8481f7e6c29304eea4006e8e51569",
      "tree": "a263678dc298e29a0c54bb2e6f98bb1d5ee19751",
      "parents": [
        "89c06bd52fb9ffceddf84f7309d2e8c9f1666216"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:25 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: remove PCG_FILE_MAPPED\n\nWith the new lock scheme for updating memcg\u0027s page stat, we don\u0027t need a\nflag PCG_FILE_MAPPED which was duplicated information of page_mapped().\n\n[hughd@google.com: cosmetic fix]\n[hughd@google.com: add comment to MEM_CGROUP_CHARGE_TYPE_MAPPED case in __mem_cgroup_uncharge_common()]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "89c06bd52fb9ffceddf84f7309d2e8c9f1666216",
      "tree": "43ec3d97a89988bc143bed5796bcd7bef64212dc",
      "parents": [
        "312734c04e2fecc58429aec98194e4ff12d8f7d6"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:25 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: use new logic for page stat accounting\n\nNow, page-stat-per-memcg is recorded into per page_cgroup flag by\nduplicating page\u0027s status into the flag.  The reason is that memcg has a\nfeature to move a page from a group to another group and we have race\nbetween \"move\" and \"page stat accounting\",\n\nUnder current logic, assume CPU-A and CPU-B.  CPU-A does \"move\" and CPU-B\ndoes \"page stat accounting\".\n\nWhen CPU-A goes 1st,\n\n            CPU-A                           CPU-B\n                                    update \"struct page\" info.\n    move_lock_mem_cgroup(memcg)\n    see pc-\u003eflags\n    copy page stat to new group\n    overwrite pc-\u003emem_cgroup.\n    move_unlock_mem_cgroup(memcg)\n                                    move_lock_mem_cgroup(mem)\n                                    set pc-\u003eflags\n                                    update page stat accounting\n                                    move_unlock_mem_cgroup(mem)\n\nstat accounting is guarded by move_lock_mem_cgroup() and \"move\" logic\n(CPU-A) doesn\u0027t see changes in \"struct page\" information.\n\nBut it\u0027s costly to have the same information both in \u0027struct page\u0027 and\n\u0027struct page_cgroup\u0027.  And, there is a potential problem.\n\nFor example, assume we have PG_dirty accounting in memcg.\nPG_..is a flag for struct page.\nPCG_ is a flag for struct page_cgroup.\n(This is just an example. The same problem can be found in any\n kind of page stat accounting.)\n\n\t  CPU-A                               CPU-B\n      TestSet PG_dirty\n      (delay)                        TestClear PG_dirty\n                                     if (TestClear(PCG_dirty))\n                                          memcg-\u003enr_dirty--\n      if (TestSet(PCG_dirty))\n          memcg-\u003enr_dirty++\n\nHere, memcg-\u003enr_dirty \u003d +1, this is wrong.  This race was reported by Greg\nThelen \u003cgthelen@google.com\u003e.  Now, only FILE_MAPPED is supported but\nfortunately, it\u0027s serialized by page table lock and this is not real bug,\n_now_,\n\nIf this potential problem is caused by having duplicated information in\nstruct page and struct page_cgroup, we may be able to fix this by using\noriginal \u0027struct page\u0027 information.  But we\u0027ll have a problem in \"move\naccount\"\n\nAssume we use only PG_dirty.\n\n         CPU-A                   CPU-B\n    TestSet PG_dirty\n    (delay)                    move_lock_mem_cgroup()\n                               if (PageDirty(page))\n                                      new_memcg-\u003enr_dirty++\n                               pc-\u003emem_cgroup \u003d new_memcg;\n                               move_unlock_mem_cgroup()\n    move_lock_mem_cgroup()\n    memcg \u003d pc-\u003emem_cgroup\n    new_memcg-\u003enr_dirty++\n\naccounting information may be double-counted.  This was original reason to\nhave PCG_xxx flags but it seems PCG_xxx has another problem.\n\nI think we need a bigger lock as\n\n     move_lock_mem_cgroup(page)\n     TestSetPageDirty(page)\n     update page stats (without any checks)\n     move_unlock_mem_cgroup(page)\n\nThis fixes both of problems and we don\u0027t have to duplicate page flag into\npage_cgroup.  Please note: move_lock_mem_cgroup() is held only when there\nare possibility of \"account move\" under the system.  So, in most path,\nstatus update will go without atomic locks.\n\nThis patch introduces mem_cgroup_begin_update_page_stat() and\nmem_cgroup_end_update_page_stat() both should be called at modifying\n\u0027struct page\u0027 information if memcg takes care of it.  as\n\n     mem_cgroup_begin_update_page_stat()\n     modify page information\n     mem_cgroup_update_page_stat()\n     \u003d\u003e never check any \u0027struct page\u0027 info, just update counters.\n     mem_cgroup_end_update_page_stat().\n\nThis patch is slow because we need to call begin_update_page_stat()/\nend_update_page_stat() regardless of accounted will be changed or not.  A\nfollowing patch adds an easy optimization and reduces the cost.\n\n[akpm@linux-foundation.org: s/lock/locked/]\n[hughd@google.com: fix deadlock by avoiding stat lock when anon]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "312734c04e2fecc58429aec98194e4ff12d8f7d6",
      "tree": "c1195cd46733b6a3909c11b2b5abcdee4412b99b",
      "parents": [
        "619d094b5872a5af153f1af77a8b7f7326faf0d0"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:24 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: remove PCG_MOVE_LOCK flag from page_cgroup\n\nPCG_MOVE_LOCK is used for bit spinlock to avoid race between overwriting\npc-\u003emem_cgroup and page statistics accounting per memcg.  This lock helps\nto avoid the race but the race is very rare because moving tasks between\ncgroup is not a usual job.  So, it seems using 1bit per page is too\ncostly.\n\nThis patch changes this lock as per-memcg spinlock and removes\nPCG_MOVE_LOCK.\n\nIf smaller lock is required, we\u0027ll be able to add some hashes but I\u0027d like\nto start from this.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "619d094b5872a5af153f1af77a8b7f7326faf0d0",
      "tree": "4de9ff8640d8cee092800cd722e621ea2db63640",
      "parents": [
        "9e3357907c84517d9e07bc0b19265807f0264b43"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:23 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: simplify move_account() check\n\nIn memcg, for avoiding take-lock-irq-off at accessing page_cgroup, a\nlogic, flag + rcu_read_lock(), is used.  This works as following\n\n     CPU-A                     CPU-B\n                             rcu_read_lock()\n    set flag\n                             if(flag is set)\n                                   take heavy lock\n                             do job.\n    synchronize_rcu()        rcu_read_unlock()\n    take heavy lock.\n\nIn recent discussion, it\u0027s argued that using per-cpu value for this flag\njust complicates the code because \u0027set flag\u0027 is very rare.\n\nThis patch changes \u0027flag\u0027 implementation from percpu to atomic_t.  This\nwill be much simpler.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@us.ibm.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9e3357907c84517d9e07bc0b19265807f0264b43",
      "tree": "3ce1602eefd0c1f006c23170da16545478dc5404",
      "parents": [
        "a710920caedfcf56543136bfea300a6c593f9838"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:23 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: remove EXPORT_SYMBOL(mem_cgroup_update_page_stat)\n\nAs described in the log, I guess EXPORT was for preparing dirty\naccounting.  But _now_, we don\u0027t need to export this.  Remove this for\nnow.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b24028572fb69e9dd6de8c359eba2b2c66baa889",
      "tree": "563594eba40e5fd0b61c36c09705f128a8dfbe40",
      "parents": [
        "ca464d69b19120a826aa2534de2511a6f542edf5"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:22 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: remove PCG_CACHE page_cgroup flag\n\nWe record \u0027the page is cache\u0027 with the PCG_CACHE bit in page_cgroup.\nHere, \"CACHE\" means anonymous user pages (and SwapCache).  This doesn\u0027t\ninclude shmem.\n\nConsidering callers, at charge/uncharge, the caller should know what the\npage is and we don\u0027t need to record it by using one bit per page.\n\nThis patch removes PCG_CACHE bit and make callers of\nmem_cgroup_charge_statistics() to specify what the page is.\n\nAbout page migration: Mapping of the used page is not touched during migra\ntion (see page_remove_rmap) so we can rely on it and push the correct\ncharge type down to __mem_cgroup_uncharge_common from end_migration for\nunused page.  The force flag was misleading was abused for skipping the\nneedless page_mapped() / PageCgroupMigration() check, as we know the\nunused page is no longer mapped and cleared the migration flag just a few\nlines up.  But doing the checks is no biggie and it\u0027s not worth adding\nanother flag just to skip them.\n\n[akpm@linux-foundation.org: checkpatch fixes]\n[hughd@google.com: fix PageAnon uncharging]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0e79dedde951e981612ed4e6d74873d61d2a113b",
      "tree": "eb759b4516068a39bc30a2e1758f0743a9c68762",
      "parents": [
        "1f2b71f41ee81735c25ef326da9a0610d640abc2"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:20 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: remove unnecessary thp check in page stat accounting\n\nCommit e94c8a9cbce1 (\"memcg: make mem_cgroup_split_huge_fixup() more\nefficient\") removed move_lock_page_cgroup().  So we do not have to check\nPageTransHuge in mem_cgroup_update_page_stat() and fallback into the\nlocked accounting because both move_account() and thp split are done\nwith compound_lock so they cannot race.\n\nThe race between update vs.  move is protected by mem_cgroup_stealed.\n\nPageTransHuge pages shouldn\u0027t appear in this code path currently because\nwe are tracking only file pages at the moment but later we are planning\nto track also other pages (e.g.  mlocked ones).\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Acked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Ying Han\u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1f2b71f41ee81735c25ef326da9a0610d640abc2",
      "tree": "07d2c696698da7bf6446b11158e0291c73bbae6b",
      "parents": [
        "f156ab9333c7810f8c4b1a0413142f52534b2df1"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 21 16:34:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "memcg: remove redundant returns\n\nRemove redundant returns from ends of functions, and one blank line.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f156ab9333c7810f8c4b1a0413142f52534b2df1",
      "tree": "c456db15734c575223be69c57328e140cc4b489f",
      "parents": [
        "1eb4927251a4e5ab152e64afb29453547365fde8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 21 16:34:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "memcg: enum lru_list lru\n\nMostly we use \"enum lru_list lru\": change those few \"l\"s to \"lru\"s.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1eb4927251a4e5ab152e64afb29453547365fde8",
      "tree": "e2b51066c91c8a704251dfdfab6b94471206a00f",
      "parents": [
        "d79154bb5223edad407db61f59b9b15b0080ed80"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 21 16:34:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "memcg: lru_size instead of MEM_CGROUP_ZSTAT\n\nI never understood why we need a MEM_CGROUP_ZSTAT(mz, idx) macro to\nobscure the LRU counts.  For easier searching? So call it lru_size\nrather than bare count (lru_length sounds better, but would be wrong,\nsince each huge page raises lru_size hugely).\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d79154bb5223edad407db61f59b9b15b0080ed80",
      "tree": "28c7c706c5a78763fb75f9ff6e6d2b3a4d7fa82d",
      "parents": [
        "31a79235fc75b506e282e43723107a40f3bc5c07"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 21 16:34:18 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "memcg: replace mem and mem_cont stragglers\n\nReplace mem and mem_cont stragglers in memcontrol.c by memcg.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e845e199362cc5712ba0e7eedc14eed70e144258",
      "tree": "3968125d82e512c3aee44ed96694fdd58b863506",
      "parents": [
        "c7cfa37b7324a190fc36ff116d79d0f899e8d273"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Mar 21 16:34:10 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:59 2012 -0700"
      },
      "message": "mm, memcg: pass charge order to oom killer\n\nThe oom killer typically displays the allocation order at the time of oom\nas a part of its diangostic messages (for global, cpuset, and mempolicy\nooms).\n\nThe memory controller may also pass the charge order to the oom killer so\nit can emit the same information.  This is useful in determining how large\nthe memory allocation is that triggered the oom killer.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1a5a9906d4e8d1976b701f889d8f35d54b928f25",
      "tree": "e51912e725f224663a738045a4d0528d08da4572",
      "parents": [
        "31f6765266417c0d99f0e922fe82848a7c9c2ae9"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Wed Mar 21 16:33:42 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:54 2012 -0700"
      },
      "message": "mm: thp: fix pmd_bad() triggering in code paths holding mmap_sem read mode\n\nIn some cases it may happen that pmd_none_or_clear_bad() is called with\nthe mmap_sem hold in read mode.  In those cases the huge page faults can\nallocate hugepmds under pmd_none_or_clear_bad() and that can trigger a\nfalse positive from pmd_bad() that will not like to see a pmd\nmaterializing as trans huge.\n\nIt\u0027s not khugepaged causing the problem, khugepaged holds the mmap_sem\nin write mode (and all those sites must hold the mmap_sem in read mode\nto prevent pagetables to go away from under them, during code review it\nseems vm86 mode on 32bit kernels requires that too unless it\u0027s\nrestricted to 1 thread per process or UP builds).  The race is only with\nthe huge pagefaults that can convert a pmd_none() into a\npmd_trans_huge().\n\nEffectively all these pmd_none_or_clear_bad() sites running with\nmmap_sem in read mode are somewhat speculative with the page faults, and\nthe result is always undefined when they run simultaneously.  This is\nprobably why it wasn\u0027t common to run into this.  For example if the\nmadvise(MADV_DONTNEED) runs zap_page_range() shortly before the page\nfault, the hugepage will not be zapped, if the page fault runs first it\nwill be zapped.\n\nAltering pmd_bad() not to error out if it finds hugepmds won\u0027t be enough\nto fix this, because zap_pmd_range would then proceed to call\nzap_pte_range (which would be incorrect if the pmd become a\npmd_trans_huge()).\n\nThe simplest way to fix this is to read the pmd in the local stack\n(regardless of what we read, no need of actual CPU barriers, only\ncompiler barrier needed), and be sure it is not changing under the code\nthat computes its value.  Even if the real pmd is changing under the\nvalue we hold on the stack, we don\u0027t care.  If we actually end up in\nzap_pte_range it means the pmd was not none already and it was not huge,\nand it can\u0027t become huge from under us (khugepaged locking explained\nabove).\n\nAll we need is to enforce that there is no way anymore that in a code\npath like below, pmd_trans_huge can be false, but pmd_none_or_clear_bad\ncan run into a hugepmd.  The overhead of a barrier() is just a compiler\ntweak and should not be measurable (I only added it for THP builds).  I\ndon\u0027t exclude different compiler versions may have prevented the race\ntoo by caching the value of *pmd on the stack (that hasn\u0027t been\nverified, but it wouldn\u0027t be impossible considering\npmd_none_or_clear_bad, pmd_bad, pmd_trans_huge, pmd_none are all inlines\nand there\u0027s no external function called in between pmd_trans_huge and\npmd_none_or_clear_bad).\n\n\t\tif (pmd_trans_huge(*pmd)) {\n\t\t\tif (next-addr !\u003d HPAGE_PMD_SIZE) {\n\t\t\t\tVM_BUG_ON(!rwsem_is_locked(\u0026tlb-\u003emm-\u003emmap_sem));\n\t\t\t\tsplit_huge_page_pmd(vma-\u003evm_mm, pmd);\n\t\t\t} else if (zap_huge_pmd(tlb, vma, pmd, addr))\n\t\t\t\tcontinue;\n\t\t\t/* fall through */\n\t\t}\n\t\tif (pmd_none_or_clear_bad(pmd))\n\nBecause this race condition could be exercised without special\nprivileges this was reported in CVE-2012-1179.\n\nThe race was identified and fully explained by Ulrich who debugged it.\nI\u0027m quoting his accurate explanation below, for reference.\n\n\u003d\u003d\u003d\u003d\u003d\u003d start quote \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n      mapcount 0 page_mapcount 1\n      kernel BUG at mm/huge_memory.c:1384!\n\n    At some point prior to the panic, a \"bad pmd ...\" message similar to the\n    following is logged on the console:\n\n      mm/memory.c:145: bad pmd ffff8800376e1f98(80000000314000e7).\n\n    The \"bad pmd ...\" message is logged by pmd_clear_bad() before it clears\n    the page\u0027s PMD table entry.\n\n        143 void pmd_clear_bad(pmd_t *pmd)\n        144 {\n    -\u003e  145         pmd_ERROR(*pmd);\n        146         pmd_clear(pmd);\n        147 }\n\n    After the PMD table entry has been cleared, there is an inconsistency\n    between the actual number of PMD table entries that are mapping the page\n    and the page\u0027s map count (_mapcount field in struct page). When the page\n    is subsequently reclaimed, __split_huge_page() detects this inconsistency.\n\n       1381         if (mapcount !\u003d page_mapcount(page))\n       1382                 printk(KERN_ERR \"mapcount %d page_mapcount %d\\n\",\n       1383                        mapcount, page_mapcount(page));\n    -\u003e 1384         BUG_ON(mapcount !\u003d page_mapcount(page));\n\n    The root cause of the problem is a race of two threads in a multithreaded\n    process. Thread B incurs a page fault on a virtual address that has never\n    been accessed (PMD entry is zero) while Thread A is executing an madvise()\n    system call on a virtual address within the same 2 MB (huge page) range.\n\n               virtual address space\n              .---------------------.\n              |                     |\n              |                     |\n            .-|---------------------|\n            | |                     |\n            | |                     |\u003c-- B(fault)\n            | |                     |\n      2 MB  | |/////////////////////|-.\n      huge \u003c  |/////////////////////|  \u003e A(range)\n      page  | |/////////////////////|-\u0027\n            | |                     |\n            | |                     |\n            \u0027-|---------------------|\n              |                     |\n              |                     |\n              \u0027---------------------\u0027\n\n    - Thread A is executing an madvise(..., MADV_DONTNEED) system call\n      on the virtual address range \"A(range)\" shown in the picture.\n\n    sys_madvise\n      // Acquire the semaphore in shared mode.\n      down_read(\u0026current-\u003emm-\u003emmap_sem)\n      ...\n      madvise_vma\n        switch (behavior)\n        case MADV_DONTNEED:\n             madvise_dontneed\n               zap_page_range\n                 unmap_vmas\n                   unmap_page_range\n                     zap_pud_range\n                       zap_pmd_range\n                         //\n                         // Assume that this huge page has never been accessed.\n                         // I.e. content of the PMD entry is zero (not mapped).\n                         //\n                         if (pmd_trans_huge(*pmd)) {\n                             // We don\u0027t get here due to the above assumption.\n                         }\n                         //\n                         // Assume that Thread B incurred a page fault and\n             .---------\u003e // sneaks in here as shown below.\n             |           //\n             |           if (pmd_none_or_clear_bad(pmd))\n             |               {\n             |                 if (unlikely(pmd_bad(*pmd)))\n             |                     pmd_clear_bad\n             |                     {\n             |                       pmd_ERROR\n             |                         // Log \"bad pmd ...\" message here.\n             |                       pmd_clear\n             |                         // Clear the page\u0027s PMD entry.\n             |                         // Thread B incremented the map count\n             |                         // in page_add_new_anon_rmap(), but\n             |                         // now the page is no longer mapped\n             |                         // by a PMD entry (-\u003e inconsistency).\n             |                     }\n             |               }\n             |\n             v\n    - Thread B is handling a page fault on virtual address \"B(fault)\" shown\n      in the picture.\n\n    ...\n    do_page_fault\n      __do_page_fault\n        // Acquire the semaphore in shared mode.\n        down_read_trylock(\u0026mm-\u003emmap_sem)\n        ...\n        handle_mm_fault\n          if (pmd_none(*pmd) \u0026\u0026 transparent_hugepage_enabled(vma))\n              // We get here due to the above assumption (PMD entry is zero).\n              do_huge_pmd_anonymous_page\n                alloc_hugepage_vma\n                  // Allocate a new transparent huge page here.\n                ...\n                __do_huge_pmd_anonymous_page\n                  ...\n                  spin_lock(\u0026mm-\u003epage_table_lock)\n                  ...\n                  page_add_new_anon_rmap\n                    // Here we increment the page\u0027s map count (starts at -1).\n                    atomic_set(\u0026page-\u003e_mapcount, 0)\n                  set_pmd_at\n                    // Here we set the page\u0027s PMD entry which will be cleared\n                    // when Thread A calls pmd_clear_bad().\n                  ...\n                  spin_unlock(\u0026mm-\u003epage_table_lock)\n\n    The mmap_sem does not prevent the race because both threads are acquiring\n    it in shared mode (down_read).  Thread B holds the page_table_lock while\n    the page\u0027s map count and PMD table entry are updated.  However, Thread A\n    does not synchronize on that lock.\n\n\u003d\u003d\u003d\u003d\u003d\u003d end quote \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n[akpm@linux-foundation.org: checkpatch fixes]\nReported-by: Ulrich Obergfell \u003cuobergfe@redhat.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nAcked-by: Larry Woodman \u003clwoodman@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\t\t[2.6.38+]\nCc: Mark Salter \u003cmsalter@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0d9cabdccedb79ee5f27b77ff51f29a9e7d23275",
      "tree": "8bfb64c3672d058eb90aec3c3a9c4f61cef9097c",
      "parents": [
        "701085b219016d38f105b031381b9cee6200253a",
        "3ce3230a0cff484e5130153f244d4fb8a56b3a8b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 18:11:21 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 18:11:21 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup changes from Tejun Heo:\n \"Out of the 8 commits, one fixes a long-standing locking issue around\n  tasklist walking and others are cleanups.\"\n\n* \u0027for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cgroup: Walk task list under tasklist_lock in cgroup_enable_task_cg_list\n  cgroup: Remove wrong comment on cgroup_enable_task_cg_list()\n  cgroup: remove cgroup_subsys argument from callbacks\n  cgroup: remove extra calls to find_existing_css_set\n  cgroup: replace tasklist_lock with rcu_read_lock\n  cgroup: simplify double-check locking in cgroup_attach_proc\n  cgroup: move struct cgroup_pidlist out from the header file\n  cgroup: remove cgroup_attach_task_current_cg()\n"
    },
    {
      "commit": "59927fb984de1703c67bc640c3e522d8b5276c73",
      "tree": "bbb2f9d93cebcd04e97f0f0b7d26c12e56ce831e",
      "parents": [
        "f1cbd03f5eabb75ea8ace23b47d2209f10871c16"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Mar 15 15:17:07 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 15 17:03:03 2012 -0700"
      },
      "message": "memcg: free mem_cgroup by RCU to fix oops\n\nAfter fixing the GPF in mem_cgroup_lru_del_list(), three times one\nmachine running a similar load (moving and removing memcgs while\nswapping) has oopsed in mem_cgroup_zone_nr_lru_pages(), when retrieving\nmemcg zone numbers for get_scan_count() for shrink_mem_cgroup_zone():\nthis is where a struct mem_cgroup is first accessed after being chosen\nby mem_cgroup_iter().\n\nJust what protects a struct mem_cgroup from being freed, in between\nmem_cgroup_iter()\u0027s css_get_next() and its css_tryget()? css_tryget()\nfails once css-\u003erefcnt is zero with CSS_REMOVED set in flags, yes: but\nwhat if that memory is freed and reused for something else, which sets\n\"refcnt\" non-zero? Hmm, and scope for an indefinite freeze if refcnt is\nleft at zero but flags are cleared.\n\nIt\u0027s tempting to move the css_tryget() into css_get_next(), to make it\nreally \"get\" the css, but I don\u0027t think that actually solves anything:\nthe same difficulty in moving from css_id found to stable css remains.\n\nBut we already have rcu_read_lock() around the two, so it\u0027s easily fixed\nif __mem_cgroup_free() just uses kfree_rcu() to free mem_cgroup.\n\nHowever, a big struct mem_cgroup is allocated with vzalloc() instead of\nkzalloc(), and we\u0027re not allowed to vfree() at interrupt time: there\ndoesn\u0027t appear to be a general vfree_rcu() to help with this, so roll\nour own using schedule_work().  The compiler decently removes\nvfree_work() and vfree_rcu() when the config doesn\u0027t need them.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "be22aece684f5a700e6247b9861c3759d5798a3c",
      "tree": "07d423a2cdb16140e8704a69788f8b9bd5ddbe13",
      "parents": [
        "a7f4255f906f60f72e00aad2fb000939449ff32e"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Fri Mar 09 13:37:32 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 09 15:32:20 2012 -0800"
      },
      "message": "memcg: revert fix to mapcount check for this release\n\nRespectfully revert commit e6ca7b89dc76 \"memcg: fix mapcount check\nin move charge code for anonymous page\" for the 3.3 release, so that\nit behaves exactly like releases 2.6.35 through 3.2 in this respect.\n\nHoriguchi-san\u0027s commit is correct in itself, 1 makes much more sense\nthan 2 in that check; but it does not go far enough - swapcount\nshould be considered too - if we really want such a check at all.\n\nWe appear to have reached agreement now, and expect that 3.4 will\nremove the mapcount check, but had better not make 3.3 different.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e6ca7b89dc76abf77c80887fed54e0a60c87c0a8",
      "tree": "edfd8cce78c61cbf6cd9e738662ad25baa2b2bc0",
      "parents": [
        "1c641e84719429bbfe62a95ed3545ee7fe24408f"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Mon Mar 05 14:59:20 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 15:49:43 2012 -0800"
      },
      "message": "memcg: fix mapcount check in move charge code for anonymous page\n\nCurrently the charge on shared anonyous pages is supposed not to moved in\ntask migration.  To implement this, we need to check that mapcount \u003e 1,\ninstread of \u003e 2.  So this patch fixes it.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7512102cf64d36e3c7444480273623c7aab3563f",
      "tree": "4c5b589455ed0d343384d7eeaedfab5057648a0d",
      "parents": [
        "9f78ff005a6b6313728247113948450b2adddde8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Mar 05 14:59:18 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 15:49:43 2012 -0800"
      },
      "message": "memcg: fix GPF when cgroup removal races with last exit\n\nWhen moving tasks from old memcg (with move_charge_at_immigrate on new\nmemcg), followed by removal of old memcg, hit General Protection Fault in\nmem_cgroup_lru_del_list() (called from release_pages called from\nfree_pages_and_swap_cache from tlb_flush_mmu from tlb_finish_mmu from\nexit_mmap from mmput from exit_mm from do_exit).\n\nSomewhat reproducible, takes a few hours: the old struct mem_cgroup has\nbeen freed and poisoned by SLAB_DEBUG, but mem_cgroup_lru_del_list() is\nstill trying to update its stats, and take page off lru before freeing.\n\nA task, or a charge, or a page on lru: each secures a memcg against\nremoval.  In this case, the last task has been moved out of the old memcg,\nand it is exiting: anonymous pages are uncharged one by one from the\nmemcg, as they are zapped from its pagetables, so the charge gets down to\n0; but the pages themselves are queued in an mmu_gather for freeing.\n\nMost of those pages will be on lru (and force_empty is careful to\nlru_add_drain_all, to add pages from pagevec to lru first), but not\nnecessarily all: perhaps some have been isolated for page reclaim, perhaps\nsome isolated for other reasons.  So, force_empty may find no task, no\ncharge and no page on lru, and let the removal proceed.\n\nThere would still be no problem if these pages were immediately freed; but\ntypically (and the put_page_testzero protocol demands it) they have to be\nadded back to lru before they are found freeable, then removed from lru\nand freed.  We don\u0027t see the issue when adding, because the\nmem_cgroup_iter() loops keep their own reference to the memcg being\nscanned; but when it comes to mem_cgroup_lru_del_list().\n\nI believe this was not an issue in v3.2: there, PageCgroupAcctLRU and\nPageCgroupUsed flags were used (like a trick with mirrors) to deflect view\nof pc-\u003emem_cgroup to the stable root_mem_cgroup when neither set.\n38c5d72f3ebe (\"memcg: simplify LRU handling by new rule\") mercifully\nremoved those convolutions, but left this General Protection Fault.\n\nBut it\u0027s surprisingly easy to restore the old behaviour: just check\nPageCgroupUsed in mem_cgroup_lru_add_list() (which decides on which lruvec\nto add), and reset pc to root_mem_cgroup if page is uncharged.  A risky\nchange?  just going back to how it worked before; testing, and an audit of\nuses of pc-\u003emem_cgroup, show no problem.\n\nAnd there\u0027s a nice bonus: with mem_cgroup_lru_add_list() itself making\nsure that an uncharged page goes to root lru, mem_cgroup_reset_owner() no\nlonger has any purpose, and we can safely revert 4e5f01c2b9b9 (\"memcg:\nclear pc-\u003emem_cgroup if necessary\").\n\nCalling update_page_reclaim_stat() after add_page_to_lru_list() in swap.c\nis not strictly necessary: the lru_lock there, with RCU before memcg\nstructures are freed, makes mem_cgroup_get_reclaim_stat_from_page safe\nwithout that; but it seems cleaner to rely on one dependency less.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9ce70c0240d01309b34712f87eda4fbfba3c3764",
      "tree": "be59ba1d702631aab6e5f5c12b0ec5ebe15b10b2",
      "parents": [
        "73737b878767ef441d7cc34ebeeba01dd0a68dd6"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Mar 05 14:59:16 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 15:49:43 2012 -0800"
      },
      "message": "memcg: fix deadlock by inverting lrucare nesting\n\nWe have forgotten the rules of lock nesting: the irq-safe ones must be\ntaken inside the non-irq-safe ones, otherwise we are open to deadlock:\n\nCPU0                          CPU1\n----                          ----\nlock(\u0026(\u0026pc-\u003elock)-\u003erlock);\n                              local_irq_disable();\n                              lock(\u0026(\u0026zone-\u003elru_lock)-\u003erlock);\n                              lock(\u0026(\u0026pc-\u003elock)-\u003erlock);\n\u003cInterrupt\u003e\nlock(\u0026(\u0026zone-\u003elru_lock)-\u003erlock);\n\nTo check a different locking issue, I happened to add a spin_lock to\nmemcg\u0027s bit_spin_lock in lock_page_cgroup(), and lockdep very quickly\ncomplained about __mem_cgroup_commit_charge_lrucare() (on CPU1 above).\n\nSo delete __mem_cgroup_commit_charge_lrucare(), passing a bool lrucare to\n__mem_cgroup_commit_charge() instead, taking zone-\u003elru_lock under\nlock_page_cgroup() in the lrucare case.\n\nThe original was using spin_lock_irqsave, but we\u0027d be in more trouble if\nit were ever called at interrupt time: unconditional _irq is enough.  And\nClearPageLRU before del from lru, SetPageLRU before add to lru: no strong\nreason, but that is the ordering used consistently elsewhere.\n\nFixes 36b62ad539498d00c2d280a151a (\"memcg: simplify corner case handling\nof LRU\").\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "371528caec553785c37f73fa3926ea0de84f986f",
      "tree": "cc718011d32ae17ec61d1a68b71f912caf26b5bb",
      "parents": [
        "37fbf4bfb826372c3ca6c09d8a015d1fe9f5e186"
      ],
      "author": {
        "name": "Anton Vorontsov",
        "email": "anton.vorontsov@linaro.org",
        "time": "Fri Feb 24 05:14:46 2012 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 24 08:55:51 2012 -0800"
      },
      "message": "mm: memcg: Correct unregistring of events attached to the same eventfd\n\nThere is an issue when memcg unregisters events that were attached to\nthe same eventfd:\n\n- On the first call mem_cgroup_usage_unregister_event() removes all\n  events attached to a given eventfd, and if there were no events left,\n  thresholds-\u003eprimary would become NULL;\n\n- Since there were several events registered, cgroups core will call\n  mem_cgroup_usage_unregister_event() again, but now kernel will oops,\n  as the function doesn\u0027t expect that threshold-\u003eprimary may be NULL.\n\nThat\u0027s a good question whether mem_cgroup_usage_unregister_event()\nshould actually remove all events in one go, but nowadays it can\u0027t\ndo any better as cftype-\u003eunregister_event callback doesn\u0027t pass\nany private event-associated cookie. So, let\u0027s fix the issue by\nsimply checking for threshold-\u003eprimary.\n\nFWIW, w/o the patch the following oops may be observed:\n\n BUG: unable to handle kernel NULL pointer dereference at 0000000000000004\n IP: [\u003cffffffff810be32c\u003e] mem_cgroup_usage_unregister_event+0x9c/0x1f0\n Pid: 574, comm: kworker/0:2 Not tainted 3.3.0-rc4+ #9 Bochs Bochs\n RIP: 0010:[\u003cffffffff810be32c\u003e]  [\u003cffffffff810be32c\u003e] mem_cgroup_usage_unregister_event+0x9c/0x1f0\n RSP: 0018:ffff88001d0b9d60  EFLAGS: 00010246\n Process kworker/0:2 (pid: 574, threadinfo ffff88001d0b8000, task ffff88001de91cc0)\n Call Trace:\n  [\u003cffffffff8107092b\u003e] cgroup_event_remove+0x2b/0x60\n  [\u003cffffffff8103db94\u003e] process_one_work+0x174/0x450\n  [\u003cffffffff8103e413\u003e] worker_thread+0x123/0x2d0\n\nCc: stable \u003cstable@vger.kernel.org\u003e\nSigned-off-by: Anton Vorontsov \u003canton.vorontsov@linaro.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "82b3f2a7171731cce62f25058d25afb91a14710c",
      "tree": "a8837d2d8640f1607611257bd41fded4ab2a56e8",
      "parents": [
        "31e0017e6f6fb5cfdfaf932c1f98c9bef8d57688"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Fri Feb 03 15:37:14 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 03 16:16:40 2012 -0800"
      },
      "message": "mm/memcontrol.c: fix warning with CONFIG_NUMA\u003dn\n\nmm/memcontrol.c: In function \u0027memcg_check_events\u0027:\nmm/memcontrol.c:779: warning: unused variable \u0027do_numainfo\u0027\n\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Hiroyuki KAMEZAWA \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: \"Kirill A. Shutemov\" \u003ckirill@shutemov.name\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "761b3ef50e1c2649cffbfa67a4dcb2dcdb7982ed",
      "tree": "67ab6a9a2520811c9c0b4d70d1c19b4bfca16237",
      "parents": [
        "61d1d219c4c0761059236a46867bc49943c4d29d"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Tue Jan 31 13:47:36 2012 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 02 09:20:22 2012 -0800"
      },
      "message": "cgroup: remove cgroup_subsys argument from callbacks\n\nThe argument is not used at all, and it\u0027s not necessary, because\na specific callback handler of course knows which subsys it\nbelongs to.\n\nNow only -\u003epupulate() takes this argument, because the handlers of\nthis callback always call cgroup_add_file()/cgroup_add_files().\n\nSo we reduce a few lines of code, though the shrinking of object size\nis minimal.\n\n 16 files changed, 113 insertions(+), 162 deletions(-)\n\n   text    data     bss     dec     hex filename\n5486240  656987 7039960 13183187         c928d3 vmlinux.o.orig\n5486170  656987 7039960 13183117         c9288d vmlinux.o\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "701b259f446be2f3625fb852bceb93afe76e206d",
      "tree": "93f15bcd00bd59c38b4e59fed9af7ddf6b06c8b3",
      "parents": [
        "d2346963bfcbb9a8ee783ca3c3b3bdd7448ec9d5",
        "efc3dbc37412c027e363736b4f4c74ee5e8ecffc"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 24 15:51:40 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 24 15:51:40 2012 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net\n\nDavem says:\n\n1) Fix JIT code generation on x86-64 for divide by zero, from Eric Dumazet.\n\n2) tg3 header length computation correction from Eric Dumazet.\n\n3) More build and reference counting fixes for socket memory cgroup\n   code from Glauber Costa.\n\n4) module.h snuck back into a core header after all the hard work we\n   did to remove that, from Paul Gortmaker and Jesper Dangaard Brouer.\n\n5) Fix PHY naming regression and add some new PCI IDs in stmmac, from\n   Alessandro Rubini.\n\n6) Netlink message generation fix in new team driver, should only advertise\n   the entries that changed during events, from Jiri Pirko.\n\n7) SRIOV VF registration and unregistration fixes, and also add a\n   missing PCI ID, from Roopa Prabhu.\n\n8) Fix infinite loop in tx queue flush code of brcmsmac, from Stanislaw Gruszka.\n\n9) ftgmac100/ftmac100 build fix, missing interrupt.h include.\n\n10) Memory leak fix in net/hyperv do_set_mutlicast() handling, from Wei Yongjun.\n\n11) Off by one fix in netem packet scheduler, from Vijay Subramanian.\n\n12) TCP loss detection fix from Yuchung Cheng.\n\n13) TCP reset packet MD5 calculation uses wrong address, fix from Shawn Lu.\n\n14) skge carrier assertion and DMA mapping fixes from Stephen Hemminger.\n\n15) Congestion recovery undo performed at the wrong spot in BIC and CUBIC\n    congestion control modules, fix from Neal Cardwell.\n\n16) Ethtool ETHTOOL_GSSET_INFO is unnecessarily restrictive, from Michał Mirosław.\n\n17) Fix triggerable race in ipv6 sysctl handling, from Francesco Ruggeri.\n\n18) Statistics bug fixes in mlx4 from Eugenia Emantayev.\n\n19) rds locking bug fix during info dumps, from your\u0027s truly.\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (67 commits)\n  rds: Make rds_sock_lock BH rather than IRQ safe.\n  netprio_cgroup.h: dont include module.h from other includes\n  net: flow_dissector.c missing include linux/export.h\n  team: send only changed options/ports via netlink\n  net/hyperv: fix possible memory leak in do_set_multicast()\n  drivers/net: dsa/mv88e6xxx.c files need linux/module.h\n  stmmac: added PCI identifiers\n  llc: Fix race condition in llc_ui_recvmsg\n  stmmac: fix phy naming inconsistency\n  dsa: Add reporting of silicon revision for Marvell 88E6123/88E6161/88E6165 switches.\n  tg3: fix ipv6 header length computation\n  skge: add byte queue limit support\n  mv643xx_eth: Add Rx Discard and Rx Overrun statistics\n  bnx2x: fix compilation error with SOE in fw_dump\n  bnx2x: handle CHIP_REVISION during init_one\n  bnx2x: allow user to change ring size in ISCSI SD mode\n  bnx2x: fix Big-Endianess in ethtool -t\n  bnx2x: fixed ethtool statistics for MF modes\n  bnx2x: credit-leakage fixup on vlan_mac_del_all\n  macvlan: fix a possible use after free\n  ...\n"
    },
    {
      "commit": "6568d4a9c9ff16d6c4f0b14dfea567806ce579e4",
      "tree": "5aef7ff51027d8986113025b3e9b0255476772dd",
      "parents": [
        "85e72aa5384b1a614563ad63257ded0e91d1a620"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Jan 20 14:34:12 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:38:48 2012 -0800"
      },
      "message": "mm: memcg: update the correct soft limit tree during migration\n\nend_migration() passes the old page instead of the new page to commit\nthe charge.  This page descriptor is not used for committing itself,\nthough, since we also pass the (correct) page_cgroup descriptor.  But\nit\u0027s used to find the soft limit tree through the page\u0027s zone, so the\nsoft limit tree of the old page\u0027s zone is updated instead of that of the\nnew page\u0027s, which might get slightly out of date until the next charge\nreaches the ratelimit point.\n\nThis glitch has been present since 5564e88 (\"memcg: condense\npage_cgroup-to-page lookup points\").\n\nThis fixes a bug that I introduced in 2.6.38.  It\u0027s benign enough (to my\nknowledge) that we probably don\u0027t want this for stable.\n\nReported-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "376be5ff8a6a36efadd131860cf26841f366d44c",
      "tree": "af7c37842eeb37c4a79195c46fc1dabbaf84be6f",
      "parents": [
        "1a3bc369ba547c11ca8b3ed079d7584f27499e70"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Fri Jan 20 04:57:14 2012 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Jan 22 15:08:45 2012 -0500"
      },
      "message": "net: fix socket memcg build with !CONFIG_NET\n\nThere is still a build bug with the sock memcg code, that triggers\nwith !CONFIG_NET, that survived my series of randconfig builds.\n\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nReported-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nCC: Hiroyouki Kamezawa \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "319d3b9c97b5e3191e419bb95496bf08ec50f096",
      "tree": "6e57f4183060aab780d17fe8f6ac11272cc679fc",
      "parents": [
        "8d9d399f14ea65aeb50c7404e986bceede93bb99"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Sun Jan 15 22:04:39 2012 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Jan 17 10:15:45 2012 -0500"
      },
      "message": "net: move sock_update_memcg outside of CONFIG_INET\n\nAlthough only used currently for tcp sockets, this function\nis now used in common sock code (for sock_clone())\n\nCommit 475f1b52645a29936b9df1d8fcd45f7e56bd4a9f moved the\ndeclaration of sock_update_clone() to inside sock.c, but\nthis only fixes the problem when CONFIG_CGROUP_MEM_RES_CTLR_KMEM\nis also not defined.\n\nThis patch here is verified to fix both problems, although\nreverting the previous one is not necessary.\n\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nCC: David S. Miller \u003cdavem@davemloft.net\u003e\nCC: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nReported-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nAcked-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "90b3feaec8ffb167abd8903bf111605c2f035aa8",
      "tree": "503c27c343397e1c94dce61e922fae18c7cd7172",
      "parents": [
        "12d27107867fc7216e8faaff0b894b0f162dcf75"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:19:54 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "memcg: fix mem_cgroup_print_bad_page\n\nIf DEBUG_VM, mem_cgroup_print_bad_page() is called whenever bad_page()\nshows a \"Bad page state\" message, removes page from circulation, adds a\ntaint and continues.  This is at a very low level, often when a spinlock\nis held (sometimes when page table lock is held, for example).\n\nWe want to recover from this badness, not make it worse: we must not\nkmalloc memory here, we must not do a cgroup path lookup via dubious\npointers.  No doubt that code was useful to debug a particular case at one\ntime, and may be again, but take it out of the mainline kernel.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "12d27107867fc7216e8faaff0b894b0f162dcf75",
      "tree": "8f35d39f7e5d0b0f0ba10a3475e9fa4a2581e509",
      "parents": [
        "0cee34fd72c582b4f8ad8ce00645b75fb4168199"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:19:52 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "memcg: fix split_huge_page_refcounts()\n\nThis patch started off as a cleanup: __split_huge_page_refcounts() has to\ncope with two scenarios, when the hugepage being split is already on LRU,\nand when it is not; but why does it have to split that accounting across\nthree different sites?  Consolidate it in lru_add_page_tail(), handling\nevictable and unevictable alike, and use standard add_page_to_lru_list()\nwhen accounting is needed (when the head is not yet on LRU).\n\nBut a recent regression in -next, I guess the removal of PageCgroupAcctLRU\ntest from mem_cgroup_split_huge_fixup(), makes this now a necessary fix:\nunder load, the MEM_CGROUP_ZSTAT count was wrapping to a huge number,\nmessing up reclaim calculations and causing a freeze at rmdir of cgroup.\n\nAdd a VM_BUG_ON to mem_cgroup_lru_del_list() when we\u0027re about to wrap that\ncount - this has not been the only such incident.  Document that\nlru_add_page_tail() is for Transparent HugePages by #ifdef around it.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3ed28fa1080c73747ce17f2025b28b062fb5aa7f",
      "tree": "f4eab7da502fb728fac728220bc1f296ee04dca1",
      "parents": [
        "38c5d72f3ebe5ddd57d2f08dc035070fc6c9a287"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Thu Jan 12 17:19:04 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: cleanup for_each_node_state()\n\nWe already have for_each_node(node) define in nodemask.h, better to use it.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "38c5d72f3ebe5ddd57d2f08dc035070fc6c9a287",
      "tree": "6461c0dfec95dccc92191f059fbe99b5660a8860",
      "parents": [
        "4e5f01c2b9b94321992acb09c35d34f5ee5bb274"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:19:01 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: simplify LRU handling by new rule\n\nNow, at LRU handling, memory cgroup needs to do complicated works to see\nvalid pc-\u003emem_cgroup, which may be overwritten.\n\nThis patch is for relaxing the protocol. This patch guarantees\n   - when pc-\u003emem_cgroup is overwritten, page must not be on LRU.\n\nBy this, LRU routine can believe pc-\u003emem_cgroup and don\u0027t need to check\nbits on pc-\u003eflags.  This new rule may adds small overheads to swapin.  But\nin most case, lru handling gets faster.\n\nAfter this patch, PCG_ACCT_LRU bit is obsolete and removed.\n\n[akpm@linux-foundation.org: remove unneeded VM_BUG_ON(), restore hannes\u0027s christmas tree]\n[akpm@linux-foundation.org: clean up code comment]\n[hughd@google.com: fix NULL mem_cgroup_try_charge]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e5f01c2b9b94321992acb09c35d34f5ee5bb274",
      "tree": "4e6ac9d29539dc26468fe2630d0e64cd022b1155",
      "parents": [
        "36b62ad539498d00c2d280a151abad5f7630fa73"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:58 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: clear pc-\u003emem_cgroup if necessary.\n\nThis is a preparation before removing a flag PCG_ACCT_LRU in page_cgroup\nand reducing atomic ops/complexity in memcg LRU handling.\n\nIn some cases, pages are added to lru before charge to memcg and pages\nare not classfied to memory cgroup at lru addtion.  Now, the lru where\nthe page should be added is determined a bit in page_cgroup-\u003eflags and\npc-\u003emem_cgroup.  I\u0027d like to remove the check of flag.\n\nTo handle the case pc-\u003emem_cgroup may contain stale pointers if pages\nare added to LRU before classification.  This patch resets\npc-\u003emem_cgroup to root_mem_cgroup before lru additions.\n\n[akpm@linux-foundation.org: fix CONFIG_CGROUP_MEM_CONT\u003dn build]\n[hughd@google.com: fix CONFIG_CGROUP_MEM_RES_CTLR\u003dy CONFIG_CGROUP_MEM_RES_CTLR_SWAP\u003dn build]\n[akpm@linux-foundation.org: ksm.c needs memcontrol.h, per Michal]\n[hughd@google.com: stop oops in mem_cgroup_reset_owner()]\n[hughd@google.com: fix page migration to reset_owner]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "36b62ad539498d00c2d280a151abad5f7630fa73",
      "tree": "553409901df6210e4a698c1991f9d455199e098b",
      "parents": [
        "dc67d50465f249bb357bf85b3ed1f642eb00130a"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:57 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: simplify corner case handling of LRU.\n\nThis patch simplifies LRU handling of racy case (memcg+SwapCache).  At\ncharging, SwapCache tend to be on LRU already.  So, before overwriting\npc-\u003emem_cgroup, the page must be removed from LRU and added to LRU\nlater.\n\nThis patch does\n        spin_lock(zone-\u003elru_lock);\n        if (PageLRU(page))\n                remove from LRU\n        overwrite pc-\u003emem_cgroup\n        if (PageLRU(page))\n                add to new LRU.\n        spin_unlock(zone-\u003elru_lock);\n\nAnd guarantee all pages are not on LRU at modifying pc-\u003emem_cgroup.\nThis patch also unfies lru handling of replace_page_cache() and\nswapin.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dc67d50465f249bb357bf85b3ed1f642eb00130a",
      "tree": "f3808a1bebe5dfbf1691603007966b7222376d55",
      "parents": [
        "de077d222d5ca6108cab119a09593344c12100ab"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:55 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: simplify page cache charging\n\nThis patch is a clean up. No functional/logical changes.\n\nBecause of commit ef6a3c6311 (\"mm: add replace_page_cache_page()\nfunction\") , FUSE uses replace_page_cache() instead of\nadd_to_page_cache().  Then, mem_cgroup_cache_charge() is not called\nagainst FUSE\u0027s pages from splice.\n\nSo now, mem_cgroup_cache_charge() gets pages that are not on the LRU\nwith the exception of PageSwapCache pages.  For checking,\nWARN_ON_ONCE(PageLRU(page)) is added.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "de077d222d5ca6108cab119a09593344c12100ab",
      "tree": "c59efc8b4fff063d2c318480881050b1913ed21b",
      "parents": [
        "c3cecc683446ad54ca587d7123bd3ce94bd7b8e1"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Thu Jan 12 17:18:52 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "oom, memcg: fix exclusion of memcg threads after they have detached their mm\n\nThe oom killer relies on logic that identifies threads that have already\nbeen oom killed when scanning the tasklist and, if found, deferring\nuntil such threads have exited.  This is done by checking for any\ncandidate threads that have the TIF_MEMDIE bit set.\n\nFor memcg ooms, candidate threads are first found by calling\ntask_in_mem_cgroup() since the oom killer should not defer if there\u0027s an\noom killed thread in another memcg.\n\nUnfortunately, task_in_mem_cgroup() excludes threads if they have\ndetached their mm in the process of exiting so TIF_MEMDIE is never\ndetected for such conditions.  This is different for global, mempolicy,\nand cpuset oom conditions where a detached mm is only excluded after\nchecking for TIF_MEMDIE and deferring, if necessary, in\nselect_bad_process().\n\nThe fix is to return true if a task has a detached mm but is still in\nthe memcg or its hierarchy that is currently oom.  This will allow the\noom killer to appropriately defer rather than kill unnecessarily or, in\nthe worst case, panic the machine if nothing else is available to kill.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c3cecc683446ad54ca587d7123bd3ce94bd7b8e1",
      "tree": "27dfb859c1c45a6369d62eac4b5b9ad62871b7ce",
      "parents": [
        "9fb4b7cc0724f178d4b24a2a566ea1e7cb120b82"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Thu Jan 12 17:18:50 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: free entries in soft_limit_tree if allocation fails\n\nIf we are not able to allocate tree nodes for all NUMA nodes then we\nshould release those that were allocated.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9fb4b7cc0724f178d4b24a2a566ea1e7cb120b82",
      "tree": "0f2db9102d46f5e5c8492864fb1bd21f2e7cd768",
      "parents": [
        "40f23a21a8501c1b2c65c50c19b516488ac31313"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Thu Jan 12 17:18:48 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "page_cgroup: add helper function to get swap_cgroup\n\nThere are multiple places which need to get the swap_cgroup address, so\nadd a helper function:\n\n  static struct swap_cgroup *swap_cgroup_getsc(swp_entry_t ent,\n                                struct swap_cgroup_ctrl **ctrl);\n\nto simplify the code.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "40f23a21a8501c1b2c65c50c19b516488ac31313",
      "tree": "4e70dbd9e7cc1dda350156bf05786ede7dbf8256",
      "parents": [
        "7a0524cfc8f9f585471a31b1282a9ce4a1a7d444"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:45 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: remove unneeded checks from uncharge_page()\n\nmem_cgroup_uncharge_page() is only called on either freshly allocated\npages without page-\u003emapping or on rmapped PageAnon() pages.  There is no\nneed to check for a page-\u003emapping that is not an anon_vma.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7a0524cfc8f9f585471a31b1282a9ce4a1a7d444",
      "tree": "4e31e1ec7e892d67e48d1199b9e8590ad5718e7a",
      "parents": [
        "00c54c0bac24bb02d2460c516da76651a7451286"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:43 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: remove unneeded checks from newpage_charge()\n\nAll callsites pass in freshly allocated pages and a valid mm.  As a\nresult, all checks pertaining to the page\u0027s mapcount, page-\u003emapping or the\nfallback to init_mm are unneeded.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cfa449461e67b60df986170eecb089831fa9e49a",
      "tree": "ff40cff591e27250b91b2f1fb4409875f397b048",
      "parents": [
        "0e574a932d2cab8eb3b02d21feb59f2c09154738"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:38 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: lookup_page_cgroup (almost) never returns NULL\n\nPages have their corresponding page_cgroup descriptors set up before\nthey are used in userspace, and thus managed by a memory cgroup.\n\nThe only time where lookup_page_cgroup() can return NULL is in the\nCONFIG_DEBUG_VM-only page sanity checking code that executes while\nfeeding pages into the page allocator for the first time.\n\nRemove the NULL checks against lookup_page_cgroup() results from all\ncallsites where we know that corresponding page_cgroup descriptors must\nbe allocated, and add a comment to the callsite that actually does have\nto check the return value.\n\n[hughd@google.com: stop oops in mem_cgroup_update_page_stat()]\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0e574a932d2cab8eb3b02d21feb59f2c09154738",
      "tree": "5bfae84ec49d6e92efcf6ba1cb92235f546c8e38",
      "parents": [
        "72835c86ca15d0126354b73d5f29ce9194931c9b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:35 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: clean up fault accounting\n\nThe fault accounting functions have a single, memcg-internal user, so they\ndon\u0027t need to be global.  In fact, their one-line bodies can be directly\nfolded into the caller.  And since faults happen one at a time, use\nthis_cpu_inc() directly instead of this_cpu_add(foo, 1).\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "72835c86ca15d0126354b73d5f29ce9194931c9b",
      "tree": "369f31168b405e4d597b3cd067a1fd0ac2025dbc",
      "parents": [
        "ec0fffd84b162e0563a28a81aa049f946b31a8e2"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:32 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: unify remaining mem_cont, mem, etc. variable names to memcg\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f53d7ce32e13dbd09573b176e6521a04c2c77803",
      "tree": "af88d1c256d06e3d37c5df013de9ff41f86ed4a2",
      "parents": [
        "e94c8a9cbce1aee4af9e1285802785481b7f93c5"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:23 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: memcg: shorten preempt-disabled section around event checks\n\nOnly the ratelimit checks themselves have to run with preemption\ndisabled, the resulting actions - checking for usage thresholds,\nupdating the soft limit tree - can and should run with preemption\nenabled.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReported-by: Yong Zhang \u003cyong.zhang0@gmail.com\u003e\nTested-by: Yong Zhang \u003cyong.zhang0@gmail.com\u003e\nReported-by: Luis Henriques \u003chenrix@camandro.org\u003e\nTested-by: Luis Henriques \u003chenrix@camandro.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e94c8a9cbce1aee4af9e1285802785481b7f93c5",
      "tree": "14d496e62c2e8d59a8954ff10368d59d8dfaea03",
      "parents": [
        "6b208e3f6e35aa76d254c395bdcd984b17c6b626"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:20 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "memcg: make mem_cgroup_split_huge_fixup() more efficient\n\nIn split_huge_page(), mem_cgroup_split_huge_fixup() is called to handle\npage_cgroup modifcations.  It takes move_lock_page_cgroup() and modifies\npage_cgroup and LRU accounting jobs and called HPAGE_PMD_SIZE - 1 times.\n\nBut thinking again,\n  - compound_lock() is held at move_accout...then, it\u0027s not necessary\n    to take move_lock_page_cgroup().\n  - LRU is locked and all tail pages will go into the same LRU as\n    head is now on.\n  - page_cgroup is contiguous in huge page range.\n\nThis patch fixes mem_cgroup_split_huge_fixup() as to be called once per\nhugepage and reduce costs for spliting.\n\n[akpm@linux-foundation.org: fix typo, per Michal]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "925b7673cce39116ce61e7a06683a4a0dad1e72a",
      "tree": "66c134db836e531e196ee3dfc23c124ff74ac827",
      "parents": [
        "6290df545814990ca2663baf6e894669132d5f73"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:15 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: make per-memcg LRU lists exclusive\n\nNow that all code that operated on global per-zone LRU lists is\nconverted to operate on per-memory cgroup LRU lists instead, there is no\nreason to keep the double-LRU scheme around any longer.\n\nThe pc-\u003elru member is removed and page-\u003elru is linked directly to the\nper-memory cgroup LRU lists, which removes two pointers from a\ndescriptor that exists for every page frame in the system.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6290df545814990ca2663baf6e894669132d5f73",
      "tree": "c62472270ba81a7146bed0854be74e2e2338c629",
      "parents": [
        "b95a2f2d486d0d768a92879c023a03757b9c7e58"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:10 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: collect LRU list heads into struct lruvec\n\nHaving a unified structure with a LRU list set for both global zones and\nper-memcg zones allows to keep that code simple which deals with LRU\nlists and does not care about the container itself.\n\nOnce the per-memcg LRU lists directly link struct pages, the isolation\nfunction and all other list manipulations are shared between the memcg\ncase and the global LRU case.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ad2b8e601099a23dffffb53f91c18d874fe98854",
      "tree": "6b7706f3005fd799f23d0ddc21fe5b33fd1e79ac",
      "parents": [
        "5660048ccac8735d9bc0a46325a02e6a6518b5b2"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:02 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: memcg: remove optimization of keeping the root_mem_cgroup LRU lists empty\n\nroot_mem_cgroup, lacking a configurable limit, was never subject to\nlimit reclaim, so the pages charged to it could be kept off its LRU\nlists.  They would be found on the global per-zone LRU lists upon\nphysical memory pressure and it made sense to avoid uselessly linking\nthem to both lists.\n\nThe global per-zone LRU lists are about to go away on memcg-enabled\nkernels, with all pages being exclusively linked to their respective\nper-memcg LRU lists.  As a result, pages of the root_mem_cgroup must\nalso be linked to its LRU lists again.  This is purely about the LRU\nlist, root_mem_cgroup is still not charged.\n\nThe overhead is temporary until the double-LRU scheme is going away\ncompletely.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5660048ccac8735d9bc0a46325a02e6a6518b5b2",
      "tree": "4b2269ddd6ca001843187a89fb91278192028d87",
      "parents": [
        "527a5ec9a53471d855291ba9f1fdf1dd4e12a184"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:59 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: move memcg hierarchy reclaim to generic reclaim code\n\nMemory cgroup limit reclaim and traditional global pressure reclaim will\nsoon share the same code to reclaim from a hierarchical tree of memory\ncgroups.\n\nIn preparation of this, move the two right next to each other in\nshrink_zone().\n\nThe mem_cgroup_hierarchical_reclaim() polymath is split into a soft\nlimit reclaim function, which still does hierarchy walking on its own,\nand a limit (shrinking) reclaim function, which relies on generic\nreclaim code to walk the hierarchy.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "527a5ec9a53471d855291ba9f1fdf1dd4e12a184",
      "tree": "156a8be57e66e1c6f54e498beda0f2d8412cee12",
      "parents": [
        "f16015fbf2f6ac45505d6ad21455ff9f6c14473d"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:55 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "mm: memcg: per-priority per-zone hierarchy scan generations\n\nMemory cgroup limit reclaim currently picks one memory cgroup out of the\ntarget hierarchy, remembers it as the last scanned child, and reclaims\nall zones in it with decreasing priority levels.\n\nThe new hierarchy reclaim code will pick memory cgroups from the same\nhierarchy concurrently from different zones and priority levels, it\nbecomes necessary that hierarchy roots not only remember the last\nscanned child, but do so for each zone and priority level.\n\nUntil now, we reclaimed memcgs like this:\n\n    mem \u003d mem_cgroup_iter(root)\n    for each priority level:\n      for each zone in zonelist:\n        reclaim(mem, zone)\n\nBut subsequent patches will move the memcg iteration inside the loop\nover the zones:\n\n    for each priority level:\n      for each zone in zonelist:\n        mem \u003d mem_cgroup_iter(root)\n        reclaim(mem, zone)\n\nAnd to keep with the original scan order - memcg -\u003e priority -\u003e zone -\nthe last scanned memcg has to be remembered per zone and per priority\nlevel.\n\nFurthermore, global reclaim will be switched to the hierarchy walk as\nwell.  Different from limit reclaim, which can just recheck the limit\nafter some reclaim progress, its target is to scan all memcgs for the\ndesired zone pages, proportional to the memcg size, and so reliably\ndetecting a full hierarchy round-trip will become crucial.\n\nCurrently, the code relies on one reclaimer encountering the same memcg\ntwice, but that is error-prone with concurrent reclaimers.  Instead, use\na generation counter that is increased every time the child with the\nhighest ID has been visited, so that reclaimers can stop when the\ngeneration changes.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9f3a0d0933de079665ec1b498947ffbf805b0018",
      "tree": "495b27908e328eff16a2269734109b8d6e5be95d",
      "parents": [
        "ab936cbcd02072a34b60d268f94440fd5cf1970b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:48 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "mm: memcg: consolidate hierarchy iteration primitives\n\nThe memcg naturalization series:\n\nMemory control groups are currently bolted onto the side of\ntraditional memory management in places where better integration would\nbe preferrable.  To reclaim memory, for example, memory control groups\nmaintain their own LRU list and reclaim strategy aside from the global\nper-zone LRU list reclaim.  But an extra list head for each existing\npage frame is expensive and maintaining it requires additional code.\n\nThis patchset disables the global per-zone LRU lists on memory cgroup\nconfigurations and converts all its users to operate on the per-memory\ncgroup lists instead.  As LRU pages are then exclusively on one list,\nthis saves two list pointers for each page frame in the system:\n\npage_cgroup array size with 4G physical memory\n\n  vanilla: allocated 31457280 bytes of page_cgroup\n  patched: allocated 15728640 bytes of page_cgroup\n\nAt the same time, system performance for various workloads is\nunaffected:\n\n100G sparse file cat, 4G physical memory, 10 runs, to test for code\nbloat in the traditional LRU handling and kswapd \u0026 direct reclaim\npaths, without/with the memory controller configured in\n\n  vanilla: 71.603(0.207) seconds\n  patched: 71.640(0.156) seconds\n\n  vanilla: 79.558(0.288) seconds\n  patched: 77.233(0.147) seconds\n\n100G sparse file cat in 1G memory cgroup, 10 runs, to test for code\nbloat in the traditional memory cgroup LRU handling and reclaim path\n\n  vanilla: 96.844(0.281) seconds\n  patched: 94.454(0.311) seconds\n\n4 unlimited memcgs running kbuild -j32 each, 4G physical memory, 500M\nswap on SSD, 10 runs, to test for regressions in kswapd \u0026 direct\nreclaim using per-memcg LRU lists with multiple memcgs and multiple\nallocators within each memcg\n\n  vanilla: 717.722(1.440) seconds [ 69720.100(11600.835) majfaults ]\n  patched: 714.106(2.313) seconds [ 71109.300(14886.186) majfaults ]\n\n16 unlimited memcgs running kbuild, 1900M hierarchical limit, 500M\nswap on SSD, 10 runs, to test for regressions in hierarchical memcg\nsetups\n\n  vanilla: 2742.058(1.992) seconds [ 26479.600(1736.737) majfaults ]\n  patched: 2743.267(1.214) seconds [ 27240.700(1076.063) majfaults ]\n\nThis patch:\n\nThere are currently two different implementations of iterating over a\nmemory cgroup hierarchy tree.\n\nConsolidate them into one worker function and base the convenience\nlooping-macros on top of it.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ab936cbcd02072a34b60d268f94440fd5cf1970b",
      "tree": "d37e3e3c54cc4cc691a428b6ceb71b4b40e4f42b",
      "parents": [
        "28d82dc1c4edbc352129f97f4ca22624d1fe61de"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:17:44 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "memcg: add mem_cgroup_replace_page_cache() to fix LRU issue\n\nCommit ef6a3c6311 (\"mm: add replace_page_cache_page() function\") added a\nfunction replace_page_cache_page().  This function replaces a page in the\nradix-tree with a new page.  WHen doing this, memory cgroup needs to fix\nup the accounting information.  memcg need to check PCG_USED bit etc.\n\nIn some(many?) cases, \u0027newpage\u0027 is on LRU before calling\nreplace_page_cache().  So, memcg\u0027s LRU accounting information should be\nfixed, too.\n\nThis patch adds mem_cgroup_replace_page_cache() and removes the old hooks.\n In that function, old pages will be unaccounted without touching\nres_counter and new page will be accounted to the memcg (of old page).\nWHen overwriting pc-\u003emem_cgroup of newpage, take zone-\u003elru_lock and avoid\nraces with LRU handling.\n\nBackground:\n  replace_page_cache_page() is called by FUSE code in its splice() handling.\n  Here, \u0027newpage\u0027 is replacing oldpage but this newpage is not a newly allocated\n  page and may be on LRU. LRU mis-accounting will be critical for memory cgroup\n  because rmdir() checks the whole LRU is empty and there is no account leak.\n  If a page is on the other LRU than it should be, rmdir() will fail.\n\nThis bug was added in March 2011, but no bug report yet.  I guess there\nare not many people who use memcg and FUSE at the same time with upstream\nkernels.\n\nThe result of this bug is that admin cannot destroy a memcg because of\naccount leak.  So, no panic, no deadlock.  And, even if an active cgroup\nexist, umount can succseed.  So no problem at shutdown.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "38e5781bbf8e82c1635ea845e0d07b2228a5ac7a",
      "tree": "69ced9c509c864a67122c5e1337f14cd1d9e988d",
      "parents": [
        "979ecef5b89a8003902299566d9cdc08de34a3ee",
        "a8c1f65c79cbbb2f7da782d4c9d15639a9b94b27"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 14:46:52 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 14:46:52 2012 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net:\n  igmp: Avoid zero delay when receiving odd mixture of IGMP queries\n  netdev: make net_device_ops const\n  bcm63xx: make ethtool_ops const\n  usbnet: make ethtool_ops const\n  net: Fix build with INET disabled.\n  net: introduce netif_addr_lock_nested() and call if when appropriate\n  net: correct lock name in dev_[uc/mc]_sync documentations.\n  net: sk_update_clone is only used in net/core/sock.c\n  8139cp: fix missing napi_gro_flush.\n  pktgen: set correct max and min in pktgen_setup_inject()\n  smsc911x: Unconditionally include linux/smscphy.h in smsc911x.h\n  asix: fix infinite loop in rx_fixup()\n  net: Default UDP and UNIX diag to \u0027n\u0027.\n  r6040: fix typo in use of MCR0 register bits\n  net: fix sock_clone reference mismatch with tcp memcontrol\n"
    }
  ],
  "next": "db0c2bf69aa095d4a6de7b1145f29fe9a7c0f6a3"
}
