)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "d2265e6fa3f220ea5fd37522d13390e9675adcf7",
      "tree": "30e0264bcd379e21507b22243891880b7418f68f",
      "parents": [
        "430e48631e72aeab74d844c57b441f98a2e36eee"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 10 15:22:31 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg : share event counter rather than duplicate\n\nMemcg has 2 eventcountes which counts \"the same\" event.  Just usages are\ndifferent from each other.  This patch tries to reduce event counter.\n\nNow logic uses \"only increment, no reset\" counter and masks for each\nchecks.  Softlimit chesk was done per 1000 evetns.  So, the similar check\ncan be done by !(new_counter \u0026 0x3ff).  Threshold check was done per 100\nevents.  So, the similar check can be done by (!new_counter \u0026 0x7f)\n\nALL event checks are done right after EVENT percpu counter is updated.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Kirill A. Shutemov \u003ckirill@shutemov.name\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": "430e48631e72aeab74d844c57b441f98a2e36eee",
      "tree": "e1b3eadc1b5c1871db0bf1247af8684b53cae12a",
      "parents": [
        "c62b1a3b31b5e27a6c5c2e91cc5ce05fdb6344d0"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 10 15:22:30 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: update threshold and softlimit at commit\n\nPresently, move_task does \"batched\" precharge.  Because res_counter or\ncss\u0027s refcnt are not-scalable jobs for memcg, try_charge_()..  tend to be\ndone in batched manner if allowed.\n\nNow, softlimit and threshold check their event counter in try_charge, but\nthe charge is not a per-page event.  And event counter is not updated at\ncharge().  Moreover, precharge doesn\u0027t pass \"page\" to try_charge() and\nsoftlimit tree will be never updated until uncharge() causes an event.\"\n\nSo the best place to check the event counter is commit_charge().  This is\nper-page event by its nature.  This patch move checks to there.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Kirill A. Shutemov \u003ckirill@shutemov.name\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": "c62b1a3b31b5e27a6c5c2e91cc5ce05fdb6344d0",
      "tree": "6887141ac2afc2a8f3a1a7dfa39a56f6899a9864",
      "parents": [
        "6a6135b64fda39d931a79090f4da37f1c6da4a8c"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 10 15:22:29 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: use generic percpu instead of private implementation\n\nWhen per-cpu counter for memcg was implemneted, dynamic percpu allocator\nwas not very good.  But now, we have good one and useful macros.  This\npatch replaces memcg\u0027s private percpu counter implementation with generic\ndynamic percpu allocator.\n\nThe benefits are\n\t- We can remove private implementation.\n\t- The counters will be NUMA-aware. (Current one is not...)\n\t- This patch makes sizeof struct mem_cgroup smaller. Then,\n\t  struct mem_cgroup may be fit in page size on small config.\n        - About basic performance aspects, see below.\n\n [Before]\n # size mm/memcontrol.o\n   text    data     bss     dec     hex filename\n  24373    2528    4132   31033    7939 mm/memcontrol.o\n\n [page-fault-throuput test on 8cpu/SMP in root cgroup]\n # /root/bin/perf stat -a -e page-faults,cache-misses --repeat 5 ./multi-fault-fork 8\n\n Performance counter stats for \u0027./multi-fault-fork 8\u0027 (5 runs):\n\n       45878618  page-faults                ( +-   0.110% )\n      602635826  cache-misses               ( +-   0.105% )\n\n   61.005373262  seconds time elapsed   ( +-   0.004% )\n\n Then cache-miss/page fault \u003d 13.14\n\n [After]\n #size mm/memcontrol.o\n   text    data     bss     dec     hex filename\n  23913    2528    4132   30573    776d mm/memcontrol.o\n # /root/bin/perf stat -a -e page-faults,cache-misses --repeat 5 ./multi-fault-fork 8\n\n Performance counter stats for \u0027./multi-fault-fork 8\u0027 (5 runs):\n\n       48179400  page-faults                ( +-   0.271% )\n      588628407  cache-misses               ( +-   0.136% )\n\n   61.004615021  seconds time elapsed   ( +-   0.004% )\n\n  Then cache-miss/page fault \u003d 12.22\n\n Text size is reduced.\n This performance improvement is not big and will be invisible in real world\n applications. But this result shows this patch has some good effect even\n on (small) SMP.\n\nHere is a test program I used.\n\n 1. fork() processes on each cpus.\n 2. do page fault repeatedly on each process.\n 3. after 60secs, kill all childredn and exit.\n\n(3 is necessary for getting stable data, this is improvement from previous one.)\n\n#define _GNU_SOURCE\n#include \u003cstdio.h\u003e\n#include \u003csched.h\u003e\n#include \u003csys/mman.h\u003e\n#include \u003csys/types.h\u003e\n#include \u003csys/stat.h\u003e\n#include \u003cfcntl.h\u003e\n#include \u003csignal.h\u003e\n#include \u003cstdlib.h\u003e\n\n/*\n * For avoiding contention in page table lock, FAULT area is\n * sparse. If FAULT_LENGTH is too large for your cpus, decrease it.\n */\n#define FAULT_LENGTH\t(2 * 1024 * 1024)\n#define PAGE_SIZE\t4096\n#define MAXNUM\t\t(128)\n\nvoid alarm_handler(int sig)\n{\n}\n\nvoid *worker(int cpu, int ppid)\n{\n\tvoid *start, *end;\n\tchar *c;\n\tcpu_set_t set;\n\tint i;\n\n\tCPU_ZERO(\u0026set);\n\tCPU_SET(cpu, \u0026set);\n\tsched_setaffinity(0, sizeof(set), \u0026set);\n\n\tstart \u003d mmap(NULL, FAULT_LENGTH, PROT_READ|PROT_WRITE,\n\t\t\tMAP_PRIVATE | MAP_ANONYMOUS, 0, 0);\n\tif (start \u003d\u003d MAP_FAILED) {\n\t\tperror(\"mmap\");\n\t\texit(1);\n\t}\n\tend \u003d start + FAULT_LENGTH;\n\n\tpause();\n\t//fprintf(stderr, \"run%d\", cpu);\n\twhile (1) {\n\t\tfor (c \u003d (char*)start; (void *)c \u003c end; c +\u003d PAGE_SIZE)\n\t\t\t*c \u003d 0;\n\t\tmadvise(start, FAULT_LENGTH, MADV_DONTNEED);\n\t}\n\treturn NULL;\n}\n\nint main(int argc, char *argv[])\n{\n\tint num, i, ret, pid, status;\n\tint pids[MAXNUM];\n\n\tif (argc \u003c 2)\n\t\treturn 0;\n\n\tsetpgid(0, 0);\n\tsignal(SIGALRM, alarm_handler);\n\tnum \u003d atoi(argv[1]);\n\tpid \u003d getpid();\n\n\tfor (i \u003d 0; i \u003c num; ++i) {\n\t\tret \u003d fork();\n\t\tif (!ret) {\n\t\t\tworker(i, pid);\n\t\t\texit(0);\n\t\t}\n\t\tpids[i] \u003d ret;\n\t}\n\tsleep(1);\n\tkill(-pid, SIGALRM);\n\tsleep(60);\n\tfor (i \u003d 0; i \u003c num; i++)\n\t\tkill(pids[i], SIGKILL);\n\tfor (i \u003d 0; i \u003c num; i++)\n\t\twaitpid(pids[i], \u0026status, 0);\n\treturn 0;\n}\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: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6a6135b64fda39d931a79090f4da37f1c6da4a8c",
      "tree": "b5ade9fdb3a46a86e0cae9ed4e645ea1e153a7ff",
      "parents": [
        "2e72b6347c9459e6cff5634ddc815485bae6985f"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Mar 10 15:22:25 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: typo in comment to mem_cgroup_print_oom_info()\n\ns/mem_cgroup_print_mem_info/mem_cgroup_print_oom_info/\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.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": "2e72b6347c9459e6cff5634ddc815485bae6985f",
      "tree": "48ceef47f2cd0d33f2a1dd816c1a05ca2cb3e0e2",
      "parents": [
        "378ce724bc2a0ef1243e11c09d58a70bb6be007a"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Mar 10 15:22:24 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: implement memory thresholds\n\nIt allows to register multiple memory and memsw thresholds and gets\nnotifications when it crosses.\n\nTo register a threshold application need:\n- create an eventfd;\n- open memory.usage_in_bytes or memory.memsw.usage_in_bytes;\n- write string like \"\u003cevent_fd\u003e \u003cmemory.usage_in_bytes\u003e \u003cthreshold\u003e\" to\n  cgroup.event_control.\n\nApplication will be notified through eventfd when memory usage crosses\nthreshold in any direction.\n\nIt\u0027s applicable for root and non-root cgroup.\n\nIt uses stats to track memory usage, simmilar to soft limits. It checks\nif we need to send event to userspace on every 100 page in/out. I guess\nit\u0027s good compromise between performance and accuracy of thresholds.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[nishimura@mxp.nes.nec.co.jp: fix documentation merge issue]\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.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: Vladislav Buzov \u003cvbuzov@embeddedalley.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Alexander Shishkin \u003cvirtuoso@slind.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "378ce724bc2a0ef1243e11c09d58a70bb6be007a",
      "tree": "6a0a239547179842a55f9ffc9501cc9d2b0f5499",
      "parents": [
        "104f39284e830f425085886ef72c49aee6631575"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Mar 10 15:22:23 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: rework usage of stats by soft limit\n\nInstead of incrementing counter on each page in/out and comparing it with\nconstant, we set counter to constant, decrement counter on each page\nin/out and compare it with zero.  We want to make comparing as fast as\npossible.  On many RISC systems (probably not only RISC) comparing with\nzero is more effective than comparing with a constant, since not every\nconstant can be immediate operand for compare instruction.\n\nAlso, I\u0027ve renamed MEM_CGROUP_STAT_EVENTS to MEM_CGROUP_STAT_SOFTLIMIT,\nsince really it\u0027s not a generic counter.\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.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: Vladislav Buzov \u003cvbuzov@embeddedalley.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Alexander Shishkin \u003cvirtuoso@slind.org\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": "104f39284e830f425085886ef72c49aee6631575",
      "tree": "6b5fff422dea5c5513a3af45f055fd939b32b316",
      "parents": [
        "0dea116876eefc9c7ca9c5d74fe665481e499fa3"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Wed Mar 10 15:22:21 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:37 2010 -0800"
      },
      "message": "memcg: extract mem_group_usage() from mem_cgroup_read()\n\nHelper to get memory or mem+swap usage of the cgroup.\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: Dan Malek \u003cdan@embeddedalley.com\u003e\nCc: Vladislav Buzov \u003cvbuzov@embeddedalley.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Alexander Shishkin \u003cvirtuoso@slind.org\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": "483c30b514bd3037fa3f19fa42327c94c10f51c8",
      "tree": "aaf96db52bf4bdb0c83f209bc9c6a1237867718f",
      "parents": [
        "024914477e15ef8b17f271ec47f1bb8a589f0806"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:18 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: improve performance in moving swap charge\n\nTry to reduce overheads in moving swap charge by:\n\n- Adds a new function(__mem_cgroup_put), which takes \"count\" as a arg and\n  decrement mem-\u003erefcnt by \"count\".\n- Removed res_counter_uncharge, css_put, and mem_cgroup_put from the path\n  of moving swap account, and consolidate all of them into mem_cgroup_clear_mc.\n  We cannot do that about mc.to-\u003erefcnt.\n\nThese changes reduces the overhead from 1.35sec to 0.9sec to move charges\nof 1G anonymous memory(including 500MB swap) in my test environment.\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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": "024914477e15ef8b17f271ec47f1bb8a589f0806",
      "tree": "9a6a8b4224c94fcdd1b8c3127b301ee3537f8cc2",
      "parents": [
        "8033b97c9b5ef063e3f4bf2efe1cd0a22093aaff"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:17 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: move charges of anonymous swap\n\nThis patch is another core part of this move-charge-at-task-migration\nfeature.  It enables moving charges of anonymous swaps.\n\nTo move the charge of swap, we need to exchange swap_cgroup\u0027s record.\n\nIn current implementation, swap_cgroup\u0027s record is protected by:\n\n  - page lock: if the entry is on swap cache.\n  - swap_lock: if the entry is not on swap cache.\n\nThis works well in usual swap-in/out activity.\n\nBut this behavior make the feature of moving swap charge check many\nconditions to exchange swap_cgroup\u0027s record safely.\n\nSo I changed modification of swap_cgroup\u0027s recored(swap_cgroup_record())\nto use xchg, and define a new function to cmpxchg swap_cgroup\u0027s record.\n\nThis patch also enables moving charge of non pte_present but not uncharged\nswap caches, which can be exist on swap-out path, by getting the target\npages via find_get_page() as do_mincore() does.\n\n[kosaki.motohiro@jp.fujitsu.com: fix ia64 build]\n[akpm@linux-foundation.org: fix typos]\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8033b97c9b5ef063e3f4bf2efe1cd0a22093aaff",
      "tree": "0d3dbf74d6c307d425d5d13a5c7c1efbf6c079f2",
      "parents": [
        "854ffa8d104e44111fec96764c0e0cb29223d54c"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:16 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: avoid oom during moving charge\n\nThis move-charge-at-task-migration feature has extra charges on\n\"to\"(pre-charges) and \"from\"(left-over charges) during moving charge.\nThis means unnecessary oom can happen.\n\nThis patch tries to avoid such oom.\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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": "854ffa8d104e44111fec96764c0e0cb29223d54c",
      "tree": "ca4d19407e35e1888e210fed150d5fb98be36cc8",
      "parents": [
        "4ffef5feff4e4240e767d2f1144b1634a41762e3"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:15 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: improve performance in moving charge\n\nTry to reduce overheads in moving charge by:\n\n- Instead of calling res_counter_uncharge() against the old cgroup in\n  __mem_cgroup_move_account() everytime, call res_counter_uncharge() at the end\n  of task migration once.\n- removed css_get(\u0026to-\u003ecss) from __mem_cgroup_move_account() because callers\n  should have already called css_get(). And removed css_put(\u0026to-\u003ecss) too,\n  which was called by callers of move_account on success of move_account.\n- Instead of calling __mem_cgroup_try_charge(), i.e. res_counter_charge(),\n  repeatedly, call res_counter_charge(PAGE_SIZE * count) in can_attach() if\n  possible.\n- Instead of calling css_get()/css_put() repeatedly, make use of coalesce\n  __css_get()/__css_put() if possible.\n\nThese changes reduces the overhead from 1.7sec to 0.6sec to move charges\nof 1G anonymous memory in my test environment.\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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": "4ffef5feff4e4240e767d2f1144b1634a41762e3",
      "tree": "14793120e5809008c2587d89162d8d57130d6fc8",
      "parents": [
        "7dc74be032bfcaa2f9d9e4296ff5bbddfa9e2f19"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:14 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: move charges of anonymous page\n\nThis patch is the core part of this move-charge-at-task-migration feature.\n It implements functions to move charges of anonymous pages mapped only by\nthe target task.\n\nImplementation:\n- define struct move_charge_struct and a valuable of it(mc) to remember the\n  count of pre-charges and other information.\n- At can_attach(), get anon_rss of the target mm, call __mem_cgroup_try_charge()\n  repeatedly and count up mc.precharge.\n- At attach(), parse the page table, find a target page to be move, and call\n  mem_cgroup_move_account() about the page.\n- Cancel all precharges if mc.precharge \u003e 0 on failure or at the end of\n  task move.\n\n[akpm@linux-foundation.org: a little simplification]\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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": "7dc74be032bfcaa2f9d9e4296ff5bbddfa9e2f19",
      "tree": "8bd10dcca3cfb3f4f6a0e6222c7f2048995a7d5f",
      "parents": [
        "b70cc5fdb445a6929a01e9c406593265b136c99d"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:13 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: add interface to move charge at task migration\n\nIn current memcg, charges associated with a task aren\u0027t moved to the new\ncgroup at task migration.  Some users feel this behavior to be strange.\nThese patches are for this feature, that is, for charging to the new\ncgroup and, of course, uncharging from the old cgroup at task migration.\n\nThis patch adds \"memory.move_charge_at_immigrate\" file, which is a flag\nfile to determine whether charges should be moved to the new cgroup at\ntask migration or not and what type of charges should be moved.  This\npatch also adds read and write handlers of the file.\n\nThis patch also adds no-op handlers for this feature.  These handlers will\nbe implemented in later patches.  And you cannot write any values other\nthan 0 to move_charge_at_immigrate yet.\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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": "648bcc771145172a14bc35eeb849ed08f6aa4f1e",
      "tree": "3cc7da55d1ca18b46cb0518b3b35c276adc0aad1",
      "parents": [
        "19adf9c5d5793657118f2002237c0ee49c3b6185"
      ],
      "author": {
        "name": "Thiago Farina",
        "email": "tfransosi@gmail.com",
        "time": "Fri Mar 05 13:42:04 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:26 2010 -0800"
      },
      "message": "mm/memcontrol.c: fix \"integer as NULL pointer\" sparse warning\n\nmm/memcontrol.c:2548:32: warning: Using plain integer as NULL pointer\n\nSigned-off-by: Thiago Farina \u003ctfransosi@gmail.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": "fce66477578d081f19aef5ea218664ff7758c33a",
      "tree": "ef8914767f7834fcd65c2f72eeee59dd2248076b",
      "parents": [
        "d817cd525589765aa5f6798734e422c867685a58"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Fri Jan 15 17:01:30 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 16 12:15:39 2010 -0800"
      },
      "message": "memcg: ensure list is empty at rmdir\n\nCurrent mem_cgroup_force_empty() only ensures mem-\u003eres.usage \u003d\u003d 0 on\nsuccess.  But this doesn\u0027t guarantee memcg\u0027s LRU is really empty, because\nthere are some cases in which !PageCgrupUsed pages exist on memcg\u0027s LRU.\n\nFor example:\n- Pages can be uncharged by its owner process while they are on LRU.\n- race between mem_cgroup_add_lru_list() and __mem_cgroup_uncharge_common().\n\nSo there can be a case in which the usage is zero but some of the LRUs are not empty.\n\nOTOH, mem_cgroup_del_lru_list(), which can be called asynchronously with\nrmdir, accesses the mem_cgroup, so this access can cause a problem if it\nraces with rmdir because the mem_cgroup might have been freed by rmdir.\n\nActually, I saw a bug which seems to be caused by this race.\n\n\t[1530745.949906] BUG: unable to handle kernel NULL pointer dereference at 0000000000000230\n\t[1530745.950651] IP: [\u003cffffffff810fbc11\u003e] mem_cgroup_del_lru_list+0x30/0x80\n\t[1530745.950651] PGD 3863de067 PUD 3862c7067 PMD 0\n\t[1530745.950651] Oops: 0002 [#1] SMP\n\t[1530745.950651] last sysfs file: /sys/devices/system/cpu/cpu7/cache/index1/shared_cpu_map\n\t[1530745.950651] CPU 3\n\t[1530745.950651] Modules linked in: configs ipt_REJECT xt_tcpudp iptable_filter ip_tables x_tables bridge stp nfsd nfs_acl auth_rpcgss exportfs autofs4 hidp rfcomm l2cap crc16 bluetooth lockd sunrpc ib_iser rdma_cm ib_cm iw_cm ib_sa ib_mad ib_core ib_addr iscsi_tcp bnx2i cnic uio ipv6 cxgb3i cxgb3 mdio libiscsi_tcp libiscsi scsi_transport_iscsi dm_mirror dm_multipath scsi_dh video output sbs sbshc battery ac lp kvm_intel kvm sg ide_cd_mod cdrom serio_raw tpm_tis tpm tpm_bios acpi_memhotplug button parport_pc parport rtc_cmos rtc_core rtc_lib e1000 i2c_i801 i2c_core pcspkr dm_region_hash dm_log dm_mod ata_piix libata shpchp megaraid_mbox sd_mod scsi_mod megaraid_mm ext3 jbd uhci_hcd ohci_hcd ehci_hcd [last unloaded: freq_table]\n\t[1530745.950651] Pid: 19653, comm: shmem_test_02 Tainted: G   M       2.6.32-mm1-00701-g2b04386 #3 Express5800/140Rd-4 [N8100-1065]\n\t[1530745.950651] RIP: 0010:[\u003cffffffff810fbc11\u003e]  [\u003cffffffff810fbc11\u003e] mem_cgroup_del_lru_list+0x30/0x80\n\t[1530745.950651] RSP: 0018:ffff8803863ddcb8  EFLAGS: 00010002\n\t[1530745.950651] RAX: 00000000000001e0 RBX: ffff8803abc02238 RCX: 00000000000001e0\n\t[1530745.950651] RDX: 0000000000000000 RSI: ffff88038611a000 RDI: ffff8803abc02238\n\t[1530745.950651] RBP: ffff8803863ddcc8 R08: 0000000000000002 R09: ffff8803a04c8643\n\t[1530745.950651] R10: 0000000000000000 R11: ffffffff810c7333 R12: 0000000000000000\n\t[1530745.950651] R13: ffff880000017f00 R14: 0000000000000092 R15: ffff8800179d0310\n\t[1530745.950651] FS:  0000000000000000(0000) GS:ffff880017800000(0000) knlGS:0000000000000000\n\t[1530745.950651] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\n\t[1530745.950651] CR2: 0000000000000230 CR3: 0000000379d87000 CR4: 00000000000006e0\n\t[1530745.950651] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n\t[1530745.950651] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n\t[1530745.950651] Process shmem_test_02 (pid: 19653, threadinfo ffff8803863dc000, task ffff88038612a8a0)\n\t[1530745.950651] Stack:\n\t[1530745.950651]  ffffea00040c2fe8 0000000000000000 ffff8803863ddd98 ffffffff810c739a\n\t[1530745.950651] \u003c0\u003e 00000000863ddd18 000000000000000c 0000000000000000 0000000000000000\n\t[1530745.950651] \u003c0\u003e 0000000000000002 0000000000000000 ffff8803863ddd68 0000000000000046\n\t[1530745.950651] Call Trace:\n\t[1530745.950651]  [\u003cffffffff810c739a\u003e] release_pages+0x142/0x1e7\n\t[1530745.950651]  [\u003cffffffff810c778f\u003e] ? pagevec_move_tail+0x6e/0x112\n\t[1530745.950651]  [\u003cffffffff810c781e\u003e] pagevec_move_tail+0xfd/0x112\n\t[1530745.950651]  [\u003cffffffff810c78a9\u003e] lru_add_drain+0x76/0x94\n\t[1530745.950651]  [\u003cffffffff810dba0c\u003e] exit_mmap+0x6e/0x145\n\t[1530745.950651]  [\u003cffffffff8103f52d\u003e] mmput+0x5e/0xcf\n\t[1530745.950651]  [\u003cffffffff81043ea8\u003e] exit_mm+0x11c/0x129\n\t[1530745.950651]  [\u003cffffffff8108fb29\u003e] ? audit_free+0x196/0x1c9\n\t[1530745.950651]  [\u003cffffffff81045353\u003e] do_exit+0x1f5/0x6b7\n\t[1530745.950651]  [\u003cffffffff8106133f\u003e] ? up_read+0x2b/0x2f\n\t[1530745.950651]  [\u003cffffffff8137d187\u003e] ? lockdep_sys_exit_thunk+0x35/0x67\n\t[1530745.950651]  [\u003cffffffff81045898\u003e] do_group_exit+0x83/0xb0\n\t[1530745.950651]  [\u003cffffffff810458dc\u003e] sys_exit_group+0x17/0x1b\n\t[1530745.950651]  [\u003cffffffff81002c1b\u003e] system_call_fastpath+0x16/0x1b\n\t[1530745.950651] Code: 54 53 0f 1f 44 00 00 83 3d cc 29 7c 00 00 41 89 f4 75 63 eb 4e 48 83 7b 08 00 75 04 0f 0b eb fe 48 89 df e8 18 f3 ff ff 44 89 e2 \u003c48\u003e ff 4c d0 50 48 8b 05 2b 2d 7c 00 48 39 43 08 74 39 48 8b 4b\n\t[1530745.950651] RIP  [\u003cffffffff810fbc11\u003e] mem_cgroup_del_lru_list+0x30/0x80\n\t[1530745.950651]  RSP \u003cffff8803863ddcb8\u003e\n\t[1530745.950651] CR2: 0000000000000230\n\t[1530745.950651] ---[ end trace c3419c1bb8acc34f ]---\n\t[1530745.950651] Fixing recursive fault but reboot is needed!\n\nThe problem here is pages on LRU may contain pointer to stale memcg.  To\nmake res-\u003eusage to be 0, all pages on memcg must be uncharged or moved to\nanother(parent) memcg.  Moved page_cgroup have already removed from\noriginal LRU, but uncharged page_cgroup contains pointer to memcg withou\nPCG_USED bit.  (This asynchronous LRU work is for improving performance.)\nIf PCG_USED bit is not set, page_cgroup will never be added to memcg\u0027s\nLRU.  So, about pages not on LRU, they never access stale pointer.  Then,\nwhat we have to take care of is page_cgroup _on_ LRU list.  This patch\nfixes this problem by making mem_cgroup_force_empty() visit all LRUs\nbefore exiting its loop and guarantee there are no pages on its LRU.\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@linux.vnet.ibm.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": "d4220f987cf473c65a342ca69e3eb13dea919a49",
      "tree": "dbb004a9c805d6de3f6e3955398fee1084a29f16",
      "parents": [
        "61cf693159d6a968a7014e24905143f71ed8ddcf",
        "f2c03debdfb387fa2e35cac6382779072b8b9209"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 12:36:49 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 12:36:49 2009 -0800"
      },
      "message": "Merge branch \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6\n\n* \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6: (34 commits)\n  HWPOISON: Remove stray phrase in a comment\n  HWPOISON: Try to allocate migration page on the same node\n  HWPOISON: Don\u0027t do early filtering if filter is disabled\n  HWPOISON: Add a madvise() injector for soft page offlining\n  HWPOISON: Add soft page offline support\n  HWPOISON: Undefine short-hand macros after use to avoid namespace conflict\n  HWPOISON: Use new shake_page in memory_failure\n  HWPOISON: Use correct name for MADV_HWPOISON in documentation\n  HWPOISON: mention HWPoison in Kconfig entry\n  HWPOISON: Use get_user_page_fast in hwpoison madvise\n  HWPOISON: add an interface to switch off/on all the page filters\n  HWPOISON: add memory cgroup filter\n  memcg: add accessor to mem_cgroup.css\n  memcg: rename and export try_get_mem_cgroup_from_page()\n  HWPOISON: add page flags filter\n  mm: export stable page flags\n  HWPOISON: limit hwpoison injector to known page types\n  HWPOISON: add fs/device filters\n  HWPOISON: return 0 to indicate success reliably\n  HWPOISON: make semantics of IGNORED/DELAYED clear\n  ...\n"
    },
    {
      "commit": "aa20d489ceb024f91aae084ee00c47fc6a12255c",
      "tree": "1fc8e826114b1020d0e938d3b915e8a2016ded57",
      "parents": [
        "9ab322caa347c4b580bcaf08f2253ea4cbd9e9ad"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Tue Dec 15 16:47:14 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:08 2009 -0800"
      },
      "message": "memcg: code clean, remove unused variable in mem_cgroup_resize_limit()\n\nVariable `progress\u0027 isn\u0027t used in mem_cgroup_resize_limit() any more.\nRemove it.\n\n[akpm@linux-foundation.org: cleanup]\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-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": "9ab322caa347c4b580bcaf08f2253ea4cbd9e9ad",
      "tree": "3d3344e4ab05fc1047465b439b5cc7f000c44ca2",
      "parents": [
        "d31f56dbf8bafaacb0c617f9a6f137498d5c7aed"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Tue Dec 15 16:47:13 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:07 2009 -0800"
      },
      "message": "memcg: remove memcg_tasklist\n\nmemcg_tasklist was introduced at commit 7f4d454d(memcg: avoid deadlock\ncaused by race between oom and cpuset_attach) instead of cgroup_mutex to\nfix a deadlock problem.  The cgroup_mutex, which was removed by the\ncommit, in mem_cgroup_out_of_memory() was originally introduced at commit\nc7ba5c9e (Memory controller: OOM handling).\n\nIIUC, the intention of this cgroup_mutex was to prevent task move during\nselect_bad_process() so that situations like below can be avoided.\n\n  Assume cgroup \"foo\" has exceeded its limit and is about to trigger oom.\n  1. Process A, which has been in cgroup \"baa\" and uses large memory, is just\n     moved to cgroup \"foo\". Process A can be the candidates for being killed.\n  2. Process B, which has been in cgroup \"foo\" and uses large memory, is just\n     moved from cgroup \"foo\". Process B can be excluded from the candidates for\n     being killed.\n\nBut these race window exists anyway even if we hold a lock, because\n__mem_cgroup_try_charge() decides wether it should trigger oom or not\noutside of the lock.  So the original cgroup_mutex in\nmem_cgroup_out_of_memory and thus current memcg_tasklist has no use.  And\nIMHO, those races are not so critical for users.\n\nThis patch removes it and make codes simpler.\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": "d31f56dbf8bafaacb0c617f9a6f137498d5c7aed",
      "tree": "88d095c2208d27362e58ff7431407040ead9d848",
      "parents": [
        "57f9fd7d25ac9a0d7e3a4ced580e780ab4524e3b"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Tue Dec 15 16:47:12 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:07 2009 -0800"
      },
      "message": "memcg: avoid oom-killing innocent task in case of use_hierarchy\n\ntask_in_mem_cgroup(), which is called by select_bad_process() to check\nwhether a task can be a candidate for being oom-killed from memcg\u0027s limit,\nchecks \"curr-\u003euse_hierarchy\"(\"curr\" is the mem_cgroup the task belongs\nto).\n\nBut this check return true(it\u0027s false positive) when:\n\n\t\u003csome path\u003e/aa\t\tuse_hierarchy \u003d\u003d 0\t\u003c- hitting limit\n\t  \u003csome path\u003e/aa/00\tuse_hierarchy \u003d\u003d 1\t\u003c- the task belongs to\n\nThis leads to killing an innocent task in aa/00.  This patch is a fix for\nthis bug.  And this patch also fixes the arg for\nmem_cgroup_print_oom_info().  We should print information of mem_cgroup\nwhich the task being killed, not current, belongs to.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\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": "57f9fd7d25ac9a0d7e3a4ced580e780ab4524e3b",
      "tree": "ff95e62e7326ba7e77903f7f767e9650c0d9b3dd",
      "parents": [
        "a3032a2c15c6967f9f0c0c28375b1a5c833a3112"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Tue Dec 15 16:47:11 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:07 2009 -0800"
      },
      "message": "memcg: cleanup mem_cgroup_move_parent()\n\nmem_cgroup_move_parent() calls try_charge first and cancel_charge on\nfailure.  IMHO, charge/uncharge(especially charge) is high cost operation,\nso we should avoid it as far as possible.\n\nThis patch tries to delay try_charge in mem_cgroup_move_parent() by\nre-ordering checks it does.\n\nAnd this patch renames mem_cgroup_move_account() to\n__mem_cgroup_move_account(), changes the return value of\n__mem_cgroup_move_account() from int to void, and adds a new\nwrapper(mem_cgroup_move_account()), which checks whether a @pc is valid\nfor moving account and calls __mem_cgroup_move_account().\n\nThis patch removes the last caller of trylock_page_cgroup(), so removes\nits definition too.\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@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": "a3032a2c15c6967f9f0c0c28375b1a5c833a3112",
      "tree": "32d279856032fd9d84ebd5d6746b2bd382baaac9",
      "parents": [
        "d8046582d5ee24448800e71c6933fdb6813aa062"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Tue Dec 15 16:47:10 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:07 2009 -0800"
      },
      "message": "memcg: add mem_cgroup_cancel_charge()\n\nThere are some places calling both res_counter_uncharge() and css_put() to\ncancel the charge and the refcnt we have got by mem_cgroup_tyr_charge().\n\nThis patch introduces mem_cgroup_cancel_charge() and call it in those\nplaces.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-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": "d8046582d5ee24448800e71c6933fdb6813aa062",
      "tree": "857d014a850deee5ddb6da6550d81ce0122f03b1",
      "parents": [
        "cdec2e4265dfa09490601b00aeabd8a8d4af30f0"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Dec 15 16:47:09 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:07 2009 -0800"
      },
      "message": "memcg: make memcg\u0027s file mapped consistent with global VM\n\nIn global VM, FILE_MAPPED is used but memcg uses MAPPED_FILE.  This makes\ngrep difficult.  Replace memcg\u0027s MAPPED_FILE with FILE_MAPPED\n\nAnd in global VM, mapped shared memory is accounted into FILE_MAPPED.\nBut memcg doesn\u0027t. fix it.\nNote:\n  page_is_file_cache() just checks SwapBacked or not.\n  So, we need to check PageAnon.\n\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-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": "cdec2e4265dfa09490601b00aeabd8a8d4af30f0",
      "tree": "d120759b91e3e24d33f3d76010c9da990f115706",
      "parents": [
        "569b846df54ffb2827b83ce3244c5f032394cba4"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Dec 15 16:47:08 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:07 2009 -0800"
      },
      "message": "memcg: coalesce charging via percpu storage\n\nThis is a patch for coalescing access to res_counter at charging by percpu\ncaching.  At charge, memcg charges 64pages and remember it in percpu\ncache.  Because it\u0027s cache, drain/flush if necessary.\n\nThis version uses public percpu area.\n 2 benefits for using public percpu area.\n 1. Sum of stocked charge in the system is limited to # of cpus\n    not to the number of memcg. This shows better synchonization.\n 2. drain code for flush/cpuhotplug is very easy (and quick)\n\nThe most important point of this patch is that we never touch res_counter\nin fast path. The res_counter is system-wide shared counter which is modified\nvery frequently. We shouldn\u0027t touch it as far as we can for avoiding\nfalse sharing.\n\nOn x86-64 8cpu server, I tested overheads of memcg at page fault by\nrunning a program which does map/fault/unmap in a loop. Running\na task per a cpu by taskset and see sum of the number of page faults\nin 60secs.\n\n[without memcg config]\n  40156968  page-faults              #      0.085 M/sec   ( +-   0.046% )\n  27.67 cache-miss/faults\n\n[root cgroup]\n  36659599  page-faults              #      0.077 M/sec   ( +-   0.247% )\n  31.58 cache miss/faults\n\n[in a child cgroup]\n  18444157  page-faults              #      0.039 M/sec   ( +-   0.133% )\n  69.96 cache miss/faults\n\n[ + coalescing uncharge patch]\n  27133719  page-faults              #      0.057 M/sec   ( +-   0.155% )\n  47.16 cache miss/faults\n\n[ + coalescing uncharge patch + this patch ]\n  34224709  page-faults              #      0.072 M/sec   ( +-   0.173% )\n  34.69 cache miss/faults\n\nChangelog (since Oct/2):\n  - updated comments\n  - replaced get_cpu_var() with __get_cpu_var() if possible.\n  - removed mutex for system-wide drain. adds a counter instead of it.\n  - removed CONFIG_HOTPLUG_CPU\n\nChangelog (old):\n  - rebased onto the latest mmotm\n  - moved charge size check before __GFP_WAIT check for avoiding unnecesary\n  - added asynchronous flush routine.\n  - fixed bugs pointed out by Nishimura-san.\n\n[akpm@linux-foundation.org: tweak comments]\n[nishimura@mxp.nes.nec.co.jp: don\u0027t do INIT_WORK() repeatedly against the same work_struct]\nSigned-off-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\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "569b846df54ffb2827b83ce3244c5f032394cba4",
      "tree": "77c5d373a5edf97710fab8777912971b99e84828",
      "parents": [
        "cd9b45b78a61e8df250e69385c74e729e5b66abf"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Dec 15 16:47:03 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:07 2009 -0800"
      },
      "message": "memcg: coalesce uncharge during unmap/truncate\n\nIn massive parallel enviroment, res_counter can be a performance\nbottleneck.  One strong techinque to reduce lock contention is reducing\ncalls by coalescing some amount of calls into one.\n\nConsidering charge/uncharge chatacteristic,\n\t- charge is done one by one via demand-paging.\n\t- uncharge is done by\n\t\t- in chunk at munmap, truncate, exit, execve...\n\t\t- one by one via vmscan/paging.\n\nIt seems we have a chance to coalesce uncharges for improving scalability\nat unmap/truncation.\n\nThis patch is a for coalescing uncharge.  For avoiding scattering memcg\u0027s\nstructure to functions under /mm, this patch adds memcg batch uncharge\ninformation to the task.  A reason for per-task batching is for making use\nof caller\u0027s context information.  We do batched uncharge (deleyed\nuncharge) when truncation/unmap occurs but do direct uncharge when\nuncharge is called by memory reclaim (vmscan.c).\n\nThe degree of coalescing depends on callers\n  - at invalidate/trucate... pagevec size\n  - at unmap ....ZAP_BLOCK_SIZE\n(memory itself will be freed in this degree.)\nThen, we\u0027ll not coalescing too much.\n\nOn x86-64 8cpu server, I tested overheads of memcg at page fault by\nrunning a program which does map/fault/unmap in a loop. Running\na task per a cpu by taskset and see sum of the number of page faults\nin 60secs.\n\n[without memcg config]\n  40156968  page-faults              #      0.085 M/sec   ( +-   0.046% )\n  27.67 cache-miss/faults\n[root cgroup]\n  36659599  page-faults              #      0.077 M/sec   ( +-   0.247% )\n  31.58 miss/faults\n[in a child cgroup]\n  18444157  page-faults              #      0.039 M/sec   ( +-   0.133% )\n  69.96 miss/faults\n[child with this patch]\n  27133719  page-faults              #      0.057 M/sec   ( +-   0.155% )\n  47.16 miss/faults\n\nWe can see some amounts of improvement.\n(root cgroup doesn\u0027t affected by this patch)\nAnother patch for \"charge\" will follow this and above will be improved more.\n\nChangelog(since 2009/10/02):\n - renamed filed of memcg_batch (as pages to bytes, memsw to memsw_bytes)\n - some clean up and commentary/description updates.\n - added initialize code to copy_process(). (possible bug fix)\n\nChangelog(old):\n - fixed !CONFIG_MEM_CGROUP case.\n - rebased onto the latest mmotm + softlimit fix patches.\n - unified patch for callers\n - added commetns.\n - make -\u003edo_batch as bool.\n - removed css_get() at el. We don\u0027t need it.\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": "cd9b45b78a61e8df250e69385c74e729e5b66abf",
      "tree": "8cb92363dd4b936814de9a0823016889b3441fde",
      "parents": [
        "6be4b78993498c253e99b12c4d0f7684a36955e2"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Tue Dec 15 16:47:01 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:07 2009 -0800"
      },
      "message": "memcg: fix memory.memsw.usage_in_bytes for root cgroup\n\nA memory cgroup has a memory.memsw.usage_in_bytes file.  It shows the sum\nof the usage of pages and swapents in the cgroup.  Presently the root\ncgroup\u0027s memsw.usage_in_bytes shows the wrong value - the number of\nswapents are not added.\n\nSo take MEM_CGROUP_STAT_SWAPOUT into account.\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\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": "d324236b3333e87c8825b35f2104184734020d35",
      "tree": "e8ad6b50e50f975b692cc6a15d5812a51d0047ad",
      "parents": [
        "e42d9d5d47961fb5db0be65b56dd52fe7b2421f1"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Dec 16 12:19:59 2009 +0100"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Dec 16 12:19:59 2009 +0100"
      },
      "message": "memcg: add accessor to mem_cgroup.css\n\nSo that an outside user can free the reference count grabbed by\ntry_get_mem_cgroup_from_page().\n\nCC: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCC: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCC: 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: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "e42d9d5d47961fb5db0be65b56dd52fe7b2421f1",
      "tree": "6a898c8d43ee0533581076342b9a7a97cca0509e",
      "parents": [
        "478c5ffc0b50527bd2390f2daa46cc16276b8413"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Dec 16 12:19:59 2009 +0100"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Dec 16 12:19:59 2009 +0100"
      },
      "message": "memcg: rename and export try_get_mem_cgroup_from_page()\n\nSo that the hwpoison injector can get mem_cgroup for arbitrary page\nand thus know whether it is owned by some mem_cgroup task(s).\n\n[AK: Merged with latest git tree]\n\nCC: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCC: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCC: 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: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "407f9c8b0889ced1dbe2f9157e4e60c61329d5c9",
      "tree": "30c0c9ad224a73de621bc23909cd89cd81eda1aa",
      "parents": [
        "80e148226028257ec0a1909d99b2c40d0ffe17f2"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:30 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: mem cgroup charge swapin copy\n\nBut ksm swapping does require one small change in mem cgroup handling.\nWhen do_swap_page()\u0027s call to ksm_might_need_to_copy() does indeed\nsubstitute a duplicate page to accommodate a different anon_vma (or a the\n!PageSwapCache check in mem_cgroup_try_charge_swapin().\n\nThat was returning success without charging, on the assumption that\npte_same() would fail after, which is not the case here.  Originally I\nproposed that success, so that an unshrinkable mem cgroup at its limit\nwould not fail unnecessarily; but that\u0027s a minor point, and there are\nplenty of other places where we may fail an overallocation which might\nlater prove unnecessary.  So just go ahead and do what all the other\nexceptions do: proceed to charge current mm.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@redhat.com\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": "af901ca181d92aac3a7dc265144a9081a86d8f39",
      "tree": "380054af22521144fbe1364c3bcd55ad24c9bde4",
      "parents": [
        "972b94ffb90ea6d20c589d9a47215df103388ddd"
      ],
      "author": {
        "name": "André Goddard Rosa",
        "email": "andre.goddard@gmail.com",
        "time": "Sat Nov 14 13:09:05 2009 -0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Dec 04 15:39:55 2009 +0100"
      },
      "message": "tree-wide: fix assorted typos all over the place\n\nThat is \"success\", \"unknown\", \"through\", \"performance\", \"[re|un]mapping\"\n, \"access\", \"default\", \"reasonable\", \"[con]currently\", \"temperature\"\n, \"channel\", \"[un]used\", \"application\", \"example\",\"hierarchy\", \"therefore\"\n, \"[over|under]flow\", \"contiguous\", \"threshold\", \"enough\" and others.\n\nSigned-off-by: André Goddard Rosa \u003candre.goddard@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "21ae2956ce289f61f11863cc67080f9a28101ae0",
      "tree": "c6f66176b5f151a1326879de334a94201eeb0f26",
      "parents": [
        "0e6779bbcb78b434efdc84fff1809e342684d6b3"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "u.kleine-koenig@pengutronix.de",
        "time": "Wed Oct 07 15:21:09 2009 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Nov 09 09:40:57 2009 +0100"
      },
      "message": "tree-wide: fix typos \"aquire\" -\u003e \"acquire\", \"cumsumed\" -\u003e \"consumed\"\n\nThis patch was generated by\n\n\tgit grep -E -i -l \u0027[Aa]quire\u0027 | xargs -r perl -p -i -e \u0027s/([Aa])quire/$1cquire/\u0027\n\nand the cumsumed was found by checking the diff for aquire.\n\nSigned-off-by: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "ef8745c1e7fc5413d760b3b958f3fd3a0beaad72",
      "tree": "a1f1998dbcf06e84fe3539192e440e9d1bb876f2",
      "parents": [
        "4e649152cbaa1aedd01821d200ab9d597fe469e4"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Oct 01 15:44:12 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 01 16:11:13 2009 -0700"
      },
      "message": "memcg: reduce check for softlimit excess\n\nIn charge/uncharge/reclaim path, usage_in_excess is calculated repeatedly\nand it takes res_counter\u0027s spin_lock every time.\n\nThis patch removes unnecessary calls for res_count_soft_limit_excess.\n\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Li Zefan \u003clizf@cn.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": "4e649152cbaa1aedd01821d200ab9d597fe469e4",
      "tree": "635fa7d75acda929e81b8b0db7e641b7d4e07b35",
      "parents": [
        "3dece8347df6a16239fab10dadb370854f1c969c"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Oct 01 15:44:11 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 01 16:11:13 2009 -0700"
      },
      "message": "memcg: some modification to softlimit under hierarchical memory reclaim.\n\nThis patch clean up/fixes for memcg\u0027s uncharge soft limit path.\n\nProblems:\n  Now, res_counter_charge()/uncharge() handles softlimit information at\n  charge/uncharge and softlimit-check is done when event counter per memcg\n  goes over limit. Now, event counter per memcg is updated only when\n  memory usage is over soft limit. Here, considering hierarchical memcg\n  management, ancesotors should be taken care of.\n\n  Now, ancerstors(hierarchy) are handled in charge() but not in uncharge().\n  This is not good.\n\n  Prolems:\n  1. memcg\u0027s event counter incremented only when softlimit hits. That\u0027s bad.\n     It makes event counter hard to be reused for other purpose.\n\n  2. At uncharge, only the lowest level rescounter is handled. This is bug.\n     Because ancesotor\u0027s event counter is not incremented, children should\n     take care of them.\n\n  3. res_counter_uncharge()\u0027s 3rd argument is NULL in most case.\n     ops under res_counter-\u003elock should be small. No \"if\" sentense is better.\n\nFixes:\n  * Removed soft_limit_xx poitner and checks in charge and uncharge.\n    Do-check-only-when-necessary scheme works enough well without them.\n\n  * make event-counter of memcg incremented at every charge/uncharge.\n    (per-cpu area will be accessed soon anyway)\n\n  * All ancestors are checked at soft-limit-check. This is necessary because\n    ancesotor\u0027s event counter may never be modified. Then, they should be\n    checked at the same time.\n\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Li Zefan \u003clizf@cn.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": "26251eaf98e26dc2ce2dc26d63bc502700760704",
      "tree": "f783cab10c5244c170e7d1a92b6a80c574cdf114",
      "parents": [
        "447e4460a4ef44a275f81d992d227f34673be2a8"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Oct 01 15:44:08 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 01 16:11:12 2009 -0700"
      },
      "message": "memcg: fix refcnt going negative\n\n__mem_cgroup_largest_soft_limit_node() returns a mem_cgroup_per_zone \"mz\"\nwith incremnted mz-\u003emem-\u003ecss\u0027s refcnt.  Then, the caller of this function\nhas to call css_put(mz-\u003emem-\u003ecss).\n\nBut, mz can be !NULL even if \"not found\" i.e.  without css_get().  By\nthis, css-\u003erefcnt will go down to minus.\n\nThis may cause various things...one of results will be\ninitite-loop in css_tryget()  as this.\n\nINFO: RCU detected CPU 0 stall (t\u003d10000 jiffies)\nsending NMI to all CPUs:\nNMI backtrace for cpu 0\nCPU 0:\n\u003csnip\u003e\n\n \u003c\u003cEOE\u003e\u003e  \u003cIRQ\u003e  [\u003cffffffff810884bd\u003e] trace_hardirqs_off+0xd/0x10\n  [\u003cffffffff8102a940\u003e] flat_send_IPI_mask+0x90/0xb0\n  [\u003cffffffff8102a9c9\u003e] flat_send_IPI_all+0x69/0x70\n  [\u003cffffffff81027372\u003e] arch_trigger_all_cpu_backtrace+0x62/0xa0\n  [\u003cffffffff810bff8e\u003e] __rcu_pending+0x7e/0x370\n  [\u003cffffffff810c02c7\u003e] rcu_check_callbacks+0x47/0x130\n  [\u003cffffffff81063a26\u003e] update_process_times+0x46/0x70\n  [\u003cffffffff81085930\u003e] tick_sched_timer+0x60/0x160\n  [\u003cffffffff810858d0\u003e] ? tick_sched_timer+0x0/0x160\n  [\u003cffffffff8107a03a\u003e] __run_hrtimer+0xba/0x150\n  [\u003cffffffff8107a325\u003e] hrtimer_interrupt+0xd5/0x1b0\n  [\u003cffffffff81426dfe\u003e] ? trace_hardirqs_off_thunk+0x3a/0x3c\n  [\u003cffffffff8142cacd\u003e] smp_apic_timer_interrupt+0x6d/0x9b\n  [\u003cffffffff8100cb33\u003e] apic_timer_interrupt+0x13/0x20\n  \u003cEOI\u003e  [\u003cffffffff811317b6\u003e] ? mem_cgroup_walk_tree+0x156/0x180\n  [\u003cffffffff811316d3\u003e] ? mem_cgroup_walk_tree+0x73/0x180\n  [\u003cffffffff81131692\u003e] ? mem_cgroup_walk_tree+0x32/0x180\n  [\u003cffffffff81131a00\u003e] ? mem_cgroup_get_local_stat+0x0/0x110\n  [\u003cffffffff81131d5b\u003e] ? mem_control_stat_show+0x14b/0x330\n  [\u003cffffffff810a57fd\u003e] ? cgroup_seqfile_show+0x3d/0x60\n\nAbove shows CPU0 caught in css_tryget()\u0027s inifinite loop because\nof bad refcnt.\n\nThis is a fix to set mz\u003dNULL at the top of retry path.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Paul Menage \u003cmenage@google.com\u003e\nCc: Li Zefan \u003clizf@cn.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": "1dd3a27326d307952f8ad2499478c84dc7311517",
      "tree": "ae59d52935c790dd3fd0c8e12af5855cfe1abfcb",
      "parents": [
        "0c3e73e84fe3f64cf1c2e8bb4e91e8901cbcdc38"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Sep 23 15:56:43 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "memcg: show swap usage in stat file\n\nWe now count MEM_CGROUP_STAT_SWAPOUT, so we can show swap usage.  It would\nbe useful for users to show swap usage in memory.stat file, because they\ndon\u0027t need calculate memsw.usage - res.usage to know swap usage.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-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": "0c3e73e84fe3f64cf1c2e8bb4e91e8901cbcdc38",
      "tree": "1c3e27fce3babd3703b34c9a353f253fcefb6325",
      "parents": [
        "4e41695356fb4e0b153be1440ad027e46e0a7ea2"
      ],
      "author": {
        "name": "Balbir Singh",
        "email": "balbir@linux.vnet.ibm.com",
        "time": "Wed Sep 23 15:56:42 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "memcg: improve resource counter scalability\n\nReduce the resource counter overhead (mostly spinlock) associated with the\nroot cgroup.  This is a part of the several patches to reduce mem cgroup\noverhead.  I had posted other approaches earlier (including using percpu\ncounters).  Those patches will be a natural addition and will be added\niteratively on top of these.\n\nThe patch stops resource counter accounting for the root cgroup.  The data\nfor display is derived from the statisitcs we maintain via\nmem_cgroup_charge_statistics (which is more scalable).  What happens today\nis that, we do double accounting, once using res_counter_charge() and once\nusing memory_cgroup_charge_statistics().  For the root, since we don\u0027t\nimplement limits any more, we don\u0027t need to track every charge via\nres_counter_charge() and check for limit being exceeded and reclaim.\n\nThe main mem-\u003eres usage_in_bytes can be derived by summing the cache and\nrss usage data from memory statistics (MEM_CGROUP_STAT_RSS and\nMEM_CGROUP_STAT_CACHE).  However, for memsw-\u003eres usage_in_bytes, we need\nadditional data about swapped out memory.  This patch adds a\nMEM_CGROUP_STAT_SWAPOUT and uses that along with MEM_CGROUP_STAT_RSS and\nMEM_CGROUP_STAT_CACHE to derive the memsw data.  This data is computed\nrecursively when hierarchy is enabled.\n\nThe tests results I see on a 24 way show that\n\n1. The lock contention disappears from /proc/lock_stats\n2. The results of the test are comparable to running with\n   cgroup_disable\u003dmemory.\n\nHere is a sample of my program runs\n\nWithout Patch\n\n Performance counter stats for \u0027/home/balbir/parallel_pagefault\u0027:\n\n 7192804.124144  task-clock-msecs         #     23.937 CPUs\n         424691  context-switches         #      0.000 M/sec\n            267  CPU-migrations           #      0.000 M/sec\n       28498113  page-faults              #      0.004 M/sec\n  5826093739340  cycles                   #    809.989 M/sec\n   408883496292  instructions             #      0.070 IPC\n     7057079452  cache-references         #      0.981 M/sec\n     3036086243  cache-misses             #      0.422 M/sec\n\n  300.485365680  seconds time elapsed\n\nWith cgroup_disable\u003dmemory\n\n Performance counter stats for \u0027/home/balbir/parallel_pagefault\u0027:\n\n 7182183.546587  task-clock-msecs         #     23.915 CPUs\n         425458  context-switches         #      0.000 M/sec\n            203  CPU-migrations           #      0.000 M/sec\n       92545093  page-faults              #      0.013 M/sec\n  6034363609986  cycles                   #    840.185 M/sec\n   437204346785  instructions             #      0.072 IPC\n     6636073192  cache-references         #      0.924 M/sec\n     2358117732  cache-misses             #      0.328 M/sec\n\n  300.320905827  seconds time elapsed\n\nWith this patch applied\n\n Performance counter stats for \u0027/home/balbir/parallel_pagefault\u0027:\n\n 7191619.223977  task-clock-msecs         #     23.955 CPUs\n         422579  context-switches         #      0.000 M/sec\n             88  CPU-migrations           #      0.000 M/sec\n       91946060  page-faults              #      0.013 M/sec\n  5957054385619  cycles                   #    828.333 M/sec\n  1058117350365  instructions             #      0.178 IPC\n     9161776218  cache-references         #      1.274 M/sec\n     1920494280  cache-misses             #      0.267 M/sec\n\n  300.218764862  seconds time elapsed\n\nData from Prarit (kernel compile with make -j64 on a 64\nCPU/32G machine)\n\nFor a single run\n\nWithout patch\n\nreal 27m8.988s\nuser 87m24.916s\nsys 382m6.037s\n\nWith patch\n\nreal    4m18.607s\nuser    84m58.943s\nsys     50m52.682s\n\nWith config turned off\n\nreal    4m54.972s\nuser    90m13.456s\nsys     50m19.711s\n\nNOTE: The data looks counterintuitive due to the increased performance\nwith the patch, even over the config being turned off. We probably need\nmore runs, but so far all testing has shown that the patches definitely\nhelp.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Prarit Bhargava \u003cprarit@redhat.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\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": "4e41695356fb4e0b153be1440ad027e46e0a7ea2",
      "tree": "547dae77d1655a1acb260ea8b266c7b8a48f2d2c",
      "parents": [
        "75822b4495b62e8721e9b88e3cf9e653a0c85b73"
      ],
      "author": {
        "name": "Balbir Singh",
        "email": "balbir@linux.vnet.ibm.com",
        "time": "Wed Sep 23 15:56:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "memory controller: soft limit reclaim on contention\n\nImplement reclaim from groups over their soft limit\n\nPermit reclaim from memory cgroups on contention (via the direct reclaim\npath).\n\nmemory cgroup soft limit reclaim finds the group that exceeds its soft\nlimit by the largest number of pages and reclaims pages from it and then\nreinserts the cgroup into its correct place in the rbtree.\n\nAdd additional checks to mem_cgroup_hierarchical_reclaim() to detect long\nloops in case all swap is turned off.  The code has been refactored and\nthe loop check (loop \u003c 2) has been enhanced for soft limits.  For soft\nlimits, we try to do more targetted reclaim.  Instead of bailing out after\ntwo loops, the routine now reclaims memory proportional to the size by\nwhich the soft limit is exceeded.  The proportion has been empirically\ndetermined.\n\n[akpm@linux-foundation.org: build fix]\n[kamezawa.hiroyu@jp.fujitsu.com: fix softlimit css refcnt handling]\n[nishimura@mxp.nes.nec.co.jp: refcount of the \"victim\" should be decremented before exiting the loop]\nSigned-off-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "75822b4495b62e8721e9b88e3cf9e653a0c85b73",
      "tree": "b8d4c10f03a4e289f0a66b982243fd8980f9df07",
      "parents": [
        "f64c3f54940d6929a2b6dcffaab942bd62be2e66"
      ],
      "author": {
        "name": "Balbir Singh",
        "email": "balbir@linux.vnet.ibm.com",
        "time": "Wed Sep 23 15:56:38 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "memory controller: soft limit refactor reclaim flags\n\nRefactor mem_cgroup_hierarchical_reclaim()\n\nRefactor the arguments passed to mem_cgroup_hierarchical_reclaim() into\nflags, so that new parameters don\u0027t have to be passed as we make the\nreclaim routine more flexible\n\nSigned-off-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f64c3f54940d6929a2b6dcffaab942bd62be2e66",
      "tree": "7b3587700b08639970580be6c87f36df80ca8c74",
      "parents": [
        "296c81d89f4f14269f7346f81442910158c0a83a"
      ],
      "author": {
        "name": "Balbir Singh",
        "email": "balbir@linux.vnet.ibm.com",
        "time": "Wed Sep 23 15:56:37 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "memory controller: soft limit organize cgroups\n\nOrganize cgroups over soft limit in a RB-Tree\n\nIntroduce an RB-Tree for storing memory cgroups that are over their soft\nlimit.  The overall goal is to\n\n1. Add a memory cgroup to the RB-Tree when the soft limit is exceeded.\n   We are careful about updates, updates take place only after a particular\n   time interval has passed\n2. We remove the node from the RB-Tree when the usage goes below the soft\n   limit\n\nThe next set of patches will exploit the RB-Tree to get the group that is\nover its soft limit by the largest amount and reclaim from it, when we\nface memory contention.\n\n[hugh.dickins@tiscali.co.uk: CONFIG_CGROUP_MEM_RES_CTLR\u003dy CONFIG_PREEMPT\u003dy fails to boot]\nSigned-off-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Jiri Slaby \u003cjirislaby@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": "296c81d89f4f14269f7346f81442910158c0a83a",
      "tree": "cf0e1facd1fed8282c1885bc4126e7bca1928712",
      "parents": [
        "a6df63615b943dbef22df04c19f4506330fe835e"
      ],
      "author": {
        "name": "Balbir Singh",
        "email": "balbir@linux.vnet.ibm.com",
        "time": "Wed Sep 23 15:56:36 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "memory controller: soft limit interface\n\nAdd an interface to allow get/set of soft limits.  Soft limits for memory\nplus swap controller (memsw) is currently not supported.  Resource\ncounters have been enhanced to support soft limits and new type\nRES_SOFT_LIMIT has been added.  Unlike hard limits, soft limits can be\ndirectly set and do not need any reclaim or checks before setting them to\na newer value.\n\nKamezawa-San raised a question as to whether soft limit should belong to\nres_counter.  Since all resources understand the basic concepts of hard\nand soft limits, it is justified to add soft limits here.  Soft limits are\na generic resource usage feature, even file system quotas support soft\nlimits.\n\nSigned-off-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "261fb61a8bf6d3bd964ae6f1e6af49585d30db51",
      "tree": "417cebd2e18bc2457b5b09d8359ad71ba6afd56d",
      "parents": [
        "4b3bde4c983de36c59e6c1a24701f6fe816f9f55"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Sep 23 15:56:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:58 2009 -0700"
      },
      "message": "memcg: add comments explaining memory barriers\n\nAdd comments for the reason of smp_wmb() in mem_cgroup_commit_charge().\n\n[akpm@linux-foundation.org: coding-style fixes]\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\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4b3bde4c983de36c59e6c1a24701f6fe816f9f55",
      "tree": "e759c5ceccf57331b868b7feac61cae5e932c6d4",
      "parents": [
        "be367d09927023d081f9199665c8500f69f14d22"
      ],
      "author": {
        "name": "Balbir Singh",
        "email": "balbir@linux.vnet.ibm.com",
        "time": "Wed Sep 23 15:56:32 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:58 2009 -0700"
      },
      "message": "memcg: remove the overhead associated with the root cgroup\n\nChange the memory cgroup to remove the overhead associated with accounting\nall pages in the root cgroup.  As a side-effect, we can no longer set a\nmemory hard limit in the root cgroup.\n\nA new flag to track whether the page has been accounted or not has been\nadded as well.  Flags are now set atomically for page_cgroup,\npcg_default_flags is now obsolete and removed.\n\n[akpm@linux-foundation.org: fix a few documentation glitches]\nSigned-off-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@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": "be367d09927023d081f9199665c8500f69f14d22",
      "tree": "f0c5b9da037506da3c5890cf11b51b39a7d3c427",
      "parents": [
        "c378369d8b4fa516ff2b1e79c3eded4e0e955ebb"
      ],
      "author": {
        "name": "Ben Blum",
        "email": "bblum@google.com",
        "time": "Wed Sep 23 15:56:31 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:58 2009 -0700"
      },
      "message": "cgroups: let ss-\u003ecan_attach and ss-\u003eattach do whole threadgroups at a time\n\nAlter the ss-\u003ecan_attach and ss-\u003eattach functions to be able to deal with\na whole threadgroup at a time, for use in cgroup_attach_proc.  (This is a\npre-patch to cgroup-procs-writable.patch.)\n\nCurrently, new mode of the attach function can only tell the subsystem\nabout the old cgroup of the threadgroup leader.  No subsystem currently\nneeds that information for each thread that\u0027s being moved, but if one were\nto be added (for example, one that counts tasks within a group) this bit\nwould need to be reworked a bit to tell the subsystem the right\ninformation.\n\n[hidave.darkstar@gmail.com: fix build]\nSigned-off-by: Ben Blum \u003cbblum@google.com\u003e\nSigned-off-by: Paul Menage \u003cmenage@google.com\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nReviewed-by: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Dave Young \u003chidave.darkstar@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": "b7c46d151cb82856a429709d1227ba1648028232",
      "tree": "b93012b4bb2ffd603c020b38d8f1f6f3b4714ff7",
      "parents": [
        "bba78819548a59a52e60f0b259997bbd011164ae"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Mon Sep 21 17:02:56 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:35 2009 -0700"
      },
      "message": "mm: drop unneeded double negations\n\nRemove double negations where the operand is already boolean.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "887032670d47366a8c8f25396ea7c14b7b2cc620",
      "tree": "e5f9ece5ab9239648e8d7051ccb9a217d92553d7",
      "parents": [
        "f0d83679a8d471dc8b646919f70595d6fe8c9606"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jul 29 15:04:06 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jul 29 19:10:35 2009 -0700"
      },
      "message": "cgroup avoid permanent sleep at rmdir\n\nAfter commit ec64f51545fffbc4cb968f0cea56341a4b07e85a (\"cgroup: fix\nfrequent -EBUSY at rmdir\"), cgroup\u0027s rmdir (especially against memcg)\ndoesn\u0027t return -EBUSY by temporary ref counts.  That commit expects all\nrefs after pre_destroy() is temporary but...it wasn\u0027t.  Then, rmdir can\nwait permanently.  This patch tries to fix that and change followings.\n\n - set CGRP_WAIT_ON_RMDIR flag before pre_destroy().\n - clear CGRP_WAIT_ON_RMDIR flag when the subsys finds racy case.\n   if there are sleeping ones, wakes them up.\n - rmdir() sleeps only when CGRP_WAIT_ON_RMDIR flag is set.\n\nTested-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReported-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: Paul Menage \u003cmenage@google.com\u003e\nAcked-by: Balbir Sigh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-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": "8aa7e847d834ed937a9ad37a0f2ad5b8584c1ab0",
      "tree": "76c8b4f1362a928d426f2201790ab5d128f57724",
      "parents": [
        "c2cc49a2f8a479dde96a599646d30b6cc9dbed78"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Jul 09 14:52:32 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.(none)",
        "time": "Fri Jul 10 20:31:53 2009 +0200"
      },
      "message": "Fix congestion_wait() sync/async vs read/write confusion\n\nCommit 1faa16d22877f4839bd433547d770c676d1d964c accidentally broke\nthe bdi congestion wait queue logic, causing us to wait on congestion\nfor WRITE (\u003d\u003d 1) when we really wanted BLK_RW_ASYNC (\u003d\u003d 0) instead.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "2ffebca6aa7e1687905c842dd8c5c1e811e574e7",
      "tree": "93ec4e18c54289e82dcc8e602c166d5ffee50ef8",
      "parents": [
        "c5b947b28828e82814605824e5db0bc58d66d8c0"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 17 16:27:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:48 2009 -0700"
      },
      "message": "memcg: fix lru rotation in isolate_pages\n\nTry to fix memcg\u0027s lru rotation sanity: make memcg use the same logic as\nthe global LRU does.\n\nNow, at __isolate_lru_page() retruns -EBUSY, the page is rotated to the\ntail of LRU in global LRU\u0027s isolate LRU pages.  But in memcg, it\u0027s not\nhandled.  This makes memcg do the same behavior as global LRU and rotate\nLRU in the page is busy.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\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": "22a668d7c3ef833e7d67e9cef587ecc78069d532",
      "tree": "da9f2e7ea7224c347dfe33ea9d4dddd944c861ac",
      "parents": [
        "8a9478ca7f4bcb8945cec7f95d52dae2d5e50cbd"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 17 16:27:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:48 2009 -0700"
      },
      "message": "memcg: fix behavior under memory.limit equals to memsw.limit\n\nA user can set memcg.limit_in_bytes \u003d\u003d memcg.memsw.limit_in_bytes when the\nuser just want to limit the total size of applications, in other words,\nnot very interested in memory usage itself.  In this case, swap-out will\nbe done only by global-LRU.\n\nBut, under current implementation, memory.limit_in_bytes is checked at\nfirst and try_to_free_page() may do swap-out.  But, that swap-out is\nuseless for memsw.limit_in_bytes and the thread may hit limit again.\n\nThis patch tries to fix the current behavior at memory.limit \u003d\u003d\nmemsw.limit case.  And documentation is updated to explain the behavior of\nthis special case.\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: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Dhaval Giani \u003cdhaval@linux.vnet.ibm.com\u003e\nCc: YAMAMOTO Takashi \u003cyamamoto@valinux.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": "8a9478ca7f4bcb8945cec7f95d52dae2d5e50cbd",
      "tree": "935e6ee3340ebe999374b54967cc2fa14e8d0060",
      "parents": [
        "20ebcdda78a282d1d5266887ddf8a2d670182576"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 17 16:27:17 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:47 2009 -0700"
      },
      "message": "memcg: fix swap accounting\n\nThis patch fixes mis-accounting of swap usage in memcg.\n\nIn the current implementation, memcg\u0027s swap account is uncharged only when\nswap is completely freed.  But there are several cases where swap cannot\nbe freed cleanly.  For handling that, this patch changes that memcg\nuncharges swap account when swap has no references other than cache.\n\nBy this, memcg\u0027s swap entry accounting can be fully synchronous with the\napplication\u0027s behavior.\n\nThis patch also changes memcg\u0027s hooks for swap-out.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Dhaval Giani \u003cdhaval@linux.vnet.ibm.com\u003e\nCc: YAMAMOTO Takashi \u003cyamamoto@valinux.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": "338c843108bf5030d6765f4405126e70f8b77845",
      "tree": "c3bdab2f288e4c5a843ea07e0f8938a821ab848a",
      "parents": [
        "302362c5abdda80b5c2e4e57be610c2e3c2ab3c5"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Wed Jun 17 16:27:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:47 2009 -0700"
      },
      "message": "memcg: remove some redundant checks\n\nWe don\u0027t need to check do_swap_account in the case that the function which\nchecks do_swap_account will never get called if do_swap_account \u003d\u003d 0.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\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": "d69b042f3d7406ddba560143b1796020df760800",
      "tree": "6b704864716240aa1282d06bb79c02ef4b77e16d",
      "parents": [
        "cd5008196f7e583f4c558531a2bca59f6c674c5b"
      ],
      "author": {
        "name": "Balbir Singh",
        "email": "balbir@linux.vnet.ibm.com",
        "time": "Wed Jun 17 16:26:34 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:47 2009 -0700"
      },
      "message": "memcg: add file-based RSS accounting\n\nAdd file RSS tracking per memory cgroup\n\nWe currently don\u0027t track file RSS, the RSS we report is actually anon RSS.\n All the file mapped pages, come in through the page cache and get\naccounted there.  This patch adds support for accounting file RSS pages.\nIt should\n\n1. Help improve the metrics reported by the memory resource controller\n2. Will form the basis for a future shared memory accounting heuristic\n   that has been proposed by Kamezawa.\n\nUnfortunately, we cannot rename the existing \"rss\" keyword used in\nmemory.stat to \"anon_rss\".  We however, add \"mapped_file\" data and hope to\neducate the end user through documentation.\n\n[hugh.dickins@tiscali.co.uk: fix mem_cgroup_update_mapped_file_stat oops]\nSigned-off-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.cn\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Dhaval Giani \u003cdhaval@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: YAMAMOTO Takashi \u003cyamamoto@valinux.co.jp\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "56e49d218890f49b0057710a4b6fef31f5ffbfec",
      "tree": "a0525dd9a140352276bdfb76a3d65230c3e5121d",
      "parents": [
        "35efa5e993a7a00a50b87d2b7725c3eafc80b083"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Tue Jun 16 15:32:28 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:38 2009 -0700"
      },
      "message": "vmscan: evict use-once pages first\n\nWhen the file LRU lists are dominated by streaming IO pages, evict those\npages first, before considering evicting other pages.\n\nThis should be safe from deadlocks or performance problems\nbecause only three things can happen to an inactive file page:\n\n1) referenced twice and promoted to the active list\n2) evicted by the pageout code\n3) under IO, after which it will get evicted or promoted\n\nThe pages freed in this way can either be reused for streaming IO, or\nallocated for something else.  If the pages are used for streaming IO,\nthis pageout pattern continues.  Otherwise, we will fall back to the\nnormal pageout pattern.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nReported-by: Elladan \u003celladan@eskimo.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "46f7e602fb32e02145ef14f8c0ca6d399f0a96b9",
      "tree": "3db67ceec30ffc1ababad1d79c11ba8a61fa037c",
      "parents": [
        "f83a275dbc5ca1721143698e844243fcadfabf6a"
      ],
      "author": {
        "name": "Nikanth Karthikesan",
        "email": "knikanth@suse.de",
        "time": "Thu May 28 14:34:41 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 29 08:40:03 2009 -0700"
      },
      "message": "memcg: fix build warning and avoid checking for mem !\u003d null again and again\n\nFix build warning, \"mem_cgroup_is_obsolete defined but not used\" when\nCONFIG_DEBUG_VM is not set.  Also avoid checking for !mem again and again.\n\nSigned-off-by: Nikanth Karthikesan \u003cknikanth@suse.de\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\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": "e767e0561d7fd2333df1921f1ab4176211f9036b",
      "tree": "3b936733f80ceb1ee61ce99f927d002d2296250e",
      "parents": [
        "bd6daba909d8484bd2ccf6017db4028d7a420927"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu May 28 14:34:28 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 29 08:40:02 2009 -0700"
      },
      "message": "memcg: fix deadlock between lock_page_cgroup and mapping tree_lock\n\nmapping-\u003etree_lock can be acquired from interrupt context.  Then,\nfollowing dead lock can occur.\n\nAssume \"A\" as a page.\n\n CPU0:\n       lock_page_cgroup(A)\n\t\tinterrupted\n\t\t\t-\u003e take mapping-\u003etree_lock.\n CPU1:\n       take mapping-\u003etree_lock\n\t\t-\u003e lock_page_cgroup(A)\n\nThis patch tries to fix above deadlock by moving memcg\u0027s hook to out of\nmapping-\u003etree_lock.  charge/uncharge of pagecache/swapcache is protected\nby page lock, not tree_lock.\n\nAfter this patch, lock_page_cgroup() is not called under mapping-\u003etree_lock.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-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\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ae3abae64f177586be55b04a7fb7047a34b21a3e",
      "tree": "05ba2ef8dca958cc4a02ac08e5aae03b8bc82a81",
      "parents": [
        "0816178638c15ce5472d39d771a96860dff4141a"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Apr 30 15:08:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 02 15:36:09 2009 -0700"
      },
      "message": "memcg: fix mem_cgroup_shrink_usage()\n\nCurrent mem_cgroup_shrink_usage() has two problems.\n\n1. It doesn\u0027t call mem_cgroup_out_of_memory and doesn\u0027t update\n   last_oom_jiffies, so pagefault_out_of_memory invokes global OOM.\n\n2. Considering hierarchy, shrinking has to be done from the\n   mem_over_limit, not from the memcg which the page would be charged to.\n\nmem_cgroup_try_charge_swapin() does all of these things properly, so we\nuse it and call cancel_charge_swapin when it succeeded.\n\nThe name of \"shrink_usage\" is not appropriate for this behavior, so we\nchange it too.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.cn\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Dhaval Giani \u003cdhaval@linux.vnet.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: YAMAMOTO Takashi \u003cyamamoto@valinux.co.jp\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c0bd3f63ce01a1757dbce6373122a05fbf99ced7",
      "tree": "4034e701106d1ed819441f4f32a04dfa020398ae",
      "parents": [
        "1e50cc9022d6c0b9175d804573e3f401d00d1381"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Apr 30 15:08:11 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 02 15:36:09 2009 -0700"
      },
      "message": "memcg: fix try_get_mem_cgroup_from_swapcache()\n\nThis is a bugfix for commit 3c776e64660028236313f0e54f3a9945764422df\n(\"memcg: charge swapcache to proper memcg\").\n\nUsed bit of swapcache is solid under page lock, but considering\nmove_account, pc-\u003emem_cgroup is not.\n\nWe need lock_page_cgroup() anyway.\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": "a8031cb00e286600ea08bd00a6812dbfec412376",
      "tree": "9b3708cbb048af00c152a311e0c5db841cb7f82a",
      "parents": [
        "3d26dcf7679c5cc6c9f3b95ffdb2152fba2b7fae"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Apr 13 14:40:08 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 13 15:04:32 2009 -0700"
      },
      "message": "memcg: remove warning when CONFIG_DEBUG_VM\u003dn\n\nmm/memcontrol.c:318: warning: `mem_cgroup_is_obsolete\u0027 defined but not used\n\n[akpm@linux-foundation.org: simplify as suggested by Balbir]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-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": "83aae4c737866da3280f51fd15da58eddd788397",
      "tree": "a4fdabfb02949e0d44743850b7f37ae52eaed757",
      "parents": [
        "627991a20b3f4d504d20466ab405fe035cb1a20a"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Apr 02 16:57:48 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:56 2009 -0700"
      },
      "message": "memcg: cleanup cache_charge\n\nCurrent mem_cgroup_cache_charge is a bit complicated especially\nin the case of shmem\u0027s swap-in.\n\nThis patch cleans it up by using try_charge_swapin and commit_charge_swapin.\n\nSigned-off-by: 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": "a3b2d692690aef228e493b1beaafe5364cab3237",
      "tree": "d3ad99c5370462861a1b918b4136e7bd7ad78e52",
      "parents": [
        "3c776e64660028236313f0e54f3a9945764422df"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Apr 02 16:57:45 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:56 2009 -0700"
      },
      "message": "cgroups: use css id in swap cgroup for saving memory v5\n\nTry to use CSS ID for records in swap_cgroup.  By this, on 64bit machine,\nsize of swap_cgroup goes down to 2 bytes from 8bytes.\n\nThis means, when 2GB of swap is equipped, (assume the page size is 4096bytes)\n\n\tFrom size of swap_cgroup \u003d 2G/4k * 8 \u003d 4Mbytes.\n\tTo   size of swap_cgroup \u003d 2G/4k * 2 \u003d 1Mbytes.\n\nReduction is large.  Of course, there are trade-offs.  This CSS ID will\nadd overhead to swap-in/swap-out/swap-free.\n\nBut in general,\n  - swap is a resource which the user tend to avoid use.\n  - If swap is never used, swap_cgroup area is not used.\n  - Reading traditional manuals, size of swap should be proportional to\n    size of memory. Memory size of machine is increasing now.\n\nI think reducing size of swap_cgroup makes sense.\n\nNote:\n  - ID-\u003eCSS lookup routine has no locks, it\u0027s under RCU-Read-Side.\n  - memcg can be obsolete at rmdir() but not freed while refcnt from\n    swap_cgroup is available.\n\nChangelog v4-\u003ev5:\n - reworked on to memcg-charge-swapcache-to-proper-memcg.patch\nChanglog -\u003ev4:\n - fixed not configured case.\n - deleted unnecessary comments.\n - fixed NULL pointer bug.\n - fixed message in dmesg.\n\n[nishimura@mxp.nes.nec.co.jp: css_tryget can be called twice in !PageCgroupUsed case]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.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": "3c776e64660028236313f0e54f3a9945764422df",
      "tree": "4268ca55283e572ab0e6570cd05030d64048af34",
      "parents": [
        "3918b96e03b2b8dd05889320623f6870e81d35ec"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Apr 02 16:57:43 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:56 2009 -0700"
      },
      "message": "memcg: charge swapcache to proper memcg\n\nmemcg_test.txt says at 4.1:\n\n\tThis swap-in is one of the most complicated work. In do_swap_page(),\n\tfollowing events occur when pte is unchanged.\n\n\t(1) the page (SwapCache) is looked up.\n\t(2) lock_page()\n\t(3) try_charge_swapin()\n\t(4) reuse_swap_page() (may call delete_swap_cache())\n\t(5) commit_charge_swapin()\n\t(6) swap_free().\n\n\tConsidering following situation for example.\n\n\t(A) The page has not been charged before (2) and reuse_swap_page()\n\t    doesn\u0027t call delete_from_swap_cache().\n\t(B) The page has not been charged before (2) and reuse_swap_page()\n\t    calls delete_from_swap_cache().\n\t(C) The page has been charged before (2) and reuse_swap_page() doesn\u0027t\n\t    call delete_from_swap_cache().\n\t(D) The page has been charged before (2) and reuse_swap_page() calls\n\t    delete_from_swap_cache().\n\n\t    memory.usage/memsw.usage changes to this page/swp_entry will be\n\t Case          (A)      (B)       (C)     (D)\n         Event\n       Before (2)     0/ 1     0/ 1      1/ 1    1/ 1\n          \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n          (3)        +1/+1    +1/+1     +1/+1   +1/+1\n          (4)          -       0/ 0       -     -1/ 0\n          (5)         0/-1     0/ 0     -1/-1    0/ 0\n          (6)          -       0/-1       -      0/-1\n          \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n       Result         1/ 1     1/ 1      1/ 1    1/ 1\n\n       In any cases, charges to this page should be 1/ 1.\n\nIn case of (D), mem_cgroup_try_get_from_swapcache() returns NULL\n(because lookup_swap_cgroup() returns NULL), so \"+1/+1\" at (3) means\ncharges to the memcg(\"foo\") to which the \"current\" belongs.\nOTOH, \"-1/0\" at (4) and \"0/-1\" at (6) means uncharges from the memcg(\"baa\")\nto which the page has been charged.\n\nSo, if the \"foo\" and \"baa\" is different(for example because of task move),\nthis charge will be moved from \"baa\" to \"foo\".\n\nI think this is an unexpected behavior.\n\nThis patch fixes this by modifying mem_cgroup_try_get_from_swapcache()\nto return the memcg to which the swapcache has been charged if PCG_USED bit\nis set.\nIIUC, checking PCG_USED bit of swapcache is safe under page lock.\n\nSigned-off-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\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c137b5ece4b111e46981aae7da77315b9909809f",
      "tree": "99677d3ae0f9016e83f257743ff04d5886a6e998",
      "parents": [
        "e222432bfa7dcf6ec008622a978c9f284ed5e3a9"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Thu Apr 02 16:57:40 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:55 2009 -0700"
      },
      "message": "memcg: remove mem_cgroup_calc_mapped_ratio()\n\nCurrently, mem_cgroup_calc_mapped_ratio() is unused at all.  it can be\nremoved and KAMEZAWA-san suggested it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: 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": "e222432bfa7dcf6ec008622a978c9f284ed5e3a9",
      "tree": "b006f569cb66523a5644ad0ef1669b051ccda907",
      "parents": [
        "0b7f569e45bb6be142d87017030669a6a7d327a1"
      ],
      "author": {
        "name": "Balbir Singh",
        "email": "balbir@linux.vnet.ibm.com",
        "time": "Thu Apr 02 16:57:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:55 2009 -0700"
      },
      "message": "memcg: show memcg information during OOM\n\nAdd RSS and swap to OOM output from memcg\n\nDisplay memcg values like failcnt, usage and limit when an OOM occurs due\nto memcg.\n\nThanks to Johannes Weiner, Li Zefan, David Rientjes, Kamezawa Hiroyuki,\nDaisuke Nishimura and KOSAKI Motohiro for review.\n\nSample output\n-------------\n\nTask in /a/x killed as a result of limit of /a\nmemory: usage 1048576kB, limit 1048576kB, failcnt 4183\nmemory+swap: usage 1400964kB, limit 9007199254740991kB, failcnt 0\n\n[akpm@linux-foundation.org: compilation fix]\n[akpm@linux-foundation.org: fix kerneldoc and whitespace]\n[akpm@linux-foundation.org: add printk facility level]\nSigned-off-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0b7f569e45bb6be142d87017030669a6a7d327a1",
      "tree": "8df7877b95c093ebf4cb4e1006cea16f75fc79b7",
      "parents": [
        "81d39c20f5ee2437d71709beb82597e2a38efbbc"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Apr 02 16:57:38 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:55 2009 -0700"
      },
      "message": "memcg: fix OOM killer under memcg\n\nThis patch tries to fix OOM Killer problems caused by hierarchy.\nNow, memcg itself has OOM KILL function (in oom_kill.c) and tries to\nkill a task in memcg.\n\nBut, when hierarchy is used, it\u0027s broken and correct task cannot\nbe killed. For example, in following cgroup\n\n\t/groupA/\thierarchy\u003d1, limit\u003d1G,\n\t\t01\tnolimit\n\t\t02\tnolimit\nAll tasks\u0027 memory usage under /groupA, /groupA/01, groupA/02 is limited to\ngroupA\u0027s 1Gbytes but OOM Killer just kills tasks in groupA.\n\nThis patch provides makes the bad process be selected from all tasks\nunder hierarchy. BTW, currently, oom_jiffies is updated against groupA\nin above case. oom_jiffies of tree should be updated.\n\nTo see how oom_jiffies is used, please check mem_cgroup_oom_called()\ncallers.\n\n[akpm@linux-foundation.org: build fix]\n[akpm@linux-foundation.org: const fix]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\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": "81d39c20f5ee2437d71709beb82597e2a38efbbc",
      "tree": "56297eb00cfa2bc251b2c5e0e0330becafd39e33",
      "parents": [
        "14067bb3e24b96d92e22d19c18c0119edf5575e5"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Apr 02 16:57:36 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:55 2009 -0700"
      },
      "message": "memcg: fix shrinking memory to return -EBUSY by fixing retry algorithm\n\nAs pointed out, shrinking memcg\u0027s limit should return -EBUSY after\nreasonable retries.  This patch tries to fix the current behavior of\nshrink_usage.\n\nBefore looking into \"shrink should return -EBUSY\" problem, we should fix\nhierarchical reclaim code.  It compares current usage and current limit,\nbut it only makes sense when the kernel reclaims memory because hit\nlimits.  This is also a problem.\n\nWhat this patch does are.\n\n  1. add new argument \"shrink\" to hierarchical reclaim. If \"shrink\u003d\u003dtrue\",\n     hierarchical reclaim returns immediately and the caller checks the kernel\n     should shrink more or not.\n     (At shrinking memory, usage is always smaller than limit. So check for\n      usage \u003c limit is useless.)\n\n  2. For adjusting to above change, 2 changes in \"shrink\"\u0027s retry path.\n     2-a. retry_count depends on # of children because the kernel visits\n\t  the children under hierarchy one by one.\n     2-b. rather than checking return value of hierarchical_reclaim\u0027s progress,\n\t  compares usage-before-shrink and usage-after-shrink.\n\t  If usage-before-shrink \u003c\u003d usage-after-shrink, retry_count is\n\t  decremented.\n\nReported-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\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": "14067bb3e24b96d92e22d19c18c0119edf5575e5",
      "tree": "54af97e899bf4253b170938f6711097824b7364f",
      "parents": [
        "04046e1a0a34286382e913f8fc461440c21d88e8"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamzawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Apr 02 16:57:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:55 2009 -0700"
      },
      "message": "memcg: hierarchical stat\n\nClean up memory.stat file routine and show \"total\" hierarchical stat.\n\nThis patch does\n  - renamed get_all_zonestat to be get_local_zonestat.\n  - remove old mem_cgroup_stat_desc, which is only for per-cpu stat.\n  - add mcs_stat to cover both of per-cpu/per-lru stat.\n  - add \"total\" stat of hierarchy (*)\n  - add a callback system to scan all memcg under a root.\n\u003d\u003d \"total\" is added.\n[kamezawa@localhost ~]$ cat /opt/cgroup/xxx/memory.stat\ncache 0\nrss 0\npgpgin 0\npgpgout 0\ninactive_anon 0\nactive_anon 0\ninactive_file 0\nactive_file 0\nunevictable 0\nhierarchical_memory_limit 50331648\nhierarchical_memsw_limit 9223372036854775807\ntotal_cache 65536\ntotal_rss 192512\ntotal_pgpgin 218\ntotal_pgpgout 155\ntotal_inactive_anon 0\ntotal_active_anon 135168\ntotal_inactive_file 61440\ntotal_active_file 4096\ntotal_unevictable 0\n\u003d\u003d\n(*) maybe the user can do calc hierarchical stat by his own program\n   in userland but if it can be written in clean way, it\u0027s worth to be\n   shown, I think.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\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"
    }
  ],
  "next": "04046e1a0a34286382e913f8fc461440c21d88e8"
}
