)]}'
{
  "commit": "894bc310419ac95f4fa4142dc364401a7e607f65",
  "tree": "15d56a7333b41620016b845d2323dd06e822b621",
  "parents": [
    "8a7a8544a4f6554ec2d8048ac9f9672f442db5a2"
  ],
  "author": {
    "name": "Lee Schermerhorn",
    "email": "Lee.Schermerhorn@hp.com",
    "time": "Sat Oct 18 20:26:39 2008 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Mon Oct 20 08:50:26 2008 -0700"
  },
  "message": "Unevictable LRU Infrastructure\n\nWhen the system contains lots of mlocked or otherwise unevictable pages,\nthe pageout code (kswapd) can spend lots of time scanning over these\npages.  Worse still, the presence of lots of unevictable pages can confuse\nkswapd into thinking that more aggressive pageout modes are required,\nresulting in all kinds of bad behaviour.\n\nInfrastructure to manage pages excluded from reclaim--i.e., hidden from\nvmscan.  Based on a patch by Larry Woodman of Red Hat.  Reworked to\nmaintain \"unevictable\" pages on a separate per-zone LRU list, to \"hide\"\nthem from vmscan.\n\nKosaki Motohiro added the support for the memory controller unevictable\nlru list.\n\nPages on the unevictable list have both PG_unevictable and PG_lru set.\nThus, PG_unevictable is analogous to and mutually exclusive with\nPG_active--it specifies which LRU list the page is on.\n\nThe unevictable infrastructure is enabled by a new mm Kconfig option\n[CONFIG_]UNEVICTABLE_LRU.\n\nA new function \u0027page_evictable(page, vma)\u0027 in vmscan.c tests whether or\nnot a page may be evictable.  Subsequent patches will add the various\n!evictable tests.  We\u0027ll want to keep these tests light-weight for use in\nshrink_active_list() and, possibly, the fault path.\n\nTo avoid races between tasks putting pages [back] onto an LRU list and\ntasks that might be moving the page from non-evictable to evictable state,\nthe new function \u0027putback_lru_page()\u0027 -- inverse to \u0027isolate_lru_page()\u0027\n-- tests the \"evictability\" of a page after placing it on the LRU, before\ndropping the reference.  If the page has become unevictable,\nputback_lru_page() will redo the \u0027putback\u0027, thus moving the page to the\nunevictable list.  This way, we avoid \"stranding\" evictable pages on the\nunevictable list.\n\n[akpm@linux-foundation.org: fix fallout from out-of-order merge]\n[riel@redhat.com: fix UNEVICTABLE_LRU and !PROC_PAGE_MONITOR build]\n[nishimura@mxp.nes.nec.co.jp: remove redundant mapping check]\n[kosaki.motohiro@jp.fujitsu.com: unevictable-lru-infrastructure: putback_lru_page()/unevictable page handling rework]\n[kosaki.motohiro@jp.fujitsu.com: kill unnecessary lock_page() in vmscan.c]\n[kosaki.motohiro@jp.fujitsu.com: revert migration change of unevictable lru infrastructure]\n[kosaki.motohiro@jp.fujitsu.com: revert to unevictable-lru-infrastructure-kconfig-fix.patch]\n[kosaki.motohiro@jp.fujitsu.com: restore patch failure of vmstat-unevictable-and-mlocked-pages-vm-events.patch]\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nDebugged-by: Benjamin Kidwell \u003cbenjkidwell@yahoo.com\u003e\nSigned-off-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",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8d8f05c1515a575dd2b79cbbe9d031e6aefa6e78",
      "old_mode": 33188,
      "old_path": "include/linux/memcontrol.h",
      "new_id": "ee1b2fcb44103221f432e19d2410463f16346002",
      "new_mode": 33188,
      "new_path": "include/linux/memcontrol.h"
    },
    {
      "type": "modify",
      "old_id": "f451fedd1e75a2520e9eaef7a04dd693b009a7fc",
      "old_mode": 33188,
      "old_path": "include/linux/mm_inline.h",
      "new_id": "67d7697fd019107f03766206fa6dd4159430aa6a",
      "new_mode": 33188,
      "new_path": "include/linux/mm_inline.h"
    },
    {
      "type": "modify",
      "old_id": "9c5111f49a32c7c67af347cef5b3b429923433b8",
      "old_mode": 33188,
      "old_path": "include/linux/mmzone.h",
      "new_id": "d1f60d5fe2eab1e06ed09386f7ae4e8104e97013",
      "new_mode": 33188,
      "new_path": "include/linux/mmzone.h"
    },
    {
      "type": "modify",
      "old_id": "3d31616dcd2309eca2300aa030c193c0d3d9af56",
      "old_mode": 33188,
      "old_path": "include/linux/page-flags.h",
      "new_id": "ec1a1baad348fe0ff00eafeecdffb2cacb35e706",
      "new_mode": 33188,
      "new_path": "include/linux/page-flags.h"
    },
    {
      "type": "modify",
      "old_id": "5fc96a4e760f65c64431773a789a45d1ad743270",
      "old_mode": 33188,
      "old_path": "include/linux/pagevec.h",
      "new_id": "e90a2cb0291530db1e80ad64bc553da45855d984",
      "new_mode": 33188,
      "new_path": "include/linux/pagevec.h"
    },
    {
      "type": "modify",
      "old_id": "7d09d79997a462574041d440513d8ae80957fcd3",
      "old_mode": 33188,
      "old_path": "include/linux/swap.h",
      "new_id": "a2113044d20a08e6cb7b272adda7372c6a97cd29",
      "new_mode": 33188,
      "new_path": "include/linux/swap.h"
    },
    {
      "type": "modify",
      "old_id": "1a501a4de95cba98543bf706d8c8078ce598d3cd",
      "old_mode": 33188,
      "old_path": "mm/Kconfig",
      "new_id": "5b5790f8a81686644a2d27beee9aa1f1a7f006c3",
      "new_mode": 33188,
      "new_path": "mm/Kconfig"
    },
    {
      "type": "modify",
      "old_id": "4e8e78b978b5b89031ee4ceb2a6c9fb324824bd7",
      "old_mode": 33188,
      "old_path": "mm/internal.h",
      "new_id": "3db17b2a1ac6a347256e998bbb9b4a76d03bf185",
      "new_mode": 33188,
      "new_path": "mm/internal.h"
    },
    {
      "type": "modify",
      "old_id": "27e9e75f4eab558677bf23b5e355859631f7495b",
      "old_mode": 33188,
      "old_path": "mm/memcontrol.c",
      "new_id": "82c065e7551e060ad476e4650d102687491e8533",
      "new_mode": 33188,
      "new_path": "mm/memcontrol.c"
    },
    {
      "type": "modify",
      "old_id": "71b47491487d013a04a23901a3c5eefc2fc33389",
      "old_mode": 33188,
      "old_path": "mm/mempolicy.c",
      "new_id": "36f42573a3352fa6ba452eea2d76ed2021c8605c",
      "new_mode": 33188,
      "new_path": "mm/mempolicy.c"
    },
    {
      "type": "modify",
      "old_id": "c07327487111375223b4c71283fbbc128cc3e3d7",
      "old_mode": 33188,
      "old_path": "mm/migrate.c",
      "new_id": "b10237d8b459823b84f1b2a070a823532d585d34",
      "new_mode": 33188,
      "new_path": "mm/migrate.c"
    },
    {
      "type": "modify",
      "old_id": "0b1974a08974a2856b73349a41c7eb7e257896d6",
      "old_mode": 33188,
      "old_path": "mm/swap.c",
      "new_id": "fee6b973f1436f3b71f2a73a44826d1a0cc80fc7",
      "new_mode": 33188,
      "new_path": "mm/swap.c"
    },
    {
      "type": "modify",
      "old_id": "a8347b677e74a0e5602766c2d4932e3105129213",
      "old_mode": 33188,
      "old_path": "mm/vmscan.c",
      "new_id": "154b9b608da6e9b304f41bd32238bbaa9a633a75",
      "new_mode": 33188,
      "new_path": "mm/vmscan.c"
    }
  ]
}
