)]}'
{
  "log": [
    {
      "commit": "bb21c7ce18eff8e6e7877ca1d06c6db719376e3c",
      "tree": "555edaded1e0a771df406ce2b6b63368df6de6cd",
      "parents": [
        "9e506f7adce8e6165a104d3d78fddd8ff0cdccf8"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Fri Jun 04 14:15:05 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 04 15:21:45 2010 -0700"
      },
      "message": "vmscan: fix do_try_to_free_pages() return value when priority\u003d\u003d0 reclaim failure\n\nGreg Thelen reported recent Johannes\u0027s stack diet patch makes kernel hang.\n His test is following.\n\n  mount -t cgroup none /cgroups -o memory\n  mkdir /cgroups/cg1\n  echo $$ \u003e /cgroups/cg1/tasks\n  dd bs\u003d1024 count\u003d1024 if\u003d/dev/null of\u003d/data/foo\n  echo $$ \u003e /cgroups/tasks\n  echo 1 \u003e /cgroups/cg1/memory.force_empty\n\nActually, This OOM hard to try logic have been corrupted since following\ntwo years old patch.\n\n\tcommit a41f24ea9fd6169b147c53c2392e2887cc1d9247\n\tAuthor: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\n\tDate:   Tue Apr 29 00:58:25 2008 -0700\n\n\t    page allocator: smarter retry of costly-order allocations\n\nOriginal intention was \"return success if the system have shrinkable zones\nthough priority\u003d\u003d0 reclaim was failure\".  But the above patch changed to\n\"return nr_reclaimed if .....\".  Oh, That forgot nr_reclaimed may be 0 if\npriority\u003d\u003d0 reclaim failure.\n\nAnd Johannes\u0027s patch 0aeb2339e54e (\"vmscan: remove all_unreclaimable scan\ncontrol\") made it more corrupt.  Originally, priority\u003d\u003d0 reclaim failure\non memcg return 0, but this patch changed to return 1.  It totally\nconfused memcg.\n\nThis patch fixes it completely.\n\nReported-by: Greg Thelen \u003cgthelen@google.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nTested-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8b25c6d2231b978ccce9c401e771932bde79aa9f",
      "tree": "13845799e14e49465de1529680df7def59dcfeb8",
      "parents": [
        "0aeb2339e54e40d0788a7017ecaeac7f5271e262"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Mon May 24 14:32:40 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:07:00 2010 -0700"
      },
      "message": "vmscan: remove isolate_pages callback scan control\n\nFor now, we have global isolation vs.  memory control group isolation, do\nnot allow the reclaim entry function to set an arbitrary page isolation\ncallback, we do not need that flexibility.\n\nAnd since we already pass around the group descriptor for the memory\ncontrol group isolation case, just use it to decide which one of the two\nisolator functions to use.\n\nThe decisions can be merged into nearby branches, so no extra cost there.\nIn fact, we save the indirect calls.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: 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": "0aeb2339e54e40d0788a7017ecaeac7f5271e262",
      "tree": "66889ce248257e7e24c998a22994ccef222e4622",
      "parents": [
        "142762bd8d8c46345e79f0f68d3374564306972f"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Mon May 24 14:32:40 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:07:00 2010 -0700"
      },
      "message": "vmscan: remove all_unreclaimable scan control\n\nThis scan control is abused to communicate a return value from\nshrink_zones().  Write this idiomatically and remove the knob.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: 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": "5f53e76299ceebd68bdf9495e8ff80db77711236",
      "tree": "2ecb8324a6593a49868161d85511cc14d474900a",
      "parents": [
        "bf8abe8b926f7546eb763fd2a088fe461dde6317"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon May 24 14:32:37 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:07:00 2010 -0700"
      },
      "message": "vmscan: page_check_references(): check low order lumpy reclaim properly\n\nIf vmscan is under lumpy reclaim mode, it have to ignore referenced bit\nfor making contenious free pages.  but current page_check_references()\ndoesn\u0027t.\n\nFix it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.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": "76a33fc380c9a65e01eb15b3b87c05863a0d51db",
      "tree": "506db7a03eb41e245a859ac241ff0680097427e5",
      "parents": [
        "6ec3a12712ac67ffa4b80d16e0767ffd2431a68d"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon May 24 14:32:36 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:07:00 2010 -0700"
      },
      "message": "vmscan: prevent get_scan_ratio() rounding errors\n\nget_scan_ratio() calculates percentage and if the percentage is \u003c 1%, it\nwill round percentage down to 0% and cause we completely ignore scanning\nanon/file pages to reclaim memory even the total anon/file pages are very\nbig.\n\nTo avoid underflow, we don\u0027t use percentage, instead we directly calculate\nhow many pages should be scaned.  In this way, we should get several\nscanned pages for \u003c 1% percent.\n\nThis has some benefits:\n\n1. increase our calculation precision\n\n2.  making our scan more smoothly.  Without this, if percent[x] is\n   underflow, shrink_zone() doesn\u0027t scan any pages and suddenly it scans\n   all pages when priority is zero.  With this, even priority isn\u0027t zero,\n   shrink_zone() gets chance to scan some pages.\n\nNote, this patch doesn\u0027t really change logics, but just increase\nprecision.  For system with a lot of memory, this might slightly changes\nbehavior.  For example, in a sequential file read workload, without the\npatch, we don\u0027t swap any anon pages.  With it, if anon memory size is\nbigger than 16G, we will see one anon page swapped.  The 16G is calculated\nas PAGE_SIZE * priority(4096) * (fp/ap).  fp/ap is assumed to be 1024\nwhich is common in this workload.  So the impact sounds not a big deal.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c175a0ce7584e5b498fff8cbdb9aa7912aa9fbba",
      "tree": "dd924daef4a9e0ac9729c5b61c30b8e3cc96f971",
      "parents": [
        "f1a5ab1210579e2d3ac8c0c227645823af5aafb0"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon May 24 14:32:26 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:59 2010 -0700"
      },
      "message": "mm: move definition for LRU isolation modes to a header\n\nCurrently, vmscan.c defines the isolation modes for __isolate_lru_page().\nMemory compaction needs access to these modes for isolating pages for\nmigration.  This patch exports them.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c0ff7453bb5c7c98e0885fb94279f2571946f280",
      "tree": "8bb2b169a5145f0496575dbd2f48bb4b1c83f819",
      "parents": [
        "708c1bbc9d0c3e57f40501794d9b0eed29d10fce"
      ],
      "author": {
        "name": "Miao Xie",
        "email": "miaox@cn.fujitsu.com",
        "time": "Mon May 24 14:32:08 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "cpuset,mm: fix no node to alloc memory when changing cpuset\u0027s mems\n\nBefore applying this patch, cpuset updates task-\u003emems_allowed and\nmempolicy by setting all new bits in the nodemask first, and clearing all\nold unallowed bits later.  But in the way, the allocator may find that\nthere is no node to alloc memory.\n\nThe reason is that cpuset rebinds the task\u0027s mempolicy, it cleans the\nnodes which the allocater can alloc pages on, for example:\n\n(mpol: mempolicy)\n\ttask1\t\t\ttask1\u0027s mpol\ttask2\n\talloc page\t\t1\n\t  alloc on node0? NO\t1\n\t\t\t\t1\t\tchange mems from 1 to 0\n\t\t\t\t1\t\trebind task1\u0027s mpol\n\t\t\t\t0-1\t\t  set new bits\n\t\t\t\t0\t  \t  clear disallowed bits\n\t  alloc on node1? NO\t0\n\t  ...\n\tcan\u0027t alloc page\n\t  goto oom\n\nThis patch fixes this problem by expanding the nodes range first(set newly\nallowed bits) and shrink it lazily(clear newly disallowed bits).  So we\nuse a variable to tell the write-side task that read-side task is reading\nnodemask, and the write-side task clears newly disallowed nodes after\nread-side task ends the current memory allocation.\n\n[akpm@linux-foundation.org: fix spello]\nSigned-off-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d6da1a5abc2bf3a06a5bda08e0f6833409234666",
      "tree": "dd6e7a306879b49a7947d3f7015bc84f5e27d869",
      "parents": [
        "6e191f7bb083544dc4fa3879ff81caf97c65d197"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Apr 06 14:34:56 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 07 08:38:03 2010 -0700"
      },
      "message": "mm: revert \"vmscan: get_scan_ratio() cleanup\"\n\nShaohua Li reported his tmpfs streaming I/O test can lead to make oom.\nThe test uses a 6G tmpfs in a system with 3G memory.  In the tmpfs, there\nare 6 copies of kernel source and the test does kbuild for each copy.  His\ninvestigation shows the test has a lot of rotated anon pages and quite few\nfile pages, so get_scan_ratio calculates percent[0] (i.e.  scanning\npercent for anon) to be zero.  Actually the percent[0] shoule be a big\nvalue, but our calculation round it to zero.\n\nAlthough before commit 84b18490 (\"vmscan: get_scan_ratio() cleanup\") , we\nhave the same problem too.  But the old logic can rescue percent[0]\u003d\u003d0\ncase only when priority\u003d\u003d0.  It had hided the real issue.  I didn\u0027t think\nmerely streaming io can makes percent[0]\u003d\u003d0 \u0026\u0026 priority\u003d\u003d0 situation.  but\nI was wrong.\n\nSo, definitely we have to fix such tmpfs streaming io issue.  but anyway I\nrevert the regression commit at first.\n\nThis reverts commit 84b18490d1f1bc7ed5095c929f78bc002eb70f26.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReported-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "645747462435d84c6c6a64269ed49cc3015f753d",
      "tree": "4cbbddcddd429704dd4f205f6371bb329dcb0ff1",
      "parents": [
        "31c0569c3b0b6cc8a867ac6665ca081553f7984c"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Mar 05 13:42:22 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:27 2010 -0800"
      },
      "message": "vmscan: detect mapped file pages used only once\n\nThe VM currently assumes that an inactive, mapped and referenced file page\nis in use and promotes it to the active list.\n\nHowever, every mapped file page starts out like this and thus a problem\narises when workloads create a stream of such pages that are used only for\na short time.  By flooding the active list with those pages, the VM\nquickly gets into trouble finding eligible reclaim canditates.  The result\nis long allocation latencies and eviction of the wrong pages.\n\nThis patch reuses the PG_referenced page flag (used for unmapped file\npages) to implement a usage detection that scales with the speed of LRU\nlist cycling (i.e.  memory pressure).\n\nIf the scanner encounters those pages, the flag is set and the page cycled\nagain on the inactive list.  Only if it returns with another page table\nreference it is activated.  Otherwise it is reclaimed as \u0027not recently\nused cache\u0027.\n\nThis effectively changes the minimum lifetime of a used-once mapped file\npage from a full memory cycle to an inactive list cycle, which allows it\nto occur in linear streams without affecting the stable working set of the\nsystem.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: OSAKI 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": "31c0569c3b0b6cc8a867ac6665ca081553f7984c",
      "tree": "c3d3e02f941fed0f91981d55d93540d2acaaecbd",
      "parents": [
        "dfc8d636cdb95f7b792d5ba8c9f3b295809c125d"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Mar 05 13:42:21 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:27 2010 -0800"
      },
      "message": "vmscan: drop page_mapping_inuse()\n\npage_mapping_inuse() is a historic predicate function for pages that are\nabout to be reclaimed or deactivated.\n\nAccording to it, a page is in use when it is mapped into page tables OR\npart of swap cache OR backing an mmapped file.\n\nThis function is used in combination with page_referenced(), which checks\nfor young bits in ptes and the page descriptor itself for the\nPG_referenced bit.  Thus, checking for unmapped swap cache pages is\nmeaningless as PG_referenced is not set for anonymous pages and unmapped\npages do not have young ptes.  The test makes no difference.\n\nProtecting file pages that are not by themselves mapped but are part of a\nmapped file is also a historic leftover for short-lived things like the\nexec() code in libc.  However, the VM now does reference accounting and\nactivation of pages at unmap time and thus the special treatment on\nreclaim is obsolete.\n\nThis patch drops page_mapping_inuse() and switches the two callsites to\nuse page_mapped() directly.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: OSAKI 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": "dfc8d636cdb95f7b792d5ba8c9f3b295809c125d",
      "tree": "90070c49adb5a8833d8fc034bc94cc696797e22e",
      "parents": [
        "e7c84ee22b8321fa0130a53d4c9806474d62eff0"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Mar 05 13:42:19 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:27 2010 -0800"
      },
      "message": "vmscan: factor out page reference checks\n\nThe used-once mapped file page detection patchset.\n\nIt is meant to help workloads with large amounts of shortly used file\nmappings, like rtorrent hashing a file or git when dealing with loose\nobjects (git gc on a bigger site?).\n\nRight now, the VM activates referenced mapped file pages on first\nencounter on the inactive list and it takes a full memory cycle to\nreclaim them again.  When those pages dominate memory, the system\nno longer has a meaningful notion of \u0027working set\u0027 and is required\nto give up the active list to make reclaim progress.  Obviously,\nthis results in rather bad scanning latencies and the wrong pages\nbeing reclaimed.\n\nThis patch makes the VM be more careful about activating mapped file\npages in the first place.  The minimum granted lifetime without\nanother memory access becomes an inactive list cycle instead of the\nfull memory cycle, which is more natural given the mentioned loads.\n\nThis test resembles a hashing rtorrent process.  Sequentially, 32MB\nchunks of a file are mapped into memory, hashed (sha1) and unmapped\nagain.  While this happens, every 5 seconds a process is launched and\nits execution time taken:\n\n\tpython2.4 -c \u0027import pydoc\u0027\n\told: max\u003d2.31s mean\u003d1.26s (0.34)\n\tnew: max\u003d1.25s mean\u003d0.32s (0.32)\n\n\tfind /etc -type f\n\told: max\u003d2.52s mean\u003d1.44s (0.43)\n\tnew: max\u003d1.92s mean\u003d0.12s (0.17)\n\n\tvim -c \u0027:quit\u0027\n\told: max\u003d6.14s mean\u003d4.03s (0.49)\n\tnew: max\u003d3.48s mean\u003d2.41s (0.25)\n\n\tmplayer --help\n\told: max\u003d8.08s mean\u003d5.74s (1.02)\n\tnew: max\u003d3.79s mean\u003d1.32s (0.81)\n\n\toverall hash time (stdev):\n\told: time\u003d1192.30 (12.85) thruput\u003d25.78mb/s (0.27)\n\tnew: time\u003d1060.27 (32.58) thruput\u003d29.02mb/s (0.88) (-11%)\n\nI also tested kernbench with regular IO streaming in the background to\nsee whether the delayed activation of frequently used mapped file\npages had a negative impact on performance in the presence of pressure\non the inactive list.  The patch made no significant difference in\ntiming, neither for kernbench nor for the streaming IO throughput.\n\nThe first patch submission raised concerns about the cost of the extra\nfaults for actually activated pages on machines that have no hardware\nsupport for young page table entries.\n\nI created an artificial worst case scenario on an ARM machine with\naround 300MHz and 64MB of memory to figure out the dimensions\ninvolved.  The test would mmap a file of 20MB, then\n\n  1. touch all its pages to fault them in\n  2. force one full scan cycle on the inactive file LRU\n  -- old: mapping pages activated\n  -- new: mapping pages inactive\n  3. touch the mapping pages again\n  -- old and new: fault exceptions to set the young bits\n  4. force another full scan cycle on the inactive file LRU\n  5. touch the mapping pages one last time\n  -- new: fault exceptions to set the young bits\n\nThe test showed an overall increase of 6% in time over 100 iterations\nof the above (old: ~212sec, new: ~225sec).  13 secs total overhead /\n(100 * 5k pages), ignoring the execution time of the test itself,\nmakes for about 25us overhead for every page that gets actually\nactivated.  Note:\n\n  1. File mapping the size of one third of main memory, _completely_\n  in active use across memory pressure - i.e., most pages referenced\n  within one LRU cycle.  This should be rare to non-existant,\n  especially on such embedded setups.\n\n  2. Many huge activation batches.  Those batches only occur when the\n  working set fluctuates.  If it changes completely between every full\n  LRU cycle, you have problematic reclaim overhead anyway.\n\n  3. Access of activated pages at maximum speed: sequential loads from\n  every single page without doing anything in between.  In reality,\n  the extra faults will get distributed between actual operations on\n  the data.\n\nSo even if a workload manages to get the VM into the situation of\nactivating a third of memory in one go on such a setup, it will take\n2.2 seconds instead 2.1 without the patch.\n\nComparing the numbers (and my user-experience over several months),\nI think this change is an overall improvement to the VM.\n\nPatch 1 is only refactoring to break up that ugly compound conditional\nin shrink_page_list() and make it easy to document and add new checks\nin a readable fashion.\n\nPatch 2 gets rid of the obsolete page_mapping_inuse().  It\u0027s not\nstrictly related to #3, but it was in the original submission and is a\nnet simplification, so I kept it.\n\nPatch 3 implements used-once detection of mapped file pages.\n\nThis patch:\n\nMoving the big conditional into its own predicate function makes the code\na bit easier to read and allows for better commenting on the checks\none-by-one.\n\nThis is just cleaning up, no semantics should have been changed.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: OSAKI 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": "93e4a89a8c987189b168a530a331ef6d0fcf07a7",
      "tree": "deb08017c0e4874539549d3ea9bf2d7b447a43be",
      "parents": [
        "fc91668eaf9e7ba61e867fc2218b7e9fb67faa4f"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Fri Mar 05 13:41:55 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:25 2010 -0800"
      },
      "message": "mm: restore zone-\u003eall_unreclaimable to independence word\n\ncommit e815af95 (\"change all_unreclaimable zone member to flags\") changed\nall_unreclaimable member to bit flag.  But it had an undesireble side\neffect.  free_one_page() is one of most hot path in linux kernel and\nincreasing atomic ops in it can reduce kernel performance a bit.\n\nThus, this patch revert such commit partially. at least\nall_unreclaimable shouldn\u0027t share memory word with other zone flags.\n\n[akpm@linux-foundation.org: fix patch interaction]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Huang Shijie \u003cshijie8@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": "76ca542d880ebe59a7a03c1597e73e1ded271857",
      "tree": "d5e1a5dc88150ccbfeba811769ac066021b3041b",
      "parents": [
        "84b18490d1f1bc7ed5095c929f78bc002eb70f26"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Fri Mar 05 13:41:47 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:24 2010 -0800"
      },
      "message": "mm, lockdep: annotate reclaim context to zone reclaim too\n\nCommit cf40bd16fd (\"lockdep: annotate reclaim context\") introduced reclaim\ncontext annotation.  But it didn\u0027t annotate zone reclaim.  This patch do\nit.\n\nThe point is, commit cf40bd16fd annotate __alloc_pages_direct_reclaim but\nzone-reclaim doesn\u0027t use __alloc_pages_direct_reclaim.\n\ncurrent call graph is\n\n__alloc_pages_nodemask\n   get_page_from_freelist\n       zone_reclaim()\n   __alloc_pages_slowpath\n       __alloc_pages_direct_reclaim\n           try_to_free_pages\n\nActually, if zone_reclaim_mode\u003d1, VM never call\n__alloc_pages_direct_reclaim in usual VM pressure.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\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": "84b18490d1f1bc7ed5095c929f78bc002eb70f26",
      "tree": "2543443925b2852436979d4bdf18d916a6b5c11e",
      "parents": [
        "45973d74fd3b1e3e16c025b688a725c7653b1443"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Fri Mar 05 13:41:47 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:24 2010 -0800"
      },
      "message": "vmscan: get_scan_ratio() cleanup\n\nThe get_scan_ratio() should have all scan-ratio related calculations.\nThus, this patch move some calculation into get_scan_ratio.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "45973d74fd3b1e3e16c025b688a725c7653b1443",
      "tree": "79b002bf8da8807a4d82314426611ca2109f83e8",
      "parents": [
        "59e99e5b9706867f18d4a36c1e4645fbaacbec2e"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Fri Mar 05 13:41:45 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:24 2010 -0800"
      },
      "message": "vmscan: check high watermark after shrink zone\n\nKswapd checks that zone has sufficient pages free via zone_watermark_ok().\n\nIf any zone doesn\u0027t have enough pages, we set all_zones_ok to zero.\n!all_zone_ok makes kswapd retry rather than sleeping.\n\nI think the watermark check before shrink_zone() is pointless.  Only after\nkswapd has tried to shrink the zone is the check meaningful.\n\nMove the check to after the call to shrink_zone().\n\n[akpm@linux-foundation.org: fix comment, layout]\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-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": "de3fab39348dff18c69a0cd04efee9c276a02f51",
      "tree": "1fc5a20da15541e23d02c33ae0bb574fb1f2e40f",
      "parents": [
        "af2422c42c0ff42b8b93dbb3a5fe65250fb65c40"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Fri Jan 15 17:01:25 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 16 12:15:39 2010 -0800"
      },
      "message": "vmscan: kswapd: don\u0027t retry balance_pgdat() if all zones are unreclaimable\n\nCommit f50de2d3 (vmscan: have kswapd sleep for a short interval and double\ncheck it should be asleep) can cause kswapd to enter an infinite loop if\nrunning on a single-CPU system.  If all zones are unreclaimble,\nsleeping_prematurely return 1 and kswapd will call balance_pgdat() again.\nbut it\u0027s totally meaningless, balance_pgdat() doesn\u0027t anything against\nunreclaimable zone!\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReported-by: Will Newton \u003cwill.newton@gmail.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nTested-by: Will Newton \u003cwill.newton@gmail.com\u003e\nReviewed-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": "62c0c2f198c1f2ead05c961e83ef486c45888325",
      "tree": "d880a44df34d3cd14318efd1d5bee186a03cc841",
      "parents": [
        "b39415b2731d7dec5e612d2d12595da82399eedf"
      ],
      "author": {
        "name": "Huang Shijie",
        "email": "shijie8@gmail.com",
        "time": "Mon Dec 14 17:59:48 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:21 2009 -0800"
      },
      "message": "vmscan: simplify code\n\nSimplify the code for shrink_inactive_list().\n\nSigned-off-by: Huang Shijie \u003cshijie8@gmail.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-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": "b39415b2731d7dec5e612d2d12595da82399eedf",
      "tree": "a8c59b1bc820d643d2e969f866a54147d7015c2e",
      "parents": [
        "8aa043d74559556a661cb2eb6e64497eec86ec77"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Mon Dec 14 17:59:48 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:21 2009 -0800"
      },
      "message": "vmscan: do not evict inactive pages when skipping an active list scan\n\nIn AIM7 runs, recent kernels start swapping out anonymous pages well\nbefore they should.  This is due to shrink_list falling through to\nshrink_inactive_list if !inactive_anon_is_low(zone, sc), when all we\nreally wanted to do is pre-age some anonymous pages to give them extra\ntime to be referenced while on the inactive list.\n\nThe obvious fix is to make sure that shrink_list does not fall through to\nscanning/reclaiming inactive pages when we called it to scan one of the\nactive lists.\n\nThis change should be safe because the loop in shrink_zone ensures that we\nwill still shrink the anon and file inactive lists whenever we should.\n\n[kosaki.motohiro@jp.fujitsu.com: inactive_file_is_low() should be inactive_anon_is_low()]\nReported-by: Larry Woodman \u003clwoodman@redhat.com\u003e\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Tomasz Chmielewski \u003cmangoo@wpkg.org\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": "338fde90930eaa02f6f394daa23d35a410af5852",
      "tree": "6a230b458d12e33b4b3d531f977636d1a4813102",
      "parents": [
        "ece74b2e7acfb71453f3f39948cc667434550dbb"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:15 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "vmscan: make consistent of reclaim bale out between do_try_to_free_page and shrink_zone\n\nFix small inconsistent of \"\u003e\" and \"\u003e\u003d\".\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\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": "ece74b2e7acfb71453f3f39948cc667434550dbb",
      "tree": "08749bc2d0a6169d1c1525c502a2faf13e84b244",
      "parents": [
        "4f0ddfdffc8bef3a5eb9154734d68a6053194948"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:14 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "vmscan: kill sc.swap_cluster_max\n\nNow, All caller of reclaim use swap_cluster_max as SWAP_CLUSTER_MAX.\nThen, we can remove it perfectly.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\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": "4f0ddfdffc8bef3a5eb9154734d68a6053194948",
      "tree": "ae86c67cbb9290b8f090a13022736c2b862f3630",
      "parents": [
        "7b51755c3b38483b574d363d5ee587283c3f7999"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:13 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "vmscan: zone_reclaim() don\u0027t use insane swap_cluster_max\n\nIn old days, we didn\u0027t have sc.nr_to_reclaim and it brought\nsc.swap_cluster_max misuse.\n\nhuge sc.swap_cluster_max might makes unnecessary OOM risk and no\nperformance benefit.\n\nNow, we can stop its insane thing.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\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": "7b51755c3b38483b574d363d5ee587283c3f7999",
      "tree": "29ac6d3b73f0a28488dabff03a7df948c0333906",
      "parents": [
        "22fba33545b731408deab6e96b6e231ee05fd10b"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:12 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "vmscan: kill hibernation specific reclaim logic and unify it\n\nshrink_all_zone() was introduced by commit d6277db4ab (swsusp: rework\nmemory shrinker) for hibernate performance improvement.  and\nsc.swap_cluster_max was introduced by commit a06fe4d307 (Speed freeing\nmemory for suspend).\n\ncommit a06fe4d307 said\n\n   Without the patch:\n   Freed  14600 pages in  1749 jiffies \u003d 32.61 MB/s (Anomolous!)\n   Freed  88563 pages in 14719 jiffies \u003d 23.50 MB/s\n   Freed 205734 pages in 32389 jiffies \u003d 24.81 MB/s\n\n   With the patch:\n   Freed  68252 pages in   496 jiffies \u003d 537.52 MB/s\n   Freed 116464 pages in   569 jiffies \u003d 798.54 MB/s\n   Freed 209699 pages in   705 jiffies \u003d 1161.89 MB/s\n\nAt that time, their patch was pretty worth.  However, Modern Hardware\ntrend and recent VM improvement broke its worth.  From several reason, I\nthink we should remove shrink_all_zones() at all.\n\ndetail:\n\n1) Old days, shrink_zone()\u0027s slowness was mainly caused by stupid io-throttle\n  at no i/o congestion.\n  but current shrink_zone() is sane, not slow.\n\n2) shrink_all_zone() try to shrink all pages at a time. but it doesn\u0027t works\n  fine on numa system.\n  example)\n    System has 4GB memory and each node have 2GB. and hibernate need 1GB.\n\n    optimal)\n       steal 500MB from each node.\n    shrink_all_zones)\n       steal 1GB from node-0.\n\n  Oh, Cache balancing logic was broken. ;)\n  Unfortunately, Desktop system moved ahead NUMA at nowadays.\n  (Side note, if hibernate require 2GB, shrink_all_zones() never success\n   on above machine)\n\n3) if the node has several I/O flighting pages, shrink_all_zones() makes\n  pretty bad result.\n\n  schenario) hibernate need 1GB\n\n  1) shrink_all_zones() try to reclaim 1GB from Node-0\n  2) but it only reclaimed 990MB\n  3) stupidly, shrink_all_zones() try to reclaim 1GB from Node-1\n  4) it reclaimed 990MB\n\n  Oh, well. it reclaimed twice much than required.\n  In the other hand, current shrink_zone() has sane baling out logic.\n  then, it doesn\u0027t make overkill reclaim. then, we lost shrink_zones()\u0027s risk.\n\n4) SplitLRU VM always keep active/inactive ratio very carefully. inactive list only\n  shrinking break its assumption. it makes unnecessary OOM risk. it obviously suboptimal.\n\nNow, shrink_all_memory() is only the wrapper function of do_try_to_free_pages().\nit bring good reviewability and debuggability, and solve above problems.\n\nside note: Reclaim logic unificication makes two good side effect.\n - Fix recursive reclaim bug on shrink_all_memory().\n   it did forgot to use PF_MEMALLOC. it mean the system be able to stuck into deadlock.\n - Now, shrink_all_memory() got lockdep awareness. it bring good debuggability.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Rafael J. Wysocki \u003crjw@sisk.pl\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": "22fba33545b731408deab6e96b6e231ee05fd10b",
      "tree": "a522c19e19c2ce82f53ab781ec7901e3bdb8b200",
      "parents": [
        "cba5dd7fa535b7684cba68e17ac8be5b0083dc3d"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:10 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "vmscan: separate sc.swap_cluster_max and sc.nr_max_reclaim\n\nCurrently, sc.scap_cluster_max has double meanings.\n\n 1) reclaim batch size as isolate_lru_pages()\u0027s argument\n 2) reclaim baling out thresolds\n\nThe two meanings pretty unrelated. Thus, Let\u0027s separate it.\nthis patch doesn\u0027t change any behavior.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\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": "bb3ab596832b920c703d1aea1ce76d69c0f71fb7",
      "tree": "048162bf5081e7bd9802eba012e8b680a4444da8",
      "parents": [
        "f50de2d3811081957156b5d736778799379c29de"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:58:55 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "vmscan: stop kswapd waiting on congestion when the min watermark is not being met\n\nIf reclaim fails to make sufficient progress, the priority is raised.\nOnce the priority is higher, kswapd starts waiting on congestion.\nHowever, if the zone is below the min watermark then kswapd needs to\ncontinue working without delay as there is a danger of an increased rate\nof GFP_ATOMIC allocation failure.\n\nThis patch changes the conditions under which kswapd waits on congestion\nby only going to sleep if the min watermarks are being met.\n\n[mel@csn.ul.ie: add stats to track how relevant the logic is]\n[mel@csn.ul.ie: make kswapd only check its own zones and rename the relevant counters]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\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": "f50de2d3811081957156b5d736778799379c29de",
      "tree": "ddc3676bcaa26e2e55e18e57928b5c8331a0f0fa",
      "parents": [
        "273f047e36d83179573dc7e3a8af6aceaa8c599e"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Dec 14 17:58:53 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "vmscan: have kswapd sleep for a short interval and double check it should be asleep\n\nAfter kswapd balances all zones in a pgdat, it goes to sleep.  In the\nevent of no IO congestion, kswapd can go to sleep very shortly after the\nhigh watermark was reached.  If there are a constant stream of allocations\nfrom parallel processes, it can mean that kswapd went to sleep too quickly\nand the high watermark is not being maintained for sufficient length time.\n\nThis patch makes kswapd go to sleep as a two-stage process.  It first\ntries to sleep for HZ/10.  If it is woken up by another process or the\nhigh watermark is no longer met, it\u0027s considered a premature sleep and\nkswapd continues work.  Otherwise it goes fully to sleep.\n\nThis adds more counters to distinguish between fast and slow breaches of\nwatermarks.  A \"fast\" premature sleep is one where the low watermark was\nhit in a very short time after kswapd going to sleep.  A \"slow\" premature\nsleep indicates that the high watermark was breached after a very short\ninterval.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Frans Pop \u003celendil@planet.nl\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6aceb53be44ed55a2374c20a62e3aef9d3919e8d",
      "tree": "14092867e419d7c11e5e0202f9041247e0f4824d",
      "parents": [
        "d4906e1aa516cc965292b43b5a26122dd4344e7e"
      ],
      "author": {
        "name": "Vincent Li",
        "email": "macli@brc.ubc.ca",
        "time": "Mon Dec 14 17:58:49 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "mm/vmscan: change comment generic_file_write to __generic_file_aio_write\n\nCommit 543ade1fc9 (\"Streamline generic_file_* interfaces and filemap\ncleanups\") removed generic_file_write() in filemap.  Change the comment in\nvmscan pageout() to __generic_file_aio_write().\n\nSigned-off-by: Vincent Li \u003cmacli@brc.ubc.ca\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8fe23e057172223fe2048768a4d87ab7de7477bc",
      "tree": "d176d8e588fca088adfcb110e7c1bc53a839dc84",
      "parents": [
        "9b5e5d0fdc91b73bba8cf5e0fbe3521a953e4e4d"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Dec 14 17:58:33 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "mm: clear node in N_HIGH_MEMORY and stop kswapd when all memory is offlined\n\nWhen memory is hot-removed, its node must be cleared in N_HIGH_MEMORY if\nthere are no present pages left.\n\nIn such a situation, kswapd must also be stopped since it has nothing left\nto do.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6a7b95481d49f73991d3dbf8c1e696a24684ac05",
      "tree": "32f80d8839daf939bcae8d7711e64b8e96d89ce1",
      "parents": [
        "b05ca7385a2848abdc72051f832722641daed8b0"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Mon Oct 26 16:50:00 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 29 07:39:30 2009 -0700"
      },
      "message": "vmscan: order evictable rescue in LRU putback\n\nIsolators putting a page back to the LRU do not hold the page lock, and if\nthe page is mlocked, another thread might munlock it concurrently.\n\nExpecting this, the putback code re-checks the evictability of a page when\nit just moved it to the unevictable list in order to correct its decision.\n\nThe problem, however, is that ordering is not garuanteed between setting\nPG_lru when moving the page to the list and checking PG_mlocked\nafterwards:\n\n\t#0:\t\t\t\t#1\n\n\tspin_lock()\n\t\t\t\t\tif (TestClearPageMlocked())\n\t\t\t\t\t  if (PageLRU())\n\t\t\t\t\t    move to evictable list\n\tSetPageLRU()\n\tspin_unlock()\n\tif (!PageMlocked())\n\t  move to evictable list\n\nThe PageMlocked() check may get reordered before SetPageLRU() in #0,\nresulting in #0 not moving the still mlocked page, and in #1 failing to\nisolate and move the page as well.  The page is now stranded on the\nunevictable list.\n\nThe race condition is very unlikely.  The consequence currently is one\npage falling off the reclaim grid and eventually getting freed with\nPG_unevictable set, which triggers a warning in the page allocator.\n\nTestClearPageMlocked() in #1 already provides full memory barrier\nsemantics.\n\nThis patch adds an explicit full barrier to force ordering between\nSetPageLRU() and PageMlocked() so that either one of the competitors\nrescues the page.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\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": "41e20983fe553b39bc2b00e07c7a379f0c86a4bc",
      "tree": "685433b37a7ebe5a61ac7315dc8017706227345b",
      "parents": [
        "b76146ed1ae7d7acae1d51f9342e31d00c8d5a12"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Oct 26 16:49:53 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 29 07:39:27 2009 -0700"
      },
      "message": "vmscan: limit VM_EXEC protection to file pages\n\nIt is possible to have !Anon but SwapBacked pages, and some apps could\ncreate huge number of such pages with MAP_SHARED|MAP_ANONYMOUS.  These\npages go into the ANON lru list, and hence shall not be protected: we only\ncare mapped executable files.  Failing to do so may trigger OOM.\n\nTested-by: Christian Borntraeger \u003cborntraeger@de.ibm.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\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": "58355c7876a0754377c37c8af948b4cd423410e2",
      "tree": "9e49dfe20538307d2c4c8fc92c88432c4298f63b",
      "parents": [
        "0d0df599f1f11f12d589318bacb59a50fb5c0310"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Oct 26 16:49:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 29 07:39:25 2009 -0700"
      },
      "message": "congestion_wait(): don\u0027t use WRITE\n\ncommit 8aa7e847d (Fix congestion_wait() sync/async vs read/write\nconfusion) replace WRITE with BLK_RW_ASYNC.  Unfortunately, concurrent mm\ndevelopment made the unchanged place accidentally.\n\nThis patch fixes it too.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6d7f18f6ea3a13af95bdf507fc54d42b165e1712",
      "tree": "8f6f3a6d46835aa767823fa7049609408a87afc2",
      "parents": [
        "53cddfcc0e760d2b364878b6dadbd0c6d087cfae",
        "56a131dcf7ed36c3c6e36bea448b674ea85ed5bb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 25 09:27:30 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 25 09:27:30 2009 -0700"
      },
      "message": "Merge branch \u0027writeback\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027writeback\u0027 of git://git.kernel.dk/linux-2.6-block:\n  writeback: writeback_inodes_sb() should use bdi_start_writeback()\n  writeback: don\u0027t delay inodes redirtied by a fast dirtier\n  writeback: make the super_block pinning more efficient\n  writeback: don\u0027t resort for a single super_block in move_expired_inodes()\n  writeback: move inodes from one super_block together\n  writeback: get rid to incorrect references to pdflush in comments\n  writeback: improve readability of the wb_writeback() continue/break logic\n  writeback: cleanup writeback_single_inode()\n  writeback: kupdate writeback shall not stop when more io is possible\n  writeback: stop background writeback when below background threshold\n  writeback: balance_dirty_pages() shall write more than dirtied pages\n  fs: Fix busyloop in wb_writeback()\n"
    },
    {
      "commit": "5b0830cb9085f4b69f9d57d7f3aaff322ffbec26",
      "tree": "10040eb359269d4cd05487790b758144a69e8e39",
      "parents": [
        "71fd05a887e0f3f6bfff76ff81b33776177d0606"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 23 19:37:09 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:25 2009 +0200"
      },
      "message": "writeback: get rid to incorrect references to pdflush in comments\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "db16826367fefcb0ddb93d76b66adc52eb4e6339",
      "tree": "626224c1eb1eb79c522714591f208b4fdbdcd9d4",
      "parents": [
        "cd6045138ed1bb5d8773e940d51c34318eef3ef2",
        "465fdd97cbe16ef8727221857e96ef62dd352017"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:53:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:53:22 2009 -0700"
      },
      "message": "Merge branch \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6\n\n* \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6: (21 commits)\n  HWPOISON: Enable error_remove_page on btrfs\n  HWPOISON: Add simple debugfs interface to inject hwpoison on arbitary PFNs\n  HWPOISON: Add madvise() based injector for hardware poisoned pages v4\n  HWPOISON: Enable error_remove_page for NFS\n  HWPOISON: Enable .remove_error_page for migration aware file systems\n  HWPOISON: The high level memory error handler in the VM v7\n  HWPOISON: Add PR_MCE_KILL prctl to control early kill behaviour per process\n  HWPOISON: shmem: call set_page_dirty() with locked page\n  HWPOISON: Define a new error_remove_page address space op for async truncation\n  HWPOISON: Add invalidate_inode_page\n  HWPOISON: Refactor truncate to allow direct truncating of page v2\n  HWPOISON: check and isolate corrupted free pages v2\n  HWPOISON: Handle hardware poisoned pages in try_to_unmap\n  HWPOISON: Use bitmask/action code for try_to_unmap behaviour\n  HWPOISON: x86: Add VM_FAULT_HWPOISON handling to x86 page fault handler v2\n  HWPOISON: Add poison check to page fault handling\n  HWPOISON: Add basic support for poisoned pages in fault handler v3\n  HWPOISON: Add new SIGBUS error codes for hardware poison signals\n  HWPOISON: Add support for poison swap entries v2\n  HWPOISON: Export some rmap vma locking to outside world\n  ...\n"
    },
    {
      "commit": "8d65af789f3e2cf4cfbdbf71a0f7a61ebcd41d38",
      "tree": "121df3bfffc7853ac6d2c514ad514d4a748a0933",
      "parents": [
        "c0d0787b6d47d9f4d5e8bd321921104e854a9135"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Wed Sep 23 15:57:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:04 2009 -0700"
      },
      "message": "sysctl: remove \"struct file *\" argument of -\u003eproc_handler\n\nIt\u0027s unused.\n\nIt isn\u0027t needed -- read or write flag is already passed and sysctl\nshouldn\u0027t care about the rest.\n\nIt _was_ used in two places at arch/frv for some reason.\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e41695356fb4e0b153be1440ad027e46e0a7ea2",
      "tree": "547dae77d1655a1acb260ea8b266c7b8a48f2d2c",
      "parents": [
        "75822b4495b62e8721e9b88e3cf9e653a0c85b73"
      ],
      "author": {
        "name": "Balbir Singh",
        "email": "balbir@linux.vnet.ibm.com",
        "time": "Wed Sep 23 15:56:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "memory controller: soft limit reclaim on contention\n\nImplement reclaim from groups over their soft limit\n\nPermit reclaim from memory cgroups on contention (via the direct reclaim\npath).\n\nmemory cgroup soft limit reclaim finds the group that exceeds its soft\nlimit by the largest number of pages and reclaims pages from it and then\nreinserts the cgroup into its correct place in the rbtree.\n\nAdd additional checks to mem_cgroup_hierarchical_reclaim() to detect long\nloops in case all swap is turned off.  The code has been refactored and\nthe loop check (loop \u003c 2) has been enhanced for soft limits.  For soft\nlimits, we try to do more targetted reclaim.  Instead of bailing out after\ntwo loops, the routine now reclaims memory proportional to the size by\nwhich the soft limit is exceeded.  The proportion has been empirically\ndetermined.\n\n[akpm@linux-foundation.org: build fix]\n[kamezawa.hiroyu@jp.fujitsu.com: fix softlimit css refcnt handling]\n[nishimura@mxp.nes.nec.co.jp: refcount of the \"victim\" should be decremented before exiting the loop]\nSigned-off-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f168e1b6390e2d79cf57e48e6ae6d9b0a9e2851a",
      "tree": "8b265240661b26cea90aebd279cd420bfbfcd368",
      "parents": [
        "f86296317434b21585e229f6c49a33cb9ebab4d3"
      ],
      "author": {
        "name": "Vincent Li",
        "email": "macli@brc.ubc.ca",
        "time": "Mon Sep 21 17:03:12 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:39 2009 -0700"
      },
      "message": "mm/vmscan: remove page_queue_congested() comment\n\nCommit 084f71ae5c(kill page_queue_congested()) removed\npage_queue_congested().  Remove the page_queue_congested() comment in\nvmscan pageout() too.\n\nSigned-off-by: Vincent Li \u003cmacli@brc.ubc.ca\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": "f86296317434b21585e229f6c49a33cb9ebab4d3",
      "tree": "d4fb05d4aee1a8e373ec053e7316dc9847b2c417",
      "parents": [
        "1a8670a29b5277cbe601f74ab63d2c5211fb3005"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Sep 21 17:03:11 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:39 2009 -0700"
      },
      "message": "mm: do batched scans for mem_cgroup\n\nFor mem_cgroup, shrink_zone() may call shrink_list() with nr_to_scan\u003d1, in\nwhich case shrink_list() _still_ calls isolate_pages() with the much\nlarger SWAP_CLUSTER_MAX.  It effectively scales up the inactive list scan\nrate by up to 32 times.\n\nFor example, with 16k inactive pages and DEF_PRIORITY\u003d12, (16k \u003e\u003e 12)\u003d4.\nSo when shrink_zone() expects to scan 4 pages in the active/inactive list,\nthe active list will be scanned 4 pages, while the inactive list will be\n(over) scanned SWAP_CLUSTER_MAX\u003d32 pages in effect.  And that could break\nthe balance between the two lists.\n\nIt can further impact the scan of anon active list, due to the anon\nactive/inactive ratio rebalance logic in balance_pgdat()/shrink_zone():\n\ninactive anon list over scanned \u003d\u003e inactive_anon_is_low() \u003d\u003d TRUE\n                                \u003d\u003e shrink_active_list()\n                                \u003d\u003e active anon list over scanned\n\nSo the end result may be\n\n- anon inactive  \u003d\u003e over scanned\n- anon active    \u003d\u003e over scanned (maybe not as much)\n- file inactive  \u003d\u003e over scanned\n- file active    \u003d\u003e under scanned (relatively)\n\nThe accesses to nr_saved_scan are not lock protected and so not 100%\naccurate, however we can tolerate small errors and the resulted small\nimbalanced scan rates between zones.\n\nCc: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "0b21767637c3c99890a248fe47ac414e51cf5eb7",
      "tree": "ebedeecddd3e8d7d665464c4fadbea40ee43a317",
      "parents": [
        "2c85f51d222ccdd8c401d77a36b723a89156810d"
      ],
      "author": {
        "name": "Vincent Li",
        "email": "macli@brc.ubc.ca",
        "time": "Mon Sep 21 17:03:09 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:38 2009 -0700"
      },
      "message": "mm/vmscan: rename zone_nr_pages() to zone_nr_lru_pages()\n\nThe name `zone_nr_pages\u0027 can be mis-read as zone\u0027s (total) number pages,\nbut it actually returns zone\u0027s LRU list number pages.\n\nSigned-off-by: Vincent Li \u003cmacli@brc.ubc.ca\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ceddc3a52d783fabbf1ba623601419b9d6337194",
      "tree": "651d0fd4d5bf2455468f90364b88f01f982d79af",
      "parents": [
        "edcf4748cd56adcdf0856cc99ef108a4ea3ac7fe"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Mon Sep 21 17:03:00 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:38 2009 -0700"
      },
      "message": "mm: document is_page_cache_freeable()\n\nEnlighten the reader of this code about what reference count makes a page\ncache page freeable.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\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": "edcf4748cd56adcdf0856cc99ef108a4ea3ac7fe",
      "tree": "317d477d08dea82f5eef2e9c17294d0f0639ea81",
      "parents": [
        "6c0b13519d1c755d874e82c8fb8a6dcef0ee402c"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Mon Sep 21 17:02:59 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:38 2009 -0700"
      },
      "message": "mm: return boolean from page_has_private()\n\nMake page_has_private() return a true boolean value and remove the double\nnegations from the two callsites using it for arithmetic.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\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": "6c0b13519d1c755d874e82c8fb8a6dcef0ee402c",
      "tree": "0fe6e6902a488ad6c59ecee971fe64c81edbcce3",
      "parents": [
        "401a8e1c1670085b8177330ca47d4f7c4ac88761"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Mon Sep 21 17:02:59 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:37 2009 -0700"
      },
      "message": "mm: return boolean from page_is_file_cache()\n\npage_is_file_cache() has been used for both boolean checks and LRU\narithmetic, which was always a bit weird.\n\nNow that page_lru_base_type() exists for LRU arithmetic, make\npage_is_file_cache() a real predicate function and adjust the\nboolean-using callsites to drop those pesky double negations.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\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": "401a8e1c1670085b8177330ca47d4f7c4ac88761",
      "tree": "5883daaed42fa2a186e5769bab1c10535dc39a41",
      "parents": [
        "b7c46d151cb82856a429709d1227ba1648028232"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Mon Sep 21 17:02:58 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:35 2009 -0700"
      },
      "message": "mm: introduce page_lru_base_type()\n\nInstead of abusing page_is_file_cache() for LRU list index arithmetic, add\nanother helper with a more appropriate name and convert the non-boolean\nusers of page_is_file_cache() accordingly.\n\nThis new helper gives the LRU base type a page is supposed to live on,\ninactive anon or inactive file.\n\n[hugh.dickins@tiscali.co.uk: convert del_page_from_lru() also]\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.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": "b7c46d151cb82856a429709d1227ba1648028232",
      "tree": "b93012b4bb2ffd603c020b38d8f1f6f3b4714ff7",
      "parents": [
        "bba78819548a59a52e60f0b259997bbd011164ae"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Mon Sep 21 17:02:56 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:35 2009 -0700"
      },
      "message": "mm: drop unneeded double negations\n\nRemove double negations where the operand is already boolean.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a26f5320c4ee3d46a0da48fa0f3ac6a00b575793",
      "tree": "76e4502dae5d278c9a3cebbeda53f01aa1cf3e67",
      "parents": [
        "74a1c48fb4e9f10e3c83dcd39af73487968e35bf"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Sep 21 17:01:46 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:30 2009 -0700"
      },
      "message": "vmscan: kill unnecessary prefetch\n\nThe pages in the list passed move_active_pages_to_lru() are already\ntouched by shrink_active_list().  IOW the prefetch in\nmove_active_pages_to_lru() don\u0027t populate any cache.  it\u0027s pointless.\n\nThis patch remove it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "74a1c48fb4e9f10e3c83dcd39af73487968e35bf",
      "tree": "8a9facf333d114c9e5b4be37278951b35b21ff2b",
      "parents": [
        "5205e56eeab04ce02f8bb6b47d1569b216bc0b6a"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Sep 21 17:01:45 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:30 2009 -0700"
      },
      "message": "vmscan: kill unnecessary page flag test\n\nThe page_lru() already evaluate PageActive() and PageSwapBacked().  We\ndon\u0027t need to re-evaluate it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5205e56eeab04ce02f8bb6b47d1569b216bc0b6a",
      "tree": "ef27909cc2f016ddd7dc6c34fb5a37ca23dcadd3",
      "parents": [
        "de2e7567c7ddf24f0ca80010163ed10da66a14e2"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Sep 21 17:01:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:30 2009 -0700"
      },
      "message": "vmscan: move ClearPageActive from move_active_pages() to shrink_active_list()\n\nThe move_active_pages_to_lru() function is called under irq disabled and\nClearPageActive() doesn\u0027t need irq disabling.\n\nThen, this patch move it into shrink_active_list().\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "de2e7567c7ddf24f0ca80010163ed10da66a14e2",
      "tree": "203eeb5deda2ef11e46ee449134ba9afa0c8579b",
      "parents": [
        "adea02a1bea71a508da32c04d715485a1fe62029"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Mon Sep 21 17:01:43 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:30 2009 -0700"
      },
      "message": "vmscan: don\u0027t attempt to reclaim anon page in lumpy reclaim when no swap space is available\n\nThe VM already avoids attempting to reclaim anon pages in various places,\nBut it doesn\u0027t avoid it for lumpy reclaim.\n\nIt shuffles lru list unnecessary so that it is pointless.\n\n[akpm@linux-foundation.org: cleanup]\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "adea02a1bea71a508da32c04d715485a1fe62029",
      "tree": "c78742bbab36bf3b8d20f84b4dc6dc6585bb7cb4",
      "parents": [
        "55c37a840d9ec0ebed5c944355156d490b1ad5d1"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Sep 21 17:01:42 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:30 2009 -0700"
      },
      "message": "mm: count only reclaimable lru pages\n\nglobal_lru_pages() / zone_lru_pages() can be used in two ways:\n- to estimate max reclaimable pages in determine_dirtyable_memory()\n- to calculate the slab scan ratio\n\nWhen swap is full or not present, the anon lru lists are not reclaimable\nand also won\u0027t be scanned.  So the anon pages shall not be counted in both\nusage scenarios.  Also rename to _reclaimable_pages: now they are counting\nthe possibly reclaimable lru pages.\n\nIt can greatly (and correctly) increase the slab scan rate under high\nmemory pressure (when most file pages have been reclaimed and swap is\nfull/absent), thus reduce false OOM kills.\n\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Jesse Barnes \u003cjbarnes@virtuousgeek.org\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: \"Li, Ming Chun\" \u003cmacli@brc.ubc.ca\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "35cd78156c499ef83f60605e4643d5a98fef14fd",
      "tree": "67cdc9019d4b110b9d57634bd347c8dad6bf8346",
      "parents": [
        "a731286de62294b63d8ceb3c5914ac52cc17e690"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Mon Sep 21 17:01:38 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:29 2009 -0700"
      },
      "message": "vmscan: throttle direct reclaim when too many pages are isolated already\n\nWhen way too many processes go into direct reclaim, it is possible for all\nof the pages to be taken off the LRU.  One result of this is that the next\nprocess in the page reclaim code thinks there are no reclaimable pages\nleft and triggers an out of memory kill.\n\nOne solution to this problem is to never let so many processes into the\npage reclaim path that the entire LRU is emptied.  Limiting the system to\nonly having half of each inactive list isolated for reclaim should be\nsafe.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a731286de62294b63d8ceb3c5914ac52cc17e690",
      "tree": "c321e14500ec264e37fd103ffa71c7b133088010",
      "parents": [
        "b35ea17b7bbf5dea35faa0de11030acc620c3197"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Sep 21 17:01:37 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:29 2009 -0700"
      },
      "message": "mm: vmstat: add isolate pages\n\nIf the system is running a heavy load of processes then concurrent reclaim\ncan isolate a large number of pages from the LRU. /proc/vmstat and the\noutput generated for an OOM do not show how many pages were isolated.\n\nThis has been observed during process fork bomb testing (mstctl11 in LTP).\n\nThis patch shows the information about isolated pages.\n\nReproduced via:\n\n-----------------------\n% ./hackbench 140 process 1000\n   \u003d\u003e OOM occur\n\nactive_anon:146 inactive_anon:0 isolated_anon:49245\n active_file:79 inactive_file:18 isolated_file:113\n unevictable:0 dirty:0 writeback:0 unstable:0 buffer:39\n free:370 slab_reclaimable:309 slab_unreclaimable:5492\n mapped:53 shmem:15 pagetables:28140 bounce:0\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\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": "b35ea17b7bbf5dea35faa0de11030acc620c3197",
      "tree": "fba2dabec71193f769c16c3737e152900682bbfa",
      "parents": [
        "44c241f166b31999482c3c40448f4bbb2157a804"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Sep 21 17:01:36 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:28 2009 -0700"
      },
      "message": "mm: shrink_inactive_list() nr_scan accounting fix fix\n\nIf sc-\u003eisolate_pages() return 0, we don\u0027t need to call shrink_page_list().\nIn past days, shrink_inactive_list() handled it properly.\n\nBut commit fb8d14e1 (three years ago commit!) breaked it.  current\nshrink_inactive_list() always call shrink_page_list() although\nisolate_pages() return 0.\n\nThis patch restore proper return value check.\n\nRequirements:\n  o \"nr_taken \u003d\u003d 0\" condition should stay before calling shrink_page_list().\n  o \"nr_taken \u003d\u003d 0\" condition should stay after nr_scan related statistics\n     modification.\n\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "44c241f166b31999482c3c40448f4bbb2157a804",
      "tree": "1bfa7e8940de223e0ac35e0598c942f4e4404e20",
      "parents": [
        "b259fbde0a86085264c89aa2ce9c6e35792a1aad"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Sep 21 17:01:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:27 2009 -0700"
      },
      "message": "mm: rename pgmoved variable in shrink_active_list()\n\nCurrently the pgmoved variable has two meanings.  It causes harder\nreviewing.  This patch separates it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "14fa31b89c5ae79e4131da41761378a6df674352",
      "tree": "c6c79e89e0aa0b2efeaf657d4715250a406ab699",
      "parents": [
        "a6e04aa92965565968573a220a35b4e907385697"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Wed Sep 16 11:50:10 2009 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Sep 16 11:50:10 2009 +0200"
      },
      "message": "HWPOISON: Use bitmask/action code for try_to_unmap behaviour\n\ntry_to_unmap currently has multiple modi (migration, munlock, normal unmap)\nwhich are selected by magic flag variables. The logic is not very straight\nforward, because each of these flag change multiple behaviours (e.g.\nmigration turns off aging, not only sets up migration ptes etc.)\nAlso the different flags interact in magic ways.\n\nA later patch in this series adds another mode to try_to_unmap, so\nthis becomes quickly unmanageable.\n\nReplace the different flags with a action code (migration, munlock, munmap)\nand some additional flags as modifiers (ignore mlock, ignore aging).\nThis makes the logic more straight forward and allows easier extension\nto new behaviours. Change all the caller to declare what they want to\ndo.\n\nThis patch is supposed to be a nop in behaviour. If anyone can prove\nit is not that would be a bug.\n\nCc: Lee.Schermerhorn@hp.com\nCc: npiggin@suse.de\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "03ba3782e8dcc5b0e1efe440d33084f066e38cae",
      "tree": "e5a6513b411de16a46199530ec98ef9b7f1efc50",
      "parents": [
        "66f3b8e2e103a0b93b945764d98e9ba46cb926dd"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 09 09:08:54 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:25 2009 +0200"
      },
      "message": "writeback: switch to per-bdi threads for flushing data\n\nThis gets rid of pdflush for bdi writeout and kupdated style cleaning.\npdflush writeout suffers from lack of locality and also requires more\nthreads to handle the same workload, since it has to work in a\nnon-blocking fashion against each queue. This also introduces lumpy\nbehaviour and potential request starvation, since pdflush can be starved\nfor queue access if others are accessing it. A sample ffsb workload that\ndoes random writes to files is about 8% faster here on a simple SATA drive\nduring the benchmark phase. File layout also seems a LOT more smooth in\nvmstat:\n\n r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa\n 0  1      0 608848   2652 375372    0    0     0 71024  604    24  1 10 48 42\n 0  1      0 549644   2712 433736    0    0     0 60692  505    27  1  8 48 44\n 1  0      0 476928   2784 505192    0    0     4 29540  553    24  0  9 53 37\n 0  1      0 457972   2808 524008    0    0     0 54876  331    16  0  4 38 58\n 0  1      0 366128   2928 614284    0    0     4 92168  710    58  0 13 53 34\n 0  1      0 295092   3000 684140    0    0     0 62924  572    23  0  9 53 37\n 0  1      0 236592   3064 741704    0    0     4 58256  523    17  0  8 48 44\n 0  1      0 165608   3132 811464    0    0     0 57460  560    21  0  8 54 38\n 0  1      0 102952   3200 873164    0    0     4 74748  540    29  1 10 48 41\n 0  1      0  48604   3252 926472    0    0     0 53248  469    29  0  7 47 45\n\nwhere vanilla tends to fluctuate a lot in the creation phase:\n\n r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa\n 1  1      0 678716   5792 303380    0    0     0 74064  565    50  1 11 52 36\n 1  0      0 662488   5864 319396    0    0     4   352  302   329  0  2 47 51\n 0  1      0 599312   5924 381468    0    0     0 78164  516    55  0  9 51 40\n 0  1      0 519952   6008 459516    0    0     4 78156  622    56  1 11 52 37\n 1  1      0 436640   6092 541632    0    0     0 82244  622    54  0 11 48 41\n 0  1      0 436640   6092 541660    0    0     0     8  152    39  0  0 51 49\n 0  1      0 332224   6200 644252    0    0     4 102800  728    46  1 13 49 36\n 1  0      0 274492   6260 701056    0    0     4 12328  459    49  0  7 50 43\n 0  1      0 211220   6324 763356    0    0     0 106940  515    37  1 10 51 39\n 1  0      0 160412   6376 813468    0    0     0  8224  415    43  0  6 49 45\n 1  1      0  85980   6452 886556    0    0     4 113516  575    39  1 11 54 34\n 0  2      0  85968   6452 886620    0    0     0  1640  158   211  0  0 46 54\n\nA 10 disk test with btrfs performs 26% faster with per-bdi flushing. A\nSSD based writeback test on XFS performs over 20% better as well, with\nthe throughput being very stable around 1GB/sec, where pdflush only\nmanages 750MB/sec and fluctuates wildly while doing so. Random buffered\nwrites to many files behave a lot better as well, as does random mmap\u0027ed\nwrites.\n\nA separate thread is added to sync the super blocks. In the long term,\nadding sync_supers_bdi() functionality could get rid of this thread again.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "03ef83af528899aa339e42d8024b37e2f434fba4",
      "tree": "1a323ead874d690de79cd213d5231b4fc758979b",
      "parents": [
        "b62e408c05228f40e69bb38a48db8961cac6cd23"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Wed Aug 26 14:29:23 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 26 20:06:52 2009 -0700"
      },
      "message": "mm: fix for infinite churning of mlocked pages\n\nAn mlocked page might lose the isolatation race.  This causes the page to\nclear PG_mlocked while it remains in a VM_LOCKED vma.  This means it can\nbe put onto the [in]active list.  We can rescue it by using try_to_unmap()\nin shrink_page_list().\n\nBut now, As Wu Fengguang pointed out, vmscan has a bug.  If the page has\nPG_referenced, it can\u0027t reach try_to_unmap() in shrink_page_list() but is\nput into the active list.  If the page is referenced repeatedly, it can\nremain on the [in]active list without being moving to the unevictable\nlist.\n\nThis patch fixes it.\n\nReported-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KOSAKI Motohiro \u003c\u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8aa7e847d834ed937a9ad37a0f2ad5b8584c1ab0",
      "tree": "76c8b4f1362a928d426f2201790ab5d128f57724",
      "parents": [
        "c2cc49a2f8a479dde96a599646d30b6cc9dbed78"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Jul 09 14:52:32 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.(none)",
        "time": "Fri Jul 10 20:31:53 2009 +0200"
      },
      "message": "Fix congestion_wait() sync/async vs read/write confusion\n\nCommit 1faa16d22877f4839bd433547d770c676d1d964c accidentally broke\nthe bdi congestion wait queue logic, causing us to wait on congestion\nfor WRITE (\u003d\u003d 1) when we really wanted BLK_RW_ASYNC (\u003d\u003d 0) instead.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "cb4cbcf6b3cf79f80c157afdc8dd8221643d8481",
      "tree": "a328516967ad0daeff9702a2cf5760fb25fd26a7",
      "parents": [
        "d888a4c76c51092993643f8992bf55b3c28da483"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jun 23 08:57:55 2009 +0900"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 23 10:17:28 2009 -0700"
      },
      "message": "mm: fix incorrect page removal from LRU\n\nThe isolated page is \"cursor_page\" not \"page\".\n\nThis could cause LRU list corruption under memory pressure, caught by\nCONFIG_DEBUG_LIST.\n\nReported-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nTested-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\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": "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": "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": "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": "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": "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": "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": "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": "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": "c6f37f12197ac3bd2e5a35f2f0e195ae63d437de",
      "tree": "e9609ca63d211911582afcc4b8314887b85a6c46",
      "parents": [
        "e240b58c79144708530138e05f17c6d0d8d744a8"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Sun May 24 22:16:31 2009 +0200"
      },
      "committer": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Fri Jun 12 21:32:32 2009 +0200"
      },
      "message": "PM/Suspend: Do not shrink memory before suspend\n\nRemove the shrinking of memory from the suspend-to-RAM code, where\nit is not really necessary.\n\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nAcked-by: Nigel Cunningham \u003cnigel@tuxonice.net\u003e\nAcked-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "e767e0561d7fd2333df1921f1ab4176211f9036b",
      "tree": "3b936733f80ceb1ee61ce99f927d002d2296250e",
      "parents": [
        "bd6daba909d8484bd2ccf6017db4028d7a420927"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu May 28 14:34:28 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 29 08:40:02 2009 -0700"
      },
      "message": "memcg: fix deadlock between lock_page_cgroup and mapping tree_lock\n\nmapping-\u003etree_lock can be acquired from interrupt context.  Then,\nfollowing dead lock can occur.\n\nAssume \"A\" as a page.\n\n CPU0:\n       lock_page_cgroup(A)\n\t\tinterrupted\n\t\t\t-\u003e take mapping-\u003etree_lock.\n CPU1:\n       take mapping-\u003etree_lock\n\t\t-\u003e lock_page_cgroup(A)\n\nThis patch tries to fix above deadlock by moving memcg\u0027s hook to out of\nmapping-\u003etree_lock.  charge/uncharge of pagecache/swapcache is protected\nby page lock, not tree_lock.\n\nAfter this patch, lock_page_cgroup() is not called under mapping-\u003etree_lock.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8713e01295140f674a41f2199b0f7ca99dfb69d5",
      "tree": "0e222bd3469534f040c087c334b68e869e2dbb5f",
      "parents": [
        "0ae05fb254a5f2617fc8fcfff7be959b54a5e963"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Apr 30 15:08:55 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 02 15:36:10 2009 -0700"
      },
      "message": "vmscan: avoid multiplication overflow in shrink_zone()\n\nLocal variable `scan\u0027 can overflow on zones which are larger than\n\n\t(2G * 4k) / 100 \u003d 80GB.\n\nMaking it 64-bit on 64-bit will fix that up.\n\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\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": "2e2e425989080cc534fc0fca154cae515f971cf5",
      "tree": "c4acbd403164d1d210e3bc274b7d93487071153e",
      "parents": [
        "55e5750b3e979bac853c0809ad0ef75b7cebd18c"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Apr 21 12:24:57 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 21 13:41:51 2009 -0700"
      },
      "message": "vmscan,memcg: reintroduce sc-\u003emay_swap\n\nCommit a6dc60f8975ad96d162915e07703a4439c80dcf0 (\"vmscan: rename\nsc.may_swap to may_unmap\") removed the may_swap flag, but memcg had used\nit as a flag for \"we need to use swap?\", as the name indicate.\n\nAnd in the current implementation, memcg cannot reclaim mapped file\ncaches when mem+swap hits the limit.\n\nre-introduce may_swap flag and handle it at get_scan_ratio().  This\npatch doesn\u0027t influence any scan_control users other than memcg.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a21e25536169432cf9174d631972bc1cd4c75062",
      "tree": "5414335eae4b34be3e0cc0374b81d8303c6a95af",
      "parents": [
        "aefe6475720bd5eb8aacbc881488f3aa65618562"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Sat Apr 18 17:23:41 2009 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 18 11:36:58 2009 -0700"
      },
      "message": "PM/Hibernate: Fix memory shrinking\n\nCommit d979677c4c0 (\"mm: shrink_all_memory(): use sc.nr_reclaimed\")\nbroke the memory shrinking used by hibernation, becuse it did not update\nshrink_all_zones() in accordance with the other changes it made.\n\nFix this by making shrink_all_zones() update sc-\u003enr_reclaimed instead of\noverwriting its value.\n\nThis fixes http://bugzilla.kernel.org/show_bug.cgi?id\u003d13058\n\nReported-and-tested-by: Alan Jenkins \u003calan-jenkins@tuffmail.co.uk\u003e\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "90975ef71246c5c688ead04e8ff6f36dc92d28b3",
      "tree": "eda44b2efe91509719b0e62219c2efec13a9e762",
      "parents": [
        "cab4e4c43f92582a2bfc026137b3d8a175bd0360",
        "558f6ab9106e6be701acb0257e7171df1bbccf04"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 05 10:33:07 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Apr 05 10:33:07 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-cpumask\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-cpumask: (36 commits)\n  cpumask: remove cpumask allocation from idle_balance, fix\n  numa, cpumask: move numa_node_id default implementation to topology.h, fix\n  cpumask: remove cpumask allocation from idle_balance\n  x86: cpumask: x86 mmio-mod.c use cpumask_var_t for downed_cpus\n  x86: cpumask: update 32-bit APM not to mug current-\u003ecpus_allowed\n  x86: microcode: cleanup\n  x86: cpumask: use work_on_cpu in arch/x86/kernel/microcode_core.c\n  cpumask: fix CONFIG_CPUMASK_OFFSTACK\u003dy cpu hotunplug crash\n  numa, cpumask: move numa_node_id default implementation to topology.h\n  cpumask: convert node_to_cpumask_map[] to cpumask_var_t\n  cpumask: remove x86 cpumask_t uses.\n  cpumask: use cpumask_var_t in uv_flush_tlb_others.\n  cpumask: remove cpumask_t assignment from vector_allocation_domain()\n  cpumask: make Xen use the new operators.\n  cpumask: clean up summit\u0027s send_IPI functions\n  cpumask: use new cpumask functions throughout x86\n  x86: unify cpu_callin_mask/cpu_callout_mask/cpu_initialized_mask/cpu_sibling_setup_mask\n  cpumask: convert struct cpuinfo_x86\u0027s llc_shared_map to cpumask_var_t\n  cpumask: convert node_to_cpumask_map[] to cpumask_var_t\n  x86: unify 32 and 64-bit node_to_cpumask_map\n  ...\n"
    },
    {
      "commit": "266cf658efcf6ac33541a46740f74f50c79d2b6b",
      "tree": "5c83b0879892d509e598dfd54be3ba3679ecd348",
      "parents": [
        "03fb3d2af96c2783c3a5bc03f3d984cf422f0e69"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:36 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:36 2009 +0100"
      },
      "message": "FS-Cache: Recruit a page flags for cache management\n\nRecruit a page flag to aid in cache management.  The following extra flag is\ndefined:\n\n (1) PG_fscache (PG_private_2)\n\n     The marked page is backed by a local cache and is pinning resources in the\n     cache driver.\n\nIf PG_fscache is set, then things that checked for PG_private will now also\ncheck for that.  This includes things like truncation and page invalidation.\nThe function page_has_private() had been added to make the checks for both\nPG_private and PG_private_2 at the same time.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "327c0e968645f2601a43f5ea7c19c7b3a5fa0a34",
      "tree": "acc6789c120a6d5000ceebf51e690d14c6cfcacb",
      "parents": [
        "2678958e1225f350806d90f211a3b475f64aee80"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Mar 31 15:23:31 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:15 2009 -0700"
      },
      "message": "vmscan: fix it to take care of nodemask\n\ntry_to_free_pages() is used for the direct reclaim of up to\nSWAP_CLUSTER_MAX pages when watermarks are low.  The caller to\nalloc_pages_nodemask() can specify a nodemask of nodes that are allowed to\nbe used but this is not passed to try_to_free_pages().  This can lead to\nunnecessary reclaim of pages that are unusable by the caller and int the\nworst case lead to allocation failure as progress was not been make where\nit is needed.\n\nThis patch passes the nodemask used for alloc_pages_nodemask() to\ntry_to_free_pages().\n\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\nCc: 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": "88c3bd707c2552bcef93cc3724647903aece159d",
      "tree": "68c104f559854b1f5fea01ed8568584e535ac597",
      "parents": [
        "71aa653c6bfa6743d838342105ebc067145394e4"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Mar 31 15:23:29 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:15 2009 -0700"
      },
      "message": "vmscan: print shrink_slab symbol name on negative shrinker objects\n\nWhen a shrinker has a negative number of objects to delete, the symbol\nname of the shrinker should be printed, not shrink_slab.  This also makes\nthe error message slightly more informative.\n\nCc: Ingo Molnar \u003cmingo@elte.hu\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": "ad1c3544d0a85da7738ce8cff6f8a148da57935c",
      "tree": "f1ac66e22e172945f200f1b2fd9a2ece23a0880b",
      "parents": [
        "2443462b0a04ef0f82ad48f4fd0ef4ac5b24c4b7"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Mar 31 15:23:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:13 2009 -0700"
      },
      "message": "mm: don\u0027t free swap slots on page deactivation\n\nThe pagevec_swap_free() at the end of shrink_active_list() was introduced\nin 68a22394 \"vmscan: free swap space on swap-in/activation\" when\nshrink_active_list() was still rotating referenced active pages.\n\nIn 7e9cd48 \"vmscan: fix pagecache reclaim referenced bit check\" this was\nchanged, the rotating removed but the pagevec_swap_free() after the\nrotation loop was forgotten, applying now to the pagevec of the\ndeactivation loop instead.\n\nNow swap space is freed for deactivated pages.  And only for those that\nhappen to be on the pagevec after the deactivation loop.\n\nComplete 7e9cd48 and remove the rest of the swap freeing.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2443462b0a04ef0f82ad48f4fd0ef4ac5b24c4b7",
      "tree": "3be4cdc338bf004f7b8c6c70baf7fb78ad252844",
      "parents": [
        "2584e517320bd48dc8d20e38a2621a2dbe58fade"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Mar 31 15:23:12 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:13 2009 -0700"
      },
      "message": "mm: move pagevec stripping to save unlock-relock\n\nIn shrink_active_list() after the deactivation loop, we strip buffer heads\nfrom the potentially remaining pages in the pagevec.\n\nCurrently, this drops the zone\u0027s lru lock for stripping, only to reacquire\nit again afterwards to update statistics.\n\nIt is not necessary to strip the pages before updating the stats, so move\nthe whole thing out of the protected region and save the extra locking.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.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": "bd2f6199cf9af472aeefa1b642c9f504f19e6008",
      "tree": "ba8cd5e7d940bcac161e28872998f86a2910362b",
      "parents": [
        "bd775c42ea5f7c766d03a287083837cf05e7e738"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Mar 31 15:19:38 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:12 2009 -0700"
      },
      "message": "vmscan: respect higher order in zone_reclaim()\n\nDuring page allocation, there are two stages of direct reclaim that are\napplied to each zone in the preferred list.  The first stage using\nzone_reclaim() reclaims unmapped file backed pages and slab pages if over\ndefined limits as these are cheaper to reclaim.  The caller specifies the\norder of the target allocation but the scan control is not being correctly\ninitialised.\n\nThe impact is that the correct number of pages are being reclaimed but\nthat lumpy reclaim is not being applied.  This increases the chances of a\nfull direct reclaim via try_to_free_pages() is required.\n\nThis patch initialises the order field of the scan control as requested by\nthe caller.\n\n[mel@csn.ul.ie: rewrote changelog]\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9786bf841da57fac3457a1dac41acb4c1f2eced6",
      "tree": "763cb1dd3f6a3c4faf1c31b44ad2e7bef0d206d2",
      "parents": [
        "d979677c4c02f0a72db5a03ecd8184bd9d6695c8"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Mar 31 15:19:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:12 2009 -0700"
      },
      "message": "vmscan: clip swap_cluster_max in shrink_all_memory()\n\nshrink_inactive_list() scans in sc-\u003eswap_cluster_max chunks until it hits\nthe scan limit it was passed.\n\nshrink_inactive_list()\n{\n\tdo {\n\t\tisolate_pages(swap_cluster_max)\n\t\tshrink_page_list()\n\t} while (nr_scanned \u003c max_scan);\n}\n\nThis assumes that swap_cluster_max is not bigger than the scan limit\nbecause the latter is checked only after at least one iteration.\n\nIn shrink_all_memory() sc-\u003eswap_cluster_max is initialized to the overall\nreclaim goal in the beginning but not decreased while reclaim is making\nprogress which leads to subsequent calls to shrink_inactive_list()\nreclaiming way too much in the one iteration that is done unconditionally.\n\nSet sc-\u003eswap_cluster_max always to the proper goal before doing\n  shrink_all_zones()\n    shrink_list()\n      shrink_inactive_list().\n\nWhile the current shrink_all_memory() happily reclaims more than actually\nrequested, this patch fixes it to never exceed the goal:\n\nunpatched\n   wanted\u003d10000 reclaimed\u003d13356\n   wanted\u003d10000 reclaimed\u003d19711\n   wanted\u003d10000 reclaimed\u003d10289\n   wanted\u003d10000 reclaimed\u003d17306\n   wanted\u003d10000 reclaimed\u003d10700\n   wanted\u003d10000 reclaimed\u003d10004\n   wanted\u003d10000 reclaimed\u003d13301\n   wanted\u003d10000 reclaimed\u003d10976\n   wanted\u003d10000 reclaimed\u003d10605\n   wanted\u003d10000 reclaimed\u003d10088\n   wanted\u003d10000 reclaimed\u003d15000\n\npatched\n   wanted\u003d10000 reclaimed\u003d10000\n   wanted\u003d10000 reclaimed\u003d9599\n   wanted\u003d10000 reclaimed\u003d8476\n   wanted\u003d10000 reclaimed\u003d8326\n   wanted\u003d10000 reclaimed\u003d10000\n   wanted\u003d10000 reclaimed\u003d10000\n   wanted\u003d10000 reclaimed\u003d9919\n   wanted\u003d10000 reclaimed\u003d10000\n   wanted\u003d10000 reclaimed\u003d10000\n   wanted\u003d10000 reclaimed\u003d10000\n   wanted\u003d10000 reclaimed\u003d10000\n   wanted\u003d10000 reclaimed\u003d9624\n   wanted\u003d10000 reclaimed\u003d10000\n   wanted\u003d10000 reclaimed\u003d10000\n   wanted\u003d8500 reclaimed\u003d8092\n   wanted\u003d316 reclaimed\u003d316\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: MinChan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Nigel Cunningham \u003cncunningham@crca.org.au\u003e\nAcked-by: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: 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": "d979677c4c02f0a72db5a03ecd8184bd9d6695c8",
      "tree": "370c936bb17210db0db80df0e9b488c6ee5c11a1",
      "parents": [
        "0a0dd05dd7e1a800241888cbf515bf8d3dc2e59c"
      ],
      "author": {
        "name": "MinChan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Mar 31 15:19:34 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:12 2009 -0700"
      },
      "message": "mm: shrink_all_memory(): use sc.nr_reclaimed\n\nCommit a79311c14eae4bb946a97af25f3e1b17d625985d \"vmscan: bail out of\ndirect reclaim after swap_cluster_max pages\" moved the nr_reclaimed\ncounter into the scan control to accumulate the number of all reclaimed\npages in a reclaim invocation.\n\nshrink_all_memory() can use the same mechanism. it increase code\nconsistency and redability.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: MinChan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nCc: 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": "ee99c71c59f897436ec65debb99372b3146f9985",
      "tree": "051f1c43b7c7658689d4b2c23b3d8585d6464a89",
      "parents": [
        "a6dc60f8975ad96d162915e07703a4439c80dcf0"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Mar 31 15:19:31 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:11 2009 -0700"
      },
      "message": "mm: introduce for_each_populated_zone() macro\n\nImpact: cleanup\n\nIn almost cases, for_each_zone() is used with populated_zone().  It\u0027s\nbecause almost function doesn\u0027t need memoryless node information.\nTherefore, for_each_populated_zone() can help to make code simplify.\n\nThis patch has no functional change.\n\n[akpm@linux-foundation.org: small cleanup]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-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": "a6dc60f8975ad96d162915e07703a4439c80dcf0",
      "tree": "b28cae1e69e85e87d6991dbbb199bfe73fb433af",
      "parents": [
        "9de1581e75ba9d7979766d4ab6d56f0f2d87f7c6"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Mar 31 15:19:30 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:11 2009 -0700"
      },
      "message": "vmscan: rename sc.may_swap to may_unmap\n\nsc.may_swap does not only influence reclaiming of anon pages but pages\nmapped into pagetables in general, which also includes mapped file pages.\n\nIn shrink_page_list():\n\n\t\tif (!sc-\u003emay_swap \u0026\u0026 page_mapped(page))\n\t\t\tgoto keep_locked;\n\nFor anon pages, this makes sense as they are always mapped and reclaiming\nthem always requires swapping.\n\nBut mapped file pages are skipped here as well and it has nothing to do\nwith swapping.\n\nThe real effect of the knob is whether mapped pages are unmapped and\nreclaimed or not.  Rename it to `may_unmap\u0027 to have its name match its\nactual meaning more precisely.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: MinChan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: 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": "558f6ab9106e6be701acb0257e7171df1bbccf04",
      "tree": "6e811633baeb676693c493f6c82bf785cab2771d",
      "parents": [
        "15f7176eb1cccec0a332541285ee752b935c1c85",
        "65fb0d23fcddd8697c871047b700c78817bdaa43"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Mar 31 13:33:50 2009 +1030"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Mar 31 13:33:50 2009 +1030"
      },
      "message": "Merge branch \u0027cpumask-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\nConflicts:\n\n\tarch/x86/include/asm/topology.h\n\tdrivers/oprofile/buffer_sync.c\n(Both cases: changed in Linus\u0027 tree, removed in Ingo\u0027s).\n"
    },
    {
      "commit": "c4e1aa67ed9e4e542a064bc271ddbf152b677e91",
      "tree": "2a2ca00bed0fc22b4eb83db092c9178868d8f76b",
      "parents": [
        "cf2f7d7c90279cdbc12429de278f3d27ac2050ae",
        "2f8501815256af8498904e68bd0984b1afffd6f8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 30 17:17:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 30 17:17:35 2009 -0700"
      },
      "message": "Merge branch \u0027locking-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027locking-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (33 commits)\n  lockdep: fix deadlock in lockdep_trace_alloc\n  lockdep: annotate reclaim context (__GFP_NOFS), fix SLOB\n  lockdep: annotate reclaim context (__GFP_NOFS), fix\n  lockdep: build fix for !PROVE_LOCKING\n  lockstat: warn about disabled lock debugging\n  lockdep: use stringify.h\n  lockdep: simplify check_prev_add_irq()\n  lockdep: get_user_chars() redo\n  lockdep: simplify get_user_chars()\n  lockdep: add comments to mark_lock_irq()\n  lockdep: remove macro usage from mark_held_locks()\n  lockdep: fully reduce mark_lock_irq()\n  lockdep: merge the !_READ mark_lock_irq() helpers\n  lockdep: merge the _READ mark_lock_irq() helpers\n  lockdep: simplify mark_lock_irq() helpers #3\n  lockdep: further simplify mark_lock_irq() helpers\n  lockdep: simplify the mark_lock_irq() helpers\n  lockdep: split up mark_lock_irq()\n  lockdep: generate usage strings\n  lockdep: generate the state bit definitions\n  ...\n"
    },
    {
      "commit": "65fb0d23fcddd8697c871047b700c78817bdaa43",
      "tree": "119e6e5f276622c4c862f6c9b6d795264ba1603a",
      "parents": [
        "8c083f081d0014057901c68a0a3e0f8ca7ac8d23",
        "dfbbe89e197a77f2c8046a51c74e33e35f878080"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Mar 30 23:53:32 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Mar 30 23:53:32 2009 +0200"
      },
      "message": "Merge branch \u0027linus\u0027 into cpumask-for-linus\n\nConflicts:\n\tarch/x86/kernel/cpu/common.c\n"
    },
    {
      "commit": "1d885526f2f3fffacee2ecb541270bd00168adff",
      "tree": "0f87c5d264361fd75c628b4485ef5bf91eb0c95d",
      "parents": [
        "84814d642a4f1f294bd675ab11aae1ca54c6cedb"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Fri Mar 13 13:52:00 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 14 11:57:22 2009 -0700"
      },
      "message": "vmscan: pgmoved should be cleared after updating recent_rotated\n\npgmoved should be cleared after updating recent_rotated.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\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": "238a5b4bff2e0929a9ceb41f340137f36a6a75d9",
      "tree": "825d444ffd70579ab3e9a84f829d0cc6091295a8",
      "parents": [
        "17d85bc7564571a1cce23ffdb2d2a33301876925",
        "73e907de7d5cecef43d9949ab8f4fdca508168c7"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Mar 13 05:54:55 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Mar 13 05:54:55 2009 +0100"
      },
      "message": "Merge branch \u0027cpus4096\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-x86 into cpus4096\n"
    },
    {
      "commit": "a70f730282019f487aa33a84e5ac9a5e89c5abd0",
      "tree": "e6891ec5db5383c6f39617d0cc9671e1a0d1a988",
      "parents": [
        "c69fc56de1df5769f2ec69c915c7ad5afe63804c"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Mar 13 14:49:46 2009 +1030"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Mar 13 14:49:46 2009 +1030"
      },
      "message": "cpumask: replace node_to_cpumask with cpumask_of_node.\n\nImpact: cleanup\n\nnode_to_cpumask (and the blecherous node_to_cpumask_ptr which\ncontained a declaration) are replaced now everyone implements\ncpumask_of_node.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "f272b7bc447553410dde691aa31fc531adf9c175",
      "tree": "95bd28ba8cea8471c0f461cfe6a9f2f0c2f00dff",
      "parents": [
        "02d46e07e538c285accb5c000a7db3a97eff1fbf"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Thu Mar 12 14:31:36 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 12 16:20:24 2009 -0700"
      },
      "message": "memcg: use correct scan number at reclaim\n\nEven when page reclaim is under mem_cgroup, # of scan page is determined by\nstatus of global LRU. Fix that.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0cb57258fe01e9b21076b6a15b6aec7a24168228",
      "tree": "9744786d92356a21d3d2bcd2d3cc2935d81a489f",
      "parents": [
        "3049103ddfc9aac111916bd2f39ac6976c431517"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Sat Feb 14 02:04:10 2009 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Feb 21 14:17:17 2009 -0800"
      },
      "message": "swsusp: clean up shrink_all_zones()\n\nMove local variables to innermost possible scopes and use local\nvariables to cache calculations/reads done more than once.\n\nNo change in functionality (intended).\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nCc: Len Brown \u003clenb@kernel.org\u003e\nCc: Greg KH \u003cgregkh@suse.de\u003e\nAcked-by: Pavel Machek \u003cpavel@ucw.cz\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3049103ddfc9aac111916bd2f39ac6976c431517",
      "tree": "709bfc2b40389cac7643e27be5307c81a35c6c4b",
      "parents": [
        "09664fda48c5dd63277f1f42888ca9d5dca6037a"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Sat Feb 14 02:03:08 2009 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Feb 21 14:17:17 2009 -0800"
      },
      "message": "swsusp: dont fiddle with swappiness\n\nsc.swappiness is not used in the swsusp memory shrinking path, do not\nset it.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nCc: Len Brown \u003clenb@kernel.org\u003e\nCc: Greg KH \u003cgregkh@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "6700ec65c207068a81a535e9dca616fefac21671"
}
