)]}'
{
  "log": [
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "5a6475a4e162200f43855e2d42bbf55bcca1a9f2",
      "tree": "361ef686ef833cd1560e884ca1420d512e4d06bb",
      "parents": [
        "6cfddb261555dd0c0529a5fb7cf8bc5b85ad95a5"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 23 16:42:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:33 2011 -0700"
      },
      "message": "memcg: fix leak on wrong LRU with FUSE\n\nfs/fuse/dev.c::fuse_try_move_page() does\n\n   (1) remove a page by -\u003esteal()\n   (2) re-add the page to page cache\n   (3) link the page to LRU if it was not on LRU at (1)\n\nThis implies the page is _on_ LRU when it\u0027s added to radix-tree.  So, the\npage is added to memory cgroup while it\u0027s on LRU.  because LRU is lazy and\nno one flushs it.\n\nThis is the same behavior as SwapCache and needs special care as\n - remove page from LRU before overwrite pc-\u003emem_cgroup.\n - add page to LRU after overwrite pc-\u003emem_cgroup.\n\nAnd we need to taking care of pagevec.\n\nIf PageLRU(page) is set before we add PCG_USED bit, the page will not be\nadded to memcg\u0027s LRU (in short period).  So, regardlress of PageLRU(page)\nvalue before commit_charge(), we need to check PageLRU(page) after\ncommit_charge().\n\nAddresses https://bugzilla.kernel.org/show_bug.cgi?id\u003d30432\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nReported-by: Daniel Poelzleithner \u003cpoelzi@poelzi.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4be4489feae6da890765cc1bdc1af5e4f8c4b75f",
      "tree": "c7c1154aaba8e59523024c119fdf769284023a35",
      "parents": [
        "7a159cc9d7987cdb4853f8711f5f89e01cfffe42"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Wed Mar 23 16:42:39 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:32 2011 -0700"
      },
      "message": "mm/memcontrol.c: suppress uninitialized-var warning with older gcc\u0027s\n\nmm/memcontrol.c: In function \u0027mem_cgroup_force_empty\u0027:\nmm/memcontrol.c:2280: warning: \u0027flags\u0027 may be used uninitialized in this function\n\nIt\u0027s a false positive.\n\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\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": "7a159cc9d7987cdb4853f8711f5f89e01cfffe42",
      "tree": "027e8468d40bfdb51ad9694ec1d5256bb2fdb36f",
      "parents": [
        "e9f8974f2f559b00c87ccfba67bca3903f913d50"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:38 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:31 2011 -0700"
      },
      "message": "memcg: use native word page statistics counters\n\nThe statistic counters are in units of pages, there is no reason to make\nthem 64-bit wide on 32-bit machines.\n\nMake them native words.  Since they are signed, this leaves 31 bit on\n32-bit machines, which can represent roughly 8TB assuming a page size of\n4k.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "e9f8974f2f559b00c87ccfba67bca3903f913d50",
      "tree": "d19f8f7d15eb56e7af98c7ad63db8e86d5873fff",
      "parents": [
        "7ec99d6213b579a84c85ad37f2aa8ded4857c53c"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:37 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:31 2011 -0700"
      },
      "message": "memcg: break out event counters from other stats\n\nFor increasing and decreasing per-cpu cgroup usage counters it makes sense\nto use signed types, as single per-cpu values might go negative during\nupdates.  But this is not the case for only-ever-increasing event\ncounters.\n\nAll the counters have been signed 64-bit so far, which was enough to count\nevents even with the sign bit wasted.\n\nThis patch:\n- divides s64 counters into signed usage counters and unsigned\n  monotonically increasing event counters.\n- converts unsigned event counters into \u0027unsigned long\u0027 rather than\n  \u0027u64\u0027.  This matches the type used by the /proc/vmstat event counters.\n\nThe next patch narrows the signed usage counters type (on 32-bit CPUs,\nthat is).\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "7ec99d6213b579a84c85ad37f2aa8ded4857c53c",
      "tree": "d05bb74c5ca30650ff0622cd1ffd2fd6ddecebd6",
      "parents": [
        "7ffd4ca7a2cdd7a18f0b499a4e9e0e7cf36ba018"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:36 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:30 2011 -0700"
      },
      "message": "memcg: unify charge/uncharge quantities to units of pages\n\nThere is no clear pattern when we pass a page count and when we pass a\nbyte count that is a multiple of PAGE_SIZE.\n\nWe never charge or uncharge subpage quantities, so convert it all to page\ncounts.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7ffd4ca7a2cdd7a18f0b499a4e9e0e7cf36ba018",
      "tree": "1a2678ce91b9dfb2118d19e0ec457ca5582793f9",
      "parents": [
        "11c9ea4e80fc3be83485667204c68d0a732f3757"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:35 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:30 2011 -0700"
      },
      "message": "memcg: convert uncharge batching from bytes to page granularity\n\nWe never uncharge subpage quantities.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "11c9ea4e80fc3be83485667204c68d0a732f3757",
      "tree": "71f68fb56e427c3ebe12e205e6ea56d72e7bd6ea",
      "parents": [
        "e7018b8d27e0c9aa2200e5b393e0fe9093c6565c"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:29 2011 -0700"
      },
      "message": "memcg: convert per-cpu stock from bytes to page granularity\n\nWe never keep subpage quantities in the per-cpu stock.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e7018b8d27e0c9aa2200e5b393e0fe9093c6565c",
      "tree": "13a4d92cd78bc6f97d9a2b6d77880c9ea5d67aa1",
      "parents": [
        "bf1ff2635a5fda207fc870df348bfc766e8dcd4d"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:33 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:29 2011 -0700"
      },
      "message": "memcg: keep only one charge cancelling function\n\nWe have two charge cancelling functions: one takes a page count, the other\na page size.  The second one just divides the parameter by PAGE_SIZE and\nthen calls the first one.  This is trivial, no need for an extra function.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bf1ff2635a5fda207fc870df348bfc766e8dcd4d",
      "tree": "d4085b3bdbe608f6c8f708cb93080051b341d7fe",
      "parents": [
        "4dc03de1b29901b61cb27e4cab44a7f578dc0fc9"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:32 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:29 2011 -0700"
      },
      "message": "memcg: remove memcg-\u003ereclaim_param_lock\n\nThe reclaim_param_lock is only taken around single reads and writes to\ninteger variables and is thus superfluous.  Drop it.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@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": "4dc03de1b29901b61cb27e4cab44a7f578dc0fc9",
      "tree": "4edca28cf1636015eacd8012023804e4f27b2e34",
      "parents": [
        "6b3ae58efca06623c197fd6d91ded4aa3a8fe039"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:31 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:28 2011 -0700"
      },
      "message": "memcg: charged pages always have valid per-memcg zone info\n\npage_cgroup_zoneinfo() will never return NULL for a charged page, remove\nthe check for it in mem_cgroup_get_reclaim_stat_from_page().\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@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": "6b3ae58efca06623c197fd6d91ded4aa3a8fe039",
      "tree": "6460e4e1ce206d391b862a3d398a9e22e33ecb3c",
      "parents": [
        "5564e88ba6fd2f6dcd83a592771810cd84b5ae80"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:30 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:28 2011 -0700"
      },
      "message": "memcg: remove direct page_cgroup-to-page pointer\n\nIn struct page_cgroup, we have a full word for flags but only a few are\nreserved.  Use the remaining upper bits to encode, depending on\nconfiguration, the node or the section, to enable page_cgroup-to-page\nlookups without a direct pointer.\n\nThis saves a full word for every page in a system with memory cgroups\nenabled.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@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": "5564e88ba6fd2f6dcd83a592771810cd84b5ae80",
      "tree": "e2b3a0835067825308a254c7531c891d4d69e701",
      "parents": [
        "de3638d9cdc89ac899225996b8dcedbcbc53bdd2"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:29 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:27 2011 -0700"
      },
      "message": "memcg: condense page_cgroup-to-page lookup points\n\nThe per-cgroup LRU lists string up \u0027struct page_cgroup\u0027s.  To get from\nthose structures to the page they represent, a lookup is required.\nCurrently, the lookup is done through a direct pointer in struct\npage_cgroup, so a lot of functions down the callchain do this lookup by\nthemselves instead of receiving the page pointer from their callers.\n\nThe next patch removes this pointer, however, and the lookup is no longer\nthat straight-forward.  In preparation for that, this patch only leaves\nthe non-optional lookups when coming directly from the LRU list and passes\nthe page down the stack.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "de3638d9cdc89ac899225996b8dcedbcbc53bdd2",
      "tree": "86293e32728fdd5696cd321bc65aec09c89d17f3",
      "parents": [
        "97a6c37b34f46feed2544bd40891ee6dd0fd1554"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:28 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:27 2011 -0700"
      },
      "message": "memcg: fold __mem_cgroup_move_account into caller\n\nIt is one logical function, no need to have it split up.\n\nAlso, get rid of some checks from the inner function that ensured the\nsanity of the outer function.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "97a6c37b34f46feed2544bd40891ee6dd0fd1554",
      "tree": "6135189ba1f589d7a3b10c5e24da9a42ea9036f5",
      "parents": [
        "ad324e94475a04cfcdfdb11ad20f8ea81268e411"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:27 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:26 2011 -0700"
      },
      "message": "memcg: change page_cgroup_zoneinfo signature\n\nInstead of passing a whole struct page_cgroup to this function, let it\ntake only what it really needs from it: the struct mem_cgroup and the\npage.\n\nThis has the advantage that reading pc-\u003emem_cgroup is now done at the same\nplace where the ordering rules for this pointer are enforced and\nexplained.\n\nIt is also in preparation for removing the pc-\u003epage backpointer.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "ad324e94475a04cfcdfdb11ad20f8ea81268e411",
      "tree": "4326bb602a3528071ffd6f3030c3a82c76a3454e",
      "parents": [
        "f212ad7cf9c73f8a7fa160e223dcb3f074441a72"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:26 2011 -0700"
      },
      "message": "memcg: no uncharged pages reach page_cgroup_zoneinfo\n\nThis patch series removes the direct page pointer from struct page_cgroup,\nwhich saves 20% of per-page memcg memory overhead (Fedora and Ubuntu\nenable memcg per default, openSUSE apparently too).\n\nThe node id or section number is encoded in the remaining free bits of\npc-\u003eflags which allows calculating the corresponding page without the\nextra pointer.\n\nI ran, what I think is, a worst-case microbenchmark that just cats a large\nsparse file to /dev/null, because it means that walking the LRU list on\nbehalf of per-cgroup reclaim and looking up pages from page_cgroups is\nhappening constantly and at a high rate.  But it made no measurable\ndifference.  A profile reported a 0.11% share of the new\nlookup_cgroup_page() function in this benchmark.\n\nThis patch:\n\nAll callsites check PCG_USED before passing pc-\u003emem_cgroup, so the latter\nis never NULL.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "f212ad7cf9c73f8a7fa160e223dcb3f074441a72",
      "tree": "95789ef7ce662e86a3e4aded5dfb97c51dc7b0a0",
      "parents": [
        "af4a662144884a7dbb19acbef70878b3b955f928"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 23 16:42:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:25 2011 -0700"
      },
      "message": "memcg: add memcg sanity checks at allocating and freeing pages\n\nAdd checks at allocating or freeing a page whether the page is used (iow,\ncharged) from the view point of memcg.\n\nThis check may be useful in debugging a problem and we did similar checks\nbefore the commit 52d4b9ac(memcg: allocate all page_cgroup at boot).\n\nThis patch adds some overheads at allocating or freeing memory, so it\u0027s\nenabled only when CONFIG_DEBUG_VM is enabled.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "af4a662144884a7dbb19acbef70878b3b955f928",
      "tree": "f16b04ed13de1ad1938af551e406879b90d4b0ca",
      "parents": [
        "c14f35c70e068392ccae0b2d6f755baea5eed4d6"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:24 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:25 2011 -0700"
      },
      "message": "memcg: remove NULL check from lookup_page_cgroup() result\n\nThe page_cgroup array is set up before even fork is initialized.  I\nseriously doubt that this code executes before the array is alloc\u0027d.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "c14f35c70e068392ccae0b2d6f755baea5eed4d6",
      "tree": "1e3265ba63a859ee0b45ae89303afea4de19012c",
      "parents": [
        "3403968d7a7dc373901cad0cad56b3afcb09cc50"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:23 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:24 2011 -0700"
      },
      "message": "memcg: remove impossible conditional when committing\n\nNo callsite ever passes a NULL pointer for a struct mem_cgroup * to the\ncommitting function.  There is no need to check for it.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "3403968d7a7dc373901cad0cad56b3afcb09cc50",
      "tree": "9c73d17914dab16fd90dcbae4bac303a98987da0",
      "parents": [
        "9d11ea9f163a14920487bdda77461e64d600fd48"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:22 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:24 2011 -0700"
      },
      "message": "memcg: remove unused page flag bitfield defines\n\nThese definitions have been unused since \u00274b3bde4 memcg: remove the\noverhead associated with the root cgroup\u0027.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "9d11ea9f163a14920487bdda77461e64d600fd48",
      "tree": "9435e30836ee97f3e8c235451bc944cdc8a345c4",
      "parents": [
        "b7c6167848fa36e32f1874b95c1edc02881cd040"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:23 2011 -0700"
      },
      "message": "memcg: simplify the way memory limits are checked\n\nSince transparent huge pages, checking whether memory cgroups are below\ntheir limits is no longer enough, but the actual amount of chargeable\nspace is important.\n\nTo not have more than one limit-checking interface, replace\nmemory_cgroup_check_under_limit() and memory_cgroup_check_margin() with a\nsingle memory_cgroup_margin() that returns the chargeable space and leaves\nthe comparison to the callsite.\n\nSoft limits are now checked the other way round, by using the already\nexisting function that returns the amount by which soft limits are\nexceeded: res_counter_soft_limit_excess().\n\nAlso remove all the corresponding functions on the res_counter side that\nare now no longer used.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "b7c6167848fa36e32f1874b95c1edc02881cd040",
      "tree": "d160acb871f2be4e0e7095c662b647e12a199dac",
      "parents": [
        "56039efa18f2530fc23e8ef19e716b65ee2a1d1e"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Wed Mar 23 16:42:20 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:23 2011 -0700"
      },
      "message": "memcg: soft limit reclaim should end at limit not below\n\nSoft limit reclaim continues until the usage is below the current soft\nlimit, but the documented semantics are actually that soft limit reclaim\nwill push usage back until the soft limits are met again.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "56039efa18f2530fc23e8ef19e716b65ee2a1d1e",
      "tree": "a61cbd2f760e93363657622de2cd1591db028458",
      "parents": [
        "6c191cd01a935e5b53ef43c9403c771bb7a32b60"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 23 16:42:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:46:22 2011 -0700"
      },
      "message": "memcg: fix ugly initialization of return value is in caller\n\nRemove initialization of vaiable in caller of memory cgroup function.\nActually, it\u0027s return value of memcg function but it\u0027s initialized in\ncaller.\n\nSome memory cgroup uses following style to bring the result of start\nfunction to the end function for avoiding races.\n\n   mem_cgroup_start_A(\u0026(*ptr))\n   /* Something very complicated can happen here. */\n   mem_cgroup_end_A(*ptr)\n\nIn some calls, *ptr should be initialized to NULL be caller.  But it\u0027s\nugly.  This patch fixes that *ptr is initialized by _start function.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "033193275b3ffcfe7f3fde7b569f3d207f6cd6a0",
      "tree": "fc65fa02248f855f0f63e087f35a507b6abb5617",
      "parents": [
        "278df9f451dc71dcd002246be48358a473504ad0"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "dave@linux.vnet.ibm.com",
        "time": "Tue Mar 22 16:32:56 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:04 2011 -0700"
      },
      "message": "pagewalk: only split huge pages when necessary\n\nRight now, if a mm_walk has either -\u003epte_entry or -\u003epmd_entry set, it will\nunconditionally split any transparent huge pages it runs in to.  In\npractice, that means that anyone doing a\n\n\tcat /proc/$pid/smaps\n\nwill unconditionally break down every huge page in the process and depend\non khugepaged to re-collapse it later.  This is fairly suboptimal.\n\nThis patch changes that behavior.  It teaches each -\u003epmd_entry handler\n(there are five) that they must break down the THPs themselves.  Also, the\n_generic_ code will never break down a THP unless a -\u003epte_entry handler is\nactually set.\n\nThis means that the -\u003epmd_entry handlers can now choose to deal with THPs\nwithout breaking them down.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: Eric B Munson \u003cemunson@mgebm.net\u003e\nTested-by: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Michael J Wolf \u003cmjwolf@us.ibm.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@goop.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3f58a82943337fb6e79acfa5346719a97d3c0b98",
      "tree": "667441ac13c845edac93c937d0baba03a2021ea8",
      "parents": [
        "315601809d124d046abd6c3ffa346d0dbd7aa29d"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Mar 22 16:32:53 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:03 2011 -0700"
      },
      "message": "memcg: move memcg reclaimable page into tail of inactive list\n\nThe rotate_reclaimable_page function moves just written out pages, which\nthe VM wanted to reclaim, to the end of the inactive list.  That way the\nVM will find those pages first next time it needs to free memory.\n\nThis patch applies the rule in memcg.  It can help to prevent unnecessary\nworking page eviction of memcg.\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Andrea Arcangeli \u003caarcange@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": "ef6a3c63112e865d632ff7c478ba7c7160cad0d1",
      "tree": "d0bd3ee2b79674e22b8dd3f318814cd4789697b8",
      "parents": [
        "318b275fbca1ab9ec0862de71420e0e92c3d1aa7"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Mar 22 16:30:52 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:02 2011 -0700"
      },
      "message": "mm: add replace_page_cache_page() function\n\nThis function basically does:\n\n     remove_from_page_cache(old);\n     page_cache_release(old);\n     add_to_page_cache_locked(new);\n\nExcept it does this atomically, so there\u0027s no possibility for the \"add\" to\nfail because of a race.\n\nIf memory cgroups are enabled, then the memory cgroup charge is also moved\nfrom the old page to the new.\n\nThis function is currently used by fuse to move pages into the page cache\non read, instead of copying the page contents.\n\n[minchan.kim@gmail.com: add freepage() hook to replace_page_cache_page()]\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Minchan Kim \u003cminchan.kim@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": "3751d60430fe4c26460a5ca8ad8672d32f93bcb1",
      "tree": "f0bbefb76a4fc328ca441bd71fc49a5a091bb323",
      "parents": [
        "8493ae439f7038b502df1d687e61dde54c27ca92"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Feb 01 15:52:45 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:19 2011 -0800"
      },
      "message": "memcg: fix event counting breakage from recent THP update\n\nChanges in e401f1761 (\"memcg: modify accounting function for supporting\nTHP better\") adds nr_pages to support multiple page size in\nmemory_cgroup_charge_statistics.\n\nBut counting the number of event nees abs(nr_pages) for increasing\ncounters.  This patch fixes event counting.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "8493ae439f7038b502df1d687e61dde54c27ca92",
      "tree": "ba8dafa7eb3292c8d2ca4597ef6f2f06c7dcd6a6",
      "parents": [
        "19942822df65ee4a47c2e6d6d70cace1b7f01710"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Feb 01 15:52:44 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:19 2011 -0800"
      },
      "message": "memcg: never OOM when charging huge pages\n\nHuge page coverage should obviously have less priority than the continued\nexecution of a process.\n\nNever kill a process when charging it a huge page fails.  Instead, give up\nafter the first failed reclaim attempt and fall back to regular pages.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "19942822df65ee4a47c2e6d6d70cace1b7f01710",
      "tree": "1fe6fdcc92ae7e64014c04676fc91e0105bdf344",
      "parents": [
        "9221edb7120e2dc3ae90f1c58514979f7ba40e46"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Feb 01 15:52:43 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:19 2011 -0800"
      },
      "message": "memcg: prevent endless loop when charging huge pages to near-limit group\n\nIf reclaim after a failed charging was unsuccessful, the limits are\nchecked again, just in case they settled by means of other tasks.\n\nThis is all fine as long as every charge is of size PAGE_SIZE, because in\nthat case, being below the limit means having at least PAGE_SIZE bytes\navailable.\n\nBut with transparent huge pages, we may end up in an endless loop where\ncharging and reclaim fail, but we keep going because the limits are not\nyet exceeded, although not allowing for a huge page.\n\nFix this up by explicitely checking for enough room, not just whether we\nare within limits.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "9221edb7120e2dc3ae90f1c58514979f7ba40e46",
      "tree": "73818b41f9b7d73cc20fb9f4efbbe73a89b25058",
      "parents": [
        "af241a083404acda7ba3690e5b7697949d729fcc"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Feb 01 15:52:42 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:19 2011 -0800"
      },
      "message": "memcg: prevent endless loop when charging huge pages\n\nThe charging code can encounter a charge size that is bigger than a\nregular page in two situations: one is a batched charge to fill the\nper-cpu stocks, the other is a huge page charge.\n\nThis code is distributed over two functions, however, and only the outer\none is aware of huge pages.  In case the charging fails, the inner\nfunction will tell the outer function to retry if the charge size is\nbigger than regular pages--assuming batched charging is the only case.\nAnd the outer function will retry forever charging a huge page.\n\nThis patch makes sure the inner function can distinguish between batch\ncharging and a single huge page charge.  It will only signal another\nattempt if batch charging failed, and go into regular reclaim when it is\ncalled on behalf of a huge page.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "552b372ba9db85751e7db2998f07cca2e51f5865",
      "tree": "9d3aed4ed1959aeedc05be5436910ced5afc6928",
      "parents": [
        "fceda1bf498677501befc7da72fd2e4de7f18466"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Feb 01 15:52:31 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:18 2011 -0800"
      },
      "message": "memsw: deprecate noswapaccount kernel parameter and schedule it for removal\n\nnoswapaccount couldn\u0027t be used to control memsw for both on/off cases so\nwe have added swapaccount[\u003d0|1] parameter.  This way we can turn the\nfeature in two ways noswapaccount resp.  swapaccount\u003d0.  We have kept the\noriginal noswapaccount but I think we should remove it after some time as\nit just makes more command line parameters without any advantages and also\nthe code to handle parameters is uglier if we want both parameters.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nRequested-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "fceda1bf498677501befc7da72fd2e4de7f18466",
      "tree": "c23057e5368fc00b0f1c662ea9bd4b3b123c370c",
      "parents": [
        "afe8a887550f7cc24eb16449670b93f6b43c32d8"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Feb 01 15:52:30 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 02 16:03:18 2011 -0800"
      },
      "message": "memsw: handle swapaccount kernel parameter correctly\n\n__setup based kernel command line parameters handlers which are handled in\nobsolete_checksetup are provided with the parameter value including \u003d\n(more precisely everything right after the parameter name).\n\nThis means that the current implementation of swapaccount[\u003d1|0] doesn\u0027t\nwork at all because if there is a value for the parameter then we are\ntesting for \"0\" resp.  \"1\" but we are getting \"\u003d0\" resp.  \"\u003d1\" and if\nthere is no parameter value we are getting an empty string rather than\nNULL.\n\nThe original noswapccount parameter, which doesn\u0027t care about the value,\nworks correctly.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: \u003cstable@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": "52dbb9050936fd33ceb45f10529dbc992507c058",
      "tree": "1c3663f50b7dec0bd852b02d76095b9a5618d7b7",
      "parents": [
        "3d37c4a9199920964ffdfaec6335d93b9dcf9ca5"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jan 25 15:07:29 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 26 10:50:04 2011 +1000"
      },
      "message": "memcg: fix race at move_parent around compound_order()\n\nA fix up mem_cgroup_move_parent() which use compound_order() in\nasynchronous manner.  This compound_order() may return unknown value\nbecause we don\u0027t take lock.  Use PageTransHuge() and HPAGE_SIZE instead\nof it.\n\nAlso clean up for mem_cgroup_move_parent().\n - remove unnecessary initialization of local variable.\n - rename charge_size -\u003e page_size\n - remove unnecessary (wrong) comment.\n - added a comment about THP.\n\nNote:\n Current design take compound_page_lock() in caller of move_account().\n This should be revisited when we implement direct move_task of hugepage\n without splitting.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3d37c4a9199920964ffdfaec6335d93b9dcf9ca5",
      "tree": "ee37989687d869817aa870a7fb4c405b7907c030",
      "parents": [
        "01c88e2d6b7330c0cc5867fe2297e7d826e1337d"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jan 25 15:07:28 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 26 10:50:03 2011 +1000"
      },
      "message": "memcg: bugfix check mem_cgroup_disabled() at split fixup\n\nmem_cgroup_disabled() should be checked at splitting.  If disabled, no\nheavy work is necesary.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "01c88e2d6b7330c0cc5867fe2297e7d826e1337d",
      "tree": "0a905aa1558af7fd401d768ead121e2b11a4a2f4",
      "parents": [
        "28bd65781c848d95ba6a7f58b5c4b8265a804ec6"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jan 25 15:07:27 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 26 10:50:03 2011 +1000"
      },
      "message": "memcg: fix account leak at failure of memsw acconting\n\nCommit 4b53433468 (\"memcg: clean up try_charge main loop\") removes a\ncancel of charge at case: memory charge-\u003e success.  mem+swap charge-\u003e\nfailure.\n\nThis leaks usage of memory.  Fix it.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: \u003cstable@kernel.org\u003e\t[2.6.36+]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8dba474f034c322d96ada39cb20cac711d80dcb2",
      "tree": "ef007c5c3088b2ef83be074a7720892b6b8e5e4b",
      "parents": [
        "2ff754fa8f416e82327f2d8f1354a033b66286df"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "jj@chaosbits.net",
        "time": "Tue Jan 25 15:07:24 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 26 10:50:01 2011 +1000"
      },
      "message": "mm/memcontrol.c: fix uninitialized variable use in mem_cgroup_move_parent()\n\nIn mm/memcontrol.c::mem_cgroup_move_parent() there\u0027s a path that jumps\nto the \u0027put_back\u0027 label\n\n  \tret \u003d __mem_cgroup_try_charge(NULL, gfp_mask, \u0026parent, false, charge);\n  \tif (ret || !parent)\n  \t\tgoto put_back;\n\nwhere we\u0027ll\n\n  \tif (charge \u003e PAGE_SIZE)\n  \t\tcompound_unlock_irqrestore(page, flags);\n\nbut, we have not assigned anything to \u0027flags\u0027 at this point, nor have we\ncalled \u0027compound_lock_irqsave()\u0027 (which is what sets \u0027flags\u0027).  The\n\u0027put_back\u0027 label should be moved below the call to\ncompound_unlock_irqrestore() as per this patch.\n\nSigned-off-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Pavel Emelianov \u003cxemul@openvz.org\u003e\nCc: \"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": "713735b4233fad3ae35b5cad656baa41413887ca",
      "tree": "bba0310f23fb911106e04d75eebe1c6ee7e8d423",
      "parents": [
        "2550326ac7a062fdfc204f9a3b98bdb9179638fc"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Thu Jan 20 14:44:31 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:06 2011 -0800"
      },
      "message": "memcg: correctly order reading PCG_USED and pc-\u003emem_cgroup\n\nThe placement of the read-side barrier is confused: the writer first\nsets pc-\u003emem_cgroup, then PCG_USED.  The read-side barrier has to be\nbetween testing PCG_USED and reading pc-\u003emem_cgroup.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "987eba66e0e6aa654d60881a14731a353ee0acb4",
      "tree": "04138f68481ccd3e8f9447037c3737c568fa3330",
      "parents": [
        "ece35ca810326946ddc930c43356312ad5de44d4"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 20 14:44:25 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:06 2011 -0800"
      },
      "message": "memcg: fix rmdir, force_empty with THP\n\nNow, when THP is enabled, memcg\u0027s rmdir() function is broken because\nmove_account() for THP page is not supported.\n\nThis will cause account leak or -EBUSY issue at rmdir().\nThis patch fixes the issue by supporting move_account() THP pages.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "ece35ca810326946ddc930c43356312ad5de44d4",
      "tree": "7e9138fbd0da696f695b45dddd8baa587bd284a4",
      "parents": [
        "ca3e021417eed30ec2b64ce88eb0acf64aa9bc29"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 20 14:44:24 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:06 2011 -0800"
      },
      "message": "memcg: fix LRU accounting with THP\n\nmemory cgroup\u0027s LRU stat should take care of size of pages because\nTransparent Hugepage inserts hugepage into LRU.  If this value is the\nnumber wrong, memory reclaim will not work well.\n\nNote: only head page of THP\u0027s huge page is linked into LRU.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "ca3e021417eed30ec2b64ce88eb0acf64aa9bc29",
      "tree": "710590e51764d56c12d00744c402ab15c0d14a6b",
      "parents": [
        "e401f1761c0b01966e36e41e2c385d455a7b44ee"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 20 14:44:24 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:06 2011 -0800"
      },
      "message": "memcg: fix USED bit handling at uncharge in THP\n\nNow, under THP:\n\nat charge:\n  - PageCgroupUsed bit is set to all page_cgroup on a hugepage.\n    ....set to 512 pages.\nat uncharge\n  - PageCgroupUsed bit is unset on the head page.\n\nSo, some pages will remain with \"Used\" bit.\n\nThis patch fixes that Used bit is set only to the head page.\nUsed bits for tail pages will be set at splitting if necessary.\n\nThis patch adds this lock order:\n   compound_lock() -\u003e page_cgroup_move_lock().\n\n[akpm@linux-foundation.org: fix warning]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "e401f1761c0b01966e36e41e2c385d455a7b44ee",
      "tree": "3b1ac772f0708ba0b1c963663ce6d0d0f79884b6",
      "parents": [
        "20d9600cb407b0b55fef6ee814b60345c6f58264"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 20 14:44:23 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:05 2011 -0800"
      },
      "message": "memcg: modify accounting function for supporting THP better\n\nmem_cgroup_charge_statisics() was designed for charging a page but now, we\nhave transparent hugepage.  To fix problems (in following patch) it\u0027s\nrequired to change the function to get the number of pages as its\narguments.\n\nThe new function gets following as argument.\n  - type of page rather than \u0027pc\u0027\n  - size of page which is accounted.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "50de1dd967d4ba3b8a90ebe7a4f5feca24191317",
      "tree": "ed2aa4352ae3c2887a90ef6279588a7048397d1b",
      "parents": [
        "17295c88a160c6eea3fcf46cec9d08a0fcb02db9"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Jan 13 15:47:43 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:51 2011 -0800"
      },
      "message": "memcg: fix memory migration of shmem swapcache\n\nIn the current implementation mem_cgroup_end_migration() decides whether\nthe page migration has succeeded or not by checking \"oldpage-\u003emapping\".\n\nBut if we are tring to migrate a shmem swapcache, the page-\u003emapping of it\nis NULL from the begining, so the check would be invalid.  As a result,\nmem_cgroup_end_migration() assumes the migration has succeeded even if\nit\u0027s not, so \"newpage\" would be freed while it\u0027s not uncharged.\n\nThis patch fixes it by passing mem_cgroup_end_migration() the result of\nthe page migration.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.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": "17295c88a160c6eea3fcf46cec9d08a0fcb02db9",
      "tree": "35fe45824b5ddd6d406d2d7d7562438a4725e57e",
      "parents": [
        "dfe076b0971a783469bc2066e85d46e23c8acb1c"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "jj@chaosbits.net",
        "time": "Thu Jan 13 15:47:42 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:51 2011 -0800"
      },
      "message": "memcg: use [kv]zalloc[_node] rather than [kv]malloc+memset\n\nIn mem_cgroup_alloc() we currently do either kmalloc() or vmalloc() then\nfollowed by memset() to zero the memory.  This can be more efficiently\nachieved by using kzalloc() and vzalloc().  There\u0027s also one situation\nwhere we can use kzalloc_node() - this is what\u0027s new in this version of\nthe patch.\n\nSigned-off-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Li Zefan \u003clizf@cn.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": "dfe076b0971a783469bc2066e85d46e23c8acb1c",
      "tree": "ee0856c119ed898212da2555f936fb3284c5ff59",
      "parents": [
        "043d18b1e5bdfc4870b8a19d00f0d5c636a5c231"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Jan 13 15:47:41 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:51 2011 -0800"
      },
      "message": "memcg: fix deadlock between cpuset and memcg\n\nCommit b1dd693e (\"memcg: avoid deadlock between move charge and\ntry_charge()\") can cause another deadlock about mmap_sem on task migration\nif cpuset and memcg are mounted onto the same mount point.\n\nAfter the commit, cgroup_attach_task() has sequence like:\n\ncgroup_attach_task()\n  ss-\u003ecan_attach()\n    cpuset_can_attach()\n    mem_cgroup_can_attach()\n      down_read(\u0026mmap_sem)        (1)\n  ss-\u003eattach()\n    cpuset_attach()\n      mpol_rebind_mm()\n        down_write(\u0026mmap_sem)     (2)\n        up_write(\u0026mmap_sem)\n      cpuset_migrate_mm()\n        do_migrate_pages()\n          down_read(\u0026mmap_sem)\n          up_read(\u0026mmap_sem)\n    mem_cgroup_move_task()\n      mem_cgroup_clear_mc()\n        up_read(\u0026mmap_sem)\n\nWe can cause deadlock at (2) because we\u0027ve already aquire the mmap_sem at (1).\n\nBut the commit itself is necessary to fix deadlocks which have existed\nbefore the commit like:\n\nEx.1)\n                move charge             |        try charge\n  --------------------------------------+------------------------------\n    mem_cgroup_can_attach()             |  down_write(\u0026mmap_sem)\n      mc.moving_task \u003d current          |    ..\n      mem_cgroup_precharge_mc()         |  __mem_cgroup_try_charge()\n        mem_cgroup_count_precharge()    |    prepare_to_wait()\n          down_read(\u0026mmap_sem)          |    if (mc.moving_task)\n          -\u003e cannot aquire the lock     |    -\u003e true\n                                        |      schedule()\n                                        |      -\u003e move charge should wake it up\n\nEx.2)\n                move charge             |        try charge\n  --------------------------------------+------------------------------\n    mem_cgroup_can_attach()             |\n      mc.moving_task \u003d current          |\n      mem_cgroup_precharge_mc()         |\n        mem_cgroup_count_precharge()    |\n          down_read(\u0026mmap_sem)          |\n          ..                            |\n          up_read(\u0026mmap_sem)            |\n                                        |  down_write(\u0026mmap_sem)\n    mem_cgroup_move_task()              |    ..\n      mem_cgroup_move_charge()          |  __mem_cgroup_try_charge()\n        down_read(\u0026mmap_sem)            |    prepare_to_wait()\n        -\u003e cannot aquire the lock       |    if (mc.moving_task)\n                                        |    -\u003e true\n                                        |      schedule()\n                                        |      -\u003e move charge should wake it up\n\nThis patch fixes all of these problems by:\n1. revert the commit.\n2. To fix the Ex.1, we set mc.moving_task after mem_cgroup_count_precharge()\n   has released the mmap_sem.\n3. To fix the Ex.2, we use down_read_trylock() instead of down_read() in\n   mem_cgroup_move_charge() and, if it has failed to aquire the lock, cancel\n   all extra charges, wake up all waiters, and retry trylock.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReported-by: Ben Blum \u003cbblum@andrew.cmu.edu\u003e\nCc: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Hiroyuki Kamezawa \u003ckamezawa.hiroyuki@gmail.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "043d18b1e5bdfc4870b8a19d00f0d5c636a5c231",
      "tree": "c2392e1fb2c1f7b23446ae4c59aa2d35134ab3d3",
      "parents": [
        "f3e8eb70b1807d1b30aa6972af0cf30077c40112"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Thu Jan 13 15:47:40 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: remove unnecessary return from void-returning mem_cgroup_del_lru_list()\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "f3e8eb70b1807d1b30aa6972af0cf30077c40112",
      "tree": "5b541e4850fa6a9922b288e9efd7c632021657f6",
      "parents": [
        "dbd4ea78f002df283c95d9774837041735fa1bf9"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Thu Jan 13 15:47:39 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: fix unit mismatch in memcg oom limit calculation\n\nAdding the number of swap pages to the byte limit of a memory control\ngroup makes no sense.  Convert the pages to bytes before adding them.\n\nThe only user of this code is the OOM killer, and the way it is used means\nthat the error results in a higher OOM badness value.  Since the cgroup\nlimit is the same for all tasks in the cgroup, the error should have no\npractical impact at the moment.\n\nBut let\u0027s not wait for future or changing users to trip over it.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.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": "dbd4ea78f002df283c95d9774837041735fa1bf9",
      "tree": "e709c6c5c026b1c230bb87ddcfe8415aaf255820",
      "parents": [
        "2a7106f2cb0768d00fe8c1eb42a754a7d8518f08"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 13 15:47:38 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: add lock to synchronize page accounting and migration\n\nIntroduce a new bit spin lock, PCG_MOVE_LOCK, to synchronize the page\naccounting and migration code.  This reworks the locking scheme of\n_update_stat() and _move_account() by adding new lock bit PCG_MOVE_LOCK,\nwhich is always taken under IRQ disable.\n\n1. If pages are being migrated from a memcg, then updates to that\n   memcg page statistics are protected by grabbing PCG_MOVE_LOCK using\n   move_lock_page_cgroup().  In an upcoming commit, memcg dirty page\n   accounting will be updating memcg page accounting (specifically: num\n   writeback pages) from IRQ context (softirq).  Avoid a deadlocking\n   nested spin lock attempt by disabling irq on the local processor when\n   grabbing the PCG_MOVE_LOCK.\n\n2. lock for update_page_stat is used only for avoiding race with\n   move_account().  So, IRQ awareness of lock_page_cgroup() itself is not\n   a problem.  The problem is between mem_cgroup_update_page_stat() and\n   mem_cgroup_move_account_page().\n\nTrade-off:\n  * Changing lock_page_cgroup() to always disable IRQ (or\n    local_bh) has some impacts on performance and I think\n    it\u0027s bad to disable IRQ when it\u0027s not necessary.\n  * adding a new lock makes move_account() slower.  Score is\n    here.\n\nPerformance Impact: moving a 8G anon process.\n\nBefore:\n\treal    0m0.792s\n\tuser    0m0.000s\n\tsys     0m0.780s\n\nAfter:\n\treal    0m0.854s\n\tuser    0m0.000s\n\tsys     0m0.842s\n\nThis score is bad but planned patches for optimization can reduce\nthis impact.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Andrea Righi \u003carighi@develer.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2a7106f2cb0768d00fe8c1eb42a754a7d8518f08",
      "tree": "730bef06e752c1edcb2d475fd193f94bea00bf6a",
      "parents": [
        "ece72400c2a27a3d726cb0854449f991d9fcd2da"
      ],
      "author": {
        "name": "Greg Thelen",
        "email": "gthelen@google.com",
        "time": "Thu Jan 13 15:47:37 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: create extensible page stat update routines\n\nReplace usage of the mem_cgroup_update_file_mapped() memcg\nstatistic update routine with two new routines:\n* mem_cgroup_inc_page_stat()\n* mem_cgroup_dec_page_stat()\n\nAs before, only the file_mapped statistic is managed.  However, these more\ngeneral interfaces allow for new statistics to be more easily added.  New\nstatistics are added with memcg dirty page accounting.\n\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nSigned-off-by: Andrea Righi \u003carighi@develer.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "37c2ac7872a9387542616f658d20ac25f5bdb32e",
      "tree": "d115915db4a61e261012bf0f9c4cf14630243d71",
      "parents": [
        "91600e9e592e48736e630851c83da2ad6bf0e91f"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:16 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:47 2011 -0800"
      },
      "message": "thp: compound_trans_order\n\nRead compound_trans_order safe. Noop for CONFIG_TRANSPARENT_HUGEPAGE\u003dn.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\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": "2c888cfbc1b45508a44763d85ba2e8ac43faff5f",
      "tree": "9a7f2214e5d6a01d5724ae63d4d50cddeb2293ff",
      "parents": [
        "97562cd243298acf573620c764a1037bd545c9bc"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Thu Jan 13 15:47:13 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:46 2011 -0800"
      },
      "message": "thp: fix anon memory statistics with transparent hugepages\n\nCount each transparent hugepage as HPAGE_PMD_NR pages in the LRU\nstatistics, so the Active(anon) and Inactive(anon) statistics in\n/proc/meminfo are correct.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@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": "152c9ccb75548c027fa3103efa4fa4e19a345449",
      "tree": "d22e8f71b3e0689fc0e3ae21609ae1abe5bc4d2f",
      "parents": [
        "ec1685109f1314a30919489ef2800ed626a38c1e"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Jan 13 15:46:56 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:43 2011 -0800"
      },
      "message": "thp: transhuge-memcg: commit tail pages at charge\n\nBy this patch, when a transparent hugepage is charged, not only the head\npage but also all the tail pages are committed, IOW pc-\u003emem_cgroup and\npc-\u003eflags of tail pages are set.\n\nWithout this patch:\n\n- Tail pages are not linked to any memcg\u0027s LRU at splitting. This causes many\n  problems, for example, the charged memcg\u0027s directory can never be rmdir\u0027ed\n  because it doesn\u0027t have enough pages to scan to make the usage decrease to 0.\n- \"rss\" field in memory.stat would be incorrect. Moreover, usage_in_bytes in\n  root cgroup is calculated by the stat not by res_counter(since 2.6.32),\n  it would be incorrect too.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@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": "ec1685109f1314a30919489ef2800ed626a38c1e",
      "tree": "48ac32238182623af24b6c25be456c0ca432047b",
      "parents": [
        "500d65d471018d9a13b0d51b7e141ed2a3555c1d"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:56 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:43 2011 -0800"
      },
      "message": "thp: memcg compound\n\nTeach memcg to charge/uncharge compound pages.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@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": "ebb76ce16daf6908dc030dec1c00827d37129fe5",
      "tree": "28abdc67466bb5d8d4566e36c914518b0533b4bf",
      "parents": [
        "b83be6f20a0e468f715b14225c9f897538dfe5ad"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Dec 29 14:07:11 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 30 10:07:06 2010 -0800"
      },
      "message": "memcg: fix wrong VM_BUG_ON() in try_charge()\u0027s mm-\u003eowner check\n\nAt __mem_cgroup_try_charge(), VM_BUG_ON(!mm-\u003eowner) is checked.\nBut as commented in mem_cgroup_from_task(), mm-\u003eowner can be NULL\nin some racy case. This check of VM_BUG_ON() is bad.\n\nA possible story to hit this is at swapoff()-\u003etry_to_unuse(). It passes\nmm_struct to mem_cgroup_try_charge_swapin() while mm-\u003eowner is NULL. If we\ncan\u0027t get proper mem_cgroup from swap_cgroup information, mm-\u003eowner is used\nas charge target and we see NULL.\n\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReported-by: Hugh Dickins \u003chughd@google.com\u003e\nReported-by: Thomas Meyer \u003cthomas@m3y3r.de\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a42c390cfa0c2612459d7226ba11612847ca3a64",
      "tree": "1dc06659b4f232461eb6852b8c4d17f8305aca91",
      "parents": [
        "b1dd693e5b9348bd68a80e679e03cf9c0973b01b"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Wed Nov 24 12:57:08 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 25 06:50:45 2010 +0900"
      },
      "message": "cgroups: make swap accounting default behavior configurable\n\nSwap accounting can be configured by CONFIG_CGROUP_MEM_RES_CTLR_SWAP\nconfiguration option and then it is turned on by default.  There is a boot\noption (noswapaccount) which can disable this feature.\n\nThis makes it hard for distributors to enable the configuration option as\nthis feature leads to a bigger memory consumption and this is a no-go for\ngeneral purpose distribution kernel.  On the other hand swap accounting\nmay be very usuful for some workloads.\n\nThis patch adds a new configuration option which controls the default\nbehavior (CGROUP_MEM_RES_CTLR_SWAP_ENABLED).  If the option is selected\nthen the feature is turned on by default.\n\nIt also adds a new boot parameter swapaccount[\u003d1|0] which enhances the\noriginal noswapaccount parameter semantic by means of enable/disable logic\n(defaults to 1 if no value is provided to be still consistent with\nnoswapaccount).\n\nThe default behavior is unchanged (if CONFIG_CGROUP_MEM_RES_CTLR_SWAP is\nenabled then CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED is enabled as well)\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "b1dd693e5b9348bd68a80e679e03cf9c0973b01b",
      "tree": "557c8e0634fba47ea61ed9fbb8742d907c567944",
      "parents": [
        "11e7946f196e5fdde20584e3e58c60335ee3b3bc"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Nov 24 12:57:06 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 25 06:50:44 2010 +0900"
      },
      "message": "memcg: avoid deadlock between move charge and try_charge()\n\n__mem_cgroup_try_charge() can be called under down_write(\u0026mmap_sem)(e.g.\nmlock does it). This means it can cause deadlock if it races with move charge:\n\nEx.1)\n                move charge             |        try charge\n  --------------------------------------+------------------------------\n    mem_cgroup_can_attach()             |  down_write(\u0026mmap_sem)\n      mc.moving_task \u003d current          |    ..\n      mem_cgroup_precharge_mc()         |  __mem_cgroup_try_charge()\n        mem_cgroup_count_precharge()    |    prepare_to_wait()\n          down_read(\u0026mmap_sem)          |    if (mc.moving_task)\n          -\u003e cannot aquire the lock     |    -\u003e true\n                                        |      schedule()\n\nEx.2)\n                move charge             |        try charge\n  --------------------------------------+------------------------------\n    mem_cgroup_can_attach()             |\n      mc.moving_task \u003d current          |\n      mem_cgroup_precharge_mc()         |\n        mem_cgroup_count_precharge()    |\n          down_read(\u0026mmap_sem)          |\n          ..                            |\n          up_read(\u0026mmap_sem)            |\n                                        |  down_write(\u0026mmap_sem)\n    mem_cgroup_move_task()              |    ..\n      mem_cgroup_move_charge()          |  __mem_cgroup_try_charge()\n        down_read(\u0026mmap_sem)            |    prepare_to_wait()\n        -\u003e cannot aquire the lock       |    if (mc.moving_task)\n                                        |    -\u003e true\n                                        |      schedule()\n\nTo avoid this deadlock, we do all the move charge works (both can_attach() and\nattach()) under one mmap_sem section.\nAnd after this patch, we set/clear mc.moving_task outside mc.lock, because we\nuse the lock only to check mc.from/to.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: \u003cstable@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": "112bc2e120a94a511858918d6866a4978f9c500e",
      "tree": "032f59b4eca42074de6a30e0d4c13426cbbf86c8",
      "parents": [
        "69e83dad5207f8f03c9699e57e1febb114383cb8"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Nov 24 12:56:58 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 25 06:50:40 2010 +0900"
      },
      "message": "memcg: fix false positive VM_BUG on non-SMP\n\nFix this:\n\n  kernel BUG at mm/memcontrol.c:2155!\n  invalid opcode: 0000 [#1]\n  last sysfs file:\n\n  Pid: 18, comm: sh Not tainted 2.6.37-rc3 #3 /Bochs\n  EIP: 0060:[\u003cc10731b2\u003e] EFLAGS: 00000246 CPU: 0\n  EIP is at mem_cgroup_move_account+0xe2/0xf0\n  EAX: 00000004 EBX: c6f931d4 ECX: c681c300 EDX: c681c000\n  ESI: c681c300 EDI: ffffffea EBP: c681c000 ESP: c46f3e30\n   DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068\n  Process sh (pid: 18, ti\u003dc46f2000 task\u003dc6826e60 task.ti\u003dc46f2000)\n  Stack:\n   00000155 c681c000 0805f000 c46ee180 c46f3e5c c7058820 c1074d37 00000000\n   08060000 c46db9a0 c46ec080 c7058820 0805f000 08060000 c46f3e98 c1074c50\n   c106c75e c46f3e98 c46ec080 08060000 0805ffff c46db9a0 c46f3e98 c46e0340\n  Call Trace:\n   [\u003cc1074d37\u003e] ? mem_cgroup_move_charge_pte_range+0xe7/0x130\n   [\u003cc1074c50\u003e] ? mem_cgroup_move_charge_pte_range+0x0/0x130\n   [\u003cc106c75e\u003e] ? walk_page_range+0xee/0x1d0\n   [\u003cc10725d6\u003e] ? mem_cgroup_move_task+0x66/0x90\n   [\u003cc1074c50\u003e] ? mem_cgroup_move_charge_pte_range+0x0/0x130\n   [\u003cc1072570\u003e] ? mem_cgroup_move_task+0x0/0x90\n   [\u003cc1042616\u003e] ? cgroup_attach_task+0x136/0x200\n   [\u003cc1042878\u003e] ? cgroup_tasks_write+0x48/0xc0\n   [\u003cc1041e9e\u003e] ? cgroup_file_write+0xde/0x220\n   [\u003cc101398d\u003e] ? do_page_fault+0x17d/0x3f0\n   [\u003cc108a79d\u003e] ? alloc_fd+0x2d/0xd0\n   [\u003cc1041dc0\u003e] ? cgroup_file_write+0x0/0x220\n   [\u003cc1077ba2\u003e] ? vfs_write+0x92/0xc0\n   [\u003cc1077c81\u003e] ? sys_write+0x41/0x70\n   [\u003cc1140e3d\u003e] ? syscall_call+0x7/0xb\n  Code: 03 00 74 09 8b 44 24 04 e8 1c f1 ff ff 89 73 04 8d 86 b0 00 00 00 b9 01 00 00 00 89 da 31 ff e8 65 f5 ff ff e9 4d ff ff ff 0f 0b \u003c0f\u003e 0b 0f 0b 0f 0b 90 8d b4 26 00 00 00 00 83 ec 10 8b 0d f4 e3\n  EIP: [\u003cc10731b2\u003e] mem_cgroup_move_account+0xe2/0xf0 SS:ESP 0068:c46f3e30\n  ---[ end trace 7daa1582159b6532 ]---\n\nlock_page_cgroup and unlock_page_cgroup are implemented using\nbit_spinlock.  bit_spinlock doesn\u0027t touch the bit if we are on non-SMP\nmachine, so we can\u0027t use the bit to check whether the lock was taken.\n\nLet\u0027s introduce is_page_cgroup_locked based on bit_spin_is_locked instead\nof PageCgroupLocked to fix it.\n\n[akpm@linux-foundation.org: s/is_page_cgroup_locked/page_is_cgroup_locked/]\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujtisu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d2e61b8dc99fdb36e0fd176e25365f69afda4ff9",
      "tree": "580325e7a44fc02d985bca17a1d7601e6ed81cb9",
      "parents": [
        "1093736b3c34319b8f1825a4423414d9cf397d73"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Thu Nov 11 14:05:12 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 12 07:55:31 2010 -0800"
      },
      "message": "memcg: null dereference on allocation failure\n\nThe original code had a null dereference if alloc_percpu() failed.  This\nwas introduced in commit 711d3d2c9bc3 (\"memcg: cpu hotplug aware percpu\ncount updates\")\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nReviewed-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: 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": "26174efd42100eefac67732c0c12f41a205fa335",
      "tree": "81a7d758a3fcfd755e9e94ee7f66854133c281cf",
      "parents": [
        "1489ebad8b5b20300562f634f279cb9c435fd90b"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Oct 27 15:33:43 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:10 2010 -0700"
      },
      "message": "memcg: generic filestat update interface\n\nThis patch extracts the core logic from mem_cgroup_update_file_mapped() as\nmem_cgroup_update_file_stat() and adds a wrapper.\n\nAs a planned future update, memory cgroup has to count dirty pages to\nimplement dirty_ratio/limit.  And more, the number of dirty pages is\nrequired to kick flusher thread to start writeback.  (Now, no kick.)\n\nThis patch is preparation for it and makes other statistics implementation\nclearer.  Just a clean up.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nReviewed-by: Greg Thelen \u003cgthelen@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": "1489ebad8b5b20300562f634f279cb9c435fd90b",
      "tree": "4bfa738b0733c11120705aaa37a45d87d1dd5534",
      "parents": [
        "711d3d2c9bc3fb7cb5116352fecdb5b4adb6db6e"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Oct 27 15:33:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:09 2010 -0700"
      },
      "message": "memcg: cpu hotplug aware quick acount_move detection\n\nAn event counter MEM_CGROUP_ON_MOVE is used for quick check whether file\nstat update can be done in async manner or not.  Now, it use percpu\ncounter and for_each_possible_cpu to update.\n\nThis patch replaces for_each_possible_cpu to for_each_online_cpu and adds\nnecessary synchronization logic at CPU HOTPLUG.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.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": "711d3d2c9bc3fb7cb5116352fecdb5b4adb6db6e",
      "tree": "09979a5e3d7b2e1fe7b7de193d11d6f468a67e76",
      "parents": [
        "7d74b06f240f1bd1b4b68dd6fe84164d8bf4e315"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Oct 27 15:33:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:09 2010 -0700"
      },
      "message": "memcg: cpu hotplug aware percpu count updates\n\nNow, memcgroup\u0027s per cpu coutner uses for_each_possible_cpu() to get the\nvalue.  It\u0027s better to use for_each_online_cpu() and a cpu hotplug\nhandler.\n\nThis patch only handles statistics counter.  MEM_CGROUP_ON_MOVE will be\nhandled in another patch.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.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": "7d74b06f240f1bd1b4b68dd6fe84164d8bf4e315",
      "tree": "3b52304b322390a9b5782b4d498e5e0a14e3266b",
      "parents": [
        "32047e2a85f06633ee4c53e2d0346fbcd34e480b"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Oct 27 15:33:41 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:09 2010 -0700"
      },
      "message": "memcg: use for_each_mem_cgroup\n\nIn memory cgroup management, we sometimes have to walk through\nsubhierarchy of cgroup to gather informaiton, or lock something, etc.\n\nNow, to do that, mem_cgroup_walk_tree() function is provided.  It calls\ngiven callback function per cgroup found.  But the bad thing is that it\nhas to pass a fixed style function and argument, \"void*\" and it adds much\ntype casting to memcontrol.c.\n\nTo make the code clean, this patch replaces walk_tree() with\n\n  for_each_mem_cgroup_tree(iter, root)\n\nAn iterator style call.  The good point is that iterator call doesn\u0027t have\nto assume what kind of function is called under it.  A bad point is that\nit may cause reference-count leak if a caller use \"break\" from the loop by\nmistake.\n\nI think the benefit is larger.  The modified code seems straigtforward and\neasy to read because we don\u0027t have misterious callbacks and pointer cast.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.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": "32047e2a85f06633ee4c53e2d0346fbcd34e480b",
      "tree": "25ed1e04bf60a46951581b0ad28a45e51b1602a2",
      "parents": [
        "0c270f8f9988fb0d93ea214fdcff7ab90eb3d894"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Oct 27 15:33:40 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:09 2010 -0700"
      },
      "message": "memcg: avoid lock in updating file_mapped (Was fix race in file_mapped accouting flag management\n\nAt accounting file events per memory cgroup, we need to find memory cgroup\nvia page_cgroup-\u003emem_cgroup.  Now, we use lock_page_cgroup() for guarantee\npc-\u003emem_cgroup is not overwritten while we make use of it.\n\nBut, considering the context which page-cgroup for files are accessed,\nwe can use alternative light-weight mutual execusion in the most case.\n\nAt handling file-caches, the only race we have to take care of is \"moving\"\naccount, IOW, overwriting page_cgroup-\u003emem_cgroup.  (See comment in the\npatch)\n\nUnlike charge/uncharge, \"move\" happens not so frequently. It happens only when\nrmdir() and task-moving (with a special settings.)\nThis patch adds a race-checker for file-cache-status accounting v.s. account\nmoving. The new per-cpu-per-memcg counter MEM_CGROUP_ON_MOVE is added.\nThe routine for account move\n  1. Increment it before start moving\n  2. Call synchronize_rcu()\n  3. Decrement it after the end of moving.\nBy this, file-status-counting routine can check it needs to call\nlock_page_cgroup(). In most case, I doesn\u0027t need to call it.\n\nFollowing is a perf data of a process which mmap()/munmap 32MB of file cache\nin a minute.\n\nBefore patch:\n    28.25%     mmap  mmap               [.] main\n    22.64%     mmap  [kernel.kallsyms]  [k] page_fault\n     9.96%     mmap  [kernel.kallsyms]  [k] mem_cgroup_update_file_mapped\n     3.67%     mmap  [kernel.kallsyms]  [k] filemap_fault\n     3.50%     mmap  [kernel.kallsyms]  [k] unmap_vmas\n     2.99%     mmap  [kernel.kallsyms]  [k] __do_fault\n     2.76%     mmap  [kernel.kallsyms]  [k] find_get_page\n\nAfter patch:\n    30.00%     mmap  mmap               [.] main\n    23.78%     mmap  [kernel.kallsyms]  [k] page_fault\n     5.52%     mmap  [kernel.kallsyms]  [k] mem_cgroup_update_file_mapped\n     3.81%     mmap  [kernel.kallsyms]  [k] unmap_vmas\n     3.26%     mmap  [kernel.kallsyms]  [k] find_get_page\n     3.18%     mmap  [kernel.kallsyms]  [k] __do_fault\n     3.03%     mmap  [kernel.kallsyms]  [k] filemap_fault\n     2.40%     mmap  [kernel.kallsyms]  [k] handle_mm_fault\n     2.40%     mmap  [kernel.kallsyms]  [k] do_page_fault\n\nThis patch reduces memcg\u0027s cost to some extent.\n(mem_cgroup_update_file_mapped is called by both of map/unmap)\n\nNote: It seems some more improvements are required..but no idea.\n      maybe removing set/unset flag is required.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Greg Thelen \u003cgthelen@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": "0c270f8f9988fb0d93ea214fdcff7ab90eb3d894",
      "tree": "b4f77a6714d245841ecec535ccbeba535c0d29a4",
      "parents": [
        "45531757b45cae0ce64c5aff08c2534d5a0fa3e7"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Oct 27 15:33:39 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:09 2010 -0700"
      },
      "message": "memcg: fix race in file_mapped accouting flag management\n\nPresently memory cgroup accounts file-mapped by counter and flag.  counter\nis working in the same way with zone_stat but FileMapped flag only exists\nin memcg (for helping move_account).\n\nThis flag can be updated wrongly in a case.  Assume CPU0 and CPU1 and a\nthread mapping a page on CPU0, another thread unmapping it on CPU1.\n\n    CPU0                   \t\tCPU1\n\t\t\t\trmv rmap (mapcount 1-\u003e0)\n   add rmap (mapcount 0-\u003e1)\n   lock_page_cgroup()\n   memcg counter+1\t\t(some delay)\n   set MAPPED FLAG.\n   unlock_page_cgroup()\n\t\t\t\tlock_page_cgroup()\n\t\t\t\tmemcg counter-1\n\t\t\t\tclear MAPPED flag\n\nIn the above sequence counter is properly updated but FLAG is not.  This\nmeans that representing a state by a flag which is maintained by counter\nneeds some special care.\n\nTo handle this, when clearing a flag, this patch check mapcount directly\nand clear the flag only when mapcount \u003d\u003d 0.  (if mapcount \u003e0, someone will\nmake it to zero later and flag will be cleared.)\n\nReverse case, dec-after-inc cannot be a problem because page_table_lock()\nworks well for it.  (IOW, to make above sequence, 2 processes should touch\nthe same page at once with map/unmap.)\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Greg Thelen \u003cgthelen@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": "ad4ca5f4b70236dab5e457ff6567d36f75d2e7c5",
      "tree": "b3c5f477a79516389201d342dda2a3591cfa4332",
      "parents": [
        "f241e6607b5a5aefa23c652dbe947b7465633984"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Thu Oct 07 12:59:27 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 07 13:31:21 2010 -0700"
      },
      "message": "memcg: fix thresholds with use_hierarchy \u003d\u003d 1\n\nWe need to check parent\u0027s thresholds if parent has use_hierarchy \u003d\u003d 1 to\nbe sure that parent\u0027s threshold events will be triggered even if parent\nitself is not active (no MEM_CGROUP_EVENTS).\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "13d7e3a2dba6a79589ed34dc0b9114d7b5ff9eab",
      "tree": "b22db0b9ab3af864c7517ca38887048423194e41",
      "parents": [
        "00918b6ab89df8984ca06397cb77994dabd73f9b"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Aug 10 18:03:06 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:19 2010 -0700"
      },
      "message": "memcg: convert to use zone_to_nid() from bare zone-\u003ezone_pgdat-\u003enode_id\n\nWe have zone_to_nid().  this patch convert all existing users of\nzone-\u003ezone_pgdat-\u003enode_id.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Nishimura Daisuke \u003cd-nishimura@mtf.biglobe.ne.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "00918b6ab89df8984ca06397cb77994dabd73f9b",
      "tree": "2ca2f0f0e7f3ca235c254f05759f96f160e3c0ab",
      "parents": [
        "14fec79680f7cc4617d6ba69324e63d4a732986c"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Aug 10 18:03:05 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:19 2010 -0700"
      },
      "message": "memcg: remove nid and zid argument from mem_cgroup_soft_limit_reclaim()\n\nmem_cgroup_soft_limit_reclaim() has zone, nid and zid argument.  but nid\nand zid can be calculated from zone.  So remove it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Nishimura Daisuke \u003cd-nishimura@mtf.biglobe.ne.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "14fec79680f7cc4617d6ba69324e63d4a732986c",
      "tree": "f8a9b627a03d04ec7c76fb67f8ea66c81c57a92f",
      "parents": [
        "da280d636b83f0f5d92921c99ef5c7d7c3e751cc"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Aug 10 18:03:05 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:19 2010 -0700"
      },
      "message": "memcg: mem_cgroup_shrink_node_zone() doesn\u0027t need sc.nodemask\n\nCurrently mem_cgroup_shrink_node_zone() call shrink_zone() directly.  thus\nit doesn\u0027t need to initialize sc.nodemask because shrink_zone() doesn\u0027t\nuse it at all.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Nishimura Daisuke \u003cd-nishimura@mtf.biglobe.ne.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f75ca962037ffd639a44fd88933cd9b84c4c4411",
      "tree": "4773cd57ae45831c11783cd355f9dcb516eb66f0",
      "parents": [
        "158e0a2d1b3cffed8b46cbc56393a1394672ef79"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Aug 10 18:03:02 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:19 2010 -0700"
      },
      "message": "memcg: avoid css_get()\n\nNow, memory cgroup increments css(cgroup subsys state)\u0027s reference count\nper a charged page.  And the reference count is kept until the page is\nuncharged.  But this has 2 bad effect.\n\n 1. Because css_get/put calls atomic_inc()/dec, heavy call of them\n    on large smp will not scale well.\n 2. Because css\u0027s refcnt cannot be in a state as \"ready-to-release\",\n    cgroup\u0027s notify_on_release handler can\u0027t work with memcg.\n 3. css\u0027s refcnt is atomic_t, it means smaller than 32bit. Maybe too small.\n\nThis has been a problem since the 1st merge of memcg.\n\nThis is a trial to remove css\u0027s refcnt per a page. Even if we remove\nrefcnt, pre_destroy() does enough synchronization as\n  - check res-\u003eusage \u003d\u003d 0.\n  - check no pages on LRU.\n\nThis patch removes css\u0027s refcnt per page.  Even after this patch, at the\n1st look, it seems css_get() is still called in try_charge().\n\nBut the logic is.\n\n  - If a memcg of mm-\u003eowner is cached one, consume_stock() will work.\n    At success, return immediately.\n  - If consume_stock returns false, css_get() is called and go to\n    slow path which may be blocked. At the end of slow path,\n    css_put() is called and restart from the start if necessary.\n\nSo, in the fast path, we don\u0027t call css_get() and can avoid access to\nshared counter. This patch can make the most possible case fast.\n\nHere is a result of multi-threaded page fault benchmark.\n\n[Before]\n    25.32%  multi-fault-all  [kernel.kallsyms]      [k] clear_page_c\n     9.30%  multi-fault-all  [kernel.kallsyms]      [k] _raw_spin_lock_irqsave\n     8.02%  multi-fault-all  [kernel.kallsyms]      [k] try_get_mem_cgroup_from_mm \u003c\u003d\u003d\u003d\u003d\u003d(*)\n     7.83%  multi-fault-all  [kernel.kallsyms]      [k] down_read_trylock\n     5.38%  multi-fault-all  [kernel.kallsyms]      [k] __css_put\n     5.29%  multi-fault-all  [kernel.kallsyms]      [k] __alloc_pages_nodemask\n     4.92%  multi-fault-all  [kernel.kallsyms]      [k] _raw_spin_lock_irq\n     4.24%  multi-fault-all  [kernel.kallsyms]      [k] up_read\n     3.53%  multi-fault-all  [kernel.kallsyms]      [k] css_put\n     2.11%  multi-fault-all  [kernel.kallsyms]      [k] handle_mm_fault\n     1.76%  multi-fault-all  [kernel.kallsyms]      [k] __rmqueue\n     1.64%  multi-fault-all  [kernel.kallsyms]      [k] __mem_cgroup_commit_charge\n\n[After]\n    28.41%  multi-fault-all  [kernel.kallsyms]      [k] clear_page_c\n    10.08%  multi-fault-all  [kernel.kallsyms]      [k] _raw_spin_lock_irq\n     9.58%  multi-fault-all  [kernel.kallsyms]      [k] down_read_trylock\n     9.38%  multi-fault-all  [kernel.kallsyms]      [k] _raw_spin_lock_irqsave\n     5.86%  multi-fault-all  [kernel.kallsyms]      [k] __alloc_pages_nodemask\n     5.65%  multi-fault-all  [kernel.kallsyms]      [k] up_read\n     2.82%  multi-fault-all  [kernel.kallsyms]      [k] handle_mm_fault\n     2.64%  multi-fault-all  [kernel.kallsyms]      [k] mem_cgroup_add_lru_list\n     2.48%  multi-fault-all  [kernel.kallsyms]      [k] __mem_cgroup_commit_charge\n\nThen, 8.02% of try_get_mem_cgroup_from_mm() disappears because this patch\nremoves css_tryget() in it. (But yes, this is an extreme case.)\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "158e0a2d1b3cffed8b46cbc56393a1394672ef79",
      "tree": "a044d53137609fdfc8c1afdde366b3e205c96eda",
      "parents": [
        "73045c47b6facbdf4656e6763c8cb469de4337e2"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Aug 10 18:03:00 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:19 2010 -0700"
      },
      "message": "memcg: use find_lock_task_mm() in memory cgroups oom\n\nWhen the OOM killer scans task, it check a task is under memcg or\nnot when it\u0027s called via memcg\u0027s context.\n\nBut, as Oleg pointed out, a thread group leader may have NULL -\u003emm\nand task_in_mem_cgroup() may do wrong decision. We have to use\nfind_lock_task_mm() in memcg as generic OOM-Killer does.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@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": "73045c47b6facbdf4656e6763c8cb469de4337e2",
      "tree": "e791667803261eb9ae5325dcd8c70acefeee9196",
      "parents": [
        "bd0d24bfe8a8f8d2400569740874a67d164d40a9"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Tue Aug 10 18:02:59 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:19 2010 -0700"
      },
      "message": "memcg: remove mem from arg of charge_common\n\nmem_cgroup_charge_common() is always called with @mem \u003d NULL, so it\u0027s\nmeaningless.  This patch removes it.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "bd0d24bfe8a8f8d2400569740874a67d164d40a9",
      "tree": "9d592f6566adacc3e8da3d2c06411a16b2d45763",
      "parents": [
        "2bd9bb206b338888b226e70139a25a67d10007f0"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Tue Aug 10 18:02:59 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:18 2010 -0700"
      },
      "message": "memcg: remove redundant code\n\n- try_get_mem_cgroup_from_mm() calls rcu_read_lock/unlock by itself, so we\n  don\u0027t have to call them in task_in_mem_cgroup().\n- *mz is not used in __mem_cgroup_uncharge_common().\n- we don\u0027t have to call lookup_page_cgroup() in mem_cgroup_end_migration()\n  after we\u0027ve cleared PCG_MIGRATION of @oldpage.\n- remove empty comment.\n- remove redundant empty line in mem_cgroup_cache_charge().\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.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": "2bd9bb206b338888b226e70139a25a67d10007f0",
      "tree": "ac556b1bfa52f06fe2998371d10edec38d5cf2a9",
      "parents": [
        "4b53433468c87794b523e4683fbd4e8e8aca1f63"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Aug 10 18:02:58 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:18 2010 -0700"
      },
      "message": "memcg: clean up waiting move acct\n\nNow, for checking a memcg is under task-account-moving, we do css_tryget()\nagainst mc.to and mc.from.  But this is just complicating things.  This\npatch makes the check easier.\n\nThis patch adds a spinlock to move_charge_struct and guard modification of\nmc.to and mc.from.  By this, we don\u0027t have to think about complicated\nraces arount this not-critical path.\n\n[balbir@linux.vnet.ibm.com: don\u0027t crash on a null memcg being passed]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4b53433468c87794b523e4683fbd4e8e8aca1f63",
      "tree": "08f80fd5ec5d824a28aa4e0b15c7e2e83eed9fec",
      "parents": [
        "65e0e811667dedd4f19b268df9d856ecacb629de"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Aug 10 18:02:57 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:18 2010 -0700"
      },
      "message": "memcg: clean up try_charge main loop\n\nmem_cgroup_try_charge() has a big loop in it and seems to be hard to read.\n Most of routines are for slow path.  This patch moves codes out from the\nloop and make it clear what\u0027s done.\n\nSummary:\n - refactoring a function to detect a memcg is under acccount move or not.\n - refactoring a function to wait for the end of moving task acct.\n - refactoring a main loop(\u0027s slow path) as a function and make it clear\n   why we retry or quit by return code.\n - add fatal_signal_pending() check for bypassing charge loops.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cc8e970c3ce4d98afa8eb02dbd2526ce57f7611a",
      "tree": "621ce988444b6df6eb67058b05ca5ddef23f6103",
      "parents": [
        "e17613c39b8894c164df782d0508c27ca559c24b"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Aug 09 17:19:57 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:45:03 2010 -0700"
      },
      "message": "memcg: add mm_vmscan_memcg_isolate tracepoint\n\nMemcg also need to trace page isolation information as global reclaim.\nThis patch does it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a63d83f427fbce97a6cea0db2e64b0eb8435cd10",
      "tree": "8ac229cdf6e2289d97e82e35774057106fe7f4a2",
      "parents": [
        "74bcbf40546bb7500f2a7ba4ff3cc056a6bd004a"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Aug 09 17:19:46 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:45:02 2010 -0700"
      },
      "message": "oom: badness heuristic rewrite\n\nThis a complete rewrite of the oom killer\u0027s badness() heuristic which is\nused to determine which task to kill in oom conditions.  The goal is to\nmake it as simple and predictable as possible so the results are better\nunderstood and we end up killing the task which will lead to the most\nmemory freeing while still respecting the fine-tuning from userspace.\n\nInstead of basing the heuristic on mm-\u003etotal_vm for each task, the task\u0027s\nrss and swap space is used instead.  This is a better indication of the\namount of memory that will be freeable if the oom killed task is chosen\nand subsequently exits.  This helps specifically in cases where KDE or\nGNOME is chosen for oom kill on desktop systems instead of a memory\nhogging task.\n\nThe baseline for the heuristic is a proportion of memory that each task is\ncurrently using in memory plus swap compared to the amount of \"allowable\"\nmemory.  \"Allowable,\" in this sense, means the system-wide resources for\nunconstrained oom conditions, the set of mempolicy nodes, the mems\nattached to current\u0027s cpuset, or a memory controller\u0027s limit.  The\nproportion is given on a scale of 0 (never kill) to 1000 (always kill),\nroughly meaning that if a task has a badness() score of 500 that the task\nconsumes approximately 50% of allowable memory resident in RAM or in swap\nspace.\n\nThe proportion is always relative to the amount of \"allowable\" memory and\nnot the total amount of RAM systemwide so that mempolicies and cpusets may\noperate in isolation; they shall not need to know the true size of the\nmachine on which they are running if they are bound to a specific set of\nnodes or mems, respectively.\n\nRoot tasks are given 3% extra memory just like __vm_enough_memory()\nprovides in LSMs.  In the event of two tasks consuming similar amounts of\nmemory, it is generally better to save root\u0027s task.\n\nBecause of the change in the badness() heuristic\u0027s baseline, it is also\nnecessary to introduce a new user interface to tune it.  It\u0027s not possible\nto redefine the meaning of /proc/pid/oom_adj with a new scale since the\nABI cannot be changed for backward compatability.  Instead, a new tunable,\n/proc/pid/oom_score_adj, is added that ranges from -1000 to +1000.  It may\nbe used to polarize the heuristic such that certain tasks are never\nconsidered for oom kill while others may always be considered.  The value\nis added directly into the badness() score so a value of -500, for\nexample, means to discount 50% of its memory consumption in comparison to\nother tasks either on the system, bound to the mempolicy, in the cpuset,\nor sharing the same memory controller.\n\n/proc/pid/oom_adj is changed so that its meaning is rescaled into the\nunits used by /proc/pid/oom_score_adj, and vice versa.  Changing one of\nthese per-task tunables will rescale the value of the other to an\nequivalent meaning.  Although /proc/pid/oom_adj was originally defined as\na bitshift on the badness score, it now shares the same linear growth as\n/proc/pid/oom_score_adj but with different granularity.  This is required\nso the ABI is not broken with userspace applications and allows oom_adj to\nbe deprecated for future removal.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "25edde0332916ae706ccf83de688be57bcc844b7",
      "tree": "35a5b0e651f9cdb48d9a55a748970339c4f681bc",
      "parents": [
        "b898cc70019ce1835bbf6c47bdf978adc36faa42"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Aug 09 17:19:27 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:45:00 2010 -0700"
      },
      "message": "vmscan: kill prev_priority completely\n\nSince 2.6.28 zone-\u003eprev_priority is unused. Then it can be removed\nsafely. It reduce stack usage slightly.\n\nNow I have to say that I\u0027m sorry. 2 years ago, I thought prev_priority\ncan be integrate again, it\u0027s useful. but four (or more) times trying\nhaven\u0027t got good performance number. Thus I give up such approach.\n\nThe rest of this changelog is notes on prev_priority and why it existed in\nthe first place and why it might be not necessary any more. This information\nis based heavily on discussions between Andrew Morton, Rik van Riel and\nKosaki Motohiro who is heavily quotes from.\n\nHistorically prev_priority was important because it determined when the VM\nwould start unmapping PTE pages. i.e. there are no balances of note within\nthe VM, Anon vs File and Mapped vs Unmapped. Without prev_priority, there\nis a potential risk of unnecessarily increasing minor faults as a large\namount of read activity of use-once pages could push mapped pages to the\nend of the LRU and get unmapped.\n\nThere is no proof this is still a problem but currently it is not considered\nto be. Active files are not deactivated if the active file list is smaller\nthan the inactive list reducing the liklihood that file-mapped pages are\nbeing pushed off the LRU and referenced executable pages are kept on the\nactive list to avoid them getting pushed out by read activity.\n\nEven if it is a problem, prev_priority prev_priority wouldn\u0027t works\nnowadays. First of all, current vmscan still a lot of UP centric code. it\nexpose some weakness on some dozens CPUs machine. I think we need more and\nmore improvement.\n\nThe problem is, current vmscan mix up per-system-pressure, per-zone-pressure\nand per-task-pressure a bit. example, prev_priority try to boost priority to\nother concurrent priority. but if the another task have mempolicy restriction,\nit is unnecessary, but also makes wrong big latency and exceeding reclaim.\nper-task based priority + prev_priority adjustment make the emulation of\nper-system pressure. but it have two issue 1) too rough and brutal emulation\n2) we need per-zone pressure, not per-system.\n\nAnother example, currently DEF_PRIORITY is 12. it mean the lru rotate about\n2 cycle (1/4096 + 1/2048 + 1/1024 + .. + 1) before invoking OOM-Killer.\nbut if 10,0000 thrreads enter DEF_PRIORITY reclaim at the same time, the\nsystem have higher memory pressure than priority\u003d\u003d0 (1/4096*10,000 \u003e 2).\nprev_priority can\u0027t solve such multithreads workload issue. In other word,\nprev_priority concept assume the sysmtem don\u0027t have lots threads.\"\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Michael Rubin \u003cmrubin@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": "4d845ebf4cf9e985b1704b1f08b37f744b4ede13",
      "tree": "d137f9220a1572c2e3b53ce38950314f5aeb82e4",
      "parents": [
        "3c26c9d9597f982973b9b3a32364230096ab0d78"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jun 29 15:05:18 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 29 15:29:30 2010 -0700"
      },
      "message": "memcg: fix wake up in oom wait queue\n\nOOM-waitqueue should be waken up when oom_disable is canceled.  This is a\nfix for 3c11ecf448eff8f1 (\"memcg: oom kill disable and oom status\").\n\nHow to test:\n Create a cgroup A...\n 1. set memory.limit and memory.memsw.limit to be small value\n 2. echo 1 \u003e /cgroup/A/memory.oom_control, this disables oom-kill.\n 3. run a program which must cause OOM.\n\nA program executed in 3 will sleep by oom_waiqueue in memcg.  Then, how to\nwake it up is problem.\n\n 1. echo 0 \u003e /cgroup/A/memory.oom_control (enable OOM-killer)\n 2. echo big mem \u003e /cgroup/A/memory.memsw.limit_in_bytes(allow more swap)\n\netc..\n\nWithout the patch, a task in slept can not be waken up.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2c488db27b614816024e7994117f599337de0f34",
      "tree": "1ccfe14f5b2bede321004427babdad111a3b0c8e",
      "parents": [
        "907860ed381a31b0102f362df67c1c5cae6ef050"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed May 26 14:42:47 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:44 2010 -0700"
      },
      "message": "memcg: clean up memory thresholds\n\nIntroduce struct mem_cgroup_thresholds.  It helps to reduce number of\nchecks of thresholds type (memory or mem+swap).\n\n[akpm@linux-foundation.org: repair comment]\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Phil Carmody \u003cext-phil.2.carmody@nokia.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Paul Menage \u003cmenage@google.com\u003e\nCc: Li Zefan \u003clizf@cn.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": "907860ed381a31b0102f362df67c1c5cae6ef050",
      "tree": "4f47a6fe898b1f45da505fc0c27d98e66d42aa46",
      "parents": [
        "ac39cf8cb86c45eeac6a592ce0d58f9021a97235"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed May 26 14:42:46 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:44 2010 -0700"
      },
      "message": "cgroups: make cftype.unregister_event() void-returning\n\nSince we are unable to handle an error returned by\ncftype.unregister_event() properly, let\u0027s make the callback\nvoid-returning.\n\nmem_cgroup_unregister_event() has been rewritten to be a \"never fail\"\nfunction.  On mem_cgroup_usage_register_event() we save old buffer for\nthresholds array and reuse it in mem_cgroup_usage_unregister_event() to\navoid allocation.\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Phil Carmody \u003cext-phil.2.carmody@nokia.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Li Zefan \u003clizf@cn.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": "ac39cf8cb86c45eeac6a592ce0d58f9021a97235",
      "tree": "7321cafb0a1f8f2727c86f9d29159751df856c59",
      "parents": [
        "315c1998e10527ff364a9883048455e609bc7232"
      ],
      "author": {
        "name": "akpm@linux-foundation.org",
        "email": "akpm@linux-foundation.org",
        "time": "Wed May 26 14:42:46 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:44 2010 -0700"
      },
      "message": "memcg: fix mis-accounting of file mapped racy with migration\n\nFILE_MAPPED per memcg of migrated file cache is not properly updated,\nbecause our hook in page_add_file_rmap() can\u0027t know to which memcg\nFILE_MAPPED should be counted.\n\nBasically, this patch is for fixing the bug but includes some big changes\nto fix up other messes.\n\nNow, at migrating mapped file, events happen in following sequence.\n\n 1. allocate a new page.\n 2. get memcg of an old page.\n 3. charge ageinst a new page before migration. But at this point,\n    no changes to new page\u0027s page_cgroup, no commit for the charge.\n    (IOW, PCG_USED bit is not set.)\n 4. page migration replaces radix-tree, old-page and new-page.\n 5. page migration remaps the new page if the old page was mapped.\n 6. Here, the new page is unlocked.\n 7. memcg commits the charge for newpage, Mark the new page\u0027s page_cgroup\n    as PCG_USED.\n\nBecause \"commit\" happens after page-remap, we can count FILE_MAPPED\nat \"5\", because we should avoid to trust page_cgroup-\u003emem_cgroup.\nif PCG_USED bit is unset.\n(Note: memcg\u0027s LRU removal code does that but LRU-isolation logic is used\n for helping it. When we overwrite page_cgroup-\u003emem_cgroup, page_cgroup is\n not on LRU or page_cgroup-\u003emem_cgroup is NULL.)\n\nWe can lose file_mapped accounting information at 5 because FILE_MAPPED\nis updated only when mapcount changes 0-\u003e1. So we should catch it.\n\nBTW, historically, above implemntation comes from migration-failure\nof anonymous page. Because we charge both of old page and new page\nwith mapcount\u003d0, we can\u0027t catch\n  - the page is really freed before remap.\n  - migration fails but it\u0027s freed before remap\nor .....corner cases.\n\nNew migration sequence with memcg is:\n\n 1. allocate a new page.\n 2. mark PageCgroupMigration to the old page.\n 3. charge against a new page onto the old page\u0027s memcg. (here, new page\u0027s pc\n    is marked as PageCgroupUsed.)\n 4. page migration replaces radix-tree, page table, etc...\n 5. At remapping, new page\u0027s page_cgroup is now makrked as \"USED\"\n    We can catch 0-\u003e1 event and FILE_MAPPED will be properly updated.\n\n    And we can catch SWAPOUT event after unlock this and freeing this\n    page by unmap() can be caught.\n\n 7. Clear PageCgroupMigration of the old page.\n\nSo, FILE_MAPPED will be correctly updated.\n\nThen, for what MIGRATION flag is ?\n  Without it, at migration failure, we may have to charge old page again\n  because it may be fully unmapped. \"charge\" means that we have to dive into\n  memory reclaim or something complated. So, it\u0027s better to avoid\n  charge it again. Before this patch, __commit_charge() was working for\n  both of the old/new page and fixed up all. But this technique has some\n  racy condtion around FILE_MAPPED and SWAPOUT etc...\n  Now, the kernel use MIGRATION flag and don\u0027t uncharge old page until\n  the end of migration.\n\nI hope this change will make memcg\u0027s page migration much simpler.  This\npage migration has caused several troubles.  Worth to add a flag for\nsimplification.\n\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nTested-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReported-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: \"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": "315c1998e10527ff364a9883048455e609bc7232",
      "tree": "081c072b7e7a48df369fd80142e611c3f36d3cfd",
      "parents": [
        "5407a56257b6ade44fd9bcac972c99845b7413cd"
      ],
      "author": {
        "name": "Phil Carmody",
        "email": "ext-phil.2.carmody@nokia.com",
        "time": "Wed May 26 14:42:43 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:44 2010 -0700"
      },
      "message": "mm: memcontrol - uninitialised return value\n\nOnly an out of memory error will cause ret to be set.\n\nSigned-off-by: Phil Carmody \u003cext-phil.2.carmody@nokia.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\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": "5407a56257b6ade44fd9bcac972c99845b7413cd",
      "tree": "833a55856af25fe9be5e8a871d89f43677eac512",
      "parents": [
        "df64f81bb1e01cbef967a96642dacf208acb7e72"
      ],
      "author": {
        "name": "Phil Carmody",
        "email": "ext-phil.2.carmody@nokia.com",
        "time": "Wed May 26 14:42:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:43 2010 -0700"
      },
      "message": "mm: remove unnecessary use of atomic\n\nThe bottom 4 hunks are atomically changing memory to which there are no\naliases as it\u0027s freshly allocated, so there\u0027s no need to use atomic\noperations.\n\nThe other hunks are just atomic_read and atomic_set, and do not involve\nany read-modify-write.  The use of atomic_{read,set} doesn\u0027t prevent a\nread/write or write/write race, so if a race were possible (I\u0027m not saying\none is), then it would still be there even with atomic_set.\n\nSee:\nhttp://digitalvampire.org/blog/index.php/2007/05/13/atomic-cargo-cults/\n\nSigned-off-by: Phil Carmody \u003cext-phil.2.carmody@nokia.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\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": "87946a72283be3de936adc754b7007df7d3e6aeb",
      "tree": "0593c87ba36bae13d6a6d5dda65ebb41354954f8",
      "parents": [
        "90254a65833b67502d14736410b3857a15535c67"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed May 26 14:42:39 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:43 2010 -0700"
      },
      "message": "memcg: move charge of file pages\n\nThis patch adds support for moving charge of file pages, which include\nnormal file, tmpfs file and swaps of tmpfs file.  It\u0027s enabled by setting\nbit 1 of \u003ctarget cgroup\u003e/memory.move_charge_at_immigrate.\n\nUnlike the case of anonymous pages, file pages(and swaps) in the range\nmmapped by the task will be moved even if the task hasn\u0027t done page fault,\ni.e.  they might not be the task\u0027s \"RSS\", but other task\u0027s \"RSS\" that maps\nthe same file.  And mapcount of the page is ignored(the page can be moved\neven if page_mapcount(page) \u003e 1).  So, conditions that the page/swap\nshould be met to be moved is that it must be in the range mmapped by the\ntarget task and it must be charged to the old cgroup.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[akpm@linux-foundation.org: fix warning]\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "90254a65833b67502d14736410b3857a15535c67",
      "tree": "e03ec501b4a585c0d112469f36100ec41a715345",
      "parents": [
        "3c11ecf448eff8f12922c498b8274ce98587eb74"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed May 26 14:42:38 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:43 2010 -0700"
      },
      "message": "memcg: clean up move charge\n\nThis patch cleans up move charge code by:\n\n- define functions to handle pte for each types, and make\n  is_target_pte_for_mc() cleaner.\n\n- instead of checking the MOVE_CHARGE_TYPE_ANON bit, define a function\n  that checks the bit.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3c11ecf448eff8f12922c498b8274ce98587eb74",
      "tree": "0a28aeef7759ead93ff58fd7db2fe61797523f7e",
      "parents": [
        "9490ff275606da012d5b373342a49610ad61cb81"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed May 26 14:42:37 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:43 2010 -0700"
      },
      "message": "memcg: oom kill disable and oom status\n\nThis adds a feature to disable oom-killer for memcg, if disabled, of\ncourse, tasks under memcg will stop.\n\nBut now, we have oom-notifier for memcg.  And the world around memcg is\nnot under out-of-memory.  memcg\u0027s out-of-memory just shows memcg hits\nlimit.  Then, administrator or management daemon can recover the situation\nby\n\n\t- kill some process\n\t- enlarge limit, add more swap.\n\t- migrate some tasks\n\t- remove file cache on tmps (difficult ?)\n\nUnlike oom-killer, you can take enough information before killing tasks.\n(by gcore, or, ps etc.)\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\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": "9490ff275606da012d5b373342a49610ad61cb81",
      "tree": "037993e807654da633776066129b001f8bae7d1d",
      "parents": [
        "dc98df5a1b7be402a0e1c71f1b89ccf249ac15ee"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed May 26 14:42:36 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:43 2010 -0700"
      },
      "message": "memcg: oom notifier\n\nConsidering containers or other resource management softwares in userland,\nevent notification of OOM in memcg should be implemented.  Now, memcg has\n\"threshold\" notifier which uses eventfd, we can make use of it for oom\nnotification.\n\nThis patch adds oom notification eventfd callback for memcg.  The usage is\nvery similar to threshold notifier, but control file is memory.oom_control\nand no arguments other than eventfd is required.\n\n\t% cgroup_event_notifier /cgroup/A/memory.oom_control dummy\n\t(About cgroup_event_notifier, see Documentation/cgroup/)\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dc98df5a1b7be402a0e1c71f1b89ccf249ac15ee",
      "tree": "d54f48e26563eadd11114c787b5c27b4e44ebb19",
      "parents": [
        "595f4b694c2424f2af6e1de74c955bbe9cd7b73d"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed May 26 14:42:36 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:43 2010 -0700"
      },
      "message": "memcg: oom wakeup filter\n\nmemcg\u0027s oom waitqueue is a system-wide wait_queue (for handling\nhierarchy.) So, it\u0027s better to add custom wake function and do filtering\nin wake up path.\n\nThis patch adds a filtering feature for waking up oom-waiters.  Hierarchy\nis properly handled.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\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": "f39d01be4c59a61a08d0cb53f615e7016b85d339",
      "tree": "6777590e3ff2ddf4df1d38444ba7d692cd463b7b",
      "parents": [
        "54291263519ac2c9bdda68b23b02fef3808deed4",
        "7db82437cfcac4bdfe79a6323eb554fdfa271623"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 20 09:20:59 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 20 09:20:59 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (44 commits)\n  vlynq: make whole Kconfig-menu dependant on architecture\n  add descriptive comment for TIF_MEMDIE task flag declaration.\n  EEPROM: max6875: Header file cleanup\n  EEPROM: 93cx6: Header file cleanup\n  EEPROM: Header file cleanup\n  agp: use NULL instead of 0 when pointer is needed\n  rtc-v3020: make bitfield unsigned\n  PCI: make bitfield unsigned\n  jbd2: use NULL instead of 0 when pointer is needed\n  cciss: fix shadows sparse warning\n  doc: inode uses a mutex instead of a semaphore.\n  uml: i386: Avoid redefinition of NR_syscalls\n  fix \"seperate\" typos in comments\n  cocbalt_lcdfb: correct sections\n  doc: Change urls for sparse\n  Powerpc: wii: Fix typo in comment\n  i2o: cleanup some exit paths\n  Documentation/: it\u0027s -\u003e its where appropriate\n  UML: Fix compiler warning due to missing task_struct declaration\n  UML: add kernel.h include to signal.c\n  ...\n"
    },
    {
      "commit": "747388d78a0ae768fd82b55c4ed38aa646a72364",
      "tree": "03efabf9761209cffef4e8da9b6989887f76428e",
      "parents": [
        "7f0f15464185a92f9d8791ad231bcd7bf6df54e4"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue May 11 14:06:59 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 11 17:33:42 2010 -0700"
      },
      "message": "memcg: fix css_is_ancestor() RCU locking\n\nSome callers (in memcontrol.c) calls css_is_ancestor() without\nrcu_read_lock.  Because css_is_ancestor() has to access RCU protected\ndata, it should be under rcu_read_lock().\n\nThis makes css_is_ancestor() itself does safe access to RCU protected\narea.  (At least, \"root\" can have refcnt\u003d\u003d0 if it\u0027s not an ancestor of\n\"child\".  So, we need rcu_read_lock().)\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7f0f15464185a92f9d8791ad231bcd7bf6df54e4",
      "tree": "a1d4f4c39632659497963b0ccf62828237478d72",
      "parents": [
        "11cad320a4f4bc53d3585c85600c782faa12b99e"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue May 11 14:06:58 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 11 17:33:42 2010 -0700"
      },
      "message": "memcg: fix css_id() RCU locking for real\n\nCommit ad4ba375373937817404fd92239ef4cadbded23b (\"memcg: css_id() must be\ncalled under rcu_read_lock()\") modifies memcontol.c for fixing RCU check\nmessage.  But Andrew Morton pointed out that the fix doesn\u0027t seems sane\nand it was just for hidining lockdep messages.\n\nThis is a patch for do proper things.  Checking again, all places,\naccessing without rcu_read_lock, that commit fixies was intentional....\nall callers of css_id() has reference count on it.  So, it\u0027s not necessary\nto be under rcu_read_lock().\n\nConsidering again, we can use rcu_dereference_check for css_id().  We know\ncss-\u003eid is valid if css-\u003erefcnt \u003e 0.  (css-\u003eid never changes and freed\nafter css-\u003erefcnt going to be 0.)\n\nThis patch makes use of rcu_dereference_check() in css_id/depth and remove\nunnecessary rcu-read-lock added by the commit.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "91bc482ec5a615e8ecebc106aaf7d0c267d511de",
      "tree": "ad75789a5825fb2da75b2dbdc02d1969bad9b338",
      "parents": [
        "e8e8fade7b351f131433fa44ca5d4e960e1c0f9c",
        "ee84b8243b07c33a5c8aed42b4b2da60cb16d1d2"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 07 13:58:21 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 07 13:58:21 2010 -0700"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  rcu: create rcu_my_thread_group_empty() wrapper\n  memcg: css_id() must be called under rcu_read_lock()\n  cgroup: Check task_lock in task_subsys_state()\n  sched: Fix an RCU warning in print_task()\n  cgroup: Fix an RCU warning in alloc_css_id()\n  cgroup: Fix an RCU warning in cgroup_path()\n  KEYS: Fix an RCU warning in the reading of user keys\n  KEYS: Fix an RCU warning\n"
    },
    {
      "commit": "ad4ba375373937817404fd92239ef4cadbded23b",
      "tree": "1c59ebd7a1e3ace3539396dd35ecff0f06132fe8",
      "parents": [
        "1ce7e4ff24fe338438bc7837e02780f202bf202b"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Apr 23 12:26:38 2010 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Tue May 04 09:25:03 2010 -0700"
      },
      "message": "memcg: css_id() must be called under rcu_read_lock()\n\nThis patch fixes task_in_mem_cgroup(), mem_cgroup_uncharge_swapcache(),\nmem_cgroup_move_swap_account(), and is_target_pte_for_mc() to protect\ncalls to css_id().  An additional RCU lockdep splat was reported for\nmemcg_oom_wake_function(), however, this function is not yet in\nmainline as of 2.6.34-rc5.\n\nReported-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nTested-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n"
    },
    {
      "commit": "93d5c9be1ddd57d4063ce463c9ac2be1e5ee14f1",
      "tree": "65455c40ec8c701789d8f16b825e5c290633c910",
      "parents": [
        "cac36f707119b792b2396aed371d6b5cdc194890"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Fri Apr 23 13:17:39 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 24 11:31:24 2010 -0700"
      },
      "message": "memcg: fix prepare migration\n\nIf a signal is pending (task being killed by sigkill)\n__mem_cgroup_try_charge will write NULL into \u0026mem, and css_put will oops\non null pointer dereference.\n\n  BUG: unable to handle kernel NULL pointer dereference at 0000000000000010\n  IP: [\u003cffffffff810fc6cc\u003e] mem_cgroup_prepare_migration+0x7c/0xc0\n  PGD a5d89067 PUD a5d8a067 PMD 0\n  Oops: 0000 [#1] SMP\n  last sysfs file: /sys/devices/platform/microcode/firmware/microcode/loading\n  CPU 0\n  Modules linked in: nfs lockd nfs_acl auth_rpcgss sunrpc acpi_cpufreq pcspkr sg [last unloaded: microcode]\n\n  Pid: 5299, comm: largepages Tainted: G        W  2.6.34-rc3 #3 Penryn1600SLI-110dB/To Be Filled By O.E.M.\n  RIP: 0010:[\u003cffffffff810fc6cc\u003e]  [\u003cffffffff810fc6cc\u003e] mem_cgroup_prepare_migration+0x7c/0xc0\n\n[nishimura@mxp.nes.nec.co.jp: fix merge issues]\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: \u003cstable@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": "6c9468e9eb1252eaefd94ce7f06e1be9b0b641b1",
      "tree": "797676a336b050bfa1ef879377c07e541b9075d6",
      "parents": [
        "4cb3ca7cd7e2cae8d1daf5345ec99a1e8502cf3f",
        "c81eddb0e3728661d1585fbc564449c94165cc36"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Apr 23 02:08:44 2010 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Apr 23 02:08:44 2010 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n"
    },
    {
      "commit": "8725d5416213a145ccc9c236dbd26830ba409e00",
      "tree": "aff10fc98874adfcb7755ec8bc1f2627036e8dc2",
      "parents": [
        "116354d177ba2da37e91cf884e3d11e67f825efd"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Apr 06 14:35:05 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 07 08:38:05 2010 -0700"
      },
      "message": "memcg: fix race in file_mapped accounting\n\nPresently, memcg\u0027s FILE_MAPPED accounting has following race with\nmove_account (happens at rmdir()).\n\n    increment page-\u003emapcount (rmap.c)\n    mem_cgroup_update_file_mapped()           move_account()\n\t\t\t\t\t      lock_page_cgroup()\n\t\t\t\t\t      check page_mapped() if\n\t\t\t\t\t      page_mapped(page)\u003e1 {\n\t\t\t\t\t\tFILE_MAPPED -1 from old memcg\n\t\t\t\t\t\tFILE_MAPPED +1 to old memcg\n\t\t\t\t\t      }\n\t\t\t\t\t      .....\n\t\t\t\t\t      overwrite pc-\u003emem_cgroup\n\t\t\t\t\t      unlock_page_cgroup()\n    lock_page_cgroup()\n    FILE_MAPPED + 1 to pc-\u003emem_cgroup\n    unlock_page_cgroup()\n\nThen,\n\told memcg (-1 file mapped)\n\tnew memcg (+2 file mapped)\n\nThis happens because move_account see page_mapped() which is not guarded\nby lock_page_cgroup().  This patch adds FILE_MAPPED flag to page_cgroup\nand move account information based on it.  Now, all checks are synchronous\nwith lock_page_cgroup().\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Andrea Righi \u003carighi@develer.com\u003e\nCc: Andrea Arcangeli \u003caarcange@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": "e7bbcdf3747e3919c31cfa87853c69d178bce548",
      "tree": "42493b615337a170f3a019fc41dd90c4d4d9b342",
      "parents": [
        "9d34706f42f9b8c15185423d9af98d37ba21d011"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Tue Mar 23 13:35:12 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:19 2010 -0700"
      },
      "message": "memcontrol: fix potential null deref\n\nThere was a potential null deref introduced in c62b1a3b31b5 (\"memcg: use\ngeneric percpu instead of private implementation\").\n\nSigned-off-by: Dan Carpenter \u003cerror27@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": "5cfb80a73b5a52fb19d8b0611203e4dd58e8e9a2",
      "tree": "bb4db72652827235f1e548c6c9db1a04406c26ad",
      "parents": [
        "ae6be51ed01d6c4aaf249a207b4434bc7785853b"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "d-nishimura@mtf.biglobe.ne.jp",
        "time": "Tue Mar 23 13:35:11 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:19 2010 -0700"
      },
      "message": "memcg: disable move charge in no mmu case\n\nIn commit 02491447 (\"memcg: move charges of anonymous swap\"), I tried to\ndisable move charge feature in no mmu case by enclosing all the related\nfunctions with \"#ifdef CONFIG_MMU\", but the commit places these ifdefs in\nwrong place.  (it seems that it\u0027s mangled while handling some fixes...)\n\nThis patch fixes it up.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "320cc51d90832231cece478f0db6550ef367f8f3",
      "tree": "b0aa81b277cc7f3c666f820cfc44e82299ca7ecb",
      "parents": [
        "32e688b8c1afafa389223a4813b97e8c128a1636"
      ],
      "author": {
        "name": "Greg Thelen",
        "email": "gthelen@google.com",
        "time": "Mon Mar 15 15:27:28 2010 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Mar 15 15:27:28 2010 +0100"
      },
      "message": "mm: fix typo in refill_stock() comment\n\nChange refill_stock() comment: s/consumt_stock()/consume_stock()/\n\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "867578cbccb0893cc14fc29c670f7185809c90d6",
      "tree": "e4d0cefac265fc64399223bc82ed714a88ebe20c",
      "parents": [
        "0263c12c12ccc90edc9d856fa839f8936183e6d1"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 10 15:22:39 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:38 2010 -0800"
      },
      "message": "memcg: fix oom kill behavior\n\nIn current page-fault code,\n\n\thandle_mm_fault()\n\t\t-\u003e ...\n\t\t-\u003e mem_cgroup_charge()\n\t\t-\u003e map page or handle error.\n\t-\u003e check return code.\n\nIf page fault\u0027s return code is VM_FAULT_OOM, page_fault_out_of_memory() is\ncalled.  But if it\u0027s caused by memcg, OOM should have been already\ninvoked.\n\nThen, I added a patch: a636b327f731143ccc544b966cfd8de6cb6d72c6.  That\npatch records last_oom_jiffies for memcg\u0027s sub-hierarchy and prevents\npage_fault_out_of_memory from being invoked in near future.\n\nBut Nishimura-san reported that check by jiffies is not enough when the\nsystem is terribly heavy.\n\nThis patch changes memcg\u0027s oom logic as.\n * If memcg causes OOM-kill, continue to retry.\n * remove jiffies check which is used now.\n * add memcg-oom-lock which works like perzone oom lock.\n * If current is killed(as a process), bypass charge.\n\nSomething more sophisticated can be added but this pactch does\nfundamental things.\nTODO:\n - add oom notifier\n - add permemcg disable-oom-kill flag and freezer at oom.\n - more chances for wake up oom waiter (when changing memory limit etc..)\n\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nTested-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: 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": "a0a4db548edcce067c1201ef25cf2bc29f32dca4",
      "tree": "6f8139a582179666cd248d978332ed0e32ad9f0f",
      "parents": [
        "4ab78683c17d739c2a2077141dcf81a02b7fb57e"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Mar 10 15:22:34 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "cgroups: remove events before destroying subsystem state objects\n\nEvents should be removed after rmdir of cgroup directory, but before\ndestroying subsystem state objects.  Let\u0027s take reference to cgroup\ndirectory dentry to do that.\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hioryu@jp.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: Dan Malek \u003cdan@embeddedalley.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"
    }
  ],
  "next": "d2265e6fa3f220ea5fd37522d13390e9675adcf7"
}
