)]}'
{
  "log": [
    {
      "commit": "d06063cc221fdefcab86589e79ddfdb7c0e14b63",
      "tree": "00ccaf8c1992b57a4445d78b9eae25fde0b3ab31",
      "parents": [
        "30c9f3a9fae79517bca595826a19c6855fbb6d32"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 10 09:01:23 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jun 21 13:08:22 2009 -0700"
      },
      "message": "Move FAULT_FLAG_xyz into handle_mm_fault() callers\n\nThis allows the callers to now pass down the full set of FAULT_FLAG_xyz\nflags to handle_mm_fault().  All callers have been (mechanically)\nconverted to the new calling convention, there\u0027s almost certainly room\nfor architectures to clean up their code and then add FAULT_FLAG_RETRY\nwhen that support is added.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "30c9f3a9fae79517bca595826a19c6855fbb6d32",
      "tree": "f7eb9588fe38dc1b045e97409e25c57c516aaf44",
      "parents": [
        "232086b19964d0e13359d30d74b11ca31b0751cb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 10 08:43:11 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jun 21 13:06:05 2009 -0700"
      },
      "message": "Remove internal use of \u0027write_access\u0027 in mm/memory.c\n\nThe fault handling routines really want more fine-grained flags than a\nsingle \"was it a write fault\" boolean - the callers will want to set\nflags like \"you can return a retry error\" etc.\n\nAnd that\u0027s actually how the VM works internally, but right now the\ntop-level fault handling functions in mm/memory.c all pass just the\n\u0027write_access\u0027 boolean around.\n\nThis switches them over to pass around the FAULT_FLAG_xyzzy \u0027flags\u0027\nvariable instead.  The \u0027write_access\u0027 calling convention still exists\nfor the exported \u0027handle_mm_fault()\u0027 function, but that is next.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c277331d5fbaae5772ed19862feefa91f4e477d3",
      "tree": "fcd980b58d9487421e9b0c45b7c082fa1302debb",
      "parents": [
        "9063c61fd5cbd6f42e95929aa0e02380c9e15656"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Jun 19 19:30:56 2009 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jun 20 16:08:22 2009 -0700"
      },
      "message": "mm: page_alloc: clear PG_locked before checking flags on free\n\nda456f1 \"page allocator: do not disable interrupts in free_page_mlock()\" moved\nthe PG_mlocked clearing after the flag sanity checking which makes mlocked\npages always trigger \u0027bad page\u0027.  Fix this by clearing the bit up front.\n\nReported--and-debugged-by: Peter Chubb \u003cpeter.chubb@nicta.com.au\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nTested-by: Maxim Levitsky \u003cmaximlevitsky@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "433f13a7274ccc3541d2832ffe5ef4472036cc72",
      "tree": "3ae071e5bb856de36c78cce612dfba81bee68523",
      "parents": [
        "1e9c28599879040039f610c5b177e61ef65ff100"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Thu Jun 18 16:48:58 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 19 16:46:04 2009 -0700"
      },
      "message": "bootmem.c: avoid c90 declaration warning\n\n[akpm@linux-foundation.org: cleanup]\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dcce284a259373f9e5570f2e33f79eca84fcf565",
      "tree": "afc4b23208974f17c080ea3d2ecfbaca4254c010",
      "parents": [
        "9729a6eb5878a3daa18395f2b5fb38bf9359a761"
      ],
      "author": {
        "name": "Benjamin Herrenschmidt",
        "email": "benh@kernel.crashing.org",
        "time": "Thu Jun 18 13:24:12 2009 +1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:12:57 2009 -0700"
      },
      "message": "mm: Extend gfp masking to the page allocator\n\nThe page allocator also needs the masking of gfp flags during boot,\nso this moves it out of slab/slub and uses it with the page allocator\nas well.\n\nSigned-off-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\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": "8ca739e3694b83cdf22be0f6eff063e721deb1e4",
      "tree": "21ab2fd13ee92803a381cc1b6df7a40885b2ec0c",
      "parents": [
        "28f06c6f4ba2ff450b134b82a3285a26f232a2c1"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Wed Jun 17 16:26:32 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:46 2009 -0700"
      },
      "message": "cgroups: make messages more readable\n\nFix some cgroup messages to read better.\nUpdate MAINTAINERS to include mm/*cgroup* files.\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.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": "3fe0344faf7fdcb158bd5c1a9aec960a8d70c8e8",
      "tree": "30d5b5fd277b43f2b33276c3b879e4f4b1918aaa",
      "parents": [
        "c30938d59e7468259855da91a885b19e8044b5f4",
        "2030117d2761c4c955e1a0683fa96ab62e4b197b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 17 10:42:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 17 10:42:21 2009 -0700"
      },
      "message": "Merge branch \u0027kmemleak\u0027 of git://linux-arm.org/linux-2.6\n\n* \u0027kmemleak\u0027 of git://linux-arm.org/linux-2.6:\n  kmemleak: Fix some typos in comments\n  kmemleak: Rename kmemleak_panic to kmemleak_stop\n  kmemleak: Only use GFP_KERNEL|GFP_ATOMIC for the internal allocations\n"
    },
    {
      "commit": "2030117d2761c4c955e1a0683fa96ab62e4b197b",
      "tree": "9d0d9e8d6c60eb71df8cdb72058a653671074845",
      "parents": [
        "000814f44e56122ea22e1f1422e16df36a1bb396"
      ],
      "author": {
        "name": "Catalin Marinas",
        "email": "catalin.marinas@arm.com",
        "time": "Wed Jun 17 18:29:04 2009 +0100"
      },
      "committer": {
        "name": "Catalin Marinas",
        "email": "catalin.marinas@arm.com",
        "time": "Wed Jun 17 18:29:04 2009 +0100"
      },
      "message": "kmemleak: Fix some typos in comments\n\nSigned-off-by: Catalin Marinas \u003ccatalin.marinas@arm.com\u003e\n"
    },
    {
      "commit": "000814f44e56122ea22e1f1422e16df36a1bb396",
      "tree": "97a5a5cbf81045eadb7d0f03a700999d17f4af97",
      "parents": [
        "216c04b0d848fa3db04fc240d9cdc1d2cc1e9574"
      ],
      "author": {
        "name": "Catalin Marinas",
        "email": "catalin.marinas@arm.com",
        "time": "Wed Jun 17 18:29:03 2009 +0100"
      },
      "committer": {
        "name": "Catalin Marinas",
        "email": "catalin.marinas@arm.com",
        "time": "Wed Jun 17 18:29:03 2009 +0100"
      },
      "message": "kmemleak: Rename kmemleak_panic to kmemleak_stop\n\nThis is to avoid the confusion created by the \"panic\" word.\n\nSigned-off-by: Catalin Marinas \u003ccatalin.marinas@arm.com\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\n"
    },
    {
      "commit": "216c04b0d848fa3db04fc240d9cdc1d2cc1e9574",
      "tree": "9c560c0f70ee43accca93a47ce64313d67e73b2a",
      "parents": [
        "65795efbd380a832ae508b04dba8f8e53f0b84d9"
      ],
      "author": {
        "name": "Catalin Marinas",
        "email": "catalin.marinas@arm.com",
        "time": "Wed Jun 17 18:29:02 2009 +0100"
      },
      "committer": {
        "name": "Catalin Marinas",
        "email": "catalin.marinas@arm.com",
        "time": "Wed Jun 17 18:29:02 2009 +0100"
      },
      "message": "kmemleak: Only use GFP_KERNEL|GFP_ATOMIC for the internal allocations\n\nKmemleak allocates memory for pointer tracking and it tries to avoid\nusing GFP_ATOMIC if the caller doesn\u0027t require it. However other gfp\nflags may be passed by the caller which aren\u0027t required by kmemleak.\nThis patch filters the gfp flags so that only GFP_KERNEL | GFP_ATOMIC\nare used.\n\nSigned-off-by: Catalin Marinas \u003ccatalin.marinas@arm.com\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\n"
    },
    {
      "commit": "5caf5c7dc2d303b770e426f7e2238df882f1773b",
      "tree": "1dddb1941da34326e8e8becef10761d2d5d7fcc9",
      "parents": [
        "e03ab9d415c47e1ff485b646f95604d3e3a91708",
        "964cf35c88f93b4927dbc4e950dfa4d880c7f9d1"
      ],
      "author": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Wed Jun 17 08:30:54 2009 +0300"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Wed Jun 17 08:30:54 2009 +0300"
      },
      "message": "Merge branch \u0027slub/earlyboot\u0027 into for-linus\n\nConflicts:\n\tmm/slub.c\n"
    },
    {
      "commit": "e03ab9d415c47e1ff485b646f95604d3e3a91708",
      "tree": "61e9eecfbc46cf546a7e9c5ab206ae64fb860550",
      "parents": [
        "65795efbd380a832ae508b04dba8f8e53f0b84d9",
        "a234bdc9aecc299ba41ffe8023b3ea110df9f51b",
        "6746136520cd0827320a83e62d0a023a5a433650",
        "7303f240981888884412a97ac742772527356880",
        "95f8598931bd86a5775073db2fa2004b892dd3d0"
      ],
      "author": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Wed Jun 17 08:30:15 2009 +0300"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Wed Jun 17 08:30:15 2009 +0300"
      },
      "message": "Merge branches \u0027slab/documentation\u0027, \u0027slab/fixes\u0027, \u0027slob/cleanups\u0027 and \u0027slub/fixes\u0027 into for-linus\n"
    },
    {
      "commit": "517d08699b250021303f9a7cf0d758b6dc0748ed",
      "tree": "5e5b0134c3fffb78fe9d8b1641a64ff28fdd7bbc",
      "parents": [
        "8eeee4e2f04fc551f50c9d9847da2d73d7d33728",
        "a34601c5d84134055782ee031d58d82f5440e918"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:50:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:50:13 2009 -0700"
      },
      "message": "Merge branch \u0027akpm\u0027\n\n* akpm: (182 commits)\n  fbdev: bf54x-lq043fb: use kzalloc over kmalloc/memset\n  fbdev: *bfin*: fix __dev{init,exit} markings\n  fbdev: *bfin*: drop unnecessary calls to memset\n  fbdev: bfin-t350mcqb-fb: drop unused local variables\n  fbdev: blackfin has __raw I/O accessors, so use them in fb.h\n  fbdev: s1d13xxxfb: add accelerated bitblt functions\n  tcx: use standard fields for framebuffer physical address and length\n  fbdev: add support for handoff from firmware to hw framebuffers\n  intelfb: fix a bug when changing video timing\n  fbdev: use framebuffer_release() for freeing fb_info structures\n  radeon: P2G2CLK_ALWAYS_ONb tested twice, should 2nd be P2G2CLK_DAC_ALWAYS_ONb?\n  s3c-fb: CPUFREQ frequency scaling support\n  s3c-fb: fix resource releasing on error during probing\n  carminefb: fix possible access beyond end of carmine_modedb[]\n  acornfb: remove fb_mmap function\n  mb862xxfb: use CONFIG_OF instead of CONFIG_PPC_OF\n  mb862xxfb: restrict compliation of platform driver to PPC\n  Samsung SoC Framebuffer driver: add Alpha Channel support\n  atmel-lcdc: fix pixclock upper bound detection\n  offb: use framebuffer_alloc() to allocate fb_info struct\n  ...\n\nManually fix up conflicts due to kmemcheck in mm/slab.c\n"
    },
    {
      "commit": "ee993b135ec75a93bd5c45e636bb210d2975159b",
      "tree": "edc7ca495c20b0ecd9c78ce22dad121c01459511",
      "parents": [
        "24cf72518c79cdcda486ed26074ff8151291cf65"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jun 16 15:33:24 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:46 2009 -0700"
      },
      "message": "mm: fix lumpy reclaim lru handling at isolate_lru_pages\n\nAt lumpy reclaim, a page failed to be taken by __isolate_lru_page() can be\npushed back to \"src\" list by list_move().  But the page may not be from\n\"src\" list.  This pushes the page back to wrong LRU.  And list_move()\nitself is unnecessary because the page is not on top of LRU.  Then, leave\nit as it is if __isolate_lru_page() fails.\n\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\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": "24cf72518c79cdcda486ed26074ff8151291cf65",
      "tree": "0db04965fb57135e68edf62c332c3a3825c1e3b5",
      "parents": [
        "fa5e084e43eb14c14942027e1e2e894aeed96097"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:33:23 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:46 2009 -0700"
      },
      "message": "vmscan: count the number of times zone_reclaim() scans and fails\n\nOn NUMA machines, the administrator can configure zone_reclaim_mode that\nis a more targetted form of direct reclaim.  On machines with large NUMA\ndistances for example, a zone_reclaim_mode defaults to 1 meaning that\nclean unmapped pages will be reclaimed if the zone watermarks are not\nbeing met.\n\nThere is a heuristic that determines if the scan is worthwhile but it is\npossible that the heuristic will fail and the CPU gets tied up scanning\nuselessly.  Detecting the situation requires some guesswork and\nexperimentation so this patch adds a counter \"zreclaim_failed\" to\n/proc/vmstat.  If during high CPU utilisation this counter is increasing\nrapidly, then the resolution to the problem may be to set\n/proc/sys/vm/zone_reclaim_mode to 0.\n\n[akpm@linux-foundation.org: name things consistently]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.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": "fa5e084e43eb14c14942027e1e2e894aeed96097",
      "tree": "3e7ebf714858e8dd1de7042fd1ef62294a3ec20f",
      "parents": [
        "90afa5de6f3fa89a733861e843377302479fcf7e"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:33:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:45 2009 -0700"
      },
      "message": "vmscan: do not unconditionally treat zones that fail zone_reclaim() as full\n\nOn NUMA machines, the administrator can configure zone_reclaim_mode that\nis a more targetted form of direct reclaim.  On machines with large NUMA\ndistances for example, a zone_reclaim_mode defaults to 1 meaning that\nclean unmapped pages will be reclaimed if the zone watermarks are not\nbeing met.  The problem is that zone_reclaim() failing at all means the\nzone gets marked full.\n\nThis can cause situations where a zone is usable, but is being skipped\nbecause it has been considered full.  Take a situation where a large tmpfs\nmount is occuping a large percentage of memory overall.  The pages do not\nget cleaned or reclaimed by zone_reclaim(), but the zone gets marked full\nand the zonelist cache considers them not worth trying in the future.\n\nThis patch makes zone_reclaim() return more fine-grained information about\nwhat occured when zone_reclaim() failued.  The zone only gets marked full\nif it really is unreclaimable.  If it\u0027s a case that the scan did not occur\nor if enough pages were not reclaimed with the limited reclaim_mode, then\nthe zone is simply skipped.\n\nThere is a side-effect to this patch.  Currently, if zone_reclaim()\nsuccessfully reclaimed SWAP_CLUSTER_MAX, an allocation attempt would go\nahead.  With this patch applied, zone watermarks are rechecked after\nzone_reclaim() does some work.\n\nThis bug was introduced by commit 9276b1bc96a132f4068fdee00983c532f43d3a26\n(\"memory page_alloc zonelist caching speedup\") way back in 2.6.19 when the\nzonelist_cache was introduced.  It was not intended that zone_reclaim()\naggressively consider the zone to be full when it failed as full direct\nreclaim can still be an option.  Due to the age of the bug, it should be\nconsidered a -stable candidate.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\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": "90afa5de6f3fa89a733861e843377302479fcf7e",
      "tree": "2870878fa3361c27551b5a18c4732073ae1432bd",
      "parents": [
        "84a892456046921a40646114deed65e2df93a1bc"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:33:20 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:45 2009 -0700"
      },
      "message": "vmscan: properly account for the number of page cache pages zone_reclaim() can reclaim\n\nA bug was brought to my attention against a distro kernel but it affects\nmainline and I believe problems like this have been reported in various\nguises on the mailing lists although I don\u0027t have specific examples at the\nmoment.\n\nThe reported problem was that malloc() stalled for a long time (minutes in\nsome cases) if a large tmpfs mount was occupying a large percentage of\nmemory overall.  The pages did not get cleaned or reclaimed by\nzone_reclaim() because the zone_reclaim_mode was unsuitable, but the lists\nare uselessly scanned frequencly making the CPU spin at near 100%.\n\nThis patchset intends to address that bug and bring the behaviour of\nzone_reclaim() more in line with expectations which were noticed during\ninvestigation.  It is based on top of mmotm and takes advantage of\nKosaki\u0027s work with respect to zone_reclaim().\n\nPatch 1 fixes the heuristics that zone_reclaim() uses to determine if the\n\tscan should go ahead. The broken heuristic is what was causing the\n\tmalloc() stall as it uselessly scanned the LRU constantly. Currently,\n\tzone_reclaim is assuming zone_reclaim_mode is 1 and historically it\n\tcould not deal with tmpfs pages at all. This fixes up the heuristic so\n\tthat an unnecessary scan is more likely to be correctly avoided.\n\nPatch 2 notes that zone_reclaim() returning a failure automatically means\n\tthe zone is marked full. This is not always true. It could have\n\tfailed because the GFP mask or zone_reclaim_mode were unsuitable.\n\nPatch 3 introduces a counter zreclaim_failed that will increment each\n\ttime the zone_reclaim scan-avoidance heuristics fail. If that\n\tcounter is rapidly increasing, then zone_reclaim_mode should be\n\tset to 0 as a temporarily resolution and a bug reported because\n\tthe scan-avoidance heuristic is still broken.\n\nThis patch:\n\nOn NUMA machines, the administrator can configure zone_reclaim_mode that\nis a more targetted form of direct reclaim.  On machines with large NUMA\ndistances for example, a zone_reclaim_mode defaults to 1 meaning that\nclean unmapped pages will be reclaimed if the zone watermarks are not\nbeing met.\n\nThere is a heuristic that determines if the scan is worthwhile but the\nproblem is that the heuristic is not being properly applied and is\nbasically assuming zone_reclaim_mode is 1 if it is enabled.  The lack of\nproper detection can manfiest as high CPU usage as the LRU list is scanned\nuselessly.\n\nHistorically, once enabled it was depending on NR_FILE_PAGES which may\ninclude swapcache pages that the reclaim_mode cannot deal with.  Patch\nvmscan-change-the-number-of-the-unmapped-files-in-zone-reclaim.patch by\nKosaki Motohiro noted that zone_page_state(zone, NR_FILE_PAGES) included\npages that were not file-backed such as swapcache and made a calculation\nbased on the inactive, active and mapped files.  This is far superior when\nzone_reclaim\u003d\u003d1 but if RECLAIM_SWAP is set, then NR_FILE_PAGES is a\nreasonable starting figure.\n\nThis patch alters how zone_reclaim() works out how many pages it might be\nable to reclaim given the current reclaim_mode.  If RECLAIM_SWAP is set in\nthe reclaim_mode it will either consider NR_FILE_PAGES as potential\ncandidates or else use NR_{IN}ACTIVE}_PAGES-NR_FILE_MAPPED to discount\nswapcache and other non-file-backed pages.  If RECLAIM_WRITE is not set,\nthen NR_FILE_DIRTY number of pages are not candidates.  If RECLAIM_SWAP is\nnot set, then NR_FILE_MAPPED are not.\n\n[kosaki.motohiro@jp.fujitsu.com: Estimate unmapped pages minus tmpfs pages]\n[fengguang.wu@intel.com: Fix underflow problem in Kosaki\u0027s estimate]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.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": "81236810226f71bd9ff77321c8e8276dae7efc61",
      "tree": "8194006c780be40bfac49a2c557ab037186a57e9",
      "parents": [
        "9198e96c06744517e3b18fce8be6db61e96a3227"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jun 16 15:33:16 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:45 2009 -0700"
      },
      "message": "oom: only oom kill exiting tasks with attached memory\n\nWhen a task is chosen for oom kill and is found to be PF_EXITING,\n__oom_kill_task() is called to elevate the task\u0027s timeslice and give it\naccess to memory reserves so that it may quickly exit.\n\nThis privilege is unnecessary, however, if the task has already detached\nits mm.  Although its possible for the mm to become detached later since\ntask_lock() is not held, __oom_kill_task() will simply be a no-op in such\ncircumstances.\n\nSubsequently, it is no longer necessary to warn about killing mm-less\ntasks since it is a no-op.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\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": "9198e96c06744517e3b18fce8be6db61e96a3227",
      "tree": "3d79e58771cc27204980a0350abafaf6e7524447",
      "parents": [
        "3eb4140f0389bdada022d5e8efd88504ad30df14"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Tue Jun 16 15:33:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:45 2009 -0700"
      },
      "message": "vmscan: handle may_swap more strictly\n\nCommit 2e2e425989080cc534fc0fca154cae515f971cf5 (\"vmscan,memcg:\nreintroduce sc-\u003emay_swap) add may_swap flag and handle it at\nget_scan_ratio().\n\nBut the result of get_scan_ratio() is ignored when priority \u003d\u003d 0, so anon\nlru is scanned even if may_swap \u003d\u003d 0 or nr_swap_pages \u003d\u003d 0.  IMHO, this is\nnot an expected behavior.\n\nAs for memcg especially, because of this behavior many and many pages are\nswapped-out just in vain when oom is invoked by mem+swap limit.\n\nThis patch is for handling may_swap flag more strictly.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3eb4140f0389bdada022d5e8efd88504ad30df14",
      "tree": "6f3f229a2a3bee1bd0a5846c7e7f7987a5cc602b",
      "parents": [
        "8cab4754d24a0f2e05920170c845bd84472814c6"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:33:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:45 2009 -0700"
      },
      "message": "vmscan: merge duplicate code in shrink_active_list()\n\nThe \"move pages to active list\" and \"move pages to inactive list\" code\nblocks are mostly identical and can be served by a function.\n\nThanks to Andrew Morton for pointing this out.\n\nNote that buffer_heads_over_limit check will also be carried out for\nre-activated pages, which is slightly different from pre-2.6.28 kernels.\nAlso, Rik\u0027s \"vmscan: evict use-once pages first\" patch could totally stop\nscans of active file list when memory pressure is low.  So the net effect\ncould be, the number of buffer heads is now more likely to grow large.\n\nHowever that\u0027s fine according to Johannes\u0027 comments:\n\n  I don\u0027t think that this could be harmful.  We just preserve the buffer\n  mappings of what we consider the working set and with low memory\n  pressure, as you say, this set is not big.\n\n  As to stripping of reactivated pages: the only pages we re-activate\n  for now are those VM_EXEC mapped ones.  Since we don\u0027t expect IO from\n  or to these pages, removing the buffer mappings in case they grow too\n  large should be okay, I guess.\n\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8cab4754d24a0f2e05920170c845bd84472814c6",
      "tree": "99b1ec52daf8b81034f634777d2f24dd20d6d7c5",
      "parents": [
        "6fe6b7e35785e3232ffe7f81d3893f1316710a02"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:33:12 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:44 2009 -0700"
      },
      "message": "vmscan: make mapped executable pages the first class citizen\n\nProtect referenced PROT_EXEC mapped pages from being deactivated.\n\nPROT_EXEC(or its internal presentation VM_EXEC) pages normally belong to some\ncurrently running executables and their linked libraries, they shall really be\ncached aggressively to provide good user experiences.\n\nThanks to Johannes Weiner for the advice to reuse the VMA walk in\npage_referenced() to get the PROT_EXEC bit.\n\n[more details]\n\n( The consequences of this patch will have to be discussed together with\n  Rik van Riel\u0027s recent patch \"vmscan: evict use-once pages first\". )\n\n( Some of the good points and insights are taken into this changelog.\n  Thanks to all the involved people for the great LKML discussions. )\n\nthe problem\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nFor a typical desktop, the most precious working set is composed of\n*actively accessed*\n\t(1) memory mapped executables\n\t(2) and their anonymous pages\n\t(3) and other files\n\t(4) and the dcache/icache/.. slabs\nwhile the least important data are\n\t(5) infrequently used or use-once files\n\nFor a typical desktop, one major problem is busty and large amount of (5)\nuse-once files flushing out the working set.\n\nInside the working set, (4) dcache/icache have already been too sticky ;-)\nSo we only have to care (2) anonymous and (1)(3) file pages.\n\nanonymous pages\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nAnonymous pages are effectively immune to the streaming IO attack, because we\nnow have separate file/anon LRU lists. When the use-once files crowd into the\nfile LRU, the list\u0027s \"quality\" is significantly lowered. Therefore the scan\nbalance policy in get_scan_ratio() will choose to scan the (low quality) file\nLRU much more frequently than the anon LRU.\n\nfile pages\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nRik proposed to *not* scan the active file LRU when the inactive list grows\nlarger than active list. This guarantees that when there are use-once streaming\nIO, and the working set is not too large(so that active_size \u003c inactive_size),\nthe active file LRU will *not* be scanned at all. So the not-too-large working\nset can be well protected.\n\nBut there are also situations where the file working set is a bit large so that\n(active_size \u003e\u003d inactive_size), or the streaming IOs are not purely use-once.\nIn these cases, the active list will be scanned slowly. Because the current\nshrink_active_list() policy is to deactivate active pages regardless of their\nreferenced bits. The deactivated pages become susceptible to the streaming IO\nattack: the inactive list could be scanned fast (500MB / 50MBps \u003d 10s) so that\nthe deactivated pages don\u0027t have enough time to get re-referenced. Because a\nuser tend to switch between windows in intervals from seconds to minutes.\n\nThis patch holds mapped executable pages in the active list as long as they\nare referenced during each full scan of the active list.  Because the active\nlist is normally scanned much slower, they get longer grace time (eg. 100s)\nfor further references, which better matches the pace of user operations.\n\nTherefore this patch greatly prolongs the in-cache time of executable code,\nwhen there are moderate memory pressures.\n\n\tbefore patch: guaranteed to be cached if reference intervals \u003c I\n\tafter  patch: guaranteed to be cached if reference intervals \u003c I+A\n\t\t      (except when randomly reclaimed by the lumpy reclaim)\nwhere\n\tA \u003d time to fully scan the   active file LRU\n\tI \u003d time to fully scan the inactive file LRU\n\nNote that normally A \u003e\u003e I.\n\nside effects\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThis patch is safe in general, it restores the pre-2.6.28 mmap() behavior\nbut in a much smaller and well targeted scope.\n\nOne may worry about some one to abuse the PROT_EXEC heuristic.  But as\nAndrew Morton stated, there are other tricks to getting that sort of boost.\n\nAnother concern is the PROT_EXEC mapped pages growing large in rare cases,\nand therefore hurting reclaim efficiency. But a sane application targeted for\nlarge audience will never use PROT_EXEC for data mappings. If some home made\napplication tries to abuse that bit, it shall be aware of the consequences.\nIf it is abused to scale of 2/3 total memory, it gains nothing but overheads.\n\nbenchmarks\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n1) memory tight desktop\n\n1.1) brief summary\n\n- clock time and major faults are reduced by 50%;\n- pswpin numbers are reduced to ~1/3.\n\nThat means X desktop responsiveness is doubled under high memory/swap pressure.\n\n1.2) test scenario\n\n- nfsroot gnome desktop with 512M physical memory\n- run some programs, and switch between the existing windows\n  after starting each new program.\n\n1.3) progress timing (seconds)\n\n  before       after    programs\n    0.02        0.02    N xeyes\n    0.75        0.76    N firefox\n    2.02        1.88    N nautilus\n    3.36        3.17    N nautilus --browser\n    5.26        4.89    N gthumb\n    7.12        6.47    N gedit\n    9.22        8.16    N xpdf /usr/share/doc/shared-mime-info/shared-mime-info-spec.pdf\n   13.58       12.55    N xterm\n   15.87       14.57    N mlterm\n   18.63       17.06    N gnome-terminal\n   21.16       18.90    N urxvt\n   26.24       23.48    N gnome-system-monitor\n   28.72       26.52    N gnome-help\n   32.15       29.65    N gnome-dictionary\n   39.66       36.12    N /usr/games/sol\n   43.16       39.27    N /usr/games/gnometris\n   48.65       42.56    N /usr/games/gnect\n   53.31       47.03    N /usr/games/gtali\n   58.60       52.05    N /usr/games/iagno\n   65.77       55.42    N /usr/games/gnotravex\n   70.76       61.47    N /usr/games/mahjongg\n   76.15       67.11    N /usr/games/gnome-sudoku\n   86.32       75.15    N /usr/games/glines\n   92.21       79.70    N /usr/games/glchess\n  103.79       88.48    N /usr/games/gnomine\n  113.84       96.51    N /usr/games/gnotski\n  124.40      102.19    N /usr/games/gnibbles\n  137.41      114.93    N /usr/games/gnobots2\n  155.53      125.02    N /usr/games/blackjack\n  179.85      135.11    N /usr/games/same-gnome\n  224.49      154.50    N /usr/bin/gnome-window-properties\n  248.44      162.09    N /usr/bin/gnome-default-applications-properties\n  282.62      173.29    N /usr/bin/gnome-at-properties\n  323.72      188.21    N /usr/bin/gnome-typing-monitor\n  363.99      199.93    N /usr/bin/gnome-at-visual\n  394.21      206.95    N /usr/bin/gnome-sound-properties\n  435.14      224.49    N /usr/bin/gnome-at-mobility\n  463.05      234.11    N /usr/bin/gnome-keybinding-properties\n  503.75      248.59    N /usr/bin/gnome-about-me\n  554.00      276.27    N /usr/bin/gnome-display-properties\n  615.48      304.39    N /usr/bin/gnome-network-preferences\n  693.03      342.01    N /usr/bin/gnome-mouse-properties\n  759.90      388.58    N /usr/bin/gnome-appearance-properties\n  937.90      508.47    N /usr/bin/gnome-control-center\n 1109.75      587.57    N /usr/bin/gnome-keyboard-properties\n 1399.05      758.16    N : oocalc\n 1524.64      830.03    N : oodraw\n 1684.31      900.03    N : ooimpress\n 1874.04      993.91    N : oomath\n 2115.12     1081.89    N : ooweb\n 2369.02     1161.99    N : oowriter\n\nNote that the last \": oo*\" commands are actually commented out.\n\n1.4) vmstat numbers (some relevant ones are marked with *)\n\n                            before    after\n nr_free_pages              1293      3898\n nr_inactive_anon           59956     53460\n nr_active_anon             26815     30026\n nr_inactive_file           2657      3218\n nr_active_file             2019      2806\n nr_unevictable             4         4\n nr_mlock                   4         4\n nr_anon_pages              26706     27859\n*nr_mapped                  3542      4469\n nr_file_pages              72232     67681\n nr_dirty                   1         0\n nr_writeback               123       19\n nr_slab_reclaimable        3375      3534\n nr_slab_unreclaimable      11405     10665\n nr_page_table_pages        8106      7864\n nr_unstable                0         0\n nr_bounce                  0         0\n*nr_vmscan_write            394776    230839\n nr_writeback_temp          0         0\n numa_hit                   6843353   3318676\n numa_miss                  0         0\n numa_foreign               0         0\n numa_interleave            1719      1719\n numa_local                 6843353   3318676\n numa_other                 0         0\n*pgpgin                     5954683   2057175\n*pgpgout                    1578276   922744\n*pswpin                     1486615   512238\n*pswpout                    394568    230685\n pgalloc_dma                277432    56602\n pgalloc_dma32              6769477   3310348\n pgalloc_normal             0         0\n pgalloc_movable            0         0\n pgfree                     7048396   3371118\n pgactivate                 2036343   1471492\n pgdeactivate               2189691   1612829\n pgfault                    3702176   3100702\n*pgmajfault                 452116    201343\n pgrefill_dma               12185     7127\n pgrefill_dma32             334384    653703\n pgrefill_normal            0         0\n pgrefill_movable           0         0\n pgsteal_dma                74214     22179\n pgsteal_dma32              3334164   1638029\n pgsteal_normal             0         0\n pgsteal_movable            0         0\n pgscan_kswapd_dma          1081421   1216199\n pgscan_kswapd_dma32        58979118  46002810\n pgscan_kswapd_normal       0         0\n pgscan_kswapd_movable      0         0\n pgscan_direct_dma          2015438   1086109\n pgscan_direct_dma32        55787823  36101597\n pgscan_direct_normal       0         0\n pgscan_direct_movable      0         0\n pginodesteal               3461      7281\n slabs_scanned              564864    527616\n kswapd_steal               2889797   1448082\n kswapd_inodesteal          14827     14835\n pageoutrun                 43459     21562\n allocstall                 9653      4032\n pgrotated                  384216    228631\n\n1.5) free numbers at the end of the tests\n\nbefore patch:\n                             total       used       free     shared    buffers     cached\n                Mem:           474        467          7          0          0        236\n                -/+ buffers/cache:        230        243\n                Swap:         1023        418        605\n\nafter patch:\n                             total       used       free     shared    buffers     cached\n                Mem:           474        457         16          0          0        236\n                -/+ buffers/cache:        221        253\n                Swap:         1023        404        619\n\n2) memory flushing in a file server\n\n2.1) brief summary\n\nThe number of major faults from 50 to 3 during 10% cache hot reads.\n\nThat means this patch successfully stops major faults when the active file\nlist is slowly scanned when there are partially cache hot streaming IO.\n\n2.2) test scenario\n\nDo 100000 pread(size\u003d110 pages, offset\u003d(i*100) pages), where 10% of the\npages will be activated:\n\n        for i in `seq 0 100 10000000`; do echo $i 110;  done \u003e pattern-hot-10\n        iotrace.rb --load pattern-hot-10 --play /b/sparse\n\tvmmon  nr_mapped nr_active_file nr_inactive_file   pgmajfault pgdeactivate pgfree\n\nand monitor /proc/vmstat during the time. The test box has 2G memory.\n\nI carried out tests on fresh booted console as well as X desktop, and\nfetched the vmstat numbers on\n\n(1) begin:     shortly after the big read IO starts;\n(2) end:       just before the big read IO stops;\n(3) restore:   the big read IO stops and the zsh working set restored\n(4) restore X: after IO, switch back and forth between the urxvt and firefox\n               windows to restore their working set.\n\n2.3) console mode results\n\n        nr_mapped   nr_active_file nr_inactive_file       pgmajfault     pgdeactivate           pgfree\n\n2.6.29 VM_EXEC protection ON:\nbegin:       2481             2237             8694              630                0           574299\nend:          275           231976           233914              633           776271         20933042\nrestore:      370           232154           234524              691           777183         20958453\n\n2.6.29 VM_EXEC protection ON (second run):\nbegin:       2434             2237             8493              629                0           574195\nend:          284           231970           233536              632           771918         20896129\nrestore:      399           232218           234789              690           774526         20957909\n\n2.6.30-rc4-mm VM_EXEC protection OFF:\nbegin:       2479             2344             9659              210                0           579643\nend:          284           232010           234142              260           772776         20917184\nrestore:      379           232159           234371              301           774888         20967849\n\nThe above console numbers show that\n\n- The startup pgmajfault of 2.6.30-rc4-mm is merely 1/3 that of 2.6.29.\n  I\u0027d attribute that improvement to the mmap readahead improvements :-)\n\n- The pgmajfault increment during the file copy is 633-630\u003d3 vs 260-210\u003d50.\n  That\u0027s a huge improvement - which means with the VM_EXEC protection logic,\n  active mmap pages is pretty safe even under partially cache hot streaming IO.\n\n- when active:inactive file lru size reaches 1:1, their scan rates is 1:20.8\n  under 10% cache hot IO. (computed with formula Dpgdeactivate:Dpgfree)\n  That roughly means the active mmap pages get 20.8 more chances to get\n  re-referenced to stay in memory.\n\n- The absolute nr_mapped drops considerably to 1/9 during the big IO, and the\n  dropped pages are mostly inactive ones. The patch has almost no impact in\n  this aspect, that means it won\u0027t unnecessarily increase memory pressure.\n  (In contrast, your 20% mmap protection ratio will keep them all, and\n  therefore eliminate the extra 41 major faults to restore working set\n  of zsh etc.)\n\nThe iotrace.rb read throughput is\n\t151.194384MB/s 284.198252s 100001x 450560b --load pattern-hot-10 --play /b/sparse\nwhich means the inactive list is rotated at the speed of 250MB/s,\nso a full scan of which takes about 3.5 seconds, while a full scan\nof active file list takes about 77 seconds.\n\n2.4) X mode results\n\nWe can reach roughly the same conclusions for X desktop:\n\n        nr_mapped   nr_active_file nr_inactive_file       pgmajfault     pgdeactivate           pgfree\n\n2.6.30-rc4-mm VM_EXEC protection ON:\nbegin:       9740             8920            64075              561                0           678360\nend:          768           218254           220029              565           798953         21057006\nrestore:      857           218543           220987              606           799462         21075710\nrestore X:   2414           218560           225344              797           799462         21080795\n\n2.6.30-rc4-mm VM_EXEC protection OFF:\nbegin:       9368             5035            26389              554                0           633391\nend:          770           218449           221230              661           646472         17832500\nrestore:     1113           218466           220978              710           649881         17905235\nrestore X:   2687           218650           225484              947           802700         21083584\n\n- the absolute nr_mapped drops considerably (to 1/13 of the original size)\n  during the streaming IO.\n- the delta of pgmajfault is 3 vs 107 during IO, or 236 vs 393\n  during the whole process.\n\nCc: Elladan \u003celladan@eskimo.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6fe6b7e35785e3232ffe7f81d3893f1316710a02",
      "tree": "6f47c03735504d8aab8f7b048465b87cc5b15861",
      "parents": [
        "608e8e66a154cbc3d591a59dcebfd9cbc9e3431a"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:33:05 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:44 2009 -0700"
      },
      "message": "vmscan: report vm_flags in page_referenced()\n\nCollect vma-\u003evm_flags of the VMAs that actually referenced the page.\n\nThis is preparing for more informed reclaim heuristics, eg.  to protect\nexecutable file pages more aggressively.  For now only the VM_EXEC bit\nwill be used by the caller.\n\nThanks to Johannes, Peter and Minchan for all the good tips.\n\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "168f5ac668f63dfb64439766e3ef9e866b83719d",
      "tree": "ddefb5678ffc15ac6ddec66e281d3f9c8a75fa0b",
      "parents": [
        "aca8bf323edd31ad462dc98c107c23a5c6022ca2"
      ],
      "author": {
        "name": "Sergei Trofimovich",
        "email": "slyfox@inbox.ru",
        "time": "Tue Jun 16 15:33:02 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:44 2009 -0700"
      },
      "message": "mm cleanup: shmem_file_setup: \u0027char *\u0027 -\u003e \u0027const char *\u0027 for name argument\n\nAs function shmem_file_setup does not modify/allocate/free/pass given\nfilename - mark it as const.\n\nSigned-off-by: Sergei Trofimovich \u003cslyfox@inbox.ru\u003e\nCc: 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": "aca8bf323edd31ad462dc98c107c23a5c6022ca2",
      "tree": "1466785c7ab056d6a9e21bb61fbd36ce3c3df5cc",
      "parents": [
        "8192da6a8811ab6c3d29dc590a5f94a377c43739"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Jun 16 15:33:02 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:44 2009 -0700"
      },
      "message": "mm: remove file argument from swap_readpage()\n\nThe file argument resulted from address_space\u0027s readpage long time ago.\n\nWe don\u0027t use it any more.  Let\u0027s remove unnecessary argement.\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8192da6a8811ab6c3d29dc590a5f94a377c43739",
      "tree": "1801978858a01688af7ee65a7e2b9ff613f5be19",
      "parents": [
        "73d60b7f747176dbdff826c4127d22e1fd3f9f74"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Jun 16 15:33:01 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:43 2009 -0700"
      },
      "message": "mm: remove annotation of gfp_mask in add_to_swap\n\nHugh removed add_to_swap\u0027s gfp_mask argument.  (mm: remove gfp_mask from\nadd_to_swap) So we have to remove annotation of gfp_mask of the function.\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-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": "73d60b7f747176dbdff826c4127d22e1fd3f9f74",
      "tree": "d4f72cfe145ed3d2ae19a56fe9f9f6424d597c44",
      "parents": [
        "286973552f051404abdb58dd9b2f8f7558efe4e5"
      ],
      "author": {
        "name": "Yinghai Lu",
        "email": "yinghai@kernel.org",
        "time": "Tue Jun 16 15:33:00 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:43 2009 -0700"
      },
      "message": "page-allocator: clear N_HIGH_MEMORY map before we set it again\n\nSRAT tables may contains nodes of very small size.  The arch code may\ndecide to not activate such a node.  However, currently the early boot\ncode sets N_HIGH_MEMORY for such nodes.  These nodes therefore seem to be\nactive although these nodes have no present pages.\n\nFor 64bit N_HIGH_MEMORY \u003d\u003d N_NORMAL_MEMORY, so that works for 64 bit too\n\nSigned-off-by: Yinghai Lu \u003cYinghai@kernel.org\u003e\nTested-by: Jack Steiner \u003csteiner@sgi.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "286973552f051404abdb58dd9b2f8f7558efe4e5",
      "tree": "462cca28bdab729a09371ba6a53e0365cf36ad57",
      "parents": [
        "82553a937f12352c26fe457510ebab3f512cd3fa"
      ],
      "author": {
        "name": "Mike Waychison",
        "email": "mikew@google.com",
        "time": "Tue Jun 16 15:32:59 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:43 2009 -0700"
      },
      "message": "mm: remove __invalidate_mapping_pages variant\n\nRemove __invalidate_mapping_pages atomic variant now that its sole caller\ncan sleep (fixed in eccb95cee4f0d56faa46ef22fb94dd4a3578d3eb (\"vfs: fix\nlock inversion in drop_pagecache_sb()\")).\n\nThis fixes softlockups that can occur while in the drop_caches path.\n\nSigned-off-by: Mike Waychison \u003cmikew@google.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "82553a937f12352c26fe457510ebab3f512cd3fa",
      "tree": "c3df31e9953d5f56491576ba019fdc2cd87af926",
      "parents": [
        "4d8b9135c30ccbe46e621fefd862969819003fd6"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jun 16 15:32:58 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:43 2009 -0700"
      },
      "message": "oom: invoke oom killer for __GFP_NOFAIL\n\nThe oom killer must be invoked regardless of the order if the allocation\nis __GFP_NOFAIL, otherwise it will loop forever when reclaim fails to free\nsome memory.\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nSigned-off-by: 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": "4d8b9135c30ccbe46e621fefd862969819003fd6",
      "tree": "47674640c8a65b3ba440b2dc224efbab7571c638",
      "parents": [
        "2ff05b2b4eac2e63d345fc731ea151a060247f53"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jun 16 15:32:57 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:43 2009 -0700"
      },
      "message": "oom: avoid unnecessary mm locking and scanning for OOM_DISABLE\n\nThis moves the check for OOM_DISABLE to the badness heuristic so it is\nonly necessary to hold task_lock() once.  If the mm is OOM_DISABLE, the\nscore is 0, which is also correctly exported via /proc/pid/oom_score.\nThis requires that tasks with badness scores of 0 are prohibited from\nbeing oom killed, which makes sense since they would not allow for future\nmemory freeing anyway.\n\nSince the oom_adj value is a characteristic of an mm and not a task, it is\nno longer necessary to check the oom_adj value for threads sharing the\nsame memory (except when simply issuing SIGKILLs for threads in other\nthread groups).\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: 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": "2ff05b2b4eac2e63d345fc731ea151a060247f53",
      "tree": "1840bc2d3b381eca5d39869499339b0fcc6eabbf",
      "parents": [
        "c9e444103b5e7a5a3519f9913f59767f92e33baf"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jun 16 15:32:56 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:43 2009 -0700"
      },
      "message": "oom: move oom_adj value from task_struct to mm_struct\n\nThe per-task oom_adj value is a characteristic of its mm more than the\ntask itself since it\u0027s not possible to oom kill any thread that shares the\nmm.  If a task were to be killed while attached to an mm that could not be\nfreed because another thread were set to OOM_DISABLE, it would have\nneedlessly been terminated since there is no potential for future memory\nfreeing.\n\nThis patch moves oomkilladj (now more appropriately named oom_adj) from\nstruct task_struct to struct mm_struct.  This requires task_lock() on a\ntask to check its oom_adj value to protect against exec, but it\u0027s already\nnecessary to take the lock when dereferencing the mm to find the total VM\nsize for the badness heuristic.\n\nThis fixes a livelock if the oom killer chooses a task and another thread\nsharing the same memory has an oom_adj value of OOM_DISABLE.  This occurs\nbecause oom_kill_task() repeatedly returns 1 and refuses to kill the\nchosen task while select_bad_process() will repeatedly choose the same\ntask during the next retry.\n\nTaking task_lock() in select_bad_process() to check for OOM_DISABLE and in\noom_kill_task() to check for threads sharing the same memory will be\nremoved in the next patch in this series where it will no longer be\nnecessary.\n\nWriting to /proc/pid/oom_adj for a kthread will now return -EINVAL since\nthese threads are immune from oom killing already.  They simply report an\noom_adj value of OOM_DISABLE.\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: 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": "c9e444103b5e7a5a3519f9913f59767f92e33baf",
      "tree": "6b14020dc9271b5ef22ba34daf5494ef6572abb9",
      "parents": [
        "355cfa73ddff2fb8fa14e93bd94a057cc022512e"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jun 16 15:32:54 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:42 2009 -0700"
      },
      "message": "mm: reuse unused swap entry if necessary\n\nPresently we can know a swap entry is just used as SwapCache via swap_map,\nwithout looking up swap cache.\n\nThen, we have a chance to reuse swap-cache-only swap entries in\nget_swap_pages().\n\nThis patch tries to free swap-cache-only swap entries if swap is not\nenough.\n\nNote: We hit following path when swap_cluster code cannot find a free\ncluster.  Then, vm_swap_full() is not only condition to allow the kernel\nto reclaim unused swap.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\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\nTested-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": "355cfa73ddff2fb8fa14e93bd94a057cc022512e",
      "tree": "7ff70cd56d533070d50b06db6ba0086e8aab0d71",
      "parents": [
        "cb4b86ba47bb0937b71fb825b3ed88adf7a190f0"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jun 16 15:32:53 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:42 2009 -0700"
      },
      "message": "mm: modify swap_map and add SWAP_HAS_CACHE flag\n\nThis is a part of the patches for fixing memcg\u0027s swap accountinf leak.\nBut, IMHO, not a bad patch even if no memcg.\n\nThere are 2 kinds of references to swap.\n - reference from swap entry\n - reference from swap cache\n\nThen,\n\n - If there is swap cache \u0026\u0026 swap\u0027s refcnt is 1, there is only swap cache.\n  (*) swapcount(entry) \u003d\u003d 1 \u0026\u0026 find_get_page(swapper_space, entry) !\u003d NULL\n\nThis counting logic have worked well for a long time.  But considering\nthat we cannot know there is a _real_ reference or not by swap_map[],\ncurrent usage of counter is not very good.\n\nThis patch adds a flag SWAP_HAS_CACHE and recored information that a swap\nentry has a cache or not.  This will remove -1 magic used in swapfile.c\nand be a help to avoid unnecessary find_get_page().\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nTested-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: 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": "cb4b86ba47bb0937b71fb825b3ed88adf7a190f0",
      "tree": "4b8528ba914a315e5857e7fe2a6e7d415f2e6650",
      "parents": [
        "6837765963f1723e80ca97b1fae660f3a60d77df"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jun 16 15:32:52 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:42 2009 -0700"
      },
      "message": "mm: add swap cache interface for swap reference\n\nIn a following patch, the usage of swap cache is recorded into swap_map.\nThis patch is for necessary interface changes to do that.\n\n2 interfaces:\n\n  - swapcache_prepare()\n  - swapcache_free()\n\nare added for allocating/freeing refcnt from swap-cache to existing swap\nentries.  But implementation itself is not changed under this patch.  At\nadding swapcache_free(), memcg\u0027s hook code is moved under\nswapcache_free().  This is better than using scattered hooks.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: 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": "6837765963f1723e80ca97b1fae660f3a60d77df",
      "tree": "a9a6ed4b7e3bf188966da78b04bf39298f24375a",
      "parents": [
        "bce7394a3ef82b8477952fbab838e4a6e8cb47d2"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Jun 16 15:32:51 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:42 2009 -0700"
      },
      "message": "mm: remove CONFIG_UNEVICTABLE_LRU config option\n\nCurrently, nobody wants to turn UNEVICTABLE_LRU off.  Thus this\nconfigurability is unnecessary.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nAcked-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bce7394a3ef82b8477952fbab838e4a6e8cb47d2",
      "tree": "7e2f50300dc4edf471a67c1871f288f031fd84f7",
      "parents": [
        "96cb4df5ddf5e6d5785b5acd4003e3689b87f896"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Jun 16 15:32:50 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:42 2009 -0700"
      },
      "message": "page-allocator: reset wmark_min and inactive ratio of zone when hotplug happens\n\nSolve two problems.\n\nWhenever memory hotplug sucessfully happens, zone-\u003epresent_pages\nhave to be changed.\n\n1) Now memory hotplug calls setup_per_zone_wmark_min only when\n   online_pages called, not offline_pages.\n\n   It breaks balance.\n\n2) If zone-\u003epresent_pages is changed, we also have to change\n   zone-\u003einactive_ratio.  That\u0027s because inactive_ratio depends on\n   zone-\u003epresent_pages.\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "96cb4df5ddf5e6d5785b5acd4003e3689b87f896",
      "tree": "e6bd74df480e9065617aebec29b4285fa021c919",
      "parents": [
        "bc75d33f0fc1d56e734db1f56d3cfc8097b8e0cf"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Jun 16 15:32:49 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:42 2009 -0700"
      },
      "message": "page-allocator: add inactive ratio calculation function of each zone\n\nFactor the per-zone arithemetic inside setup_per_zone_inactive_ratio()\u0027s\nloop into a a separate function, calculate_zone_inactive_ratio().  This\nfunction will be used in a later patch\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.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": "bc75d33f0fc1d56e734db1f56d3cfc8097b8e0cf",
      "tree": "4dc5054afdff491d8378dee2a235da64d6ad3de6",
      "parents": [
        "b70d94ee438b3fd9c15c7691d7a932a135c18101"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Jun 16 15:32:48 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:41 2009 -0700"
      },
      "message": "page-allocator: clean up functions related to pages_min\n\nChange the names of two functions. It doesn\u0027t affect behavior.\n\nPresently, setup_per_zone_pages_min() changes low, high of zone as well as\nmin.  So a better name is setup_per_zone_wmarks().  That\u0027s because Mel\nchanged zone-\u003epages_[hig/low/min] to zone-\u003ewatermark array in \"page\nallocator: replace the watermark-related union in struct zone with a\nwatermark[] array\".\n\n * setup_per_zone_pages_min \u003d\u003e setup_per_zone_wmarks\n\nOf course, we have to change init_per_zone_pages_min, too.  There are not\npages_min any more.\n\n * init_per_zone_pages_min \u003d\u003e init_per_zone_wmark_min\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.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": "69c854817566db82c362797b4a6521d0b00fe1d8",
      "tree": "b4873e257212659ca0eb224151971e029ce3875d",
      "parents": [
        "35282a2de4e5e4e173ab61aa9d7015886021a821"
      ],
      "author": {
        "name": "MinChan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Jun 16 15:32:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:41 2009 -0700"
      },
      "message": "vmscan: prevent shrinking of active anon lru list in case of no swap space V3\n\nshrink_zone() can deactivate active anon pages even if we don\u0027t have a\nswap device.  Many embedded products don\u0027t have a swap device.  So the\ndeactivation of anon pages is unnecessary.\n\nThis patch prevents unnecessary deactivation of anon lru pages.  But, it\ndon\u0027t prevent aging of anon pages to swap out.\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "35282a2de4e5e4e173ab61aa9d7015886021a821",
      "tree": "06d20ad1a132e15e4fb7447cd9b139a4921ecfc9",
      "parents": [
        "7f33d49a2ed546e01f7b1d0607661810f2421859"
      ],
      "author": {
        "name": "Brice Goglin",
        "email": "Brice.Goglin@ens-lyon.org",
        "time": "Tue Jun 16 15:32:43 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:41 2009 -0700"
      },
      "message": "migration: only migrate_prep() once per move_pages()\n\nmigrate_prep() is fairly expensive (72us on 16-core barcelona 1.9GHz).\nCommit 3140a2273009c01c27d316f35ab76a37e105fdd8 improved move_pages()\nthroughput by breaking it into chunks, but it also made migrate_prep() be\ncalled once per chunk (every 128pages or so) instead of once per\nmove_pages().\n\nThis patch reverts to calling migrate_prep() only once per chunk as we did\nbefore 2.6.29.  It is also a followup to commit\n0aedadf91a70a11c4a3e7c7d99b21e5528af8d5d (\"mm: move migrate_prep out from\nunder mmap_sem\").\n\nThis improves migration throughput on the above machine from 600MB/s to\n750MB/s.\n\nSigned-off-by: Brice Goglin \u003cBrice.Goglin@inria.fr\u003e\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-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": "7f33d49a2ed546e01f7b1d0607661810f2421859",
      "tree": "8b05ac7ec2cd123efb266ecaa1bf0bd1487158f8",
      "parents": [
        "75927af8bcb940dad4fe281713d526cb520869ff"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Tue Jun 16 15:32:41 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:40 2009 -0700"
      },
      "message": "mm, PM/Freezer: Disable OOM killer when tasks are frozen\n\nCurrently, the following scenario appears to be possible in theory:\n\n* Tasks are frozen for hibernation or suspend.\n* Free pages are almost exhausted.\n* Certain piece of code in the suspend code path attempts to allocate\n  some memory using GFP_KERNEL and allocation order less than or\n  equal to PAGE_ALLOC_COSTLY_ORDER.\n* __alloc_pages_internal() cannot find a free page so it invokes the\n  OOM killer.\n* The OOM killer attempts to kill a task, but the task is frozen, so\n  it doesn\u0027t die immediately.\n* __alloc_pages_internal() jumps to \u0027restart\u0027, unsuccessfully tries\n  to find a free page and invokes the OOM killer.\n* No progress can be made.\n\nAlthough it is now hard to trigger during hibernation due to the memory\nshrinking carried out by the hibernation code, it is theoretically\npossible to trigger during suspend after the memory shrinking has been\nremoved from that code path.  Moreover, since memory allocations are\ngoing to be used for the hibernation memory shrinking, it will be even\nmore likely to happen during hibernation.\n\nTo prevent it from happening, introduce the oom_killer_disabled switch\nthat will cause __alloc_pages_internal() to fail in the situations in\nwhich the OOM killer would have been called and make the freezer set\nthis switch after tasks have been successfully frozen.\n\n[akpm@linux-foundation.org: be nicer to the namespace]\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nCc: Fengguang Wu \u003cfengguang.wu@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Pavel Machek \u003cpavel@ucw.cz\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "75927af8bcb940dad4fe281713d526cb520869ff",
      "tree": "96b2b903ce215d3c47204b7b77724c9fa0aa6502",
      "parents": [
        "dab48dab37d2770824420d1e01730a107fade1aa"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Jun 16 15:32:38 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:40 2009 -0700"
      },
      "message": "mm: madvise(): correct return code\n\nThe posix_madvise() function succeeds (and does nothing) when called with\nparameters (NULL, 0, -1); according to LSB tests, it should fail with\nEINVAL because -1 is not a valid flag.\n\nWhen called with a valid address and size, it correctly fails.\n\nSo perform an initial check for valid flags first.\n\nReported-by: Jiri Dluhos \u003cjdluhos@novell.com\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nReviewed-and-Tested-by: WANG Cong \u003cxiyou.wangcong@gmail.com\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dab48dab37d2770824420d1e01730a107fade1aa",
      "tree": "81e949d2521d4d8d979808feaa9c2a570337a98c",
      "parents": [
        "720b17e759a50635c429ccaa2ec3d01edb4f92d6"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Jun 16 15:32:37 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:40 2009 -0700"
      },
      "message": "page-allocator: warn if __GFP_NOFAIL is used for a large allocation\n\n__GFP_NOFAIL is a bad fiction.  Allocations _can_ fail, and callers should\ndetect and suitably handle this (and not by lamely moving the infinite\nloop up to the caller level either).\n\nAttempting to use __GFP_NOFAIL for a higher-order allocation is even\nworse, so add a once-off runtime check for this to slap people around for\neven thinking about trying it.\n\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\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": "3b6748e2dd69906af3835db4dc9d1c8a3ee4c68c",
      "tree": "5d5476844f8e29e31684ce8ccf7e163ab3182ad6",
      "parents": [
        "03668a4debf4f50de55c34b6e66dae63e1c73716"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jun 16 15:32:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:40 2009 -0700"
      },
      "message": "mm: introduce follow_pfn()\n\nAnaloguous to follow_phys(), add a helper that looks up the PFN at a\nuser virtual address in an IO mapping or a raw PFN mapping.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nAcked-by: Magnus Damm \u003cmagnus.damm@gmail.com\u003e\nCc: Hans Verkuil \u003chverkuil@xs4all.nl\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nCc: 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": "03668a4debf4f50de55c34b6e66dae63e1c73716",
      "tree": "d4fedb9feb056b8383b0d75e2cad5bf8ceeb8c8c",
      "parents": [
        "f8ad0f499fad5cdbcaaa2d97542b2db869b5a770"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jun 16 15:32:34 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:40 2009 -0700"
      },
      "message": "mm: use generic follow_pte() in follow_phys()\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nAcked-by: Magnus Damm \u003cmagnus.damm@gmail.com\u003e\nCc: Hans Verkuil \u003chverkuil@xs4all.nl\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nCc: 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": "f8ad0f499fad5cdbcaaa2d97542b2db869b5a770",
      "tree": "f1b5e91072238c2a303940bd522485484dc22105",
      "parents": [
        "e9bb35df6f813ca46f8e6273add657643c7df73f"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jun 16 15:32:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:39 2009 -0700"
      },
      "message": "mm: introduce follow_pte()\n\nA generic readonly page table lookup helper to map an address space and an\naddress from it to a pte.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nAcked-by: Magnus Damm \u003cmagnus.damm@gmail.com\u003e\nCc: Hans Verkuil \u003chverkuil@xs4all.nl\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nCc: 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": "e9bb35df6f813ca46f8e6273add657643c7df73f",
      "tree": "64fa88ebc6cda54726522252217f279da4bd516b",
      "parents": [
        "5c87eada68fe5d29a5f67528f81b6e45124f579b"
      ],
      "author": {
        "name": "Cyrill Gorcunov",
        "email": "gorcunov@openvz.org",
        "time": "Tue Jun 16 15:32:32 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:39 2009 -0700"
      },
      "message": "mm: setup_per_zone_inactive_ratio - fix comment and make it __init\n\nThe caller of setup_per_zone_inactive_ratio is an __init function.  There\nis no need to keep the callee after it completed as well.  Also fix a\ncomment.\n\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Cyrill Gorcunov \u003cgorcunov@openvz.org\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": "5c87eada68fe5d29a5f67528f81b6e45124f579b",
      "tree": "11088d75bd2132fecf70e402d4334686461aba7c",
      "parents": [
        "af166777cf451f0373b952ce6766dc1c25385686"
      ],
      "author": {
        "name": "Cyrill Gorcunov",
        "email": "gorcunov@openvz.org",
        "time": "Tue Jun 16 15:32:32 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:39 2009 -0700"
      },
      "message": "mm: setup_per_zone_inactive_ratio - do not call for int_sqrt if not needed\n\nint_sqrt() returns 0 if its argument is zero so call it if only needed.\n\nSigned-off-by: Cyrill Gorcunov \u003cgorcunov@openvz.org\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": "af166777cf451f0373b952ce6766dc1c25385686",
      "tree": "2051064ffccb223e1f29b8af52ef28651eff9062",
      "parents": [
        "08d9ae7cbbd0c5c07573d072ec771e997a9a39e0"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:32:31 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:39 2009 -0700"
      },
      "message": "vmscan: ZVC updates in shrink_active_list() can be done once\n\nThis effectively lifts the unit of updates to nr_inactive_* and\npgdeactivate from PAGEVEC_SIZE\u003d14 to SWAP_CLUSTER_MAX\u003d32, or\nMAX_ORDER_NR_PAGES\u003d1024 for reclaim_zone().\n\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "08d9ae7cbbd0c5c07573d072ec771e997a9a39e0",
      "tree": "e669cd3eb5a84842c798af936c9e5642765b556f",
      "parents": [
        "6e08a369ee10b361ac1cdcdf4fabd420fd08beb3"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:32:30 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:39 2009 -0700"
      },
      "message": "vmscan: don\u0027t export nr_saved_scan in /proc/zoneinfo\n\nThe lru-\u003enr_saved_scan\u0027s are not meaningful counters for even kernel\ndevelopers.  They typically are smaller than 32 and are always 0 for large\nlists.  So remove them from /proc/zoneinfo.\n\nHopefully this interface change won\u0027t break too many scripts.\n/proc/zoneinfo is too unstructured to be script friendly, and I wonder the\naffected scripts - if there are any - are still bleeding since the not\nlong ago commit \"vmscan: split LRU lists into anon \u0026 file sets\", which\nalso touched the \"scanned\" line :)\n\nIf we are to re-export accumulated vmscan counts in the future, they can\ngo to new lines in /proc/zoneinfo instead of the current form, or to\n/sys/devices/system/node/node0/meminfo?\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\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": "6e08a369ee10b361ac1cdcdf4fabd420fd08beb3",
      "tree": "9dbf870cad025b64781d9051b6680a8a23927e5a",
      "parents": [
        "56e49d218890f49b0057710a4b6fef31f5ffbfec"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:32:29 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:39 2009 -0700"
      },
      "message": "vmscan: cleanup the scan batching code\n\nThe vmscan batching logic is twisting.  Move it into a standalone function\nnr_scan_try_batch() and document it.  No behavior change.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "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": "20a0307c0396c2edb651401d2f2db193dda2f3c9",
      "tree": "408fde4bf84223757f5dd150e401e8d9d9df5d36",
      "parents": [
        "a1dd268cf6306565a31a48deff8bf4f6b4b105f7"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:32:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:36 2009 -0700"
      },
      "message": "mm: introduce PageHuge() for testing huge/gigantic pages\n\nA series of patches to enhance the /proc/pagemap interface and to add a\nuserspace executable which can be used to present the pagemap data.\n\nExport 10 more flags to end users (and more for kernel developers):\n\n        11. KPF_MMAP            (pseudo flag) memory mapped page\n        12. KPF_ANON            (pseudo flag) memory mapped page (anonymous)\n        13. KPF_SWAPCACHE       page is in swap cache\n        14. KPF_SWAPBACKED      page is swap/RAM backed\n        15. KPF_COMPOUND_HEAD   (*)\n        16. KPF_COMPOUND_TAIL   (*)\n        17. KPF_HUGE\t\thugeTLB pages\n        18. KPF_UNEVICTABLE     page is in the unevictable LRU list\n        19. KPF_HWPOISON        hardware detected corruption\n        20. KPF_NOPAGE          (pseudo flag) no page frame at the address\n\n        (*) For compound pages, exporting _both_ head/tail info enables\n            users to tell where a compound page starts/ends, and its order.\n\na simple demo of the page-types tool\n\n# ./page-types -h\npage-types [options]\n            -r|--raw                  Raw mode, for kernel developers\n            -a|--addr    addr-spec    Walk a range of pages\n            -b|--bits    bits-spec    Walk pages with specified bits\n            -l|--list                 Show page details in ranges\n            -L|--list-each            Show page details one by one\n            -N|--no-summary           Don\u0027t show summay info\n            -h|--help                 Show this usage message\naddr-spec:\n            N                         one page at offset N (unit: pages)\n            N+M                       pages range from N to N+M-1\n            N,M                       pages range from N to M-1\n            N,                        pages range from N to end\n            ,M                        pages range from 0 to M\nbits-spec:\n            bit1,bit2                 (flags \u0026 (bit1|bit2)) !\u003d 0\n            bit1,bit2\u003dbit1            (flags \u0026 (bit1|bit2)) \u003d\u003d bit1\n            bit1,~bit2                (flags \u0026 (bit1|bit2)) \u003d\u003d bit1\n            \u003dbit1,bit2                flags \u003d\u003d (bit1|bit2)\nbit-names:\n          locked              error         referenced           uptodate\n           dirty                lru             active               slab\n       writeback            reclaim              buddy               mmap\n       anonymous          swapcache         swapbacked      compound_head\n   compound_tail               huge        unevictable           hwpoison\n          nopage           reserved(r)         mlocked(r)    mappedtodisk(r)\n         private(r)       private_2(r)   owner_private(r)            arch(r)\n        uncached(r)       readahead(o)       slob_free(o)     slub_frozen(o)\n      slub_debug(o)\n                                   (r) raw mode bits  (o) overloaded bits\n\n# ./page-types\n             flags      page-count       MB  symbolic-flags                     long-symbolic-flags\n0x0000000000000000          487369     1903  _________________________________\n0x0000000000000014               5        0  __R_D____________________________  referenced,dirty\n0x0000000000000020               1        0  _____l___________________________  lru\n0x0000000000000024              34        0  __R__l___________________________  referenced,lru\n0x0000000000000028            3838       14  ___U_l___________________________  uptodate,lru\n0x0001000000000028              48        0  ___U_l_______________________I___  uptodate,lru,readahead\n0x000000000000002c            6478       25  __RU_l___________________________  referenced,uptodate,lru\n0x000100000000002c              47        0  __RU_l_______________________I___  referenced,uptodate,lru,readahead\n0x0000000000000040            8344       32  ______A__________________________  active\n0x0000000000000060               1        0  _____lA__________________________  lru,active\n0x0000000000000068             348        1  ___U_lA__________________________  uptodate,lru,active\n0x0001000000000068              12        0  ___U_lA______________________I___  uptodate,lru,active,readahead\n0x000000000000006c             988        3  __RU_lA__________________________  referenced,uptodate,lru,active\n0x000100000000006c              48        0  __RU_lA______________________I___  referenced,uptodate,lru,active,readahead\n0x0000000000004078               1        0  ___UDlA_______b__________________  uptodate,dirty,lru,active,swapbacked\n0x000000000000407c              34        0  __RUDlA_______b__________________  referenced,uptodate,dirty,lru,active,swapbacked\n0x0000000000000400             503        1  __________B______________________  buddy\n0x0000000000000804               1        0  __R________M_____________________  referenced,mmap\n0x0000000000000828            1029        4  ___U_l_____M_____________________  uptodate,lru,mmap\n0x0001000000000828              43        0  ___U_l_____M_________________I___  uptodate,lru,mmap,readahead\n0x000000000000082c             382        1  __RU_l_____M_____________________  referenced,uptodate,lru,mmap\n0x000100000000082c              12        0  __RU_l_____M_________________I___  referenced,uptodate,lru,mmap,readahead\n0x0000000000000868             192        0  ___U_lA____M_____________________  uptodate,lru,active,mmap\n0x0001000000000868              12        0  ___U_lA____M_________________I___  uptodate,lru,active,mmap,readahead\n0x000000000000086c             800        3  __RU_lA____M_____________________  referenced,uptodate,lru,active,mmap\n0x000100000000086c              31        0  __RU_lA____M_________________I___  referenced,uptodate,lru,active,mmap,readahead\n0x0000000000004878               2        0  ___UDlA____M__b__________________  uptodate,dirty,lru,active,mmap,swapbacked\n0x0000000000001000             492        1  ____________a____________________  anonymous\n0x0000000000005808               4        0  ___U_______Ma_b__________________  uptodate,mmap,anonymous,swapbacked\n0x0000000000005868            2839       11  ___U_lA____Ma_b__________________  uptodate,lru,active,mmap,anonymous,swapbacked\n0x000000000000586c              30        0  __RU_lA____Ma_b__________________  referenced,uptodate,lru,active,mmap,anonymous,swapbacked\n             total          513968     2007\n\n# ./page-types -r\n             flags      page-count       MB  symbolic-flags                     long-symbolic-flags\n0x0000000000000000          468002     1828  _________________________________\n0x0000000100000000           19102       74  _____________________r___________  reserved\n0x0000000000008000              41        0  _______________H_________________  compound_head\n0x0000000000010000             188        0  ________________T________________  compound_tail\n0x0000000000008014               1        0  __R_D__________H_________________  referenced,dirty,compound_head\n0x0000000000010014               4        0  __R_D___________T________________  referenced,dirty,compound_tail\n0x0000000000000020               1        0  _____l___________________________  lru\n0x0000000800000024              34        0  __R__l__________________P________  referenced,lru,private\n0x0000000000000028            3794       14  ___U_l___________________________  uptodate,lru\n0x0001000000000028              46        0  ___U_l_______________________I___  uptodate,lru,readahead\n0x0000000400000028              44        0  ___U_l_________________d_________  uptodate,lru,mappedtodisk\n0x0001000400000028               2        0  ___U_l_________________d_____I___  uptodate,lru,mappedtodisk,readahead\n0x000000000000002c            6434       25  __RU_l___________________________  referenced,uptodate,lru\n0x000100000000002c              47        0  __RU_l_______________________I___  referenced,uptodate,lru,readahead\n0x000000040000002c              14        0  __RU_l_________________d_________  referenced,uptodate,lru,mappedtodisk\n0x000000080000002c              30        0  __RU_l__________________P________  referenced,uptodate,lru,private\n0x0000000800000040            8124       31  ______A_________________P________  active,private\n0x0000000000000040             219        0  ______A__________________________  active\n0x0000000800000060               1        0  _____lA_________________P________  lru,active,private\n0x0000000000000068             322        1  ___U_lA__________________________  uptodate,lru,active\n0x0001000000000068              12        0  ___U_lA______________________I___  uptodate,lru,active,readahead\n0x0000000400000068              13        0  ___U_lA________________d_________  uptodate,lru,active,mappedtodisk\n0x0000000800000068              12        0  ___U_lA_________________P________  uptodate,lru,active,private\n0x000000000000006c             977        3  __RU_lA__________________________  referenced,uptodate,lru,active\n0x000100000000006c              48        0  __RU_lA______________________I___  referenced,uptodate,lru,active,readahead\n0x000000040000006c               5        0  __RU_lA________________d_________  referenced,uptodate,lru,active,mappedtodisk\n0x000000080000006c               3        0  __RU_lA_________________P________  referenced,uptodate,lru,active,private\n0x0000000c0000006c               3        0  __RU_lA________________dP________  referenced,uptodate,lru,active,mappedtodisk,private\n0x0000000c00000068               1        0  ___U_lA________________dP________  uptodate,lru,active,mappedtodisk,private\n0x0000000000004078               1        0  ___UDlA_______b__________________  uptodate,dirty,lru,active,swapbacked\n0x000000000000407c              34        0  __RUDlA_______b__________________  referenced,uptodate,dirty,lru,active,swapbacked\n0x0000000000000400             538        2  __________B______________________  buddy\n0x0000000000000804               1        0  __R________M_____________________  referenced,mmap\n0x0000000000000828            1029        4  ___U_l_____M_____________________  uptodate,lru,mmap\n0x0001000000000828              43        0  ___U_l_____M_________________I___  uptodate,lru,mmap,readahead\n0x000000000000082c             382        1  __RU_l_____M_____________________  referenced,uptodate,lru,mmap\n0x000100000000082c              12        0  __RU_l_____M_________________I___  referenced,uptodate,lru,mmap,readahead\n0x0000000000000868             192        0  ___U_lA____M_____________________  uptodate,lru,active,mmap\n0x0001000000000868              12        0  ___U_lA____M_________________I___  uptodate,lru,active,mmap,readahead\n0x000000000000086c             800        3  __RU_lA____M_____________________  referenced,uptodate,lru,active,mmap\n0x000100000000086c              31        0  __RU_lA____M_________________I___  referenced,uptodate,lru,active,mmap,readahead\n0x0000000000004878               2        0  ___UDlA____M__b__________________  uptodate,dirty,lru,active,mmap,swapbacked\n0x0000000000001000             492        1  ____________a____________________  anonymous\n0x0000000000005008               2        0  ___U________a_b__________________  uptodate,anonymous,swapbacked\n0x0000000000005808               4        0  ___U_______Ma_b__________________  uptodate,mmap,anonymous,swapbacked\n0x000000000000580c               1        0  __RU_______Ma_b__________________  referenced,uptodate,mmap,anonymous,swapbacked\n0x0000000000005868            2839       11  ___U_lA____Ma_b__________________  uptodate,lru,active,mmap,anonymous,swapbacked\n0x000000000000586c              29        0  __RU_lA____Ma_b__________________  referenced,uptodate,lru,active,mmap,anonymous,swapbacked\n             total          513968     2007\n\n# ./page-types --raw --list --no-summary --bits reserved\noffset  count   flags\n0       15      _____________________r___________\n31      4       _____________________r___________\n159     97      _____________________r___________\n4096    2067    _____________________r___________\n6752    2390    _____________________r___________\n9355    3       _____________________r___________\n9728    14526   _____________________r___________\n\nThis patch:\n\nIntroduce PageHuge(), which identifies huge/gigantic pages by their\ndedicated compound destructor functions.\n\nAlso move prep_compound_gigantic_page() to hugetlb.c and make\n__free_pages_ok() non-static.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a1dd268cf6306565a31a48deff8bf4f6b4b105f7",
      "tree": "a6d2cfb6647b22f5896813e7f39db8546e921ef2",
      "parents": [
        "72807a74c0172376bba6b5b27702c9f702b526e9"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:36 2009 -0700"
      },
      "message": "mm: use alloc_pages_exact() in alloc_large_system_hash() to avoid duplicated logic\n\nalloc_large_system_hash() has logic for freeing pages at the end of an\nexcessively large power-of-two buffer that is a duplicate of what is in\nalloc_pages_exact().  This patch converts alloc_large_system_hash() to use\nalloc_pages_exact().\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "72807a74c0172376bba6b5b27702c9f702b526e9",
      "tree": "d0f4a4a835754286ec9e2b940e950b2b68a4f61b",
      "parents": [
        "092cead6175bb1b3d3078a34ba71c939d526c70b"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:18 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:36 2009 -0700"
      },
      "message": "page allocator: sanity check order in the page allocator slow path\n\nCallers may speculatively call different allocators in order of preference\ntrying to allocate a buffer of a given size.  The order needed to allocate\nthis may be larger than what the page allocator can normally handle.\nWhile the allocator mostly does the right thing, it should not direct\nreclaim or wakeup kswapd with a bogus order.  This patch sanity checks the\norder in the slow path and returns NULL if it is too large.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Dave Hansen \u003cdave@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": "092cead6175bb1b3d3078a34ba71c939d526c70b",
      "tree": "84dfeda6c7ca85b6d68710c824e1ce59db16cc3b",
      "parents": [
        "b6e68bc1baed9b6972a250aba66b8c5276cf6fb1"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Jun 16 15:32:17 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:35 2009 -0700"
      },
      "message": "page allocator: move free_page_mlock() to page_alloc.c\n\nCurrently, free_page_mlock() is only called from page_alloc.c.  Thus, we\ncan move it to page_alloc.c.\n\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\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": "b6e68bc1baed9b6972a250aba66b8c5276cf6fb1",
      "tree": "193af67b8333417347b9324e4bf9963d7cf0a872",
      "parents": [
        "62bc62a873116805774ffd37d7f86aa4faa832b1"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:16 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:35 2009 -0700"
      },
      "message": "page allocator: slab: use nr_online_nodes to check for a NUMA platform\n\nSLAB currently avoids checking a bitmap repeatedly by checking once and\nstoring a flag.  When the addition of nr_online_nodes as a cheaper version\nof num_online_nodes(), this check can be replaced by nr_online_nodes.\n\n(Christoph did a patch that this is lifted almost verbatim from)\n\nSigned-off-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "62bc62a873116805774ffd37d7f86aa4faa832b1",
      "tree": "7f3f5b94b2d484a13ca27b8d3f6f54cfe126d7c0",
      "parents": [
        "974709bdb2a34db378fc84140220f363f558d0d6"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux-foundation.org",
        "time": "Tue Jun 16 15:32:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:35 2009 -0700"
      },
      "message": "page allocator: use a pre-calculated value instead of num_online_nodes() in fast paths\n\nnum_online_nodes() is called in a number of places but most often by the\npage allocator when deciding whether the zonelist needs to be filtered\nbased on cpusets or the zonelist cache.  This is actually a heavy function\nand touches a number of cache lines.\n\nThis patch stores the number of online nodes at boot time and updates the\nvalue when nodes get onlined and offlined.  The value is then used in a\nnumber of important paths in place of num_online_nodes().\n\n[rientjes@google.com: do not override definition of node_set_online() with macro]\nSigned-off-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: 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": "974709bdb2a34db378fc84140220f363f558d0d6",
      "tree": "2b63a089cc077579e3b67efba1995c71102db2e2",
      "parents": [
        "f2260e6b1f4eba0f5b5906795117791b5c660154"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:14 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:35 2009 -0700"
      },
      "message": "page allocator: get the pageblock migratetype without disabling interrupts\n\nLocal interrupts are disabled when freeing pages to the PCP list.  Part of\nthat free checks what the migratetype of the pageblock the page is in but\nit checks this with interrupts disabled and interupts should never be\ndisabled longer than necessary.  This patch checks the pagetype with\ninterrupts enabled with the impact that it is possible a page is freed to\nthe wrong list when a pageblock changes type.  As that block is now\nalready considered mixed from an anti-fragmentation perspective, it\u0027s not\nof vital importance.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f2260e6b1f4eba0f5b5906795117791b5c660154",
      "tree": "0faa8ce5fb0875835142e6ff3928b2ce076b4874",
      "parents": [
        "418589663d6011de9006425b6c5721e1544fb47a"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:35 2009 -0700"
      },
      "message": "page allocator: update NR_FREE_PAGES only as necessary\n\nWhen pages are being freed to the buddy allocator, the zone NR_FREE_PAGES\ncounter must be updated.  In the case of bulk per-cpu page freeing, it\u0027s\nupdated once per page.  This retouches cache lines more than necessary.\nUpdate the counters one per per-cpu bulk free.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "418589663d6011de9006425b6c5721e1544fb47a",
      "tree": "ef37fb026d3e38191d6b5c99bc95c190fa98d0fb",
      "parents": [
        "a3af9c389a7f3e675313f442fdd8c247c1cdb66b"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:12 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:35 2009 -0700"
      },
      "message": "page allocator: use allocation flags as an index to the zone watermark\n\nALLOC_WMARK_MIN, ALLOC_WMARK_LOW and ALLOC_WMARK_HIGH determin whether\npages_min, pages_low or pages_high is used as the zone watermark when\nallocating the pages.  Two branches in the allocator hotpath determine\nwhich watermark to use.\n\nThis patch uses the flags as an array index into a watermark array that is\nindexed with WMARK_* defines accessed via helpers.  All call sites that\nuse zone-\u003epages_* are updated to use the helpers for accessing the values\nand the array offsets for setting.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a3af9c389a7f3e675313f442fdd8c247c1cdb66b",
      "tree": "1ff17dc384d3bcfe82d27e3d05a35ff3b859652c",
      "parents": [
        "d395b73428d9748fb70b33477c9b2acae62f360a"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "nickpiggin@yahoo.com.au",
        "time": "Tue Jun 16 15:32:10 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:34 2009 -0700"
      },
      "message": "page allocator: do not check for compound pages during the page allocator sanity checks\n\nA number of sanity checks are made on each page allocation and free\nincluding that the page count is zero.  page_count() checks for compound\npages and checks the count of the head page if true.  However, in these\npaths, we do not care if the page is compound or not as the count of each\ntail page should also be zero.\n\nThis patch makes two changes to the use of page_count() in the free path.\nIt converts one check of page_count() to a VM_BUG_ON() as the count should\nhave been unconditionally checked earlier in the free path.  It also\navoids checking for compound pages.\n\n[mel@csn.ul.ie: Wrote changelog]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d395b73428d9748fb70b33477c9b2acae62f360a",
      "tree": "942bcfe36894ca8e13e6773c4713442a58a44a6d",
      "parents": [
        "da456f14d2f2d7350f2b9440af79c85a34c7eed5"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:09 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:34 2009 -0700"
      },
      "message": "page allocator: do not setup zonelist cache when there is only one node\n\nThere is a zonelist cache which is used to track zones that are not in the\nallowed cpuset or found to be recently full.  This is to reduce cache\nfootprint on large machines.  On smaller machines, it just incurs cost for\nno gain.  This patch only uses the zonelist cache when there are NUMA\nnodes.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "da456f14d2f2d7350f2b9440af79c85a34c7eed5",
      "tree": "fb857a24a561153e25e91a2ad55fa4123f8b152c",
      "parents": [
        "ed0ae21dc5fe3b9ad4cf1c7bb2bfd2ad596c481c"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:08 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:34 2009 -0700"
      },
      "message": "page allocator: do not disable interrupts in free_page_mlock()\n\nfree_page_mlock() tests and clears PG_mlocked using locked versions of the\nbit operations.  If set, it disables interrupts to update counters and\nthis happens on every page free even though interrupts are disabled very\nshortly afterwards a second time.  This is wasteful.\n\nThis patch splits what free_page_mlock() does.  The bit check is still\nmade.  However, the update of counters is delayed until the interrupts are\ndisabled and the non-lock version for clearing the bit is used.  One\npotential weirdness with this split is that the counters do not get\nupdated if the bad_page() check is triggered but a system showing bad\npages is getting screwed already.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nAcked-by: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ed0ae21dc5fe3b9ad4cf1c7bb2bfd2ad596c481c",
      "tree": "1ccdf36012a6a8ed22c5a78f7093bae0a259274e",
      "parents": [
        "0ac3a4099b0171ff965836182bc688bb8ca01058"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:07 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:34 2009 -0700"
      },
      "message": "page allocator: do not call get_pageblock_migratetype() more than necessary\n\nget_pageblock_migratetype() is potentially called twice for every page\nfree.  Once, when being freed to the pcp lists and once when being freed\nback to buddy.  When freeing from the pcp lists, it is known what the\npageblock type was at the time of free so use it rather than rechecking.\nIn low memory situations under memory pressure, this might skew\nanti-fragmentation slightly but the interference is minimal and decisions\nthat are fragmenting memory are being made anyway.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0ac3a4099b0171ff965836182bc688bb8ca01058",
      "tree": "d216b1adff4b9c9ef99cb5187d22b4a91bc7dca7",
      "parents": [
        "0a15c3e9f649f71464ac39e6378f1fde6f995322"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:06 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:34 2009 -0700"
      },
      "message": "page allocator: inline __rmqueue_fallback()\n\n__rmqueue_fallback() is in the slow path but has only one call site.\nBecause there is only one call-site, this function can then be inlined\nwithout causing text bloat.  On an x86-based config, it made no difference\nas the savings were padded out by NOP instructions.  Milage varies but\ntext will either decrease in size or remain static.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0a15c3e9f649f71464ac39e6378f1fde6f995322",
      "tree": "a2a69331347a3fdfa5d2ab6be3e52e71832ae153",
      "parents": [
        "728ec980fb9fa2d65d9e05444079a53615985e7b"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:05 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:34 2009 -0700"
      },
      "message": "page allocator: inline buffered_rmqueue()\n\nbuffered_rmqueue() is in the fast path so inline it.  Because it only has\none call site, this function can then be inlined without causing text\nbloat.  On an x86-based config, it made no difference as the savings were\npadded out by NOP instructions.  Milage varies but text will either\ndecrease in size or remain static.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "728ec980fb9fa2d65d9e05444079a53615985e7b",
      "tree": "d98dca98cd46fc28a871135cc9bd95168e4667b3",
      "parents": [
        "a56f57ff94c25d5d80def06f3ed8fe7f99147762"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:04 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:33 2009 -0700"
      },
      "message": "page allocator: inline __rmqueue_smallest()\n\nInline __rmqueue_smallest by altering flow very slightly so that there is\nonly one call site.  Because there is only one call-site, this function\ncan then be inlined without causing text bloat.  On an x86-based config,\nthis patch reduces text by 16 bytes.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a56f57ff94c25d5d80def06f3ed8fe7f99147762",
      "tree": "13cb2626a969e381cb5e3d6ba7f614b9d5ef7a42",
      "parents": [
        "341ce06f69abfafa31b9468410a13dbd60e2b237"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:02 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:33 2009 -0700"
      },
      "message": "page allocator: remove a branch by assuming __GFP_HIGH \u003d\u003d ALLOC_HIGH\n\nAllocations that specify __GFP_HIGH get the ALLOC_HIGH flag.  If these\nflags are equal to each other, we can eliminate a branch.\n\n[akpm@linux-foundation.org: Suggested the hack]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "341ce06f69abfafa31b9468410a13dbd60e2b237",
      "tree": "d7702157c9addb8e67e6dce883650e20b3ddcbfd",
      "parents": [
        "3dd2826698b6902aafd9441ce28ebb44735fd0d6"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Jun 16 15:32:02 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:33 2009 -0700"
      },
      "message": "page allocator: calculate the alloc_flags for allocation only once\n\nFactor out the mapping between GFP and alloc_flags only once.  Once\nfactored out, it only needs to be calculated once but some care must be\ntaken.\n\n[neilb@suse.de says]\nAs the test:\n\n-       if (((p-\u003eflags \u0026 PF_MEMALLOC) || unlikely(test_thread_flag(TIF_MEMDIE)))\n-                       \u0026\u0026 !in_interrupt()) {\n-               if (!(gfp_mask \u0026 __GFP_NOMEMALLOC)) {\n\nhas been replaced with a slightly weaker one:\n\n+       if (alloc_flags \u0026 ALLOC_NO_WATERMARKS) {\n\nWithout care, this would allow recursion into the allocator via direct\nreclaim.  This patch ensures we do not recurse when PF_MEMALLOC is set but\nTF_MEMDIE callers are now allowed to directly reclaim where they would\nhave been prevented in the past.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3dd2826698b6902aafd9441ce28ebb44735fd0d6",
      "tree": "c9bda4a84a0545d4acf41123072fd018100e63f8",
      "parents": [
        "5117f45d11a9ee62d9b086f1312f3f31781ff155"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:32:00 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:33 2009 -0700"
      },
      "message": "page allocator: calculate the migratetype for allocation only once\n\nGFP mask is converted into a migratetype when deciding which pagelist to\ntake a page from.  However, it is happening multiple times per allocation,\nat least once per zone traversed.  Calculate it once.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5117f45d11a9ee62d9b086f1312f3f31781ff155",
      "tree": "3f7b26f697d14d56be7278bcc4917e4f6d0c2c3d",
      "parents": [
        "49255c619fbd482d704289b5eb2795f8e3b7ff2e"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:31:59 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:33 2009 -0700"
      },
      "message": "page allocator: calculate the preferred zone for allocation only once\n\nget_page_from_freelist() can be called multiple times for an allocation.\nPart of this calculates the preferred_zone which is the first usable zone\nin the zonelist but the zone depends on the GFP flags specified at the\nbeginning of the allocation call.  This patch calculates preferred_zone\nonce.  It\u0027s safe to do this because if preferred_zone is NULL at the start\nof the call, no amount of direct reclaim or other actions will change the\nfact the allocation will fail.\n\n[akpm@linux-foundation.org: remove (void) casts]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "49255c619fbd482d704289b5eb2795f8e3b7ff2e",
      "tree": "b1f36ca46bda7767fce12bc4a70360a68f7255ab",
      "parents": [
        "11e33f6a55ed7847d9c8ffe185ef87faf7806abe"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:31:58 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:33 2009 -0700"
      },
      "message": "page allocator: move check for disabled anti-fragmentation out of fastpath\n\nOn low-memory systems, anti-fragmentation gets disabled as there is\nnothing it can do and it would just incur overhead shuffling pages between\nlists constantly.  Currently the check is made in the free page fast path\nfor every page.  This patch moves it to a slow path.  On machines with low\nmemory, there will be small amount of additional overhead as pages get\nshuffled between lists but it should quickly settle.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "11e33f6a55ed7847d9c8ffe185ef87faf7806abe",
      "tree": "ca70fe29e836c508cc279c619f7b856380a6f10f",
      "parents": [
        "7f82af9742a9346794ecc1515139daed480e7025"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:31:57 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:32 2009 -0700"
      },
      "message": "page allocator: break up the allocator entry point into fast and slow paths\n\nThe core of the page allocator is one giant function which allocates\nmemory on the stack and makes calculations that may not be needed for\nevery allocation.  This patch breaks up the allocator path into fast and\nslow paths for clarity.  Note the slow paths are still inlined but the\nentry is marked unlikely.  If they were not inlined, it actally increases\ntext size to generate the as there is only one call site.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7f82af9742a9346794ecc1515139daed480e7025",
      "tree": "4928b804c990263d1319d32fa61570fa34a25eb6",
      "parents": [
        "6484eb3e2a81807722c5f28efef94d8338b7b996"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:31:56 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:32 2009 -0700"
      },
      "message": "page allocator: check only once if the zonelist is suitable for the allocation\n\nIt is possible with __GFP_THISNODE that no zones are suitable.  This patch\nmakes sure the check is only made once.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6484eb3e2a81807722c5f28efef94d8338b7b996",
      "tree": "10ce36f412c2ff0c7eb399af1a189f8e354f56db",
      "parents": [
        "b3c466ce512923298ae8c0121d3e9f397a3f1210"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:31:54 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:32 2009 -0700"
      },
      "message": "page allocator: do not check NUMA node ID when the caller knows the node is valid\n\nCallers of alloc_pages_node() can optionally specify -1 as a node to mean\n\"allocate from the current node\".  However, a number of the callers in\nfast paths know for a fact their node is valid.  To avoid a comparison and\nbranch, this patch adds alloc_pages_exact_node() that only checks the nid\nwith VM_BUG_ON().  Callers that know their node is valid are then\nconverted.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nAcked-by: Paul Mundt \u003clethal@linux-sh.org\u003e\t[for the SLOB NUMA bits]\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b3c466ce512923298ae8c0121d3e9f397a3f1210",
      "tree": "ca6f360a6dbaaa0a71b9375fb57d544364532254",
      "parents": [
        "d239171e4f6efd58d7e423853056b1b6a74f1446"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:31:53 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:32 2009 -0700"
      },
      "message": "page allocator: do not sanity check order in the fast path\n\nNo user of the allocator API should be passing in an order \u003e\u003d MAX_ORDER\nbut we check for it on each and every allocation.  Delete this check and\nmake it a VM_BUG_ON check further down the call path.\n\n[akpm@linux-foundation.org: s/VM_BUG_ON/WARN_ON_ONCE/]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d239171e4f6efd58d7e423853056b1b6a74f1446",
      "tree": "3b0d96abf99e5add7bfc6236f745503b540bd350",
      "parents": [
        "6c0db4664b49417d80988953e69c323721353227"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:31:52 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:32 2009 -0700"
      },
      "message": "page allocator: replace __alloc_pages_internal() with __alloc_pages_nodemask()\n\nThe start of a large patch series to clean up and optimise the page\nallocator.\n\nThe performance improvements are in a wide range depending on the exact\nmachine but the results I\u0027ve seen so fair are approximately;\n\nkernbench:\t0\tto\t 0.12% (elapsed time)\n\t\t0.49%\tto\t 3.20% (sys time)\naim9:\t\t-4%\tto\t30% (for page_test and brk_test)\ntbench:\t\t-1%\tto\t 4%\nhackbench:\t-2.5%\tto\t 3.45% (mostly within the noise though)\nnetperf-udp\t-1.34%  to\t 4.06% (varies between machines a bit)\nnetperf-tcp\t-0.44%  to\t 5.22% (varies between machines a bit)\n\nI haven\u0027t sysbench figures at hand, but previously they were within the\n-0.5% to 2% range.\n\nOn netperf, the client and server were bound to opposite number CPUs to\nmaximise the problems with cache line bouncing of the struct pages so I\nexpect different people to report different results for netperf depending\non their exact machine and how they ran the test (different machines, same\ncpus client/server, shared cache but two threads client/server, different\nsocket client/server etc).\n\nI also measured the vmlinux sizes for a single x86-based config with\nCONFIG_DEBUG_INFO enabled but not CONFIG_DEBUG_VM.  The core of the\n.config is based on the Debian Lenny kernel config so I expect it to be\nreasonably typical.\n\nThis patch:\n\n__alloc_pages_internal is the core page allocator function but essentially\nit is an alias of __alloc_pages_nodemask.  Naming a publicly available and\nexported function \"internal\" is also a big ugly.  This patch renames\n__alloc_pages_internal() to __alloc_pages_nodemask() and deletes the old\nnodemask function.\n\nWarning - This patch renames an exported symbol.  No kernel driver is\naffected by external drivers calling __alloc_pages_internal() should\nchange the call to __alloc_pages_nodemask() without any alteration of\nparameters.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6c0db4664b49417d80988953e69c323721353227",
      "tree": "83ec1fcf3607b06c8c3cc2d39b5d10a61289cdd6",
      "parents": [
        "58568d2a8215cb6f55caf2332017d7bdff954e1c"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Tue Jun 16 15:31:50 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:31 2009 -0700"
      },
      "message": "mm: alloc_large_system_hash check order\n\nOn an x86_64 with 4GB ram, tcp_init()\u0027s call to alloc_large_system_hash(),\nto allocate tcp_hashinfo.ehash, is now triggering an mmotm WARN_ON_ONCE on\norder \u003e\u003d MAX_ORDER - it\u0027s hoping for order 11.  alloc_large_system_hash()\nhad better make its own check on the order.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "58568d2a8215cb6f55caf2332017d7bdff954e1c",
      "tree": "ffcdee457494ac78d6550b0aeac86536ca152e7b",
      "parents": [
        "950592f7b991f267d707d372b90f508bbe72acbc"
      ],
      "author": {
        "name": "Miao Xie",
        "email": "miaox@cn.fujitsu.com",
        "time": "Tue Jun 16 15:31:49 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:31 2009 -0700"
      },
      "message": "cpuset,mm: update tasks\u0027 mems_allowed in time\n\nFix allocating page cache/slab object on the unallowed node when memory\nspread is set by updating tasks\u0027 mems_allowed after its cpuset\u0027s mems is\nchanged.\n\nIn order to update tasks\u0027 mems_allowed in time, we must modify the code of\nmemory policy.  Because the memory policy is applied in the process\u0027s\ncontext originally.  After applying this patch, one task directly\nmanipulates anothers mems_allowed, and we use alloc_lock in the\ntask_struct to protect mems_allowed and memory policy of the task.\n\nBut in the fast path, we didn\u0027t use lock to protect them, because adding a\nlock may lead to performance regression.  But if we don\u0027t add a lock,the\ntask might see no nodes when changing cpuset\u0027s mems_allowed to some\nnon-overlapping set.  In order to avoid it, we set all new allowed nodes,\nthen clear newly disallowed ones.\n\n[lee.schermerhorn@hp.com:\n  The rework of mpol_new() to extract the adjusting of the node mask to\n  apply cpuset and mpol flags \"context\" breaks set_mempolicy() and mbind()\n  with MPOL_PREFERRED and a NULL nodemask--i.e., explicit local\n  allocation.  Fix this by adding the check for MPOL_PREFERRED and empty\n  node mask to mpol_new_mpolicy().\n\n  Remove the now unneeded \u0027nodes \u003d NULL\u0027 from mpol_new().\n\n  Note that mpol_new_mempolicy() is always called with a non-NULL\n  \u0027nodes\u0027 parameter now that it has been removed from mpol_new().\n  Therefore, we don\u0027t need to test nodes for NULL before testing it for\n  \u0027empty\u0027.  However, just to be extra paranoid, add a VM_BUG_ON() to\n  verify this assumption.]\n[lee.schermerhorn@hp.com:\n\n  I don\u0027t think the function name \u0027mpol_new_mempolicy\u0027 is descriptive\n  enough to differentiate it from mpol_new().\n\n  This function applies cpuset set context, usually constraining nodes\n  to those allowed by the cpuset.  However, when the \u0027RELATIVE_NODES flag\n  is set, it also translates the nodes.  So I settled on\n  \u0027mpol_set_nodemask()\u0027, because the comment block for mpol_new() mentions\n  that we need to call this function to \"set nodes\".\n\n  Some additional minor line length, whitespace and typo cleanup.]\nSigned-off-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dcf975d58565880a134afb13bde511d1b873ce79",
      "tree": "c10147ca16176c4a7c7ff72788170d3ac34b9c1c",
      "parents": [
        "78dc583d3ab43115579cb5f3f7bd12e3548dd5a5"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Tue Jun 16 15:31:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:31 2009 -0700"
      },
      "message": "mm/page-writeback.c: dirty limit type should be unsigned long\n\nget_dirty_limits() calls clip_bdi_dirty_limit() and task_dirty_limit()\nwith variable pbdi_dirty as one of the arguments.  This variable is an\nunsigned long * but both functions expect it to be a long *.  This causes\nthe following sparse warnings:\n\n  warning: incorrect type in argument 3 (different signedness)\n     expected long *pbdi_dirty\n     got unsigned long *pbdi_dirty\n  warning: incorrect type in argument 2 (different signedness)\n     expected long *pdirty\n     got unsigned long *pbdi_dirty\n\nFix the warnings by changing the long * to unsigned long * in both\nfunctions.\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "78dc583d3ab43115579cb5f3f7bd12e3548dd5a5",
      "tree": "ef8886bd9fce4bd8e4faa30bafcacd90aee54e25",
      "parents": [
        "d2bf6be8ab63aa84e6149aac934649aadf3828b1"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Jun 16 15:31:40 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:31 2009 -0700"
      },
      "message": "vmscan: low order lumpy reclaim also should use PAGEOUT_IO_SYNC\n\nCommit 33c120ed2843090e2bd316de1588b8bf8b96cbde (\"more aggressively use\nlumpy reclaim\") increased how aggressive lumpy reclaim was by isolating\nboth active and inactive pages for asynchronous lumpy reclaim on\ncostly-high-order pages and for cheap-high-order when memory pressure is\nhigh.  However, if the system is under heavy pressure and there are dirty\npages, asynchronous IO may not be sufficient to reclaim a suitable page in\ntime.\n\nThis patch causes the caller to enter synchronous lumpy reclaim for\ncostly-high-order pages and for cheap-high-order pages when under memory\npressure.\n\nMinchan.kim@gmail.com said:\n\nAndy added synchronous lumpy reclaim with\nc661b078fd62abe06fd11fab4ac5e4eeafe26b6d.  At that time, lumpy reclaim is\nnot agressive.  His intension is just for high-order users.(above\nPAGE_ALLOC_COSTLY_ORDER).\n\nAfter some time, Rik added aggressive lumpy reclaim with\n33c120ed2843090e2bd316de1588b8bf8b96cbde.  His intention was to do lumpy\nreclaim when high-order users and trouble getting a small set of\ncontiguous pages.\n\nSo we also have to add synchronous pageout for small set of contiguous\npages.\n\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cMinchan.kim@gmail.com\u003e\nReviewed-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d2bf6be8ab63aa84e6149aac934649aadf3828b1",
      "tree": "65e7f74f1ed6fd9516f1615b0f293d2aaeede07b",
      "parents": [
        "7ffc59b4d0bdfa00e882339f85b8a969bb7021e2"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "nickpiggin@yahoo.com.au",
        "time": "Tue Jun 16 15:31:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:30 2009 -0700"
      },
      "message": "mm: clean up get_user_pages_fast() documentation\n\nMove more documentation for get_user_pages_fast into the new kerneldoc comment.\nAdd some comments for get_user_pages as well.\n\nAlso, move get_user_pages_fast declaration up to get_user_pages. It wasn\u0027t\nthere initially because it was once a static inline function.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Andy Grover \u003candy.grover@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7ffc59b4d0bdfa00e882339f85b8a969bb7021e2",
      "tree": "6b6d96208f08bc394c8e64efed6767b9a95e7a6d",
      "parents": [
        "61b7cbdba2f3c588a0cf3db574c562805454b09b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:38 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:30 2009 -0700"
      },
      "message": "readahead: enforce full sync mmap readahead size\n\nNow that we do readahead for sequential mmap reads, here is a simple\nevaluation of the impacts, and one further optimization.\n\nIt\u0027s an NFS-root debian desktop system, readahead size \u003d 60 pages.\nThe numbers are grabbed after a fresh boot into console.\n\napproach        pgmajfault      RA miss ratio   mmap IO count   avg IO size(pages)\n   A            383             31.6%           383             11\n   B            225             32.4%           390             11\n   C            224             32.6%           307             13\n\ncase A: mmap sync/async readahead disabled\ncase B: mmap sync/async readahead enabled, with enforced full async readahead size\ncase C: mmap sync/async readahead enabled, with enforced full sync/async readahead size\nor:\nA \u003d vanilla 2.6.30-rc1\nB \u003d A plus mmap readahead\nC \u003d B plus this patch\n\nThe numbers show that\n- there are good possibilities for random mmap reads to trigger readahead\n- \u0027pgmajfault\u0027 is reduced by 1/3, due to the _async_ nature of readahead\n- case C can further reduce IO count by 1/4\n- readahead miss ratios are not quite affected\n\nThe theory is\n- readahead is _good_ for clustered random reads, and can perform\n  _better_ than readaround because they could be _async_.\n- async readahead size is guaranteed to be larger than readaround\n  size, and they are _async_, hence will mostly behave better\nHowever for B\n- sync readahead size could be smaller than readaround size, hence may\n  make things worse by produce more smaller IOs\nwhich will be fixed by this patch.\n\nFinal conclusion:\n- mmap readahead reduced major faults by 1/3 and no obvious overheads;\n- mmap io can be further reduced by 1/4 with this patch.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "61b7cbdba2f3c588a0cf3db574c562805454b09b",
      "tree": "657756b1ab5dc5fd63b341d999d492b868f4309c",
      "parents": [
        "10be0b372cac50e2e7a477852f98bf069a97a3fa"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:36 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:30 2009 -0700"
      },
      "message": "readahead: remove redundant test in shrink_readahead_size_eio()\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "10be0b372cac50e2e7a477852f98bf069a97a3fa",
      "tree": "b3599c6418c5c8c143c6f5e293f8ea93351b889f",
      "parents": [
        "045a2529a3513faed2d45bd82f9013b124309d94"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:36 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:30 2009 -0700"
      },
      "message": "readahead: introduce context readahead algorithm\n\nIntroduce page cache context based readahead algorithm.\nThis is to better support concurrent read streams in general.\n\nRATIONALE\n---------\nThe current readahead algorithm detects interleaved reads in a _passive_ way.\nGiven a sequence of interleaved streams 1,1001,2,1002,3,4,1003,5,1004,1005,6,...\nBy checking for (offset \u003d\u003d prev_offset + 1), it will discover the sequentialness\nbetween 3,4 and between 1004,1005, and start doing sequential readahead for the\nindividual streams since page 4 and page 1005.\n\nThe context readahead algorithm guarantees to discover the sequentialness no\nmatter how the streams are interleaved. For the above example, it will start\nsequential readahead since page 2 and 1002.\n\nThe trick is to poke for page @offset-1 in the page cache when it has no other\nclues on the sequentialness of request @offset: if the current requenst belongs\nto a sequential stream, that stream must have accessed page @offset-1 recently,\nand the page will still be cached now. So if page @offset-1 is there, we can\ntake request @offset as a sequential access.\n\nBENEFICIARIES\n-------------\n- strictly interleaved reads  i.e. 1,1001,2,1002,3,1003,...\n  the current readahead will take them as silly random reads;\n  the context readahead will take them as two sequential streams.\n\n- cooperative IO processes   i.e. NFS and SCST\n  They create a thread pool, farming off (sequential) IO requests to different\n  threads which will be performing interleaved IO.\n\n  It was not easy(or possible) to reliably tell from file-\u003ef_ra all those\n  cooperative processes working on the same sequential stream, since they will\n  have different file-\u003ef_ra instances. And NFSD\u0027s file-\u003ef_ra is particularly\n  unusable, since their file objects are dynamically created for each request.\n  The nfsd does have code trying to restore the f_ra bits, but not satisfactory.\n\n  The new scheme is to detect the sequential pattern via looking up the page\n  cache, which provides one single and consistent view of the pages recently\n  accessed. That makes sequential detection for cooperative processes possible.\n\nUSER REPORT\n-----------\nVladislav recommends the addition of context readahead as a result of his SCST\nbenchmarks. It leads to 6%~40% performance gains in various cases and achieves\nequal performance in others.                http://lkml.org/lkml/2009/3/19/239\n\nOVERHEADS\n---------\nIn theory, it introduces one extra page cache lookup per random read.  However\nthe below benchmark shows context readahead to be slightly faster, wondering..\n\nRandomly reading 200MB amount of data on a sparse file, repeat 20 times for\neach block size. The average throughputs are:\n\n                       \toriginal ra\tcontext ra\tgain\n 4K random reads:\t 65.561MB/s\t 65.648MB/s\t+0.1%\n16K random reads:\t124.767MB/s\t124.951MB/s\t+0.1%\n64K random reads: \t162.123MB/s\t162.278MB/s\t+0.1%\n\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nTested-by: Vladislav Bolkhovitin \u003cvst@vlnb.net\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "045a2529a3513faed2d45bd82f9013b124309d94",
      "tree": "99b7743b6dab54286afe94d4d7b8113a271661b5",
      "parents": [
        "dc566127dd161b6c997466a2349ac179527ea89b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:30 2009 -0700"
      },
      "message": "readahead: move the random read case to bottom\n\nSplit all readahead cases, and move the random one to bottom.\n\nNo behavior changes.\n\nThis is to prepare for the introduction of context readahead, and make it\neasy for inserting accounting/tracing points for each case.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Vladislav Bolkhovitin \u003cvst@vlnb.net\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d30a11004e3411909f2448546f036a011978062e",
      "tree": "c1980adb410d9fabd2c2eb8af9f0ed8ee4b656da",
      "parents": [
        "2fad6f5deee5556f511eab58da78737a23ddb35d"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:30 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:29 2009 -0700"
      },
      "message": "readahead: record mmap read-around states in file_ra_state\n\nMmap read-around now shares the same code style and data structure with\nreadahead code.\n\nThis also removes do_page_cache_readahead().  Its last user, mmap\nread-around, has been changed to call ra_submit().\n\nThe no-readahead-if-congested logic is dumped by the way.  Users will be\npretty sensitive about the slow loading of executables.  So it\u0027s\nunfavorable to disabled mmap read-around on a congested queue.\n\n[akpm@linux-foundation.org: coding-style fixes]\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2fad6f5deee5556f511eab58da78737a23ddb35d",
      "tree": "eca8262062c4fda63cb3bd34f9478f3fbfd7f518",
      "parents": [
        "70ac23cfa31f68289d4b720c6162b3929ab4de36"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:29 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:29 2009 -0700"
      },
      "message": "readahead: enforce full readahead size on async mmap readahead\n\nWe need this in one particular case and two more general ones.\n\nNow we do async readahead for sequential mmap reads, and do it with the\nhelp of PG_readahead.  For normal reads, PG_readahead is the sufficient\ncondition to do a sequential readahead.  But unfortunately, for mmap\nreads, there is a tiny nuisance:\n\n[11736.998347] readahead-init0(process: sh/23926, file: sda1/w3m, offset\u003d0:4503599627370495, ra\u003d0+4-3) \u003d 4\n[11737.014985] readahead-around(process: w3m/23926, file: sda1/w3m, offset\u003d0:0, ra\u003d290+32-0) \u003d 17\n[11737.019488] readahead-around(process: w3m/23926, file: sda1/w3m, offset\u003d0:0, ra\u003d118+32-0) \u003d 32\n[11737.024921] readahead-interleaved(process: w3m/23926, file: sda1/w3m, offset\u003d0:2, ra\u003d4+6-6) \u003d 6\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                 ~~~~~~~~~~~~~\n\nAn unfavorably small readahead.  The original dumb read-around size could\nbe more efficient.\n\nThat happened because ld-linux.so does a read(832) in L1 before mmap(),\nwhich triggers a 4-page readahead, with the second page tagged\nPG_readahead.\n\nL0: open(\"/lib/libc.so.6\", O_RDONLY)        \u003d 3\nL1: read(3, \"\\177ELF\\2\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\u003e\\0\\1\\0\\0\\0\\340\\342\"..., 832) \u003d 832\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nL2: fstat(3, {st_mode\u003dS_IFREG|0755, st_size\u003d1420624, ...}) \u003d 0\nL3: mmap(NULL, 3527256, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) \u003d 0x7fac6e51d000\nL4: mprotect(0x7fac6e671000, 2097152, PROT_NONE) \u003d 0\nL5: mmap(0x7fac6e871000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x154000) \u003d 0x7fac6e871000\nL6: mmap(0x7fac6e876000, 16984, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) \u003d 0x7fac6e876000\nL7: close(3)                                \u003d 0\n\nIn general, the PG_readahead flag will also be hit in cases\n\n- sequential reads\n\n- clustered random reads\n\nA full readahead size is desirable in both cases.\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "70ac23cfa31f68289d4b720c6162b3929ab4de36",
      "tree": "d610e506a9247a22ba54c379d8abb58958ada6da",
      "parents": [
        "ef00e08e26dd5d84271ef706262506b82195e752"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:28 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:29 2009 -0700"
      },
      "message": "readahead: sequential mmap readahead\n\nAuto-detect sequential mmap reads and do readahead for them.\n\nThe sequential mmap readahead will be triggered when\n- sync readahead: it\u0027s a major fault and (prev_offset \u003d\u003d offset-1);\n- async readahead: minor fault on PG_readahead page with valid readahead state.\n\nThe benefits of doing readahead instead of read-around:\n- less I/O wait thanks to async readahead\n- double real I/O size and no more cache hits\n\nThe single stream case is improved a little.\nFor 100,000 sequential mmap reads:\n\n                                    user       system    cpu        total\n(1-1)  plain -mm, 128KB readaround: 3.224      2.554     48.40%     11.838\n(1-2)  plain -mm, 256KB readaround: 3.170      2.392     46.20%     11.976\n(2)  patched -mm, 128KB readahead:  3.117      2.448     47.33%     11.607\n\nThe patched (2) has smallest total time, since it has no cache hit overheads\nand less I/O block time(thanks to async readahead). Here the I/O size\nmakes no much difference, since there\u0027s only one single stream.\n\nNote that (1-1)\u0027s real I/O size is 64KB and (1-2)\u0027s real I/O size is 128KB,\nsince the half of the read-around pages will be readahead cache hits.\n\nThis is going to make _real_ differences for _concurrent_ IO streams.\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ef00e08e26dd5d84271ef706262506b82195e752",
      "tree": "5f6cf72cf9bf0574ecfbd73f4ee5378d89298dd7",
      "parents": [
        "51daa88ebd8e0d437289f589af29d4b39379ea76"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 15:31:25 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:29 2009 -0700"
      },
      "message": "readahead: clean up and simplify the code for filemap page fault readahead\n\nThis shouldn\u0027t really change behavior all that much, but the single rather\ncomplex function with read-ahead inside a loop etc is broken up into more\nmanageable pieces.\n\nThe behaviour is also less subtle, with the read-ahead being done up-front\nrather than inside some subtle loop and thus avoiding the now unnecessary\nextra state variables (ie \"did_readaround\" is gone).\n\nFengguang: the code split in fact fixed a bug reported by Pavel Levshin:\nthe PGMAJFAULT accounting used to be bypassed when MADV_RANDOM is set, in\nwhich case the original code will directly jump to no_cached_page reading.\n\nCc: Pavel Levshin \u003clpk@581.spb.su\u003e\nCc: \u003cwli@movementarian.org\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@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"
    },
    {
      "commit": "51daa88ebd8e0d437289f589af29d4b39379ea76",
      "tree": "cbf2990a12ee4285d4e906c2c5614689922b8ab1",
      "parents": [
        "160334a0cfa8e578b718f81038026326845d07d7"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:24 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:29 2009 -0700"
      },
      "message": "readahead: remove sync/async readahead call dependency\n\nThe readahead call scheme is error-prone in that it expects the call sites\nto check for async readahead after doing a sync one.  I.e.\n\n\t\t\tif (!page)\n\t\t\t\tpage_cache_sync_readahead();\n\t\t\tpage \u003d find_get_page();\n\t\t\tif (page \u0026\u0026 PageReadahead(page))\n\t\t\t\tpage_cache_async_readahead();\n\nThis is because PG_readahead could be set by a sync readahead for the\n_current_ newly faulted in page, and the readahead code simply expects one\nmore callback on the same page to start the async readahead.  If the\ncaller fails to do so, it will miss the PG_readahead bits and never able\nto start an async readahead.\n\nEliminate this insane constraint by piggy-backing the async part into the\ncurrent readahead window.\n\nNow if an async readahead should be started immediately after a sync one,\nthe readahead logic itself will do it.  So the following code becomes\nvalid: (the \u0027else\u0027 in particular)\n\n\t\t\tif (!page)\n\t\t\t\tpage_cache_sync_readahead();\n\t\t\telse if (PageReadahead(page))\n\t\t\t\tpage_cache_async_readahead();\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "160334a0cfa8e578b718f81038026326845d07d7",
      "tree": "3c5b524faf23cdde4da1a3f2112de0c645206dba",
      "parents": [
        "caca7cb748571a5b39943a9b3e7081feef055e5e"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:23 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:29 2009 -0700"
      },
      "message": "readahead: increase interleaved readahead size\n\nMake sure interleaved readahead size is larger than request size.  This\nalso makes the readahead window grow up more quickly.\n\nReported-by: Xu Chenfeng \u003cxcf@ustc.edu.cn\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "caca7cb748571a5b39943a9b3e7081feef055e5e",
      "tree": "8f115031584d8ebc14280079fed8183ef1f032ac",
      "parents": [
        "fc31d16add13773265cc53d59f2e7594cb3c0a14"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:28 2009 -0700"
      },
      "message": "readahead: remove one unnecessary radix tree lookup\n\n(hit_readahead_marker !\u003d 0) means the page at @offset is present, so we\ncan search for non-present page starting from @offset+1.\n\nReported-by: Xu Chenfeng \u003cxcf@ustc.edu.cn\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fc31d16add13773265cc53d59f2e7594cb3c0a14",
      "tree": "fe67988da0a8b7bd08cdf3da95c852373638e06b",
      "parents": [
        "f7e839dd36fd940b0202cfb7d39b2a1b2dc59b1b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:28 2009 -0700"
      },
      "message": "readahead: apply max_sane_readahead() limit in ondemand_readahead()\n\nJust in case someone aggressively sets a huge readahead size.\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f7e839dd36fd940b0202cfb7d39b2a1b2dc59b1b",
      "tree": "5c99332a62aa8135bd58485e7f3c22634ecdc90c",
      "parents": [
        "1ebf26a9b338534def47f307c6c8694b6dfc0a79"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:20 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:28 2009 -0700"
      },
      "message": "readahead: move max_sane_readahead() calls into force_page_cache_readahead()\n\nImpact: code simplification.\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "bb1f17b0372de93758653ca3454bc0df18dc2e5c"
}
