)]}'
{
  "log": [
    {
      "commit": "5bc7b8aca942d03bf2716ddcfcb4e0b57e43a1b8",
      "tree": "c76049e13755609ecbd4c4066fddd8bbfdd9f650",
      "parents": [
        "1eec6702a80e04416d528846a5ff2122484d95ec"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Mon Apr 29 15:08:36 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 29 15:54:38 2013 -0700"
      },
      "message": "mm: thp: add split tail pages to shrink page list in page reclaim\n\nIn page reclaim, huge page is split.  split_huge_page() adds tail pages\nto LRU list.  Since we are reclaiming a huge page, it\u0027s better we\nreclaim all subpages of the huge page instead of just the head page.\nThis patch adds split tail pages to shrink page list so the tail pages\ncan be reclaimed soon.\n\nBefore this patch, run a swap workload:\n  thp_fault_alloc 3492\n  thp_fault_fallback 608\n  thp_collapse_alloc 6\n  thp_collapse_alloc_failed 0\n  thp_split 916\n\nWith this patch:\n  thp_fault_alloc 4085\n  thp_fault_fallback 16\n  thp_collapse_alloc 90\n  thp_collapse_alloc_failed 0\n  thp_split 1272\n\nfallback allocation is reduced a lot.\n\n[akpm@linux-foundation.org: fix CONFIG_SWAP\u003dn build]\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Minchan Kim \u003cminchan@kernel.org\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Wanpeng Li \u003cliwanp@linux.vnet.ibm.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Hugh Dickins \u003chughd@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": "1eec6702a80e04416d528846a5ff2122484d95ec",
      "tree": "ead36835b194b3253cef6c4391489fef6a574575",
      "parents": [
        "2f772e6cadf8ad8fca38927b17e6be028be669f5"
      ],
      "author": {
        "name": "Seth Jennings",
        "email": "sjenning@linux.vnet.ibm.com",
        "time": "Mon Apr 29 15:08:35 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 29 15:54:38 2013 -0700"
      },
      "message": "mm: allow for outstanding swap writeback accounting\n\nTo prevent flooding the swap device with writebacks, frontswap backends\nneed to count and limit the number of outstanding writebacks.  The\nincrementing of the counter can be done before the call to\n__swap_writepage().  However, the caller must receive a notification\nwhen the writeback completes in order to decrement the counter.\n\nTo achieve this functionality, this patch modifies __swap_writepage() to\ntake the bio completion callback function as an argument.\n\nend_swap_bio_write(), the normal bio completion function, is also made\nnon-static so that code doing the accounting can call it after the\naccounting is done.\n\nThere should be no behavioural change to existing code.\n\nSigned-off-by: Seth Jennings \u003csjenning@linux.vnet.ibm.com\u003e\nSigned-off-by: Bob Liu \u003cbob.liu@oracle.com\u003e\nAcked-by: Minchan Kim \u003cminchan@kernel.org\u003e\nReviewed-by: Dan Magenheimer \u003cdan.magenheimer@oracle.com\u003e\nCc: Konrad Rzeszutek Wilk \u003ckonrad.wilk@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2f772e6cadf8ad8fca38927b17e6be028be669f5",
      "tree": "5eac4cfd72c6e8e9b4d48ad7463cdf1a8b97f7b4",
      "parents": [
        "e8420a8ece80b3fe810415ecf061d54ca7fab266"
      ],
      "author": {
        "name": "Seth Jennings",
        "email": "sjenning@linux.vnet.ibm.com",
        "time": "Mon Apr 29 15:08:34 2013 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 29 15:54:38 2013 -0700"
      },
      "message": "mm: break up swap_writepage() for frontswap backends\n\nswap_writepage() is currently where frontswap hooks into the swap write\npath to capture pages with the frontswap_store() function.  However, if\na frontswap backend wants to \"resume\" the writeback of a page to the\nswap device, it can\u0027t call swap_writepage() as the page will simply\nreenter the backend.\n\nThis patch separates swap_writepage() into a top and bottom half, the\nbottom half named __swap_writepage() to allow a frontswap backend, like\nzswap, to resume writeback beyond the frontswap_store() hook.\n\n__add_to_swap_cache() is also made non-static so that the page for which\nwriteback is to be resumed can be added to the swap cache.\n\nSigned-off-by: Seth Jennings \u003csjenning@linux.vnet.ibm.com\u003e\nSigned-off-by: Bob Liu \u003cbob.liu@oracle.com\u003e\nAcked-by: Minchan Kim \u003cminchan@kernel.org\u003e\nReviewed-by: Dan Magenheimer \u003cdan.magenheimer@oracle.com\u003e\nCc: Konrad Rzeszutek Wilk \u003ckonrad.wilk@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b21e0b90ccb99a377bce0167fed1e881bb5065d7",
      "tree": "16a0ff8f91c96f8e3258eff33cd64c38d7baac56",
      "parents": [
        "697ce9be7d5c78d6a53dee15f5574f7398cba05c"
      ],
      "author": {
        "name": "Zhang Yanfei",
        "email": "zhangyanfei@cn.fujitsu.com",
        "time": "Fri Feb 22 16:35:48 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Feb 23 17:50:22 2013 -0800"
      },
      "message": "vmscan: change type of vm_total_pages to unsigned long\n\nThis variable is calculated from nr_free_pagecache_pages so\nchange its type to unsigned long.\n\nSigned-off-by: Zhang Yanfei \u003czhangyanfei@cn.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ebec3862fd6eefe8301aa55ed2e30c685d831842",
      "tree": "dda7828d852e384a382b277be0ec80b21ff38c72",
      "parents": [
        "1081312f95be1a0fc093556d789e482d3ab0f5b0"
      ],
      "author": {
        "name": "Zhang Yanfei",
        "email": "zhangyanfei@cn.fujitsu.com",
        "time": "Fri Feb 22 16:35:43 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Feb 23 17:50:21 2013 -0800"
      },
      "message": "mm: fix return type for functions nr_free_*_pages\n\nCurrently, the amount of RAM that functions nr_free_*_pages return is\nheld in unsigned int.  But in machines with big memory (exceeding 16TB),\nthe amount may be incorrect because of overflow, so fix it.\n\nSigned-off-by: Zhang Yanfei \u003czhangyanfei@cn.fujitsu.com\u003e\nCc: Simon Horman \u003chorms@verge.net.au\u003e\nCc: Julian Anastasov \u003cja@ssi.bg\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Eric Van Hensbergen \u003cericvh@gmail.com\u003e\nCc: Ron Minnich \u003crminnich@sandia.gov\u003e\nCc: Latchesar Ionkov \u003clucho@ionkov.net\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.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": "ec8acf20afb8534ed511f6613dd2226b9e301010",
      "tree": "a0d6779eeffa0f523a2799dbb619e0a34fd786d4",
      "parents": [
        "33806f06da654092182410d974b6d3c5396ea3eb"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Fri Feb 22 16:34:38 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Feb 23 17:50:17 2013 -0800"
      },
      "message": "swap: add per-partition lock for swapfile\n\nswap_lock is heavily contended when I test swap to 3 fast SSD (even\nslightly slower than swap to 2 such SSD).  The main contention comes\nfrom swap_info_get().  This patch tries to fix the gap with adding a new\nper-partition lock.\n\nGlobal data like nr_swapfiles, total_swap_pages, least_priority and\nswap_list are still protected by swap_lock.\n\nnr_swap_pages is an atomic now, it can be changed without swap_lock.  In\ntheory, it\u0027s possible get_swap_page() finds no swap pages but actually\nthere are free swap pages.  But sounds not a big problem.\n\nAccessing partition specific data (like scan_swap_map and so on) is only\nprotected by swap_info_struct.lock.\n\nChanging swap_info_struct.flags need hold swap_lock and\nswap_info_struct.lock, because scan_scan_map() will check it.  read the\nflags is ok with either the locks hold.\n\nIf both swap_lock and swap_info_struct.lock must be hold, we always hold\nthe former first to avoid deadlock.\n\nswap_entry_free() can change swap_list.  To delete that code, we add a\nnew highest_priority_index.  Whenever get_swap_page() is called, we\ncheck it.  If it\u0027s valid, we use it.\n\nIt\u0027s a pity get_swap_page() still holds swap_lock().  But in practice,\nswap_lock() isn\u0027t heavily contended in my test with this patch (or I can\nsay there are other much more heavier bottlenecks like TLB flush).  And\nBTW, looks get_swap_page() doesn\u0027t really need the lock.  We never free\nswap_info[] and we check SWAP_WRITEOK flag.  The only risk without the\nlock is we could swapout to some low priority swap, but we can quickly\nrecover after several rounds of swap, so sounds not a big deal to me.\nBut I\u0027d prefer to fix this if it\u0027s a real problem.\n\n\"swap: make each swap partition have one address_space\" improved the\nswapout speed from 1.7G/s to 2G/s.  This patch further improves the\nspeed to 2.3G/s, so around 15% improvement.  It\u0027s a multi-process test,\nso TLB flush isn\u0027t the biggest bottleneck before the patches.\n\n[arnd@arndb.de: fix it for nommu]\n[hughd@google.com: add missing unlock]\n[minchan@kernel.org: get rid of lockdep whinge on sys_swapon]\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\nCc: Seth Jennings \u003csjenning@linux.vnet.ibm.com\u003e\nCc: Konrad Rzeszutek Wilk \u003ckonrad.wilk@oracle.com\u003e\nCc: Xiao Guangrong \u003cxiaoguangrong@linux.vnet.ibm.com\u003e\nCc: Dan Magenheimer \u003cdan.magenheimer@oracle.com\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Minchan Kim \u003cminchan@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": "33806f06da654092182410d974b6d3c5396ea3eb",
      "tree": "7f7da99d94481a1d4c78ebf05b410fc8ba654a39",
      "parents": [
        "9800339b5e0f0e24ab3dac349e0de80d2018832e"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Fri Feb 22 16:34:37 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Feb 23 17:50:17 2013 -0800"
      },
      "message": "swap: make each swap partition have one address_space\n\nWhen I use several fast SSD to do swap, swapper_space.tree_lock is\nheavily contended.  This makes each swap partition have one\naddress_space to reduce the lock contention.  There is an array of\naddress_space for swap.  The swap entry type is the index to the array.\n\nIn my test with 3 SSD, this increases the swapout throughput 20%.\n\n[akpm@linux-foundation.org: revert unneeded change to  __add_to_swap_cache]\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Minchan Kim \u003cminchan@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": "d778df51c09264076fe0208c099ef7d428f21790",
      "tree": "8022d838d72a46c23736218c460714652282a6db",
      "parents": [
        "7c5bd705d8f983ae1868a126956f5aa3a6702e3f"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Feb 22 16:32:12 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Feb 23 17:50:09 2013 -0800"
      },
      "message": "mm: vmscan: save work scanning (almost) empty LRU lists\n\nIn certain cases (kswapd reclaim, memcg target reclaim), a fixed minimum\namount of pages is scanned from the LRU lists on each iteration, to make\nprogress.\n\nDo not make this minimum bigger than the respective LRU list size,\nhowever, and save some busy work trying to isolate and reclaim pages\nthat are not there.\n\nEmpty LRU lists are quite common with memory cgroups in NUMA\nenvironments because there exists a set of LRU lists for each zone for\neach memory cgroup, while the memory of a single cgroup is expected to\nstay on just one node.  The number of expected empty LRU lists is thus\n\n  memcgs * (nodes - 1) * lru types\n\nEach attempt to reclaim from an empty LRU list does expensive size\ncomparisons between lists, acquires the zone\u0027s lru lock etc.  Avoid\nthat.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Satoru Moriya \u003csatoru.moriya@hds.com\u003e\nCc: Simon Jeons \u003csimon.jeons@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": "39b5f29ac1f988c1615fbc9c69f6651ab0d0c3c7",
      "tree": "d8030f58d542bb3e811d83676b38c5b4b3a16c02",
      "parents": [
        "ec4d9f626d5908b6052c2973f37992f1db52e967"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Oct 08 16:33:18 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 09 16:22:55 2012 +0900"
      },
      "message": "mm: remove vma arg from page_evictable\n\npage_evictable(page, vma) is an irritant: almost all its callers pass\nNULL for vma.  Remove the vma arg and use mlocked_vma_newpage(vma, page)\nexplicitly in the couple of places it\u0027s needed.  But in those places we\ndon\u0027t even need page_evictable() itself!  They\u0027re dealing with a freshly\nallocated anonymous page, which has no \"mapping\" and cannot be mlocked yet.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a509bc1a9e487d952d9404318f7f990166ab57a7",
      "tree": "40a8f8a20877da8a5b855cfbc3813c0874605093",
      "parents": [
        "62c230bc1790923a1b35da03596a68a6c9b5b100"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:57 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:47 2012 -0700"
      },
      "message": "mm: swap: implement generic handler for swap_activate\n\nThe version of swap_activate introduced is sufficient for swap-over-NFS\nbut would not provide enough information to implement a generic handler.\nThis patch shuffles things slightly to ensure the same information is\navailable for aops-\u003eswap_activate() as is available to the core.\n\nNo functionality change.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Xiaotian Feng \u003cdfeng@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": "62c230bc1790923a1b35da03596a68a6c9b5b100",
      "tree": "46b300a00929087627e029b0f4d53e486a97ba7f",
      "parents": [
        "18022c5d8627a7a9ba8097a0f238b513fae6f5b8"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:55 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:47 2012 -0700"
      },
      "message": "mm: add support for a filesystem to activate swap files and use direct_IO for writing swap pages\n\nCurrently swapfiles are managed entirely by the core VM by using -\u003ebmap to\nallocate space and write to the blocks directly.  This effectively ensures\nthat the underlying blocks are allocated and avoids the need for the swap\nsubsystem to locate what physical blocks store offsets within a file.\n\nIf the swap subsystem is to use the filesystem information to locate the\nblocks, it is critical that information such as block groups, block\nbitmaps and the block descriptor table that map the swap file were\nresident in memory.  This patch adds address_space_operations that the VM\ncan call when activating or deactivating swap backed by a file.\n\n  int swap_activate(struct file *);\n  int swap_deactivate(struct file *);\n\nThe -\u003eswap_activate() method is used to communicate to the file that the\nVM relies on it, and the address_space should take adequate measures such\nas reserving space in the underlying device, reserving memory for mempools\nand pinning information such as the block descriptor table in memory.  The\n-\u003eswap_deactivate() method is called on sys_swapoff() if -\u003eswap_activate()\nreturned success.\n\nAfter a successful swapfile -\u003eswap_activate, the swapfile is marked\nSWP_FILE and swapper_space.a_ops will proxy to\nsis-\u003eswap_file-\u003ef_mappings-\u003ea_ops using -\u003edirect_io to write swapcache\npages and -\u003ereadpage to read.\n\nIt is perfectly possible that direct_IO be used to read the swap pages but\nit is an unnecessary complication.  Similarly, it is possible that\n-\u003ewritepage be used instead of direct_io to write the pages but filesystem\ndevelopers have stated that calling writepage from the VM is undesirable\nfor a variety of reasons and using direct_IO opens up the possibility of\nwriting back batches of swap pages in the future.\n\n[a.p.zijlstra@chello.nl: Original patch]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Xiaotian Feng \u003cdfeng@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": "f981c5950fa85916ba49bea5d9a7a5078f47e569",
      "tree": "e742598755e57e1bbed06dc90b05fe6e13091236",
      "parents": [
        "6290c2c439732727899405f39fb76c2f5585b707"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:47 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:47 2012 -0700"
      },
      "message": "mm: methods for teaching filesystems about PG_swapcache pages\n\nIn order to teach filesystems to handle swap cache pages, three new page\nfunctions are introduced:\n\n  pgoff_t page_file_index(struct page *);\n  loff_t page_file_offset(struct page *);\n  struct address_space *page_file_mapping(struct page *);\n\npage_file_index() - gives the offset of this page in the file in\nPAGE_CACHE_SIZE blocks.  Like page-\u003eindex is for mapped pages, this\nfunction also gives the correct index for PG_swapcache pages.\n\npage_file_offset() - uses page_file_index(), so that it will give the\nexpected result, even for PG_swapcache pages.\n\npage_file_mapping() - gives the mapping backing the actual page; that is\nfor swap cache pages it will give swap_file-\u003ef_mapping.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Xiaotian Feng \u003cdfeng@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": "c255a458055e459f65eb7b7f51dc5dbdd0caf1d8",
      "tree": "b143b1914eeb6f27f53e30f9f0275d0f1ca5480b",
      "parents": [
        "80934513b230bfcf70265f2ef0fdae89fb391633"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Jul 31 16:43:02 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:43 2012 -0700"
      },
      "message": "memcg: rename config variables\n\nSanity:\n\nCONFIG_CGROUP_MEM_RES_CTLR -\u003e CONFIG_MEMCG\nCONFIG_CGROUP_MEM_RES_CTLR_SWAP -\u003e CONFIG_MEMCG_SWAP\nCONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED -\u003e CONFIG_MEMCG_SWAP_ENABLED\nCONFIG_CGROUP_MEM_RES_CTLR_KMEM -\u003e CONFIG_MEMCG_KMEM\n\n[mhocko@suse.cz: fix missed bits]\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a3fe778c7895cd847d23c25ad566d83346282a77",
      "tree": "53ba1b736dac08680a08753f7163a1890d7a0d03",
      "parents": [
        "9171c670b4915e30360c2aed530b8377fbbcc852",
        "165c8aed5bbc6bdddbccae0ba9db451732558ff9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 04 12:28:45 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 04 12:28:45 2012 -0700"
      },
      "message": "Merge tag \u0027stable/frontswap.v16-tag\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/mm\n\nPull frontswap feature from Konrad Rzeszutek Wilk:\n \"Frontswap provides a \"transcendent memory\" interface for swap pages.\n  In some environments, dramatic performance savings may be obtained\n  because swapped pages are saved in RAM (or a RAM-like device) instead\n  of a swap disk.  This tag provides the basic infrastructure along with\n  some changes to the existing backends.\"\n\nFix up trivial conflict in mm/Makefile due to removal of swap token code\nchanging a line next to the new frontswap entry.\n\nThis pull request came in before the merge window even opened, it got\ndelayed to after the merge window by me just wanting to make sure it had\nactual users.  Apparently IBM is using this on their embedded side, and\nJan Beulich says that it\u0027s already made available for SLES and OpenSUSE\nusers.\n\nAlso acked by Rik van Riel, and Konrad points to other people liking it\ntoo.  So in it goes.\n\nBy Dan Magenheimer (4) and Konrad Rzeszutek Wilk (2)\nvia Konrad Rzeszutek Wilk\n* tag \u0027stable/frontswap.v16-tag\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/mm:\n  frontswap: s/put_page/store/g s/get_page/load\n  MAINTAINER: Add myself for the frontswap API\n  mm: frontswap: config and doc files\n  mm: frontswap: core frontswap functionality\n  mm: frontswap: core swap subsystem hooks and headers\n  mm: frontswap: add frontswap header file\n"
    },
    {
      "commit": "fa9add641b1b1c564db916accac1db346e7a2759",
      "tree": "875e74ec4d7fed0018fdbc134ad899949c5e3384",
      "parents": [
        "75b00af77ed5b5a3d55549f9e0c33f3969b9330c"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:07:09 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:28 2012 -0700"
      },
      "message": "mm/memcg: apply add/del_page to lruvec\n\nTake lruvec further: pass it instead of zone to add_page_to_lru_list() and\ndel_page_from_lru_list(); and pagevec_lru_move_fn() pass lruvec down to\nits target functions.\n\nThis cleanup eliminates a swathe of cruft in memcontrol.c, including\nmem_cgroup_lru_add_list(), mem_cgroup_lru_del_list() and\nmem_cgroup_lru_move_lists() - which never actually touched the lists.\n\nIn their place, mem_cgroup_page_lruvec() to decide the lruvec, previously\na side-effect of add, and mem_cgroup_update_lru_size() to maintain the\nlru_size stats.\n\nWhilst these are simplifications in their own right, the goal is to bring\nthe evaluation of lruvec next to the spin_locking of the lrus, in\npreparation for a future patch.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f3fd4a61928a5edf5b033a417e761b488b43e203",
      "tree": "f56c5b6f4a4c732c9167e4cacb3e9c25ced0d000",
      "parents": [
        "014483bcccc5edbf861d89dc1a6f7cdc02f9f4c0"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Tue May 29 15:06:54 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:25 2012 -0700"
      },
      "message": "mm: remove lru type checks from __isolate_lru_page()\n\nAfter patch \"mm: forbid lumpy-reclaim in shrink_active_list()\" we can\ncompletely remove anon/file and active/inactive lru type filters from\n__isolate_lru_page(), because isolation for 0-order reclaim always\nisolates pages from right lru list.  And pages-isolation for lumpy\nshrink_inactive_list() or memory-compaction anyway allowed to isolate\npages from all evictable lru lists.\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Minchan Kim \u003cminchan@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": "4b91355e9dc9ac1eb3d69e56de093899ff2677ef",
      "tree": "b6d18618013eadd3b3e3144c90b16d0d5f07b3af",
      "parents": [
        "181eb39425f2b9275afcb015eaa547d11f71a02f"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue May 29 15:06:51 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:24 2012 -0700"
      },
      "message": "memcg: fix/change behavior of shared anon at moving task\n\nThis patch changes memcg\u0027s behavior at task_move().\n\nAt task_move(), the kernel scans a task\u0027s page table and move the changes\nfor mapped pages from source cgroup to target cgroup.  There has been a\nbug at handling shared anonymous pages for a long time.\n\nBefore patch:\n  - The spec says \u0027shared anonymous pages are not moved.\u0027\n  - The implementation was \u0027shared anonymoys pages may be moved\u0027.\n    If page_mapcount \u003c\u003d2, shared anonymous pages\u0027s charge were moved.\n\nAfter patch:\n  - The spec says \u0027all anonymous pages are moved\u0027.\n  - The implementation is \u0027all anonymous pages are moved\u0027.\n\nConsidering usage of memcg, this will not affect user\u0027s experience.\n\u0027shared anonymous\u0027 pages only exists between a tree of processes which\ndon\u0027t do exec().  Moving one of process without exec() seems not sane.\nFor example, libcgroup will not be affected by this change.  (Anyway, no\none noticed the implementation for a long time...)\n\nBelow is a discussion log:\n\n - current spec/implementation are complex\n - Now, shared file caches are moved\n - It adds unclear check as page_mapcount(). To do correct check,\n   we should check swap users, etc.\n - No one notice this implementation behavior. So, no one get benefit\n   from the design.\n - In general, once task is moved to a cgroup for running, it will not\n   be moved....\n - Finally, we have control knob as memory.move_charge_at_immigrate.\n\nHere is a patch to allow moving shared pages, completely. This makes\nmemcg simpler and fix current broken code.\n\nSuggested-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bde05d1ccd512696b09db9dd2e5f33ad19152605",
      "tree": "affa2c836136cac6ec0e503ce8996670d385ebbb",
      "parents": [
        "5ceb9ce6fe9462a298bb2cd5c9f1ca6cb80a0199"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue May 29 15:06:38 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:22 2012 -0700"
      },
      "message": "shmem: replace page if mapping excludes its zone\n\nThe GMA500 GPU driver uses GEM shmem objects, but with a new twist: the\nbacking RAM has to be below 4GB.  Not a problem while the boards\nsupported only 4GB: but now Intel\u0027s D2700MUD boards support 8GB, and\ntheir GMA3600 is managed by the GMA500 driver.\n\nshmem/tmpfs has never pretended to support hardware restrictions on the\nbacking memory, but it might have appeared to do so before v3.1, and\neven now it works fine until a page is swapped out then back in.  When\nread_cache_page_gfp() supplied a freshly allocated page for copy, that\ncompensated for whatever choice might have been made by earlier swapin\nreadahead; but swapoff was likely to destroy the illusion.\n\nWe\u0027d like to continue to support GMA500, so now add a new\nshmem_should_replace_page() check on the zone when about to move a page\nfrom swapcache to filecache (in swapin and swapoff cases), with\nshmem_replace_page() to allocate and substitute a suitable page (given\ngma500/gem.c\u0027s mapping_set_gfp_mask GFP_KERNEL | __GFP_DMA32).\n\nThis does involve a minor extension to mem_cgroup_replace_page_cache()\n(the page may or may not have already been charged); and I\u0027ve removed a\ncomment and call to mem_cgroup_uncharge_cache_page(), which in fact is\nalways a no-op while PageSwapCache.\n\nAlso removed optimization of an unlikely path in shmem_getpage_gfp(),\nnow that we need to check PageSwapCache more carefully (a racing caller\nmight already have made the copy).  And at one point shmem_unuse_inode()\nneeds to use the hitherto private page_swapcount(), to guard against\nracing with inode eviction.\n\nIt would make sense to extend shmem_should_replace_page(), to cover\ncpuset and NUMA mempolicy restrictions too, but set that aside for now:\nneeds a cleanup of shmem mempolicy handling, and more testing, and ought\nto handle swap faults in do_swap_page() as well as shmem.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Alan Cox \u003calan@lxorguk.ukuu.org.uk\u003e\nCc: Stephane Marchesin \u003cmarcheu@chromium.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Dave Airlie \u003cairlied@gmail.com\u003e\nCc: Daniel Vetter \u003cdaniel@ffwll.ch\u003e\nCc: Rob Clark \u003crob.clark@linaro.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e709ffd6169ccd259eb5874e853303e91e94e829",
      "tree": "796b56c2507b8581492da73e354d651c9dd7076b",
      "parents": [
        "edad9d2c337d43278a9d5aeb0ed531c2e838f8a6"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Tue May 29 15:06:18 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:19 2012 -0700"
      },
      "message": "mm: remove swap token code\n\nThe swap token code no longer fits in with the current VM model.  It\ndoes not play well with cgroups or the better NUMA placement code in\ndevelopment, since we have only one swap token globally.\n\nIt also has the potential to mess with scalability of the system, by\nincreasing the number of non-reclaimable pages on the active and\ninactive anon LRU lists.\n\nLast but not least, the swap token code has been broken for a year\nwithout complaints, as reported by Konstantin Khlebnikov.  This suggests\nwe no longer have much use for it.\n\nThe days of sub-1G memory systems with heavy use of swap are over.  If\nwe ever need thrashing reducing code in the future, we will have to\nimplement something that does scale.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Bob Picco \u003cbpicco@meloft.net\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": "38b5faf4b178d5279b1fca5d7dadc68881342660",
      "tree": "1a5d10ff709abcefa96034d3f89739be8d7ef0c2",
      "parents": [
        "c3ba9698152b17fdc2c7cd0f7cbeb571e3367e9d"
      ],
      "author": {
        "name": "Dan Magenheimer",
        "email": "dan.magenheimer@oracle.com",
        "time": "Mon Apr 09 17:08:06 2012 -0600"
      },
      "committer": {
        "name": "Konrad Rzeszutek Wilk",
        "email": "konrad.wilk@oracle.com",
        "time": "Tue May 15 11:33:58 2012 -0400"
      },
      "message": "mm: frontswap: core swap subsystem hooks and headers\n\nThis patch, 2of4, contains the changes to the core swap subsystem.\nThis includes:\n\n(1) makes available core swap data structures (swap_lock, swap_list and\nswap_info) that are needed by frontswap.c but we don\u0027t need to expose them\nto the dozens of files that include swap.h so we create a new swapfile.h\njust to extern-ify these and modify their declarations to non-static\n\n(2) adds frontswap-related elements to swap_info_struct.  Frontswap_map\npoints to vzalloc\u0027ed one-bit-per-swap-page metadata that indicates\nwhether the swap page is in frontswap or in the device and frontswap_pages\ncounts how many pages are in frontswap.\n\n(3) adds hooks in the swap subsystem and extends try_to_unuse so that\nfrontswap_shrink can do a \"partial swapoff\".\n\nNote that a failed frontswap_map allocation is safe... failure is noted\nby lack of \"FS\" in the subsequent printk.\n\n---\n\n[v14: rebase to 3.4-rc2]\n[v10: no change]\n[v9: akpm@linux-foundation.org: mark some statics __read_mostly]\n[v9: akpm@linux-foundation.org: add clarifying comments]\n[v9: akpm@linux-foundation.org: no need to loop repeating try_to_unuse]\n[v9: error27@gmail.com: remove superfluous check for NULL]\n[v8: rebase to 3.0-rc4]\n[v8: kamezawa.hiroyu@jp.fujitsu.com: change counter to atomic_t to avoid races]\n[v8: kamezawa.hiroyu@jp.fujitsu.com: comment to clarify informational counters]\n[v7: rebase to 3.0-rc3]\n[v7: JBeulich@novell.com: add new swap struct elements only if config\u0027d]\n[v6: rebase to 3.0-rc1]\n[v6: lliubbo@gmail.com: fix null pointer deref if vzalloc fails]\n[v6: konrad.wilk@oracl.com: various checks and code clarifications/comments]\n[v5: no change from v4]\n[v4: rebase to 2.6.39]\nSigned-off-by: Dan Magenheimer \u003cdan.magenheimer@oracle.com\u003e\nReviewed-by: Kamezawa Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Jan Beulich \u003cJBeulich@novell.com\u003e\nAcked-by: Seth Jennings \u003csjenning@linux.vnet.ibm.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@goop.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Nitin Gupta \u003cngupta@vflare.org\u003e\nCc: Matthew Wilcox \u003cmatthew@wil.cx\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Rik Riel \u003criel@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n[v11: Rebased, fixed mm/swapfile.c context change]\nSigned-off-by: Konrad Rzeszutek Wilk \u003ckonrad.wilk@oracle.com\u003e\n"
    },
    {
      "commit": "dac23b0d0513916498d40412818bd2c581b365f7",
      "tree": "e758624d444ab8d93f5f38cbcc34de5a8b77248d",
      "parents": [
        "6ede3d832aaa038e7465e677569f7acc96b4dcdf"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Thu Apr 05 14:25:16 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 05 15:25:51 2012 -0700"
      },
      "message": "memcg swap: use mem_cgroup_uncharge_swap fix\n\nAlthough mem_cgroup_uncharge_swap has an empty placeholder for\n!CONFIG_CGROUP_MEM_RES_CTLR_SWAP the definition is placed in the\nCONFIG_SWAP ifdef block so we are missing the same definition for\n!CONFIG_SWAP which implies !CONFIG_CGROUP_MEM_RES_CTLR_SWAP.\n\nThis has not been an issue before, because mem_cgroup_uncharge_swap was\nnot called from !CONFIG_SWAP context.  But Hugh Dickins has a cleanup\npatch to call __mem_cgroup_commit_charge_swapin which is defined also\nfor !CONFIG_SWAP.\n\nLet\u0027s move both the empty definition and declaration outside of the\nCONFIG_SWAP block to avoid the following compilation error:\n\n  mm/memcontrol.c: In function \u0027__mem_cgroup_commit_charge_swapin\u0027:\n  mm/memcontrol.c:2837: error: implicit declaration of function \u0027mem_cgroup_uncharge_swap\u0027\n\nif CONFIG_SWAP is disabled.\n\nReported-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d15cab975459fb6092eeba1be72c13621337784f",
      "tree": "5c1d8d18c65a34eb738c97d75f2c44becdff1de3",
      "parents": [
        "29fd66d289f2981e11c550f8b411a6d3d38be0cf"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 28 14:42:42 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 17:14:35 2012 -0700"
      },
      "message": "swapon: check validity of swap_flags\n\nMost system calls taking flags first check that the flags passed in are\nvalid, and that helps userspace to detect when new flags are supported.\n\nBut swapon never did so: start checking now, to help if we ever want to\nsupport more swap_flags in future.\n\nIt\u0027s difficult to get stray bits set in an int, and swapon is not widely\nused, so this is most unlikely to break any userspace; but we can just\nrevert if it turns out to do so.\n\nSigned-off-by: Hugh Dickins \u003chughd@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": "f0cb3c76ae1ced85f9034480b1b24cd96530ec78",
      "tree": "997ae67621f76b3b6bf588604f85738a8c97cbef",
      "parents": [
        "3268c63eded4612a3d07b56d1e02ce7731e6608e"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Wed Mar 21 16:34:06 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "mm: drain percpu lru add/rotate page-vectors on cpu hot-unplug\n\nThis cpu hotplug hook was accidentally removed in commit 00a62ce91e55\n(\"mm: fix Committed_AS underflow on large NR_CPUS environment\")\n\nThe visible effect of this accident: some pages are borrowed in per-cpu\npage-vectors.  Truncate can deal with it, but these pages cannot be\nreused while this cpu is offline.  So this is like a temporary memory\nleak.\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Eric B Munson \u003cebmunson@us.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "67f96aa252e606cdf6c3cf1032952ec207ec0cf0",
      "tree": "a5a4299dd32789831eda558b51c0120272846664",
      "parents": [
        "c38446cc65e1f2b3eb8630c53943b94c4f65f670"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Wed Mar 21 16:33:50 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:56 2012 -0700"
      },
      "message": "mm: make swapin readahead skip over holes\n\nEver since abandoning the virtual scan of processes, for scalability\nreasons, swap space has been a little more fragmented than before.  This\ncan lead to the situation where a large memory user is killed, swap space\nends up full of \"holes\" and swapin readahead is totally ineffective.\n\nOn my home system, after killing a leaky firefox it took over an hour to\npage just under 2GB of memory back in, slowing the virtual machines down\nto a crawl.\n\nThis patch makes swapin readahead simply skip over holes, instead of\nstopping at them.  This allows the system to swap things back in at rates\nof several MB/second, instead of a few hundred kB/second.\n\nThe checks done in valid_swaphandles are already done in\nread_swap_cache_async as well, allowing us to remove a fair amount of\ncode.\n\n[akpm@linux-foundation.org: fix it for page_cluster \u003e\u003d 32]\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@gmail.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Adrian Drzewiecki \u003cz@drze.net\u003e\nCc: Hugh Dickins \u003chughd@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": "245132643e1cfcd145bbc86a716c1818371fcb93",
      "tree": "e5bf3cb56efedb059b1a68fd8efd37482131783b",
      "parents": [
        "85046579bde15e532983438f86b36856e358f417"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Fri Jan 20 14:34:21 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:38:48 2012 -0800"
      },
      "message": "SHM_UNLOCK: fix Unevictable pages stranded after swap\n\nCommit cc39c6a9bbde (\"mm: account skipped entries to avoid looping in\nfind_get_pages\") correctly fixed an infinite loop; but left a problem\nthat find_get_pages() on shmem would return 0 (appearing to callers to\nmean end of tree) when it meets a run of nr_pages swap entries.\n\nThe only uses of find_get_pages() on shmem are via pagevec_lookup(),\ncalled from invalidate_mapping_pages(), and from shmctl SHM_UNLOCK\u0027s\nscan_mapping_unevictable_pages().  The first is already commented, and\nnot worth worrying about; but the second can leave pages on the\nUnevictable list after an unusual sequence of swapping and locking.\n\nFix that by using shmem_find_get_pages_and_swap() (then ignoring the\nswap) instead of pagevec_lookup().\n\nBut I don\u0027t want to contaminate vmscan.c with shmem internals, nor\nshmem.c with LRU locking.  So move scan_mapping_unevictable_pages() into\nshmem.c, renaming it shmem_unlock_mapping(); and rename\ncheck_move_unevictable_page() to check_move_unevictable_pages(), looping\ndown an array of pages, oftentimes under the same lock.\n\nLeave out the \"rotate unevictable list\" block: that\u0027s a leftover from\nwhen this was used for /proc/sys/vm/scan_unevictable_pages, whose flawed\nhandling involved looking at pages at tail of LRU.\n\nWas there significance to the sequence first ClearPageUnevictable, then\ntest page_evictable, then SetPageUnevictable here? I think not, we\u0027re\nunder LRU lock, and have no barriers between those.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e [back to 3.1 but will need respins]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ab8fabd46f811d5153d8a0cd2fac9a0d41fb593d",
      "tree": "0a6f7dcca59d22abe07973e3fafc41719ff3ad9d",
      "parents": [
        "25bd91bd27820d5971258cecd1c0e64b0e485144"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Tue Jan 10 15:07:42 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:43 2012 -0800"
      },
      "message": "mm: exclude reserved pages from dirtyable memory\n\nPer-zone dirty limits try to distribute page cache pages allocated for\nwriting across zones in proportion to the individual zone sizes, to reduce\nthe likelihood of reclaim having to write back individual pages from the\nLRU lists in order to make progress.\n\nThis patch:\n\nThe amount of dirtyable pages should not include the full number of free\npages: there is a number of reserved pages that the page allocator and\nkswapd always try to keep free.\n\nThe closer (reclaimable pages - dirty pages) is to the number of reserved\npages, the more likely it becomes for reclaim to run into dirty pages:\n\n       +----------+ ---\n       |   anon   |  |\n       +----------+  |\n       |          |  |\n       |          |  -- dirty limit new    -- flusher new\n       |   file   |  |                     |\n       |          |  |                     |\n       |          |  -- dirty limit old    -- flusher old\n       |          |                        |\n       +----------+                       --- reclaim\n       | reserved |\n       +----------+\n       |  kernel  |\n       +----------+\n\nThis patch introduces a per-zone dirty reserve that takes both the lowmem\nreserve as well as the high watermark of the zone into account, and a\nglobal sum of those per-zone values that is subtracted from the global\namount of dirtyable pages.  The lowmem reserve is unavailable to page\ncache allocations and kswapd tries to keep the high watermark free.  We\ndon\u0027t want to end up in a situation where reclaim has to clean pages in\norder to balance zones.\n\nNot treating reserved pages as dirtyable on a global level is only a\nconceptual fix.  In reality, dirty pages are not distributed equally\nacross zones and reclaim runs into dirty pages on a regular basis.\n\nBut it is important to get this right before tackling the problem on a\nper-zone level, where the distance between reclaim and the dirty pages is\nmostly much smaller in absolute numbers.\n\n[akpm@linux-foundation.org: fix highmem build]\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4356f21d09283dc6d39a6f7287a65ddab61e2808",
      "tree": "34822a1662ea83291455834556a4fb5bf98ecd72",
      "parents": [
        "b9e84ac1536d35aee03b2601f19694949f0bd506"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Mon Oct 31 17:06:47 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 31 17:30:44 2011 -0700"
      },
      "message": "mm: change isolate mode from #define to bitwise type\n\nChange ISOLATE_XXX macro with bitwise isolate_mode_t type.  Normally,\nmacro isn\u0027t recommended as it\u0027s type-unsafe and making debugging harder as\nsymbol cannot be passed throught to the debugger.\n\nQuote from Johannes\n\" Hmm, it would probably be cleaner to fully convert the isolation mode\ninto independent flags.  INACTIVE, ACTIVE, BOTH is currently a\ntri-state among flags, which is a bit ugly.\"\n\nThis patch moves isolate mode from swap.h to mmzone.h by memcontrol.h\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "185efc0f9a1f2d6ad6d4782c5d9e529f3290567f",
      "tree": "9330dac6b7f17fad7d99e444b3544210109e2d99",
      "parents": [
        "a4d3e9e76337059406fcf3ead288c0df22a790e9"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Wed Sep 14 16:21:58 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 14 18:09:38 2011 -0700"
      },
      "message": "memcg: Revert \"memcg: add memory.vmscan_stat\"\n\nRevert the post-3.0 commit 82f9d486e59f5 (\"memcg: add\nmemory.vmscan_stat\").\n\nThe implementation of per-memcg reclaim statistics violates how memcg\nhierarchies usually behave: hierarchically.\n\nThe reclaim statistics are accounted to child memcgs and the parent\nhitting the limit, but not to hierarchy levels in between.  Usually,\nhierarchical statistics are perfectly recursive, with each level\nrepresenting the sum of itself and all its children.\n\nSince this exports statistics to userspace, this may lead to confusion\nand problems with changing things after the release, so revert it now,\nwe can try again later.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Balbir Singh \u003cbsingharora@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": "60063497a95e716c9a689af3be2687d261f115b4",
      "tree": "6ce0d68db76982c53df46aee5f29f944ebf2c320",
      "parents": [
        "148817ba092f9f6edd35bad3c6c6b8e8f90fe2ed"
      ],
      "author": {
        "name": "Arun Sharma",
        "email": "asharma@fb.com",
        "time": "Tue Jul 26 16:09:06 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:47 2011 -0700"
      },
      "message": "atomic: use \u003clinux/atomic.h\u003e\n\nThis allows us to move duplicated code in \u003casm/atomic.h\u003e\n(atomic_inc_not_zero() for now) to \u003clinux/atomic.h\u003e\n\nSigned-off-by: Arun Sharma \u003casharma@fb.com\u003e\nReviewed-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nAcked-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "82f9d486e59f588c7d100865c36510644abda356",
      "tree": "266f3dcf4f57538196bddd77a129adfb2752335b",
      "parents": [
        "108b6a78463bb8c7163e4f9779f36ad8bbade334"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 26 16:08:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: add memory.vmscan_stat\n\nThe commit log of 0ae5e89c60c9 (\"memcg: count the soft_limit reclaim\nin...\") says it adds scanning stats to memory.stat file.  But it doesn\u0027t\nbecause we considered we needed to make a concensus for such new APIs.\n\nThis patch is a trial to add memory.scan_stat. This shows\n  - the number of scanned pages(total, anon, file)\n  - the number of rotated pages(total, anon, file)\n  - the number of freed pages(total, anon, file)\n  - the number of elaplsed time (including sleep/pause time)\n\n  for both of direct/soft reclaim.\n\nThe biggest difference with oringinal Ying\u0027s one is that this file\ncan be reset by some write, as\n\n  # echo 0 ...../memory.scan_stat\n\nExample of output is here. This is a result after make -j 6 kernel\nunder 300M limit.\n\n  [kamezawa@bluextal ~]$ cat /cgroup/memory/A/memory.scan_stat\n  [kamezawa@bluextal ~]$ cat /cgroup/memory/A/memory.vmscan_stat\n  scanned_pages_by_limit 9471864\n  scanned_anon_pages_by_limit 6640629\n  scanned_file_pages_by_limit 2831235\n  rotated_pages_by_limit 4243974\n  rotated_anon_pages_by_limit 3971968\n  rotated_file_pages_by_limit 272006\n  freed_pages_by_limit 2318492\n  freed_anon_pages_by_limit 962052\n  freed_file_pages_by_limit 1356440\n  elapsed_ns_by_limit 351386416101\n  scanned_pages_by_system 0\n  scanned_anon_pages_by_system 0\n  scanned_file_pages_by_system 0\n  rotated_pages_by_system 0\n  rotated_anon_pages_by_system 0\n  rotated_file_pages_by_system 0\n  freed_pages_by_system 0\n  freed_anon_pages_by_system 0\n  freed_file_pages_by_system 0\n  elapsed_ns_by_system 0\n  scanned_pages_by_limit_under_hierarchy 9471864\n  scanned_anon_pages_by_limit_under_hierarchy 6640629\n  scanned_file_pages_by_limit_under_hierarchy 2831235\n  rotated_pages_by_limit_under_hierarchy 4243974\n  rotated_anon_pages_by_limit_under_hierarchy 3971968\n  rotated_file_pages_by_limit_under_hierarchy 272006\n  freed_pages_by_limit_under_hierarchy 2318492\n  freed_anon_pages_by_limit_under_hierarchy 962052\n  freed_file_pages_by_limit_under_hierarchy 1356440\n  elapsed_ns_by_limit_under_hierarchy 351386416101\n  scanned_pages_by_system_under_hierarchy 0\n  scanned_anon_pages_by_system_under_hierarchy 0\n  scanned_file_pages_by_system_under_hierarchy 0\n  rotated_pages_by_system_under_hierarchy 0\n  rotated_anon_pages_by_system_under_hierarchy 0\n  rotated_file_pages_by_system_under_hierarchy 0\n  freed_pages_by_system_under_hierarchy 0\n  freed_anon_pages_by_system_under_hierarchy 0\n  freed_file_pages_by_system_under_hierarchy 0\n  elapsed_ns_by_system_under_hierarchy 0\n\ntotal_xxxx is for hierarchy management.\n\nThis will be useful for further memcg developments and need to be\ndevelopped before we do some complicated rework on LRU/softlimit\nmanagement.\n\nThis patch adds a new struct memcg_scanrecord into scan_control struct.\nsc-\u003enr_scanned at el is not designed for exporting information.  For\nexample, nr_scanned is reset frequentrly and incremented +2 at scanning\nmapped pages.\n\nTo avoid complexity, I added a new param in scan_control which is for\nexporting scanning score.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Andrew Bresticker \u003cabrestic@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": "1f4c025b5a5520fd2571244196b1b01ad96d18f6",
      "tree": "f2123a44c9e838eac7d08fe13443cfa04cc23f33",
      "parents": [
        "b830ac1d9a2262093bb0f3f6a2fd2a1c8278daf5"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 26 16:08:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:42 2011 -0700"
      },
      "message": "memcg: export memory cgroup\u0027s swappiness with mem_cgroup_swappiness()\n\nEach memory cgroup has a \u0027swappiness\u0027 value which can be accessed by\nget_swappiness(memcg).  The major user is try_to_free_mem_cgroup_pages()\nand swappiness is passed by argument.  It\u0027s propagated by scan_control.\n\nget_swappiness() is a static function but some planned updates will need\nto get swappiness from files other than memcontrol.c This patch exports\nget_swappiness() as mem_cgroup_swappiness().  With this, we can remove the\nargument of swapiness from try_to_free...  and drop swappiness from\nscan_control.  only memcg uses it.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "072441e21ddcd1140606b7d4ef6eab579a86b0b3",
      "tree": "6f059ad83c09dfbeb1def29e805839db3e5bf85f",
      "parents": [
        "5b8ba10198a109f8a02380648c5d29000caa9c55"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jun 27 16:18:02 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:12 2011 -0700"
      },
      "message": "mm: move shmem prototypes to shmem_fs.h\n\nBefore adding any more global entry points into shmem.c, gather such\nprototypes into shmem_fs.h.  Remove mm\u0027s own declarations from swap.h,\nbut for now leave the ones in mm.h: because shmem_file_setup() and\nshmem_zero_setup() are called from various places, and we should not\nforce other subsystems to update immediately.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a433658c30974fc87ba3ff52d7e4e6299762aa3d",
      "tree": "8df65e22af520ca5c020281763e6874d0bb51bc5",
      "parents": [
        "e1bbd19bc4afef7adb80cca163800391c4f5773d"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:13 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:03:59 2011 -0700"
      },
      "message": "vmscan,memcg: memcg aware swap token\n\nCurrently, memcg reclaim can disable swap token even if the swap token mm\ndoesn\u0027t belong in its memory cgroup.  It\u0027s slightly risky.  If an admin\ncreates very small mem-cgroup and silly guy runs contentious heavy memory\npressure workload, every tasks are going to lose swap token and then\nsystem may become unresponsive.  That\u0027s bad.\n\nThis patch adds \u0027memcg\u0027 parameter into disable_swap_token().  and if the\nparameter doesn\u0027t match swap token, VM doesn\u0027t disable it.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\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": "0ae5e89c60c9eb87da36a2614836bc434b0ec2ad",
      "tree": "0d509fd83ac7e7d2f52dfcbba769c43aeeb68b5f",
      "parents": [
        "f042e707ee671e4beb5389abeb9a1819a2cf5532"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Thu May 26 16:25:25 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 26 17:12:35 2011 -0700"
      },
      "message": "memcg: count the soft_limit reclaim in global background reclaim\n\nThe global kswapd scans per-zone LRU and reclaims pages regardless of the\ncgroup. It breaks memory isolation since one cgroup can end up reclaiming\npages from another cgroup. Instead we should rely on memcg-aware target\nreclaim including per-memcg kswapd and soft_limit hierarchical reclaim under\nmemory pressure.\n\nIn the global background reclaim, we do soft reclaim before scanning the\nper-zone LRU. However, the return value is ignored. This patch is the first\nstep to skip shrink_zone() if soft_limit reclaim does enough work.\n\nThis is part of the effort which tries to reduce reclaiming pages in global\nLRU in memcg. The per-memcg background reclaim patchset further enhances the\nper-cgroup targetting reclaim, which I should have V4 posted shortly.\n\nTry running multiple memory intensive workloads within seperate memcgs. Watch\nthe counters of soft_steal in memory.stat.\n\n  $ cat /dev/cgroup/A/memory.stat | grep \u0027soft\u0027\n  soft_steal 240000\n  soft_scan 240000\n  total_soft_steal 240000\n  total_soft_scan 240000\n\nThis patch:\n\nIn the global background reclaim, we do soft reclaim before scanning the\nper-zone LRU.  However, the return value is ignored.\n\nWe would like to skip shrink_zone() if soft_limit reclaim does enough\nwork.  Also, we need to make the memory pressure balanced across per-memcg\nzones, like the logic vm-core.  This patch is the first step where we\nstart with counting the nr_scanned and nr_reclaimed from soft_limit\nreclaim into the global scan_control.\n\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nAcked-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": "6c5103890057b1bb781b26b7aae38d33e4c517d8",
      "tree": "e6e57961dcddcb5841acb34956e70b9dc696a880",
      "parents": [
        "3dab04e6978e358ad2307bca563fabd6c5d2c58b",
        "9d2e157d970a73b3f270b631828e03eb452d525e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 10:16:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 10:16:26 2011 -0700"
      },
      "message": "Merge branch \u0027for-2.6.39/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.39/core\u0027 of git://git.kernel.dk/linux-2.6-block: (65 commits)\n  Documentation/iostats.txt: bit-size reference etc.\n  cfq-iosched: removing unnecessary think time checking\n  cfq-iosched: Don\u0027t clear queue stats when preempt.\n  blk-throttle: Reset group slice when limits are changed\n  blk-cgroup: Only give unaccounted_time under debug\n  cfq-iosched: Don\u0027t set active queue in preempt\n  block: fix non-atomic access to genhd inflight structures\n  block: attempt to merge with existing requests on plug flush\n  block: NULL dereference on error path in __blkdev_get()\n  cfq-iosched: Don\u0027t update group weights when on service tree\n  fs: assign sb-\u003es_bdi to default_backing_dev_info if the bdi is going away\n  block: Require subsystems to explicitly allocate bio_set integrity mempool\n  jbd2: finish conversion from WRITE_SYNC_PLUG to WRITE_SYNC and explicit plugging\n  jbd: finish conversion from WRITE_SYNC_PLUG to WRITE_SYNC and explicit plugging\n  fs: make fsync_buffers_list() plug\n  mm: make generic_writepages() use plugging\n  blk-cgroup: Add unaccounted time to timeslice_used.\n  block: fixup plugging stubs for !CONFIG_BLOCK\n  block: remove obsolete comments for blkdev_issue_zeroout.\n  blktrace: Use rq-\u003ecmd_flags directly in blk_add_trace_rq.\n  ...\n\nFix up conflicts in fs/{aio.c,super.c}\n"
    },
    {
      "commit": "8afdcece4911e51cfff2b50a269418914cab8a3f",
      "tree": "fcfb966822f0f6c128c754f3876a80106c9cc654",
      "parents": [
        "7571966189e54adf0a8bc1384d6f13f44052ba63"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Mar 22 16:33:04 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:04 2011 -0700"
      },
      "message": "mm: vmscan: kswapd should not free an excessive number of pages when balancing small zones\n\nWhen reclaiming for order-0 pages, kswapd requires that all zones be\nbalanced.  Each cycle through balance_pgdat() does background ageing on\nall zones if necessary and applies equal pressure on the inactive zone\nunless a lot of pages are free already.\n\nA \"lot of free pages\" is defined as a \"balance gap\" above the high\nwatermark which is currently 7*high_watermark.  Historically this was\nreasonable as min_free_kbytes was small.  However, on systems using huge\npages, it is recommended that min_free_kbytes is higher and it is tuned\nwith hugeadm --set-recommended-min_free_kbytes.  With the introduction of\ntransparent huge page support, this recommended value is also applied.  On\nX86-64 with 4G of memory, min_free_kbytes becomes 67584 so one would\nexpect around 68M of memory to be free.  The Normal zone is approximately\n35000 pages so under even normal memory pressure such as copying a large\nfile, it gets exhausted quickly.  As it is getting exhausted, kswapd\napplies pressure equally to all zones, including the DMA32 zone.  DMA32 is\napproximately 700,000 pages with a high watermark of around 23,000 pages.\nIn this situation, kswapd will reclaim around (23000*8 where 8 is the high\nwatermark + balance gap of 7 * high watermark) pages or 718M of pages\nbefore the zone is ignored.  What the user sees is that free memory far\nhigher than it should be.\n\nTo avoid an excessive number of pages being reclaimed from the larger\nzones, explicitely defines the \"balance gap\" to be either 1% of the zone\nor the low watermark for the zone, whichever is smaller.  While kswapd\nwill check all zones to apply pressure, it\u0027ll ignore zones that meets the\n(high_wmark + balance_gap) watermark.\n\nTo test this, 80G were copied from a partition and the amount of memory\nbeing used was recorded.  A comparison of a patch and unpatched kernel can\nbe seen at\nhttp://www.csn.ul.ie/~mel/postings/minfree-20110222/memory-usage-hydra.ps\nand shows that kswapd is not reclaiming as much memory with the patch\napplied.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: \"Chen, Tim C\" \u003ctim.c.chen@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": "315601809d124d046abd6c3ffa346d0dbd7aa29d",
      "tree": "be48e1a0053e3ada3a5c25561923f1b87f8e1719",
      "parents": [
        "481b4bb5e370aa69c1dc276bd08871ec01b41d2a"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Mar 22 16:32:52 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:03 2011 -0700"
      },
      "message": "mm: deactivate invalidated pages\n\nRecently, there are reported problem about thrashing.\n(http://marc.info/?l\u003drsync\u0026m\u003d128885034930933\u0026w\u003d2) It happens by backup\nworkloads(ex, nightly rsync).  That\u0027s because the workload makes just\nuse-once pages and touches pages twice.  It promotes the page into active\nlist so that it results in working set page eviction.\n\nSome app developer want to support POSIX_FADV_NOREUSE.  But other OSes\ndon\u0027t support it, either.\n(http://marc.info/?l\u003dlinux-mm\u0026m\u003d128928979512086\u0026w\u003d2)\n\nBy other approach, app developers use POSIX_FADV_DONTNEED.  But it has a\nproblem.  If kernel meets page is writing during invalidate_mapping_pages,\nit can\u0027t work.  It makes for application programmer to use it since they\nalways have to sync data before calling fadivse(..POSIX_FADV_DONTNEED) to\nmake sure the pages could be discardable.  At last, they can\u0027t use\ndeferred write of kernel so that they could see performance loss.\n(http://insights.oetiker.ch/linux/fadvise.html)\n\nIn fact, invalidation is very big hint to reclaimer.  It means we don\u0027t\nuse the page any more.  So let\u0027s move the writing page into inactive\nlist\u0027s head if we can\u0027t truncate it right now.\n\nWhy I move page to head of lru on this patch, Dirty/Writeback page would\nbe flushed sooner or later.  It can prevent writeout of pageout which is\nless effective than flusher\u0027s writeout.\n\nOriginally, I reused lru_demote of Peter with some change so added his\nSigned-off-by.\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReported-by: Ben Gamari \u003cbgamari.foss@gmail.com\u003e\nSigned-off-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7eaceaccab5f40bbfda044629a6298616aeaed50",
      "tree": "33954d12f63e25a47eb6d86ef3d3d0a5e62bf752",
      "parents": [
        "73c101011926c5832e6e141682180c4debe2cf45"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "message": "block: remove per-queue plugging\n\nCode has been converted over to the new explicit on-stack plugging,\nand delay users have been converted to use the new API for that.\nSo lets kill off the old plugging along with aops-\u003esync_page().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "71e3aac0724ffe8918992d76acfe3aad7d8724a5",
      "tree": "4ff96e1fc3e53bc9d25b859bf7e5bdbab8f1b25a",
      "parents": [
        "5c3240d92e29ae7bfb9cb58a9b37e80ab40894ff"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:52 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:42 2011 -0800"
      },
      "message": "thp: transparent hugepage core\n\nLately I\u0027ve been working to make KVM use hugepages transparently without\nthe usual restrictions of hugetlbfs.  Some of the restrictions I\u0027d like to\nsee removed:\n\n1) hugepages have to be swappable or the guest physical memory remains\n   locked in RAM and can\u0027t be paged out to swap\n\n2) if a hugepage allocation fails, regular pages should be allocated\n   instead and mixed in the same vma without any failure and without\n   userland noticing\n\n3) if some task quits and more hugepages become available in the\n   buddy, guest physical memory backed by regular pages should be\n   relocated on hugepages automatically in regions under\n   madvise(MADV_HUGEPAGE) (ideally event driven by waking up the\n   kernel deamon if the order\u003dHPAGE_PMD_SHIFT-PAGE_SHIFT list becomes\n   not null)\n\n4) avoidance of reservation and maximization of use of hugepages whenever\n   possible. Reservation (needed to avoid runtime fatal faliures) may be ok for\n   1 machine with 1 database with 1 database cache with 1 database cache size\n   known at boot time. It\u0027s definitely not feasible with a virtualization\n   hypervisor usage like RHEV-H that runs an unknown number of virtual machines\n   with an unknown size of each virtual machine with an unknown amount of\n   pagecache that could be potentially useful in the host for guest not using\n   O_DIRECT (aka cache\u003doff).\n\nhugepages in the virtualization hypervisor (and also in the guest!) are\nmuch more important than in a regular host not using virtualization,\nbecasue with NPT/EPT they decrease the tlb-miss cacheline accesses from 24\nto 19 in case only the hypervisor uses transparent hugepages, and they\ndecrease the tlb-miss cacheline accesses from 19 to 15 in case both the\nlinux hypervisor and the linux guest both uses this patch (though the\nguest will limit the addition speedup to anonymous regions only for\nnow...).  Even more important is that the tlb miss handler is much slower\non a NPT/EPT guest than for a regular shadow paging or no-virtualization\nscenario.  So maximizing the amount of virtual memory cached by the TLB\npays off significantly more with NPT/EPT than without (even if there would\nbe no significant speedup in the tlb-miss runtime).\n\nThe first (and more tedious) part of this work requires allowing the VM to\nhandle anonymous hugepages mixed with regular pages transparently on\nregular anonymous vmas.  This is what this patch tries to achieve in the\nleast intrusive possible way.  We want hugepages and hugetlb to be used in\na way so that all applications can benefit without changes (as usual we\nleverage the KVM virtualization design: by improving the Linux VM at\nlarge, KVM gets the performance boost too).\n\nThe most important design choice is: always fallback to 4k allocation if\nthe hugepage allocation fails!  This is the _very_ opposite of some large\npagecache patches that failed with -EIO back then if a 64k (or similar)\nallocation failed...\n\nSecond important decision (to reduce the impact of the feature on the\nexisting pagetable handling code) is that at any time we can split an\nhugepage into 512 regular pages and it has to be done with an operation\nthat can\u0027t fail.  This way the reliability of the swapping isn\u0027t decreased\n(no need to allocate memory when we are short on memory to swap) and it\u0027s\ntrivial to plug a split_huge_page* one-liner where needed without\npolluting the VM.  Over time we can teach mprotect, mremap and friends to\nhandle pmd_trans_huge natively without calling split_huge_page*.  The fact\nit can\u0027t fail isn\u0027t just for swap: if split_huge_page would return -ENOMEM\n(instead of the current void) we\u0027d need to rollback the mprotect from the\nmiddle of it (ideally including undoing the split_vma) which would be a\nbig change and in the very wrong direction (it\u0027d likely be simpler not to\ncall split_huge_page at all and to teach mprotect and friends to handle\nhugepages instead of rolling them back from the middle).  In short the\nvery value of split_huge_page is that it can\u0027t fail.\n\nThe collapsing and madvise(MADV_HUGEPAGE) part will remain separated and\nincremental and it\u0027ll just be an \"harmless\" addition later if this initial\npart is agreed upon.  It also should be noted that locking-wise replacing\nregular pages with hugepages is going to be very easy if compared to what\nI\u0027m doing below in split_huge_page, as it will only happen when\npage_count(page) matches page_mapcount(page) if we can take the PG_lock\nand mmap_sem in write mode.  collapse_huge_page will be a \"best effort\"\nthat (unlike split_huge_page) can fail at the minimal sign of trouble and\nwe can try again later.  collapse_huge_page will be similar to how KSM\nworks and the madvise(MADV_HUGEPAGE) will work similar to\nmadvise(MADV_MERGEABLE).\n\nThe default I like is that transparent hugepages are used at page fault\ntime.  This can be changed with\n/sys/kernel/mm/transparent_hugepage/enabled.  The control knob can be set\nto three values \"always\", \"madvise\", \"never\" which mean respectively that\nhugepages are always used, or only inside madvise(MADV_HUGEPAGE) regions,\nor never used.  /sys/kernel/mm/transparent_hugepage/defrag instead\ncontrols if the hugepage allocation should defrag memory aggressively\n\"always\", only inside \"madvise\" regions, or \"never\".\n\nThe pmd_trans_splitting/pmd_trans_huge locking is very solid.  The\nput_page (from get_user_page users that can\u0027t use mmu notifier like\nO_DIRECT) that runs against a __split_huge_page_refcount instead was a\npain to serialize in a way that would result always in a coherent page\ncount for both tail and head.  I think my locking solution with a\ncompound_lock taken only after the page_first is valid and is still a\nPageHead should be safe but it surely needs review from SMP race point of\nview.  In short there is no current existing way to serialize the O_DIRECT\nfinal put_page against split_huge_page_refcount so I had to invent a new\none (O_DIRECT loses knowledge on the mapping status by the time gup_fast\nreturns so...).  And I didn\u0027t want to impact all gup/gup_fast users for\nnow, maybe if we change the gup interface substantially we can avoid this\nlocking, I admit I didn\u0027t think too much about it because changing the gup\nunpinning interface would be invasive.\n\nIf we ignored O_DIRECT we could stick to the existing compound refcounting\ncode, by simply adding a get_user_pages_fast_flags(foll_flags) where KVM\n(and any other mmu notifier user) would call it without FOLL_GET (and if\nFOLL_GET isn\u0027t set we\u0027d just BUG_ON if nobody registered itself in the\ncurrent task mmu notifier list yet).  But O_DIRECT is fundamental for\ndecent performance of virtualized I/O on fast storage so we can\u0027t avoid it\nto solve the race of put_page against split_huge_page_refcount to achieve\na complete hugepage feature for KVM.\n\nSwap and oom works fine (well just like with regular pages ;).  MMU\nnotifier is handled transparently too, with the exception of the young bit\non the pmd, that didn\u0027t have a range check but I think KVM will be fine\nbecause the whole point of hugepages is that EPT/NPT will also use a huge\npmd when they notice gup returns pages with PageCompound set, so they\nwon\u0027t care of a range and there\u0027s just the pmd young bit to check in that\ncase.\n\nNOTE: in some cases if the L2 cache is small, this may slowdown and waste\nmemory during COWs because 4M of memory are accessed in a single fault\ninstead of 8k (the payoff is that after COW the program can run faster).\nSo we might want to switch the copy_huge_page (and clear_huge_page too) to\nnot temporal stores.  I also extensively researched ways to avoid this\ncache trashing with a full prefault logic that would cow in 8k/16k/32k/64k\nup to 1M (I can send those patches that fully implemented prefault) but I\nconcluded they\u0027re not worth it and they add an huge additional complexity\nand they remove all tlb benefits until the full hugepage has been faulted\nin, to save a little bit of memory and some cache during app startup, but\nthey still don\u0027t improve substantially the cache-trashing during startup\nif the prefault happens in \u003e4k chunks.  One reason is that those 4k pte\nentries copied are still mapped on a perfectly cache-colored hugepage, so\nthe trashing is the worst one can generate in those copies (cow of 4k page\ncopies aren\u0027t so well colored so they trashes less, but again this results\nin software running faster after the page fault).  Those prefault patches\nallowed things like a pte where post-cow pages were local 4k regular anon\npages and the not-yet-cowed pte entries were pointing in the middle of\nsome hugepage mapped read-only.  If it doesn\u0027t payoff substantially with\ntodays hardware it will payoff even less in the future with larger l2\ncaches, and the prefault logic would blot the VM a lot.  If one is\nemebdded transparent_hugepage can be disabled during boot with sysfs or\nwith the boot commandline parameter transparent_hugepage\u003d0 (or\ntransparent_hugepage\u003d2 to restrict hugepages inside madvise regions) that\nwill ensure not a single hugepage is allocated at boot time.  It is simple\nenough to just disable transparent hugepage globally and let transparent\nhugepages be allocated selectively by applications in the MADV_HUGEPAGE\nregion (both at page fault time, and if enabled with the\ncollapse_huge_page too through the kernel daemon).\n\nThis patch supports only hugepages mapped in the pmd, archs that have\nsmaller hugepages will not fit in this patch alone.  Also some archs like\npower have certain tlb limits that prevents mixing different page size in\nthe same regions so they will not fit in this framework that requires\n\"graceful fallback\" to basic PAGE_SIZE in case of physical memory\nfragmentation.  hugetlbfs remains a perfect fit for those because its\nsoftware limits happen to match the hardware limits.  hugetlbfs also\nremains a perfect fit for hugepage sizes like 1GByte that cannot be hoped\nto be found not fragmented after a certain system uptime and that would be\nvery expensive to defragment with relocation, so requiring reservation.\nhugetlbfs is the \"reservation way\", the point of transparent hugepages is\nnot to have any reservation at all and maximizing the use of cache and\nhugepages at all times automatically.\n\nSome performance result:\n\nvmx andrea # LD_PRELOAD\u003d/usr/lib64/libhugetlbfs.so HUGETLB_MORECORE\u003dyes HUGETLB_PATH\u003d/mnt/huge/ ./largep\nages3\nmemset page fault 1566023\nmemset tlb miss 453854\nmemset second tlb miss 453321\nrandom access tlb miss 41635\nrandom access second tlb miss 41658\nvmx andrea # LD_PRELOAD\u003d/usr/lib64/libhugetlbfs.so HUGETLB_MORECORE\u003dyes HUGETLB_PATH\u003d/mnt/huge/ ./largepages3\nmemset page fault 1566471\nmemset tlb miss 453375\nmemset second tlb miss 453320\nrandom access tlb miss 41636\nrandom access second tlb miss 41637\nvmx andrea # ./largepages3\nmemset page fault 1566642\nmemset tlb miss 453417\nmemset second tlb miss 453313\nrandom access tlb miss 41630\nrandom access second tlb miss 41647\nvmx andrea # ./largepages3\nmemset page fault 1566872\nmemset tlb miss 453418\nmemset second tlb miss 453315\nrandom access tlb miss 41618\nrandom access second tlb miss 41659\nvmx andrea # echo 0 \u003e /proc/sys/vm/transparent_hugepage\nvmx andrea # ./largepages3\nmemset page fault 2182476\nmemset tlb miss 460305\nmemset second tlb miss 460179\nrandom access tlb miss 44483\nrandom access second tlb miss 44186\nvmx andrea # ./largepages3\nmemset page fault 2182791\nmemset tlb miss 460742\nmemset second tlb miss 459962\nrandom access tlb miss 43981\nrandom access second tlb miss 43988\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n#include \u003cstdio.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cstring.h\u003e\n#include \u003csys/time.h\u003e\n\n#define SIZE (3UL*1024*1024*1024)\n\nint main()\n{\n\tchar *p \u003d malloc(SIZE), *p2;\n\tstruct timeval before, after;\n\n\tgettimeofday(\u0026before, NULL);\n\tmemset(p, 0, SIZE);\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"memset page fault %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tmemset(p, 0, SIZE);\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"memset tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tmemset(p, 0, SIZE);\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"memset second tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tfor (p2 \u003d p; p2 \u003c p+SIZE; p2 +\u003d 4096)\n\t\t*p2 \u003d 0;\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"random access tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tfor (p2 \u003d p; p2 \u003c p+SIZE; p2 +\u003d 4096)\n\t\t*p2 \u003d 0;\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"random access second tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\treturn 0;\n}\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-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": "e4455abb50a19562dbfdc51a8424fda9b588bd6d",
      "tree": "add38aec00027e9a115778425a41d3d075a9ced6",
      "parents": [
        "f19e77a3dc884510dba740caa6dee126b7d40156"
      ],
      "author": {
        "name": "Thadeu Lima de Souza Cascardo",
        "email": "cascardo@holoscopio.com",
        "time": "Tue Oct 26 14:21:28 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:05 2010 -0700"
      },
      "message": "mm: only build per-node scan_unevictable functions when NUMA is enabled\n\nNon-NUMA systems do never create these files anyway, since they are only\ncreated by driver subsystem when NUMA is configured.\n\n[akpm@linux-foundation.org: cleanup]\nSigned-off-by: Thadeu Lima de Souza Cascardo \u003ccascardo@holoscopio.com\u003e\nReviewed-by: 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": "3399446632739fcd05fd8b272b476a69c6e6d14a",
      "tree": "986d5b880aa69a16c8f3a6bded68cb50f9418d29",
      "parents": [
        "8f2ae0faa3a119158c4dcfe89926d6fad5f5332c"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Sep 09 16:38:11 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 09 18:57:25 2010 -0700"
      },
      "message": "swap: discard while swapping only if SWAP_FLAG_DISCARD\n\nTests with recent firmware on Intel X25-M 80GB and OCZ Vertex 60GB SSDs\nshow a shift since I last tested in December: in part because of firmware\nupdates, in part because of the necessary move from barriers to awaiting\ncompletion at the block layer.  While discard at swapon still shows as\nslightly beneficial on both, discarding 1MB swap cluster when allocating\nis now disadvanteous: adds 25% overhead on Intel, adds 230% on OCZ (YMMV).\n\nSurrender: discard as presently implemented is more hindrance than help\nfor swap; but might prove useful on other devices, or with improvements.\nSo continue to do the discard at swapon, but make discard while swapping\nconditional on a SWAP_FLAG_DISCARD to sys_swapon() (which has been using\nonly the lower 16 bits of int flags).\n\nWe can add a --discard or -d to swapon(8), and a \"discard\" to swap in\n/etc/fstab: matching the mount option for btrfs, ext4, fat, gfs2, nilfs2.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Nigel Cunningham \u003cnigel@tuxonice.net\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@hansenpartnership.com\u003e\nCc: \"Martin K. Petersen\" \u003cmartin.petersen@oracle.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": "910321ea817a202ff70fac666e37e2c8e2f88823",
      "tree": "aaead29e7797986e2b804746b565bb5d05117c54",
      "parents": [
        "ac8456d6f9a3011c824176bd6084d39e5f70a382"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Sep 09 16:38:07 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 09 18:57:25 2010 -0700"
      },
      "message": "swap: revert special hibernation allocation\n\nPlease revert 2.6.36-rc commit d2997b1042ec150616c1963b5e5e919ffd0b0ebf\n\"hibernation: freeze swap at hibernation\".  It complicated matters by\nadding a second swap allocation path, just for hibernation; without in any\nway fixing the issue that it was intended to address - page reclaim after\nfixing the hibernation image might free swap from a page already imaged as\nswapcache, letting its swap be reallocated to store a different page of\nthe image: resulting in data corruption if the imaged page were freed as\nclean then swapped back in.  Pages freed to si-\u003eswap_map were still in\ndanger of being reallocated by the alternative allocation path.\n\nI guess it inadvertently fixed slow SSD swap allocation for hibernation,\nas reported by Nigel Cunningham: by missing out the discards that occur on\nthe usual swap allocation path; but that was unintentional, and needs a\nseparate fix.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nCc: Ondrej Zary \u003clinux@rainbow-software.org\u003e\nCc: Andrea Gelmini \u003candrea.gelmini@gmail.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Nigel Cunningham \u003cnigel@tuxonice.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "14fec79680f7cc4617d6ba69324e63d4a732986c",
      "tree": "f8a9b627a03d04ec7c76fb67f8ea66c81c57a92f",
      "parents": [
        "da280d636b83f0f5d92921c99ef5c7d7c3e751cc"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Aug 10 18:03:05 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:19 2010 -0700"
      },
      "message": "memcg: mem_cgroup_shrink_node_zone() doesn\u0027t need sc.nodemask\n\nCurrently mem_cgroup_shrink_node_zone() call shrink_zone() directly.  thus\nit doesn\u0027t need to initialize sc.nodemask because shrink_zone() doesn\u0027t\nuse it at all.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Nishimura Daisuke \u003cd-nishimura@mtf.biglobe.ne.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d2997b1042ec150616c1963b5e5e919ffd0b0ebf",
      "tree": "c970746ad3d5c3e0ccbd1695d07144dbe4534ec4",
      "parents": [
        "966cca029f739716fbcc8068b8c6dfe381f86fc3"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Aug 09 17:20:11 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:45:04 2010 -0700"
      },
      "message": "hibernation: freeze swap at hibernation\n\nWhen taking a memory snapshot in hibernate_snapshot(), all (directly\ncalled) memory allocations use GFP_ATOMIC.  Hence swap misusage during\nhibernation never occurs.\n\nBut from a pessimistic point of view, there is no guarantee that no page\nallcation has __GFP_WAIT.  It is better to have a global indication \"we\nenter hibernation, don\u0027t use swap!\".\n\nThis patch tries to freeze new-swap-allocation during hibernation.  (All\nuser processes are frozenm so swapin is not a concern).\n\nThis way, no updates will happen to swap_map[] between\nhibernate_snapshot() and save_image().  Swap is thawed when swsusp_free()\nis called.  We can be assured that swap corruption will not occur.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ondrej Zary \u003clinux@rainbow-software.org\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "87946a72283be3de936adc754b7007df7d3e6aeb",
      "tree": "0593c87ba36bae13d6a6d5dda65ebb41354954f8",
      "parents": [
        "90254a65833b67502d14736410b3857a15535c67"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed May 26 14:42:39 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:43 2010 -0700"
      },
      "message": "memcg: move charge of file pages\n\nThis patch adds support for moving charge of file pages, which include\nnormal file, tmpfs file and swaps of tmpfs file.  It\u0027s enabled by setting\nbit 1 of \u003ctarget cgroup\u003e/memory.move_charge_at_immigrate.\n\nUnlike the case of anonymous pages, file pages(and swaps) in the range\nmmapped by the task will be moved even if the task hasn\u0027t done page fault,\ni.e.  they might not be the task\u0027s \"RSS\", but other task\u0027s \"RSS\" that maps\nthe same file.  And mapcount of the page is ignored(the page can be moved\neven if page_mapcount(page) \u003e 1).  So, conditions that the page/swap\nshould be met to be moved is that it must be in the range mmapped by the\ntarget task and it must be charged to the old cgroup.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[akpm@linux-foundation.org: fix warning]\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "748446bb6b5a9390b546af38ec899c868a9dbcf0",
      "tree": "4c27d0805a5e094b39ff938ad60dd270b953a79f",
      "parents": [
        "c175a0ce7584e5b498fff8cbdb9aa7912aa9fbba"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon May 24 14:32:27 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:59 2010 -0700"
      },
      "message": "mm: compaction: memory compaction core\n\nThis patch is the core of a mechanism which compacts memory in a zone by\nrelocating movable pages towards the end of the zone.\n\nA single compaction run involves a migration scanner and a free scanner.\nBoth scanners operate on pageblock-sized areas in the zone.  The migration\nscanner starts at the bottom of the zone and searches for all movable\npages within each area, isolating them onto a private list called\nmigratelist.  The free scanner starts at the top of the zone and searches\nfor suitable areas and consumes the free pages within making them\navailable for the migration scanner.  The pages isolated for migration are\nthen migrated to the newly isolated free pages.\n\n[aarcange@redhat.com: Fix unsafe optimisation]\n[mel@csn.ul.ie: do not schedule work on other CPUs for compaction]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "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": "e9d6c157385e4efa61cb8293e425c9d8beba70d3",
      "tree": "fca2452b46328c9005b8a4043a22b7b1b4d47d0c",
      "parents": [
        "1f0a738868cbfe20ae53a00b7c302c04ef7ab8fc"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon May 24 14:31:48 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:56 2010 -0700"
      },
      "message": "tmpfs: insert tmpfs cache pages to inactive list at first\n\nShaohua Li reported parallel file copy on tmpfs can lead to OOM killer.\nThis is regression of caused by commit 9ff473b9a7 (\"vmscan: evict\nstreaming IO first\").  Wow, It is 2 years old patch!\n\nCurrently, tmpfs file cache is inserted active list at first.  This means\nthat the insertion doesn\u0027t only increase numbers of pages in anon LRU, but\nit also reduces anon scanning ratio.  Therefore, vmscan will get totally\nconfused.  It scans almost only file LRU even though the system has plenty\nunused tmpfs pages.\n\nHistorically, lru_cache_add_active_anon() was used for two reasons.\n1) Intend to priotize shmem page rather than regular file cache.\n2) Intend to avoid reclaim priority inversion of used once pages.\n\nBut we\u0027ve lost both motivation because (1) Now we have separate anon and\nfile LRU list.  then, to insert active list doesn\u0027t help such priotize.\n(2) In past, one pte access bit will cause page activation.  then to\ninsert inactive list with pte access bit mean higher priority than to\ninsert active list.  Its priority inversion may lead to uninteded lru\nchun.  but it was already solved by commit 645747462 (vmscan: detect\nmapped file pages used only once).  (Thanks Hannes, you are great!)\n\nThus, now we can use lru_cache_add_anon() instead.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReported-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Henrique de Moraes Holschuh \u003chmh@hmh.eng.br\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": "b27256439568950f30864ccecaeb6dfb588089d5",
      "tree": "03aaf3a415b65d5f8aa4eefb06f4cddaeb00f4b5",
      "parents": [
        "f4a68b9388c7f647ba2fd43faf69cad26ca03206"
      ],
      "author": {
        "name": "Nitin Gupta",
        "email": "ngupta@vflare.org",
        "time": "Mon May 17 11:02:42 2010 +0530"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Tue May 18 15:07:52 2010 -0700"
      },
      "message": "swap: Add flag to identify block swap devices\n\nAdded SWP_BLKDEV flag to distinguish block and regular file backed\nswap devices. We could also check if a swap is entire block device,\nrather than a file, by:\nS_ISBLK(swap_info_struct-\u003eswap_file-\u003ef_mapping-\u003ehost-\u003ei_mode)\nbut, I think, simply checking this flag is more convenient.\n\nSigned-off-by: Nitin Gupta \u003cngupta@vflare.org\u003e\nAcked-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nAcked-by: Nigel Cunningham \u003cnigel@tuxonice.net\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "024914477e15ef8b17f271ec47f1bb8a589f0806",
      "tree": "9a6a8b4224c94fcdd1b8c3127b301ee3537f8cc2",
      "parents": [
        "8033b97c9b5ef063e3f4bf2efe1cd0a22093aaff"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Mar 10 15:22:17 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 12 15:52:36 2010 -0800"
      },
      "message": "memcg: move charges of anonymous swap\n\nThis patch is another core part of this move-charge-at-task-migration\nfeature.  It enables moving charges of anonymous swaps.\n\nTo move the charge of swap, we need to exchange swap_cgroup\u0027s record.\n\nIn current implementation, swap_cgroup\u0027s record is protected by:\n\n  - page lock: if the entry is on swap cache.\n  - swap_lock: if the entry is not on swap cache.\n\nThis works well in usual swap-in/out activity.\n\nBut this behavior make the feature of moving swap charge check many\nconditions to exchange swap_cgroup\u0027s record safely.\n\nSo I changed modification of swap_cgroup\u0027s recored(swap_cgroup_record())\nto use xchg, and define a new function to cmpxchg swap_cgroup\u0027s record.\n\nThis patch also enables moving charge of non pte_present but not uncharged\nswap caches, which can be exist on swap-out path, by getting the target\npages via find_get_page() as do_mincore() does.\n\n[kosaki.motohiro@jp.fujitsu.com: fix ia64 build]\n[akpm@linux-foundation.org: fix typos]\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d4906e1aa516cc965292b43b5a26122dd4344e7e",
      "tree": "78c19149282e93200d90f380a40f1e1192354936",
      "parents": [
        "7509765a29cfb1a4c506c09b304aaf3b4111c653"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "Lee.Schermerhorn@hp.com",
        "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": "swap: rework map_swap_page() again\n\nSeems that page_io.c doesn\u0027t really need to know that page_private(page)\nis the swp_entry \u0027val\u0027.  Rework map_swap_page() to do what its name says\nand map a page to a page offset in the swap space.\n\nThe only other caller of map_swap_page() is internal to mm/swapfile.c and\nit does want to map a swap entry to the \u0027sector\u0027.  So rename\nmap_swap_page() to map_swap_entry(), make it \u0027static\u0027 and and implement\nmap_swap_page() as a wrapper around that.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.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": "7509765a29cfb1a4c506c09b304aaf3b4111c653",
      "tree": "1f2de5381e044b452653a3af0f32e403ffe51931",
      "parents": [
        "aaa468653b4a0d11c603c48d716f765177a5a9e4"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:48 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "swap_info: reorder its fields\n\nReorder (and comment) the fields of swap_info_struct, to make better\nuse of its cachelines: it\u0027s good for swap_duplicate() in particular\nif unsigned int max and swap_map are near the start.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: 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": "aaa468653b4a0d11c603c48d716f765177a5a9e4",
      "tree": "3cb8c9232dd405001fa38d5519937c5e6c6f32ab",
      "parents": [
        "570a335b8e22579e2a51a68136d2b1f907a20eec"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:47 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "swap_info: note SWAP_MAP_SHMEM\n\nWhile we\u0027re fiddling with the swap_map values, let\u0027s assign a particular\nvalue to shmem/tmpfs swap pages: their swap counts are never incremented,\nand it helps swapoff\u0027s try_to_unuse() a little if it can immediately\ndistinguish those pages from process pages.\n\nSince we\u0027ve no use for SWAP_MAP_BAD | COUNT_CONTINUED,\nwe might as well use that 0xbf value for SWAP_MAP_SHMEM.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-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": "570a335b8e22579e2a51a68136d2b1f907a20eec",
      "tree": "c5312383e948d2e7ac60c2fa410fee98e8b38a70",
      "parents": [
        "8d69aaee80c123b460918816cbfa2e83224c3646"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:46 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: swap count continuations\n\nSwap is duplicated (reference count incremented by one) whenever the same\nswap page is inserted into another mm (when forking finds a swap entry in\nplace of a pte, or when reclaim unmaps a pte to insert the swap entry).\n\nswap_info_struct\u0027s vmalloc\u0027ed swap_map is the array of these reference\ncounts: but what happens when the unsigned short (or unsigned char since\nthe preceding patch) is full? (and its high bit is kept for a cache flag)\n\nWe then lose track of it, never freeing, leaving it in use until swapoff:\nat which point we _hope_ that a single pass will have found all instances,\nassume there are no more, and will lose user data if we\u0027re wrong.\n\nSwapping of KSM pages has not yet been enabled; but it is implemented,\nand makes it very easy for a user to overflow the maximum swap count:\npossible with ordinary process pages, but unlikely, even when pid_max\nhas been raised from PID_MAX_DEFAULT.\n\nThis patch implements swap count continuations: when the count overflows,\na continuation page is allocated and linked to the original vmalloc\u0027ed\nmap page, and this used to hold the continuation counts for that entry\nand its neighbours.  These continuation pages are seldom referenced:\nthe common paths all work on the original swap_map, only referring to\na continuation page when the low \"digit\" of a count is incremented or\ndecremented through SWAP_MAP_MAX.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: 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": "8d69aaee80c123b460918816cbfa2e83224c3646",
      "tree": "899a69417dbd81f9b53926d7076629cc9b394ae5",
      "parents": [
        "253d553ba75ab26b3e9e2f70cbf6fbf0813f7e86"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:45 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: swap_map of chars not shorts\n\nHalve the vmalloc\u0027ed swap_map array from unsigned shorts to unsigned\nchars: it\u0027s still very unusual to reach a swap count of 126, and the\nnext patch allows it to be extended indefinitely.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-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": "253d553ba75ab26b3e9e2f70cbf6fbf0813f7e86",
      "tree": "57c448fad45820c0eb984297fbef120b689381a0",
      "parents": [
        "73c34b6accc8427584f5d7db4d5acb230ed8c912"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:44 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: SWAP_HAS_CACHE cleanups\n\nThough swap_count() is useful, I\u0027m finding that swap_has_cache() and\nencode_swapmap() obscure what happens in the swap_map entry, just at\nthose points where I need to understand it.  Remove them, and pass\nmore usable \"usage\" values to scan_swap_map(), swap_entry_free() and\n__swap_duplicate(), instead of the SWAP_MAP and SWAP_CACHE enum.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-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": "9625a5f289f7c3c100b59c317e2bcc3c7e2e51fb",
      "tree": "88fecfbed0eaf627e8e08a9e196d1d2849737f0a",
      "parents": [
        "efa90a981bbc891efad96db2a75b5487e00852ca"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:42 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: include first_swap_extent\n\nMake better use of the space by folding first swap_extent into its\nswap_info_struct, instead of just the list_head: swap partitions need\nonly that one, and for others it\u0027s used as a circular list anyway.\n\n[jirislaby@gmail.com: fix crash on double swapon]\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Jiri Slaby \u003cjirislaby@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "efa90a981bbc891efad96db2a75b5487e00852ca",
      "tree": "fc64a5d5b71e84eb1eec2810fb0568a79a361827",
      "parents": [
        "f29ad6a99b596b8169744d107bf088e8be9e8d0d"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:41 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: change to array of pointers\n\nThe swap_info_struct is only 76 or 104 bytes, but it does seem wrong\nto reserve an array of about 30 of them in bss, when most people will\nwant only one.  Change swap_info[] to an array of pointers.\n\nThat does need a \"type\" field in the structure: pack it as a char with\nnext type and short prio (aha, char is unsigned by default on PowerPC).\nUse the (admittedly peculiar) name \"type\" throughout for this index.\n\n/proc/swaps does not take swap_lock: I wouldn\u0027t want it to, but do take\ncare with barriers when adding a new item to the array (never removed).\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "f29ad6a99b596b8169744d107bf088e8be9e8d0d",
      "tree": "e138bf9eeb751defd358eb5aca8113e2645ded3d",
      "parents": [
        "976d6dfbb0175d136fc098854bbce0c028a3924b"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:40 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "swap_info: private to swapfile.c\n\nThe swap_info_struct is mostly private to mm/swapfile.c, with only\none other in-tree user: get_swap_bio().  Adjust its interface to\nmap_swap_page(), so that we can then remove get_swap_info_struct().\n\nBut there is a popular user out-of-tree, TuxOnIce: so leave the\ndeclaration of swap_info_struct in linux/swap.h.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Nigel Cunningham \u003cncunningham@crca.org.au\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\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": "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": "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": "a5abeeacc44bbef2935a7a8e939264c28962def2",
      "tree": "f4506e548c4a7991fcceef8edfd65e3a6911507f",
      "parents": [
        "83d5cde47dedf01b6a4a4331882cbc0a7eea3c2e"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Mon Sep 21 17:01:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:25 2009 -0700"
      },
      "message": "mm: make swap token dummies static inlines\n\nMake use of the compiler\u0027s typechecking on !CONFIG_SWAP as well.\n\n[akpm@linux-foundation.org: build fix]\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a7420aa54dbf699a5a05feba3c859b6baaa3938c",
      "tree": "97119d311149c902b3bd3a6157e70fb79c876462",
      "parents": [
        "10be22dfe1e6ad978269dc275147e0ed049187bb"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Wed Sep 16 11:50:05 2009 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Sep 16 11:50:05 2009 +0200"
      },
      "message": "HWPOISON: Add support for poison swap entries v2\n\nMemory migration uses special swap entry types to trigger special actions on\npage faults. Extend this mechanism to also support poisoned swap entries, to\ntrigger poison handling on page faults. This allows follow-on patches to\nprevent processes from faulting in poisoned pages again.\n\nv2: Fix overflow in MAX_SWAPFILES (Fengguang Wu)\nv3: Better overflow fix (Hidehiro Kawai)\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "a5c9b696ec109bb54d547fdb437a7a0c2d514670",
      "tree": "c97533e38359a2e731bcc2c65f063a27f4f629e6",
      "parents": [
        "626f380d0b264a1e40237f5a2a3dffc5d14f256e"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Tue Jun 23 12:36:58 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 23 12:50:05 2009 -0700"
      },
      "message": "mm: pass mm to grab_swap_token\n\nIf a kthread happens to use get_user_pages() on an mm (as KSM does),\nthere\u0027s a chance that it will end up trying to read in a swap page, then\noops in grab_swap_token() because the kthread has no mm: GUP passes down\nthe right mm, so grab_swap_token() ought to be using it.\n\nWe have not identified a stronger case than KSM\u0027s daemon (not yet in\nmainline), but the issue must have come up before, since RHEL has included\na fix for this for years (though a different fix, they just back out of\ngrab_swap_token if current-\u003emm is unset: which is what we first proposed,\nbut using the right mm here seems more correct).\n\nReported-by: Izik Eidus \u003cieidus@redhat.com\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\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": "8a9478ca7f4bcb8945cec7f95d52dae2d5e50cbd",
      "tree": "935e6ee3340ebe999374b54967cc2fa14e8d0060",
      "parents": [
        "20ebcdda78a282d1d5266887ddf8a2d670182576"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 17 16:27:17 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:47 2009 -0700"
      },
      "message": "memcg: fix swap accounting\n\nThis patch fixes mis-accounting of swap usage in memcg.\n\nIn the current implementation, memcg\u0027s swap account is uncharged only when\nswap is completely freed.  But there are several cases where swap cannot\nbe freed cleanly.  For handling that, this patch changes that memcg\nuncharges swap account when swap has no references other than cache.\n\nBy this, memcg\u0027s swap entry accounting can be fully synchronous with the\napplication\u0027s behavior.\n\nThis patch also changes memcg\u0027s hooks for swap-out.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Dhaval Giani \u003cdhaval@linux.vnet.ibm.com\u003e\nCc: YAMAMOTO Takashi \u003cyamamoto@valinux.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "302362c5abdda80b5c2e4e57be610c2e3c2ab3c5",
      "tree": "e43f21556f63115f8c038c5551fae09b6927d53b",
      "parents": [
        "d69b042f3d7406ddba560143b1796020df760800"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Wed Jun 17 16:27:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:47 2009 -0700"
      },
      "message": "memcg: remove mem_cgroup_cache_charge_swapin()\n\nmem_cgroup_cache_charge_swapin() isn\u0027t used any more, so remove no-op\ndefinition of it in header file.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aca8bf323edd31ad462dc98c107c23a5c6022ca2",
      "tree": "1466785c7ab056d6a9e21bb61fbd36ce3c3df5cc",
      "parents": [
        "8192da6a8811ab6c3d29dc590a5f94a377c43739"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Jun 16 15:33:02 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:44 2009 -0700"
      },
      "message": "mm: remove file argument from swap_readpage()\n\nThe file argument resulted from address_space\u0027s readpage long time ago.\n\nWe don\u0027t use it any more.  Let\u0027s remove unnecessary argement.\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "355cfa73ddff2fb8fa14e93bd94a057cc022512e",
      "tree": "7ff70cd56d533070d50b06db6ba0086e8aab0d71",
      "parents": [
        "cb4b86ba47bb0937b71fb825b3ed88adf7a190f0"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jun 16 15:32:53 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:42 2009 -0700"
      },
      "message": "mm: modify swap_map and add SWAP_HAS_CACHE flag\n\nThis is a part of the patches for fixing memcg\u0027s swap accountinf leak.\nBut, IMHO, not a bad patch even if no memcg.\n\nThere are 2 kinds of references to swap.\n - reference from swap entry\n - reference from swap cache\n\nThen,\n\n - If there is swap cache \u0026\u0026 swap\u0027s refcnt is 1, there is only swap cache.\n  (*) swapcount(entry) \u003d\u003d 1 \u0026\u0026 find_get_page(swapper_space, entry) !\u003d NULL\n\nThis counting logic have worked well for a long time.  But considering\nthat we cannot know there is a _real_ reference or not by swap_map[],\ncurrent usage of counter is not very good.\n\nThis patch adds a flag SWAP_HAS_CACHE and recored information that a swap\nentry has a cache or not.  This will remove -1 magic used in swapfile.c\nand be a help to avoid unnecessary find_get_page().\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nTested-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Dhaval Giani \u003cdhaval@linux.vnet.ibm.com\u003e\nCc: YAMAMOTO Takashi \u003cyamamoto@valinux.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cb4b86ba47bb0937b71fb825b3ed88adf7a190f0",
      "tree": "4b8528ba914a315e5857e7fe2a6e7d415f2e6650",
      "parents": [
        "6837765963f1723e80ca97b1fae660f3a60d77df"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jun 16 15:32:52 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:42 2009 -0700"
      },
      "message": "mm: add swap cache interface for swap reference\n\nIn a following patch, the usage of swap cache is recorded into swap_map.\nThis patch is for necessary interface changes to do that.\n\n2 interfaces:\n\n  - swapcache_prepare()\n  - swapcache_free()\n\nare added for allocating/freeing refcnt from swap-cache to existing swap\nentries.  But implementation itself is not changed under this patch.  At\nadding swapcache_free(), memcg\u0027s hook code is moved under\nswapcache_free().  This is better than using scattered hooks.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nAcked-by: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Dhaval Giani \u003cdhaval@linux.vnet.ibm.com\u003e\nCc: YAMAMOTO Takashi \u003cyamamoto@valinux.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6837765963f1723e80ca97b1fae660f3a60d77df",
      "tree": "a9a6ed4b7e3bf188966da78b04bf39298f24375a",
      "parents": [
        "bce7394a3ef82b8477952fbab838e4a6e8cb47d2"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Jun 16 15:32:51 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:42 2009 -0700"
      },
      "message": "mm: remove CONFIG_UNEVICTABLE_LRU config option\n\nCurrently, nobody wants to turn UNEVICTABLE_LRU off.  Thus this\nconfigurability is unnecessary.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nAcked-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "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": "9fab5619bdd7f84cdd22cc760778f759f9819a33",
      "tree": "4a7010f3ba43896c266032f8b287d6bd55b72c85",
      "parents": [
        "327c0e968645f2601a43f5ea7c19c7b3a5fa0a34"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Mar 31 15:23:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:15 2009 -0700"
      },
      "message": "shmem: writepage directly to swap\n\nSynopsis: if shmem_writepage calls swap_writepage directly, most shmem\nswap loads benefit, and a catastrophic interaction between SLUB and some\nflash storage is avoided.\n\nshmem_writepage() has always been peculiar in making no attempt to write:\nit has just transferred a shmem page from file cache to swap cache, then\nlet that page make its way around the LRU again before being written and\nfreed.\n\nThe idea was that people use tmpfs because they want those pages to stay\nin RAM; so although we give it an overflow to swap, we should resist\nwriting too soon, giving those pages a second chance before they can be\nreclaimed.\n\nThat was always questionable, and I\u0027ve toyed with this patch for years;\nbut never had a clear justification to depart from the original design.\n\nIt became more questionable in 2.6.28, when the split LRU patches classed\nshmem and tmpfs pages as SwapBacked rather than as file_cache: that in\nitself gives them more resistance to reclaim than normal file pages.  I\nprepared this patch for 2.6.29, but the merge window arrived before I\u0027d\ncompleted gathering statistics to justify sending it in.\n\nThen while comparing SLQB against SLUB, running SLUB on a laptop I\u0027d\nhabitually used with SLAB, I found SLUB to run my tmpfs kbuild swapping\ntests five times slower than SLAB or SLQB - other machines slower too, but\nnowhere near so bad.  Simpler \"cp -a\" swapping tests showed the same.\n\nslub_max_order\u003d0 brings sanity to all, but heavy swapping is too far from\nnormal to justify such a tuning.  The crucial factor on that laptop turns\nout to be that I\u0027m using an SD card for swap.  What happens is this:\n\nBy default, SLUB uses order-2 pages for shmem_inode_cache (and many other\nfs inodes), so creating tmpfs files under memory pressure brings lumpy\nreclaim into play.  One subpage of the order is chosen from the bottom of\nthe LRU as usual, then the other three picked out from their random\npositions on the LRUs.\n\nIn a tmpfs load, many of these pages will be ones which already passed\nthrough shmem_writepage, so already have swap allocated.  And though their\noffsets on swap were probably allocated sequentially, now that the pages\nare picked off at random, their swap offsets are scattered.\n\nBut the flash storage on the SD card is very sensitive to having its\nwrites merged: once swap is written at scattered offsets, performance\nfalls apart.  Rotating disk seeks increase too, but less disastrously.\n\nSo: stop giving shmem/tmpfs pages a second pass around the LRU, write them\nout to swap as soon as their swap has been allocated.\n\nIt\u0027s surely possible to devise an artificial load which runs faster the\nold way, one whose sizing is such that the tmpfs pages on their second\npass are the ones that are wanted again, and other pages not.\n\nBut I\u0027ve not yet found such a load: on all machines, under the loads I\u0027ve\ntried, immediate swap_writepage speeds up shmem swapping: especially when\nusing the SLUB allocator (and more effectively than slub_max_order\u003d0), but\nalso with the others; and it also reduces the variance between runs.  How\nmuch faster varies widely: a factor of five is rare, 5% is common.\n\nOne load which might have suffered: imagine a swapping shmem load in a\nlimited mem_cgroup on a machine with plenty of memory.  Before 2.6.29 the\nswapcache was not charged, and such a load would have run quickest with\nthe shmem swapcache never written to swap.  But now swapcache is charged,\nso even this load benefits from shmem_writepage directly to swap.\n\nApologies for the #ifndef CONFIG_SWAP swap_writepage() stub in swap.h:\nit\u0027s silly because that will never get called; but refactoring shmem.c\nsensibly according to CONFIG_SWAP will be a separate task.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\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": "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": "b5a84319a4343a0db753436fd8147e61eaafa7ea",
      "tree": "5faae671b431b50a32a2d8c7a57cc9361d8f336d",
      "parents": [
        "544122e5e0ee27d5aac4a441f7746712afbf248c"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jan 07 18:08:35 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 08 08:31:10 2009 -0800"
      },
      "message": "memcg: fix shmem\u0027s swap accounting\n\nNow, you can see following even when swap accounting is enabled.\n\n 1. Create Group 01, and 02.\n 2. allocate a \"file\" on tmpfs by a task under 01.\n 3. swap out the \"file\" (by memory pressure)\n 4. Read \"file\" from a task in group 02.\n 5. the charge of \"file\" is moved to group 02.\n\nThis is not ideal behavior. This is because SwapCache which was loaded\nby read-ahead is not taken into account..\n\nThis is a patch to fix shmem\u0027s swapcache behavior.\n  - remove mem_cgroup_cache_charge_swapin().\n  - Add SwapCache handler routine to mem_cgroup_cache_charge().\n    By this, shmem\u0027s file cache is charged at add_to_page_cache()\n    with GFP_NOWAIT.\n  - pass the page of swapcache to shrink_mem_cgroup.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a7885eb8ad465ec9db99ac5b5e6680f0ca8e11c8",
      "tree": "4f3ffaa399fbc16003cc1787228f10543dc9c3ef",
      "parents": [
        "2733c06ac864ed40b9dfbbd5270f3f16949bd4a1"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Wed Jan 07 18:08:24 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 08 08:31:08 2009 -0800"
      },
      "message": "memcg: swappiness\n\nCurrently, /proc/sys/vm/swappiness can change swappiness ratio for global\nreclaim.  However, memcg reclaim doesn\u0027t have tuning parameter for itself.\n\nIn general, the optimal swappiness depend on workload.  (e.g.  hpc\nworkload need to low swappiness than the others.)\n\nThen, per cgroup swappiness improve administrator tunability.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8c7c6e34a1256a5082d38c8e9bd1474476912715",
      "tree": "09f53c7c4bac5532a9ecbdadb4450702c744ea6f",
      "parents": [
        "27a7faa0779dd13729196c1a818c294f44bbd1ee"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jan 07 18:08:00 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 08 08:31:05 2009 -0800"
      },
      "message": "memcg: mem+swap controller core\n\nThis patch implements per cgroup limit for usage of memory+swap.  However\nthere are SwapCache, double counting of swap-cache and swap-entry is\navoided.\n\nMem+Swap controller works as following.\n  - memory usage is limited by memory.limit_in_bytes.\n  - memory + swap usage is limited by memory.memsw_limit_in_bytes.\n\nThis has following benefits.\n  - A user can limit total resource usage of mem+swap.\n\n    Without this, because memory resource controller doesn\u0027t take care of\n    usage of swap, a process can exhaust all the swap (by memory leak.)\n    We can avoid this case.\n\n    And Swap is shared resource but it cannot be reclaimed (goes back to memory)\n    until it\u0027s used. This characteristic can be trouble when the memory\n    is divided into some parts by cpuset or memcg.\n    Assume group A and group B.\n    After some application executes, the system can be..\n\n    Group A -- very large free memory space but occupy 99% of swap.\n    Group B -- under memory shortage but cannot use swap...it\u0027s nearly full.\n\n    Ability to set appropriate swap limit for each group is required.\n\nMaybe someone wonder \"why not swap but mem+swap ?\"\n\n  - The global LRU(kswapd) can swap out arbitrary pages. Swap-out means\n    to move account from memory to swap...there is no change in usage of\n    mem+swap.\n\n    In other words, when we want to limit the usage of swap without affecting\n    global LRU, mem+swap limit is better than just limiting swap.\n\nAccounting target information is stored in swap_cgroup which is\nper swap entry record.\n\nCharge is done as following.\n  map\n    - charge  page and memsw.\n\n  unmap\n    - uncharge page/memsw if not SwapCache.\n\n  swap-out (__delete_from_swap_cache)\n    - uncharge page\n    - record mem_cgroup information to swap_cgroup.\n\n  swap-in (do_swap_page)\n    - charged as page and memsw.\n      record in swap_cgroup is cleared.\n      memsw accounting is decremented.\n\n  swap-free (swap_free())\n    - if swap entry is freed, memsw is uncharged by PAGE_SIZE.\n\nThere are people work under never-swap environments and consider swap as\nsomething bad. For such people, this mem+swap controller extension is just an\noverhead.  This overhead is avoided by config or boot option.\n(see Kconfig. detail is not in this patch.)\n\nTODO:\n - maybe more optimization can be don in swap-in path. (but not very safe.)\n   But we just do simple accounting at this stage.\n\n[nishimura@mxp.nes.nec.co.jp: make resize limit hold mutex]\n[hugh@veritas.com: memswap controller core swapcache fixes]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: 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": "d13d144309d2e5a3e6ad978b16c1d0226ddc9231",
      "tree": "37c19902b527823956db969d9428737081b2a94d",
      "parents": [
        "c1e862c1f5ad34771b6d0a528cf681e0dcad7c86"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jan 07 18:07:56 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 08 08:31:05 2009 -0800"
      },
      "message": "memcg: handle swap caches\n\nSwapCache support for memory resource controller (memcg)\n\nBefore mem+swap controller, memcg itself should handle SwapCache in proper\nway.  This is cut-out from it.\n\nIn current memcg, SwapCache is just leaked and the user can create tons of\nSwapCache.  This is a leak of account and should be handled.\n\nSwapCache accounting is done as following.\n\n  charge (anon)\n\t- charged when it\u0027s mapped.\n\t  (because of readahead, charge at add_to_swap_cache() is not sane)\n  uncharge (anon)\n\t- uncharged when it\u0027s dropped from swapcache and fully unmapped.\n\t  means it\u0027s not uncharged at unmap.\n\t  Note: delete from swap cache at swap-in is done after rmap information\n\t        is established.\n  charge (shmem)\n\t- charged at swap-in. this prevents charge at add_to_page_cache().\n\n  uncharge (shmem)\n\t- uncharged when it\u0027s dropped from swapcache and not on shmem\u0027s\n\t  radix-tree.\n\n  at migration, check against \u0027old page\u0027 is modified to handle shmem.\n\nComparing to the old version discussed (and caused troubles), we have\nadvantages of\n  - PCG_USED bit.\n  - simple migrating handling.\n\nSo, situation is much easier than several months ago, maybe.\n\n[hugh@veritas.com: memcg: handle swap caches build fix]\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nTested-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nSigned-off-by: 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": "2509ef26db4699a5d9fa876e90ddfc107afcab84",
      "tree": "09e65185142c60b5d766d8b75f3cbc8a65de6a39",
      "parents": [
        "22b31eec63e5f2e219a3ee15f456897272bc73e8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:40:10 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:07 2009 -0800"
      },
      "message": "badpage: zap print_bad_pte on swap and file\n\nComplete zap_pte_range()\u0027s coverage of bad pagetable entries by calling\nprint_bad_pte() on a pte_file in a linear vma and on a bad swap entry.\nThat needs free_swap_and_cache() to tell it, which will also have shown\none of those \"swap_free\" errors (but with much less information).\n\nSimilar checks in fork\u0027s copy_one_pte()?  No, that would be more noisy\nthan helpful: we\u0027ll see them when parent and child exec or exit.\n\nWhere do_nonlinear_fault() calls print_bad_pte(): omit !VM_CAN_NONLINEAR\ncase, that could only be a bug in sys_remap_file_pages(), not a bad pte.\nVM_FAULT_OOM rather than VM_FAULT_SIGBUS?  Well, okay, that is consistent\nwith what happens if do_swap_page() operates a bad swap entry; but don\u0027t\nwe have patches to be more careful about killing when VM_FAULT_OOM?\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\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": "20137a490f397d9c01fc9fadd83a8d198bda4477",
      "tree": "38e2d904e06f576a825cca3e1eaad7da6fd55947",
      "parents": [
        "7992fde72ce06c73280a1939b7a1e903bc95ef85"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:54 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:05 2009 -0800"
      },
      "message": "swapfile: swapon randomize if nonrot\n\nSwap allocation has always started from the beginning of the swap area;\nbut if we\u0027re dealing with a solidstate swap device which can only remap\nblocks within limited zones, that would sooner wear out the first zone.\n\nTherefore sys_swapon() test whether blk_queue is non-rotational, and if so\nrandomize the cluster_next starting position for allocation.\n\nIf blk_queue is nonrot, note SWP_SOLIDSTATE for later use, and report it\nwith an \"SS\" at the right end of the kernel\u0027s \"Adding ...  swap\" message\n(so that if it\u0027s both nonrot and discardable, \"SSD\" will be shown there).\nPerhaps something should be shown in /proc/swaps (swapon -s), but we have\nto be more cautious before making any addition to that format.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Matthew Wilcox \u003cmatthew@wil.cx\u003e\nCc: Joern Engel \u003cjoern@logfs.org\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: Donjun Shin \u003cdjshin90@gmail.com\u003e\nCc: Tejun Heo \u003cteheo@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7992fde72ce06c73280a1939b7a1e903bc95ef85",
      "tree": "8e8ef30ec4e29b325f70c2d01d2a9def192b5c64",
      "parents": [
        "6a6ba83175c029c7820765bae44692266b29e67a"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:53 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:05 2009 -0800"
      },
      "message": "swapfile: swap allocation use discard\n\nWhen scan_swap_map() finds a free cluster of swap pages to allocate,\ndiscard the old contents of the cluster if the device supports discard.\nBut don\u0027t bother when swap is so fragmented that we allocate single pages.\n\nBe careful about racing allocations made while we\u0027re scanning for a\ncluster; and hold up allocations made while we\u0027re discarding.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Matthew Wilcox \u003cmatthew@wil.cx\u003e\nCc: Joern Engel \u003cjoern@logfs.org\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: Donjun Shin \u003cdjshin90@gmail.com\u003e\nCc: Tejun Heo \u003cteheo@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6a6ba83175c029c7820765bae44692266b29e67a",
      "tree": "30bfb4938c73b715eb90dd15c09777fe0bbf93e6",
      "parents": [
        "ebebbbe904634b0ca1c674457b399f68db5e05b1"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:51 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:05 2009 -0800"
      },
      "message": "swapfile: swapon use discard (trim)\n\nWhen adding swap, all the old data on swap can be forgotten: sys_swapon()\ndiscard all but the header page of the swap partition (or every extent but\nthe header of the swap file), to give a solidstate swap device the\nopportunity to optimize its wear-levelling.\n\nIf that succeeds, note SWP_DISCARDABLE for later use, and report it with a\n\"D\" at the right end of the kernel\u0027s \"Adding ...  swap\" message.  Perhaps\nsomething should be shown in /proc/swaps (swapon -s), but we have to be\nmore cautious before making any addition to that format.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Matthew Wilcox \u003cmatthew@wil.cx\u003e\nCc: Joern Engel \u003cjoern@logfs.org\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: Donjun Shin \u003cdjshin90@gmail.com\u003e\nCc: Tejun Heo \u003cteheo@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ebebbbe904634b0ca1c674457b399f68db5e05b1",
      "tree": "168c6c1193580e40ba1916ebaff822e15e8ee186",
      "parents": [
        "81e33971271ec8603fe696731ff9967afb99e729"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:50 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:05 2009 -0800"
      },
      "message": "swapfile: rearrange scan and swap_info\n\nBefore making functional changes, rearrange scan_swap_map() to simplify\nsubsequent diffs.  Actually, there is one functional change in there:\nleave cluster_nr negative while scanning for a new cluster - resetting it\nearly increased the likelihood that when we have difficulty finding a free\ncluster, another task may come in and try doing exactly the same - just a\nwaste of cpu.\n\nBefore making functional changes, rearrange struct swap_info_struct\nslightly: flags will be needed as an unsigned long (for wait_on_bit), next\nis a good int to pair with prio, old_block_size is uninteresting so shift\nit to the end.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "22c6f8fdb31993cf49bdd4a47b64a7002391e1c7",
      "tree": "4721575904bc220bed559efb95f04f32a1febbfe",
      "parents": [
        "73fd8748ab0b9b3ddd178bea1d7ae03372033d96"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:48 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:05 2009 -0800"
      },
      "message": "swapfile: remove SWP_ACTIVE mask\n\nRemove the SWP_ACTIVE mask: it just obscures the SWP_WRITEOK flag.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b962716b459505a8d83aea313fea0abe76749f42",
      "tree": "b401e882f2ee8ff5a11209057496e603c211e8fe",
      "parents": [
        "60371d971a3d01afd102f0bbf2681f32ecc31d78"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:41 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:04 2009 -0800"
      },
      "message": "mm: optimize get_scan_ratio for no swap\n\nRik suggests a simplified get_scan_ratio() for !CONFIG_SWAP.  Yes, the gcc\noptimizer gives us that, when nr_swap_pages is #defined as 0L.  Move usual\ndeclaration to swapfile.c: it never belonged in page_alloc.c.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "60371d971a3d01afd102f0bbf2681f32ecc31d78",
      "tree": "999cd75fbf80877f99b518e632c445ae849eeb4d",
      "parents": [
        "ac47b003d03c2a4f28aef1d505b66d24ad191c4f"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:40 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:04 2009 -0800"
      },
      "message": "mm: add add_to_swap stub\n\nIf we add a failing stub for add_to_swap(), then we can remove the #ifdef\nCONFIG_SWAP from mm/vmscan.c.\n\nThis was intended as a source cleanup, but looking more closely, it turns\nout that the !CONFIG_SWAP case was going to keep_locked for an anonymous\npage, whereas now it goes to the more suitable activate_locked, like the\nCONFIG_SWAP nr_swap_pages 0 case.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ac47b003d03c2a4f28aef1d505b66d24ad191c4f",
      "tree": "12c31491b756f4dc7a55a9e11b69b193743ff647",
      "parents": [
        "63d6c5ad7fc27455ce5cb4706884671fb7e0df08"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:39 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:04 2009 -0800"
      },
      "message": "mm: remove gfp_mask from add_to_swap\n\nRemove gfp_mask argument from add_to_swap(): it\u0027s misleading because its\nonly caller, shrink_page_list(), is not atomic at that point; and in due\ncourse (implementing discard) we\u0027ll sometimes want to allocate some memory\nwith GFP_NOIO (as is used in swap_writepage) when allocating swap.\n\nNo change to the gfp_mask passed down to add_to_swap_cache(): still use\n__GFP_HIGH without __GFP_WAIT (with nomemalloc and nowarn as before):\nthough it\u0027s not obvious if that\u0027s the best combination to ask for here.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a2c43eed8334e878702fca713b212ae2a11d84b9",
      "tree": "4eb3f9b9153df5e7a638b15a6f7c9aa924066a94",
      "parents": [
        "7b1fe59793e61f826bef053107b57b23954833bb"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:36 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:03 2009 -0800"
      },
      "message": "mm: try_to_free_swap replaces remove_exclusive_swap_page\n\nremove_exclusive_swap_page(): its problem is in living up to its name.\n\nIt doesn\u0027t matter if someone else has a reference to the page (raised\npage_count); it doesn\u0027t matter if the page is mapped into userspace\n(raised page_mapcount - though that hints it may be worth keeping the\nswap): all that matters is that there be no more references to the swap\n(and no writeback in progress).\n\nswapoff (try_to_unuse) has been removing pages from swapcache for years,\nwith no concern for page count or page mapcount, and we used to have a\ncomment in lookup_swap_cache() recognizing that: if you go for a page of\nswapcache, you\u0027ll get the right page, but it could have been removed from\nswapcache by the time you get page lock.\n\nSo, give up asking for exclusivity: get rid of\nremove_exclusive_swap_page(), and remove_exclusive_swap_page_ref() and\nremove_exclusive_swap_page_count() which were spawned for the recent LRU\nwork: replace them by the simpler try_to_free_swap() which just checks\npage_swapcount().\n\nSimilarly, remove the page_count limitation from free_swap_and_count(),\nbut assume that it\u0027s worth holding on to the swap if page is mapped and\nswap nowhere near full.  Add a vm_swap_full() test in free_swap_cache()?\nIt would be consistent, but I think we probably have enough for now.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7b1fe59793e61f826bef053107b57b23954833bb",
      "tree": "0ac769c48123c5d0770b0a0f88bad9e6318b83ed",
      "parents": [
        "ab967d86015a19777955370deebc8262d50fed63"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:34 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:03 2009 -0800"
      },
      "message": "mm: reuse_swap_page replaces can_share_swap_page\n\nA good place to free up old swap is where do_wp_page(), or do_swap_page(),\nis about to redirty the page: the data on disk is then stale and won\u0027t be\nread again; and if we do decide to write the page out later, using the\nprevious swap location makes an unnecessary disk seek very likely.\n\nSo give can_share_swap_page() the side-effect of delete_from_swap_cache()\nwhen it safely can.  And can_share_swap_page() was always a misleading\nname, the more so if it has a side-effect: rename it reuse_swap_page().\n\nIrrelevant cleanup nearby: remove swap_token_default_timeout definition\nfrom swap.h: it\u0027s used nowhere.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b5934c531849ff4a51ce0f290141efe564290e40",
      "tree": "0c741a5bd6178db11f1147875f59e7a1a9d1754d",
      "parents": [
        "51726b1222863852c46ca21ed0115b85d1edfd89"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:25 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:02 2009 -0800"
      },
      "message": "mm: add_active_or_unevictable into rmap\n\nlru_cache_add_active_or_unevictable() and page_add_new_anon_rmap() always\nappear together.  Save some symbol table space and some jumping around by\nremoving lru_cache_add_active_or_unevictable(), folding its code into\npage_add_new_anon_rmap(): like how we add file pages to lru just after\nadding them to page cache.\n\nRemove the nearby \"TODO: is this safe?\" comments (yes, it is safe), and\nchange page_add_new_anon_rmap()\u0027s address BUG_ON to VM_BUG_ON as\noriginally intended.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\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": "af936a1606246a10c145feac3770f6287f483f02",
      "tree": "8b1ca7fabb5c749ffdecd654519889c6c2ed2fb6",
      "parents": [
        "64d6519dda3905dfb94d3f93c07c5f263f41813f"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Sat Oct 18 20:26:53 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:52:31 2008 -0700"
      },
      "message": "vmscan: unevictable LRU scan sysctl\n\nThis patch adds a function to scan individual or all zones\u0027 unevictable\nlists and move any pages that have become evictable onto the respective\nzone\u0027s inactive list, where shrink_inactive_list() will deal with them.\n\nAdds sysctl to scan all nodes, and per node attributes to individual\nnodes\u0027 zones.\n\nKosaki: If evictable page found in unevictable lru when write\n/proc/sys/vm/scan_unevictable_pages, print filename and file offset of\nthese pages.\n\n[akpm@linux-foundation.org: fix one CONFIG_MMU\u003dn build error]\n[kosaki.motohiro@jp.fujitsu.com: adapt vmscan-unevictable-lru-scan-sysctl.patch to new sysfs API]\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: 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": "64d6519dda3905dfb94d3f93c07c5f263f41813f",
      "tree": "62cae88edcb858c42a5b4b568eb77801299250bb",
      "parents": [
        "5344b7e648980cc2ca613ec03a56a8222ff48820"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Sat Oct 18 20:26:52 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:52:31 2008 -0700"
      },
      "message": "swap: cull unevictable pages in fault path\n\nIn the fault paths that install new anonymous pages, check whether the\npage is evictable or not using lru_cache_add_active_or_unevictable().  If\nthe page is evictable, just add it to the active lru list [via the pagevec\ncache], else add it to the unevictable list.\n\nThis \"proactive\" culling in the fault path mimics the handling of mlocked\npages in Nick Piggin\u0027s series to keep mlocked pages off the lru lists.\n\nNotes:\n\n1) This patch is optional--e.g., if one is concerned about the\n   additional test in the fault path.  We can defer the moving of\n   nonreclaimable pages until when vmscan [shrink_*_list()]\n   encounters them.  Vmscan will only need to handle such pages\n   once, but if there are a lot of them it could impact system\n   performance.\n\n2) The \u0027vma\u0027 argument to page_evictable() is require to notice that\n   we\u0027re faulting a page into an mlock()ed vma w/o having to scan the\n   page\u0027s rmap in the fault path.   Culling mlock()ed anon pages is\n   currently the only reason for this patch.\n\n3) We can\u0027t cull swap pages in read_swap_cache_async() because the\n   vma argument doesn\u0027t necessarily correspond to the swap cache\n   offset passed in by swapin_readahead().  This could [did!] result\n   in mlocking pages in non-VM_LOCKED vmas if [when] we tried to\n   cull in this path.\n\n4) Move set_pte_at() to after where we add page to lru to keep it\n   hidden from other tasks that might walk the page table.\n   We already do it in this order in do_anonymous() page.  And,\n   these are COW\u0027d anon pages.  Is this safe?\n\n[riel@redhat.com: undo an overzealous code cleanup]\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "89e004ea55abe201b29e2d6e35124101f1288ef7",
      "tree": "272a8f453106fd33d66fd7153f44696648dbe8b6",
      "parents": [
        "ba9ddf49391645e6bb93219131a40446538a5e76"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "Lee.Schermerhorn@hp.com",
        "time": "Sat Oct 18 20:26:43 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:50:26 2008 -0700"
      },
      "message": "SHM_LOCKED pages are unevictable\n\nShmem segments locked into memory via shmctl(SHM_LOCKED) should not be\nkept on the normal LRU, since scanning them is a waste of time and might\nthrow off kswapd\u0027s balancing algorithms.  Place them on the unevictable\nLRU list instead.\n\nUse the AS_UNEVICTABLE flag to mark address_space of SHM_LOCKed shared\nmemory regions as unevictable.  Then these pages will be culled off the\nnormal LRU lists during vmscan.\n\nAdd new wrapper function to clear the mapping\u0027s unevictable state when/if\nshared memory segment is munlocked.\n\nAdd \u0027scan_mapping_unevictable_page()\u0027 to mm/vmscan.c to scan all pages in\nthe shmem segment\u0027s mapping [struct address_space] for evictability now\nthat they\u0027re no longer locked.  If so, move them to the appropriate zone\nlru list.\n\nChanges depend on [CONFIG_]UNEVICTABLE_LRU.\n\n[kosaki.motohiro@jp.fujitsu.com: revert shm change]\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Kosaki Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "894bc310419ac95f4fa4142dc364401a7e607f65",
      "tree": "15d56a7333b41620016b845d2323dd06e822b621",
      "parents": [
        "8a7a8544a4f6554ec2d8048ac9f9672f442db5a2"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "Lee.Schermerhorn@hp.com",
        "time": "Sat Oct 18 20:26:39 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:50:26 2008 -0700"
      },
      "message": "Unevictable LRU Infrastructure\n\nWhen the system contains lots of mlocked or otherwise unevictable pages,\nthe pageout code (kswapd) can spend lots of time scanning over these\npages.  Worse still, the presence of lots of unevictable pages can confuse\nkswapd into thinking that more aggressive pageout modes are required,\nresulting in all kinds of bad behaviour.\n\nInfrastructure to manage pages excluded from reclaim--i.e., hidden from\nvmscan.  Based on a patch by Larry Woodman of Red Hat.  Reworked to\nmaintain \"unevictable\" pages on a separate per-zone LRU list, to \"hide\"\nthem from vmscan.\n\nKosaki Motohiro added the support for the memory controller unevictable\nlru list.\n\nPages on the unevictable list have both PG_unevictable and PG_lru set.\nThus, PG_unevictable is analogous to and mutually exclusive with\nPG_active--it specifies which LRU list the page is on.\n\nThe unevictable infrastructure is enabled by a new mm Kconfig option\n[CONFIG_]UNEVICTABLE_LRU.\n\nA new function \u0027page_evictable(page, vma)\u0027 in vmscan.c tests whether or\nnot a page may be evictable.  Subsequent patches will add the various\n!evictable tests.  We\u0027ll want to keep these tests light-weight for use in\nshrink_active_list() and, possibly, the fault path.\n\nTo avoid races between tasks putting pages [back] onto an LRU list and\ntasks that might be moving the page from non-evictable to evictable state,\nthe new function \u0027putback_lru_page()\u0027 -- inverse to \u0027isolate_lru_page()\u0027\n-- tests the \"evictability\" of a page after placing it on the LRU, before\ndropping the reference.  If the page has become unevictable,\nputback_lru_page() will redo the \u0027putback\u0027, thus moving the page to the\nunevictable list.  This way, we avoid \"stranding\" evictable pages on the\nunevictable list.\n\n[akpm@linux-foundation.org: fix fallout from out-of-order merge]\n[riel@redhat.com: fix UNEVICTABLE_LRU and !PROC_PAGE_MONITOR build]\n[nishimura@mxp.nes.nec.co.jp: remove redundant mapping check]\n[kosaki.motohiro@jp.fujitsu.com: unevictable-lru-infrastructure: putback_lru_page()/unevictable page handling rework]\n[kosaki.motohiro@jp.fujitsu.com: kill unnecessary lock_page() in vmscan.c]\n[kosaki.motohiro@jp.fujitsu.com: revert migration change of unevictable lru infrastructure]\n[kosaki.motohiro@jp.fujitsu.com: revert to unevictable-lru-infrastructure-kconfig-fix.patch]\n[kosaki.motohiro@jp.fujitsu.com: restore patch failure of vmstat-unevictable-and-mlocked-pages-vm-events.patch]\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nDebugged-by: Benjamin Kidwell \u003cbenjkidwell@yahoo.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4f98a2fee8acdb4ac84545df98cccecfd130f8db",
      "tree": "035a2937f4c3e2f7b4269412041c073ac646937c",
      "parents": [
        "b2e185384f534781fd22f5ce170b2ad26f97df70"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Sat Oct 18 20:26:32 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:50:25 2008 -0700"
      },
      "message": "vmscan: split LRU lists into anon \u0026 file sets\n\nSplit the LRU lists in two, one set for pages that are backed by real file\nsystems (\"file\") and one for pages that are backed by memory and swap\n(\"anon\").  The latter includes tmpfs.\n\nThe advantage of doing this is that the VM will not have to scan over lots\nof anonymous pages (which we generally do not want to swap out), just to\nfind the page cache pages that it should evict.\n\nThis patch has the infrastructure and a basic policy to balance how much\nwe scan the anon lists and how much we scan the file lists.  The big\npolicy changes are in separate patches.\n\n[lee.schermerhorn@hp.com: collect lru meminfo statistics from correct offset]\n[kosaki.motohiro@jp.fujitsu.com: prevent incorrect oom under split_lru]\n[kosaki.motohiro@jp.fujitsu.com: fix pagevec_move_tail() doesn\u0027t treat unevictable page]\n[hugh@veritas.com: memcg swapbacked pages active]\n[hugh@veritas.com: splitlru: BDI_CAP_SWAP_BACKED]\n[akpm@linux-foundation.org: fix /proc/vmstat units]\n[nishimura@mxp.nes.nec.co.jp: memcg: fix handling of shmem migration]\n[kosaki.motohiro@jp.fujitsu.com: adjust Quicklists field of /proc/meminfo]\n[kosaki.motohiro@jp.fujitsu.com: fix style issue of get_scan_ratio()]\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "68a22394c286a2daf06ee8d65d8835f738faefa5",
      "tree": "1fb91d5bf57a1f6d1cabaac0a6f5d86060ebecb5",
      "parents": [
        "f04e9ebbe4909f9a41efd55149bc353299f4e83b"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Sat Oct 18 20:26:23 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:50:25 2008 -0700"
      },
      "message": "vmscan: free swap space on swap-in/activation\n\nIf vm_swap_full() (swap space more than 50% full), the system will free\nswap space at swapin time.  With this patch, the system will also free the\nswap space in the pageout code, when we decide that the page is not a\ncandidate for swapout (and just wasting swap space).\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-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": "f04e9ebbe4909f9a41efd55149bc353299f4e83b",
      "tree": "4ff31c7f918edafe7d4e4dd0e926b6ac545c7897",
      "parents": [
        "b69408e88bd86b98feb7b9a38fd865e1ddb29827"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Sat Oct 18 20:26:19 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:50:25 2008 -0700"
      },
      "message": "swap: use an array for the LRU pagevecs\n\nTurn the pagevecs into an array just like the LRUs.  This significantly\ncleans up the source code and reduces the size of the kernel by about 13kB\nafter all the LRU lists have been created further down in the split VM\npatch series.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7c363b8c6536f26934172d3c46f0bbec01a97c61",
      "tree": "46a9ce1b0ef9285ab2c7b04f0cf584294853a16f",
      "parents": [
        "15f59adae001766a2c7f7fe4f196387bb04bcff5"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Fri Jul 25 19:46:24 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jul 26 12:00:12 2008 -0700"
      },
      "message": "mm/swapfile.c: make code static\n\nThis patch makes the following needlessly global code static:\n - swap_lock\n - nr_swapfiles\n - struct swap_list\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.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": "ac6aadb24b7d4f0e54246732e221c102073412bf",
      "tree": "1936c3e847fca977b8c0d650416c66655f7633ad",
      "parents": [
        "f05111f50105ac479a008cf85749cf9c956453ea"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Apr 28 02:12:38 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:20 2008 -0700"
      },
      "message": "mm: rotate_reclaimable_page() cleanup\n\nClean up messy conditional calling of test_clear_page_writeback() from both\nrotate_reclaimable_page() and end_page_writeback().\n\nThe only user of rotate_reclaimable_page() is end_page_writeback() so this is\nOK.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "dac1d27bc8d5ca636d3014ecfdf94407031d1970"
}
