)]}'
{
  "commit": "e8589cc189f96b87348ae83ea4db38eaac624135",
  "tree": "6693422dc81e6da78c4ad892b0d326fb7f946dda",
  "parents": [
    "508b7be0a5b06b64203512ed9b34191cddc83f56"
  ],
  "author": {
    "name": "KAMEZAWA Hiroyuki",
    "email": "kamezawa.hiroyu@jp.fujitsu.com",
    "time": "Fri Jul 25 01:47:10 2008 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Fri Jul 25 10:53:37 2008 -0700"
  },
  "message": "memcg: better migration handling\n\nThis patch changes page migration under memory controller to use a\ndifferent algorithm.  (thanks to Christoph for new idea.)\n\nBefore:\n - page_cgroup is migrated from an old page to a new page.\nAfter:\n - a new page is accounted , no reuse of page_cgroup.\n\nPros:\n\n - We can avoid compliated lock depndencies and races in migration.\n\nCons:\n\n - new param to mem_cgroup_charge_common().\n\n - mem_cgroup_getref() is added for handling ref_cnt ping-pong.\n\nThis version simplifies complicated lock dependency in page migraiton\nunder memory resource controller.\n\n  new refcnt sequence is following.\n\na mapped page:\n  prepage_migration() ..... +1 to NEW page\n  try_to_unmap()      ..... all refs to OLD page is gone.\n  move_pages()        ..... +1 to NEW page if page cache.\n  remap...            ..... all refs from *map* is added to NEW one.\n  end_migration()     ..... -1 to New page.\n\n  page\u0027s mapcount + (page_is_cache) refs are added to NEW one.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: YAMAMOTO Takashi \u003cyamamoto@valinux.co.jp\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e6608776bc96138c4fac9eea0b2a4126997bc7b8",
      "old_mode": 33188,
      "old_path": "include/linux/memcontrol.h",
      "new_id": "84ead2aa6f18d46d682d84169bcd105a0e6d03c9",
      "new_mode": 33188,
      "new_path": "include/linux/memcontrol.h"
    },
    {
      "type": "modify",
      "old_id": "90ccc1326356a58e8589bed396e058ab5d201390",
      "old_mode": 33188,
      "old_path": "mm/memcontrol.c",
      "new_id": "da5912b845511f8910957ac388f164baa07eade6",
      "new_mode": 33188,
      "new_path": "mm/memcontrol.c"
    },
    {
      "type": "modify",
      "old_id": "376cceba82f98e7110520acc885f6bce0687482b",
      "old_mode": 33188,
      "old_path": "mm/migrate.c",
      "new_id": "f6d7f8efd1a84b5fb1729013890ecaa3d6caa609",
      "new_mode": 33188,
      "new_path": "mm/migrate.c"
    }
  ]
}
