)]}'
{
  "log": [
    {
      "commit": "701b259f446be2f3625fb852bceb93afe76e206d",
      "tree": "93f15bcd00bd59c38b4e59fed9af7ddf6b06c8b3",
      "parents": [
        "d2346963bfcbb9a8ee783ca3c3b3bdd7448ec9d5",
        "efc3dbc37412c027e363736b4f4c74ee5e8ecffc"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 24 15:51:40 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 24 15:51:40 2012 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net\n\nDavem says:\n\n1) Fix JIT code generation on x86-64 for divide by zero, from Eric Dumazet.\n\n2) tg3 header length computation correction from Eric Dumazet.\n\n3) More build and reference counting fixes for socket memory cgroup\n   code from Glauber Costa.\n\n4) module.h snuck back into a core header after all the hard work we\n   did to remove that, from Paul Gortmaker and Jesper Dangaard Brouer.\n\n5) Fix PHY naming regression and add some new PCI IDs in stmmac, from\n   Alessandro Rubini.\n\n6) Netlink message generation fix in new team driver, should only advertise\n   the entries that changed during events, from Jiri Pirko.\n\n7) SRIOV VF registration and unregistration fixes, and also add a\n   missing PCI ID, from Roopa Prabhu.\n\n8) Fix infinite loop in tx queue flush code of brcmsmac, from Stanislaw Gruszka.\n\n9) ftgmac100/ftmac100 build fix, missing interrupt.h include.\n\n10) Memory leak fix in net/hyperv do_set_mutlicast() handling, from Wei Yongjun.\n\n11) Off by one fix in netem packet scheduler, from Vijay Subramanian.\n\n12) TCP loss detection fix from Yuchung Cheng.\n\n13) TCP reset packet MD5 calculation uses wrong address, fix from Shawn Lu.\n\n14) skge carrier assertion and DMA mapping fixes from Stephen Hemminger.\n\n15) Congestion recovery undo performed at the wrong spot in BIC and CUBIC\n    congestion control modules, fix from Neal Cardwell.\n\n16) Ethtool ETHTOOL_GSSET_INFO is unnecessarily restrictive, from Michał Mirosław.\n\n17) Fix triggerable race in ipv6 sysctl handling, from Francesco Ruggeri.\n\n18) Statistics bug fixes in mlx4 from Eugenia Emantayev.\n\n19) rds locking bug fix during info dumps, from your\u0027s truly.\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (67 commits)\n  rds: Make rds_sock_lock BH rather than IRQ safe.\n  netprio_cgroup.h: dont include module.h from other includes\n  net: flow_dissector.c missing include linux/export.h\n  team: send only changed options/ports via netlink\n  net/hyperv: fix possible memory leak in do_set_multicast()\n  drivers/net: dsa/mv88e6xxx.c files need linux/module.h\n  stmmac: added PCI identifiers\n  llc: Fix race condition in llc_ui_recvmsg\n  stmmac: fix phy naming inconsistency\n  dsa: Add reporting of silicon revision for Marvell 88E6123/88E6161/88E6165 switches.\n  tg3: fix ipv6 header length computation\n  skge: add byte queue limit support\n  mv643xx_eth: Add Rx Discard and Rx Overrun statistics\n  bnx2x: fix compilation error with SOE in fw_dump\n  bnx2x: handle CHIP_REVISION during init_one\n  bnx2x: allow user to change ring size in ISCSI SD mode\n  bnx2x: fix Big-Endianess in ethtool -t\n  bnx2x: fixed ethtool statistics for MF modes\n  bnx2x: credit-leakage fixup on vlan_mac_del_all\n  macvlan: fix a possible use after free\n  ...\n"
    },
    {
      "commit": "9f9f1acd713d69fae2af286fbeedc6c8963411c6",
      "tree": "cfa1485d01cb36c720f1e2b96b21748acc10ec06",
      "parents": [
        "245132643e1cfcd145bbc86a716c1818371fcb93"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Fri Jan 20 14:34:24 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:38:49 2012 -0800"
      },
      "message": "mm: fix rss count leakage during migration\n\nMemory migration fills a pte with a migration entry and it doesn\u0027t\nupdate the rss counters.  Then it replaces the migration entry with the\nnew page (or the old one if migration failed).  But between these two\npasses this pte can be unmaped, or a task can fork a child and it will\nget a copy of this migration entry.  Nobody accounts for this in the rss\ncounters.\n\nThis patch properly adjust rss counters for migration entries in\nzap_pte_range() and copy_one_pte().  Thus we avoid extra atomic\noperations on the migration fast-path.\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Hugh Dickins \u003chughd@google.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": "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": "85046579bde15e532983438f86b36856e358f417",
      "tree": "9b80b31791e63520277617a5abe85692dc480cd0",
      "parents": [
        "cb78edfdcef5259ac9e9088bd63810d21299928d"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Fri Jan 20 14:34:19 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:38:48 2012 -0800"
      },
      "message": "SHM_UNLOCK: fix long unpreemptible section\n\nscan_mapping_unevictable_pages() is used to make SysV SHM_LOCKed pages\nevictable again once the shared memory is unlocked.  It does this with\npagevec_lookup()s across the whole object (which might occupy most of\nmemory), and takes 300ms to unlock 7GB here.  A cond_resched() every\nPAGEVEC_SIZE pages would be good.\n\nHowever, KOSAKI-san points out that this is called under shmem.c\u0027s\ninfo-\u003elock, and it\u0027s also under shm.c\u0027s shm_lock(), both spinlocks.\nThere is no strong reason for that: we need to take these pages off the\nunevictable list soonish, but those locks are not required for it.\n\nSo move the call to scan_mapping_unevictable_pages() from shmem.c\u0027s\nunlock handling up to shm.c\u0027s unlock handling.  Remove the recently\nadded barrier, not needed now we have spin_unlock() before the scan.\n\nUse get_file(), with subsequent fput(), to make sure we have a reference\nto mapping throughout scan_mapping_unevictable_pages(): that\u0027s something\nthat was previously guaranteed by the shm_lock().\n\nRemove shmctl\u0027s lru_add_drain_all(): we don\u0027t fault in pages at SHM_LOCK\ntime, and we lazily discover them to be Unevictable later, so it serves\nno purpose for SHM_LOCK; and serves no purpose for SHM_UNLOCK, since\npages still on pagevec are not marked Unevictable.\n\nThe original code avoided redundant rescans by checking VM_LOCKED flag\nat its level: now avoid them by checking shp\u0027s SHM_LOCKED.\n\nThe original code called scan_mapping_unevictable_pages() on a locked\narea at shm_destroy() time: perhaps we once had accounting cross-checks\nwhich required that, but not now, so skip the overhead and just let\ninode eviction deal with them.\n\nPut check_move_unevictable_page() and scan_mapping_unevictable_pages()\nunder CONFIG_SHMEM (with stub for the TINY case when ramfs is used),\nmore as comment than to save space; comment them used for SHM_UNLOCK.\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\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "409eb8c2611b4310947a150af988111f7f52ab15",
      "tree": "a410c7c9c5a58643da7b4c2abdb7796d1255f048",
      "parents": [
        "6568d4a9c9ff16d6c4f0b14dfea567806ce579e4"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Fri Jan 20 14:34:13 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:38:48 2012 -0800"
      },
      "message": "mm/hugetlb.c: undo change to page mapcount in fault handler\n\nPage mapcount should be updated only if we are sure that the page ends\nup in the page table otherwise we would leak if we couldn\u0027t COW due to\nreservations or if idx is out of bounds.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\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": "6568d4a9c9ff16d6c4f0b14dfea567806ce579e4",
      "tree": "5aef7ff51027d8986113025b3e9b0255476772dd",
      "parents": [
        "85e72aa5384b1a614563ad63257ded0e91d1a620"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Fri Jan 20 14:34:12 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:38:48 2012 -0800"
      },
      "message": "mm: memcg: update the correct soft limit tree during migration\n\nend_migration() passes the old page instead of the new page to commit\nthe charge.  This page descriptor is not used for committing itself,\nthough, since we also pass the (correct) page_cgroup descriptor.  But\nit\u0027s used to find the soft limit tree through the page\u0027s zone, so the\nsoft limit tree of the old page\u0027s zone is updated instead of that of the\nnew page\u0027s, which might get slightly out of date until the next charge\nreaches the ratelimit point.\n\nThis glitch has been present since 5564e88 (\"memcg: condense\npage_cgroup-to-page lookup points\").\n\nThis fixes a bug that I introduced in 2.6.38.  It\u0027s benign enough (to my\nknowledge) that we probably don\u0027t want this for stable.\n\nReported-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "656a070629adfe23c12768e35ddf91feab469ff7",
      "tree": "42c001d079ec926186873b91d7d84bf66c54bcad",
      "parents": [
        "687875fb7de4a95223af20ee024282fa9099f860"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Fri Jan 20 14:33:58 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:38:47 2012 -0800"
      },
      "message": "mm: __count_immobile_pages(): make sure the node is online\n\npage_zone() requires an online node otherwise we are accessing NULL\nNODE_DATA.  This is not an issue at the moment because node_zones are\nlocated at the structure beginning but this might change in the future\nso better be careful about that.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@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": "687875fb7de4a95223af20ee024282fa9099f860",
      "tree": "1c50d5ac1e31afac82cb8b0a6dd4b1f7bd07eecd",
      "parents": [
        "6536e3123e5d3371a6f52e32a3d0694bcc987702"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Fri Jan 20 14:33:55 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:38:47 2012 -0800"
      },
      "message": "mm: fix NULL ptr dereference in __count_immobile_pages\n\nFix the following NULL ptr dereference caused by\n\n  cat /sys/devices/system/memory/memory0/removable\n\nPid: 13979, comm: sed Not tainted 3.0.13-0.5-default #1 IBM BladeCenter LS21 -[7971PAM]-/Server Blade\nRIP: __count_immobile_pages+0x4/0x100\nProcess sed (pid: 13979, threadinfo ffff880221c36000, task ffff88022e788480)\nCall Trace:\n  is_pageblock_removable_nolock+0x34/0x40\n  is_mem_section_removable+0x74/0xf0\n  show_mem_removable+0x41/0x70\n  sysfs_read_file+0xfe/0x1c0\n  vfs_read+0xc7/0x130\n  sys_read+0x53/0xa0\n  system_call_fastpath+0x16/0x1b\n\nWe are crashing because we are trying to dereference NULL zone which\ncame from pfn\u003d0 (struct page ffffea0000000000). According to the boot\nlog this page is marked reserved:\ne820 update range: 0000000000000000 - 0000000000010000 (usable) \u003d\u003d\u003e (reserved)\n\nand early_node_map confirms that:\nearly_node_map[3] active PFN ranges\n    1: 0x00000010 -\u003e 0x0000009c\n    1: 0x00000100 -\u003e 0x000bffa3\n    1: 0x00100000 -\u003e 0x00240000\n\nThe problem is that memory_present works in PAGE_SECTION_MASK aligned\nblocks so the reserved range sneaks into the the section as well.  This\nalso means that free_area_init_node will not take care of those reserved\npages and they stay uninitialized.\n\nWhen we try to read the removable status we walk through all available\nsections and hope that the zone is valid for all pages in the section.\nBut this is not true in this case as the zone and nid are not initialized.\n\nWe have only one node in this particular case and it is marked as node\u003d1\n(rather than 0) and that made the problem visible because page_to_nid will\nreturn 0 and there are no zones on the node.\n\nLet\u0027s check that the zone is valid and that the given pfn falls into its\nboundaries and mark the section not removable.  This might cause some\nfalse positives, probably, but we do not have any sane way to find out\nwhether the page is reserved by the platform or it is just not used for\nwhatever other reasons.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: \u003cstable@vger.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": "376be5ff8a6a36efadd131860cf26841f366d44c",
      "tree": "af7c37842eeb37c4a79195c46fc1dabbaf84be6f",
      "parents": [
        "1a3bc369ba547c11ca8b3ed079d7584f27499e70"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Fri Jan 20 04:57:14 2012 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Jan 22 15:08:45 2012 -0500"
      },
      "message": "net: fix socket memcg build with !CONFIG_NET\n\nThere is still a build bug with the sock memcg code, that triggers\nwith !CONFIG_NET, that survived my series of randconfig builds.\n\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nReported-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nCC: Hiroyouki Kamezawa \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "ccb19d263fd1c9e34948e2158c53eacbff369344",
      "tree": "6683e55f183920dcbf3e1a5b749e7f9780c465b3",
      "parents": [
        "6a488979f574cb4287880db2dbc8b13cee30c5be",
        "c3b5003b628d8e373262bee42c7260d6a799c73e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 17 22:26:41 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 17 22:26:41 2012 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (47 commits)\n  tg3: Fix single-vector MSI-X code\n  openvswitch: Fix multipart datapath dumps.\n  ipv6: fix per device IP snmp counters\n  inetpeer: initialize -\u003eredirect_genid in inet_getpeer()\n  net: fix NULL-deref in WARN() in skb_gso_segment()\n  net: WARN if skb_checksum_help() is called on skb requiring segmentation\n  caif: Remove bad WARN_ON in caif_dev\n  caif: Fix typo in Vendor/Product-ID for CAIF modems\n  bnx2x: Disable AN KR work-around for BCM57810\n  bnx2x: Remove AutoGrEEEn for BCM84833\n  bnx2x: Remove 100Mb force speed for BCM84833\n  bnx2x: Fix PFC setting on BCM57840\n  bnx2x: Fix Super-Isolate mode for BCM84833\n  net: fix some sparse errors\n  net: kill duplicate included header\n  net: sh-eth: Fix build error by the value which is not defined\n  net: Use device model to get driver name in skb_gso_segment()\n  bridge: BH already disabled in br_fdb_cleanup()\n  net: move sock_update_memcg outside of CONFIG_INET\n  mwl8k: Fixing Sparse ENDIAN CHECK warning\n  ...\n"
    },
    {
      "commit": "319d3b9c97b5e3191e419bb95496bf08ec50f096",
      "tree": "6e57f4183060aab780d17fe8f6ac11272cc679fc",
      "parents": [
        "8d9d399f14ea65aeb50c7404e986bceede93bb99"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Sun Jan 15 22:04:39 2012 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Jan 17 10:15:45 2012 -0500"
      },
      "message": "net: move sock_update_memcg outside of CONFIG_INET\n\nAlthough only used currently for tcp sockets, this function\nis now used in common sock code (for sock_clone())\n\nCommit 475f1b52645a29936b9df1d8fcd45f7e56bd4a9f moved the\ndeclaration of sock_update_clone() to inside sock.c, but\nthis only fixes the problem when CONFIG_CGROUP_MEM_RES_CTLR_KMEM\nis also not defined.\n\nThis patch here is verified to fix both problems, although\nreverting the previous one is not necessary.\n\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nCC: David S. Miller \u003cdavem@davemloft.net\u003e\nCC: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nReported-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nAcked-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "892d208bcf79e4e1058707786a7b6d486697cd78",
      "tree": "15446e4d19f7f98078344ab0bc37ae6af4898c6d",
      "parents": [
        "dca88ad6915b65f6e037f8c3e632fcd92a70bd88",
        "029aeff5db879afd7760f11214b6fea45f76b58e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 14 18:11:11 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 14 18:11:11 2012 -0800"
      },
      "message": "Merge tag \u0027kmemleak\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas/linux\n\nKmemleak patches\n\nMain features:\n- Handle percpu memory allocations (only scanning them, not actually\n  reporting).\n- Memory hotplug support.\n\nUsability improvements:\n- Show the origin of early allocations.\n- Report previously found leaks even if kmemleak has been disabled by\n  some error.\n\n* tag \u0027kmemleak\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas/linux:\n  kmemleak: Add support for memory hotplug\n  kmemleak: Handle percpu memory allocation\n  kmemleak: Report previously found leaks even after an error\n  kmemleak: When the early log buffer is exceeded, report the actual number\n  kmemleak: Show where early_log issues come from\n"
    },
    {
      "commit": "f1db7afd917e54711798c64d78f8f5fb090f950d",
      "tree": "4104640edda22dad55c1db4d828ba21bfd0b4b85",
      "parents": [
        "3f79768f239746d19accd88da96263ef35d6a219"
      ],
      "author": {
        "name": "Kautuk Consul",
        "email": "consul.kautuk@gmail.com",
        "time": "Thu Jan 12 17:20:08 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm/vmalloc.c: eliminate extra loop in pcpu_get_vm_areas error path\n\nIf either of the vas or vms arrays are not properly kzalloced, then the\ncode jumps to the err_free label.\n\nThe err_free label runs a loop to check and free each of the array members\nof the vas and vms arrays which is not required for this situation as none\nof the array members have been allocated till this point.\n\nEliminate the extra loop we have to go through by introducing a new label\nerr_free2 and then jumping to it.\n\n[akpm@linux-foundation.org: remove now-unneeded tests]\nSigned-off-by: Kautuk Consul \u003cconsul.kautuk@gmail.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3f79768f239746d19accd88da96263ef35d6a219",
      "tree": "08c9dd76fb61386de4c26c393263c1cfc1d0b874",
      "parents": [
        "f626012db08b9ea71363327d81fe60c2782eea9f"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:07 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: rearrange putback_inactive_pages\n\nThere is sometimes confusion between the global putback_lru_pages() in\nmigrate.c and the static putback_lru_pages() in vmscan.c: rename the\nlatter putback_inactive_pages(): it helps shrink_inactive_list() rather as\nmove_active_pages_to_lru() helps shrink_active_list().\n\nRemove unused scan_control arg from putback_inactive_pages() and from\nupdate_isolated_counts().  Move clear_active_flags() inside\nupdate_isolated_counts().  Move NR_ISOLATED accounting up into\nshrink_inactive_list() itself, so the balance is clearer.\n\nDo the spin_lock_irq() before calling putback_inactive_pages() and\nspin_unlock_irq() after return from it, so that it better matches\nupdate_isolated_counts() and move_active_pages_to_lru().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@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": "f626012db08b9ea71363327d81fe60c2782eea9f",
      "tree": "3171843ead87fc7a3a959be802638205a473da56",
      "parents": [
        "1c1c53d43b387d02174911ecb42ce846577b0ea0"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:06 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: remove isolate_pages()\n\nThe isolate_pages() level in vmscan.c offers little but indirection: merge\nit into isolate_lru_pages() as the compiler does, and use the names\nnr_to_scan and nr_scanned in each case.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1c1c53d43b387d02174911ecb42ce846577b0ea0",
      "tree": "bb1294b23d23f2403ab95068af6080b375cc3166",
      "parents": [
        "4111304dab198c687bc60f2e235a9f7ee92c47c8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:04 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: remove del_page_from_lru, add page_off_lru\n\ndel_page_from_lru() repeats del_page_from_lru_list(), also working out\nwhich LRU the page was on, clearing the relevant bits.  Decouple those\nfunctions: remove del_page_from_lru() and add page_off_lru().\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4111304dab198c687bc60f2e235a9f7ee92c47c8",
      "tree": "c98fbae214f73f8475bcdc54c8116dea82cd7d14",
      "parents": [
        "4d06f382c733f99ec67df006255e87525ac1efd3"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:01 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: enum lru_list lru\n\nMostly we use \"enum lru_list lru\": change those few \"l\"s to \"lru\"s.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4d06f382c733f99ec67df006255e87525ac1efd3",
      "tree": "1a4eebc3bb1d04ce053107a07ff4b472c007e32b",
      "parents": [
        "5095ae83759f035c823fb375c6ed2de99c81d5ec"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:20:00 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: no blank line after EXPORT_SYMBOL in swap.c\n\ncheckpatch rightly protests\n\n  WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable\n\nso fix the five offenders in mm/swap.c.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5095ae83759f035c823fb375c6ed2de99c81d5ec",
      "tree": "478eb973da4fe6461cd749136a5f62bd96a0ac21",
      "parents": [
        "2bcf887963812c075f80a14e1fad8ec7e1c67acf"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:19:58 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: fewer underscores in ____pagevec_lru_add\n\nWhat\u0027s so special about ____pagevec_lru_add() that it needs four leading\nunderscores?  Nothing, it just helped to distinguish from\n__pagevec_lru_add() in 2.6.28 development.  Cut two leading underscores.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2bcf887963812c075f80a14e1fad8ec7e1c67acf",
      "tree": "132f11eefe904653307a05b77d16f4c41866e486",
      "parents": [
        "90b3feaec8ffb167abd8903bf111605c2f035aa8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:19:56 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "mm: take pagevecs off reclaim stack\n\nReplace pagevecs in putback_lru_pages() and move_active_pages_to_lru()\nby lists of pages_to_free: then apply Konstantin Khlebnikov\u0027s\nfree_hot_cold_page_list() to them instead of pagevec_release().\n\nWhich simplifies the flow (no need to drop and retake lock whenever\npagevec fills up) and reduces stale addresses in stack backtraces\n(which often showed through the pagevecs); but more importantly,\nremoves another 120 bytes from the deepest stacks in page reclaim.\nAlthough I\u0027ve not recently seen an actual stack overflow here with\na vanilla kernel, move_active_pages_to_lru() has often featured in\ndeep backtraces.\n\nHowever, free_hot_cold_page_list() does not handle compound pages\n(nor need it: a Transparent HugePage would have been split by the\ntime it reaches the call in shrink_page_list()), but it is possible\nfor putback_lru_pages() or move_active_pages_to_lru() to be left\nholding the last reference on a THP, so must exclude the unlikely\ncompound case before putting on pages_to_free.\n\nRemove pagevec_strip(), its work now done in move_active_pages_to_lru().\nThe pagevec in scan_mapping_unevictable_pages() remains in mm/vmscan.c,\nbut that is never on the reclaim path, and cannot be replaced by a list.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "90b3feaec8ffb167abd8903bf111605c2f035aa8",
      "tree": "503c27c343397e1c94dce61e922fae18c7cd7172",
      "parents": [
        "12d27107867fc7216e8faaff0b894b0f162dcf75"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:19:54 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:10 2012 -0800"
      },
      "message": "memcg: fix mem_cgroup_print_bad_page\n\nIf DEBUG_VM, mem_cgroup_print_bad_page() is called whenever bad_page()\nshows a \"Bad page state\" message, removes page from circulation, adds a\ntaint and continues.  This is at a very low level, often when a spinlock\nis held (sometimes when page table lock is held, for example).\n\nWe want to recover from this badness, not make it worse: we must not\nkmalloc memory here, we must not do a cgroup path lookup via dubious\npointers.  No doubt that code was useful to debug a particular case at one\ntime, and may be again, but take it out of the mainline kernel.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "12d27107867fc7216e8faaff0b894b0f162dcf75",
      "tree": "8f35d39f7e5d0b0f0ba10a3475e9fa4a2581e509",
      "parents": [
        "0cee34fd72c582b4f8ad8ce00645b75fb4168199"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Jan 12 17:19:52 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "memcg: fix split_huge_page_refcounts()\n\nThis patch started off as a cleanup: __split_huge_page_refcounts() has to\ncope with two scenarios, when the hugepage being split is already on LRU,\nand when it is not; but why does it have to split that accounting across\nthree different sites?  Consolidate it in lru_add_page_tail(), handling\nevictable and unevictable alike, and use standard add_page_to_lru_list()\nwhen accounting is needed (when the head is not yet on LRU).\n\nBut a recent regression in -next, I guess the removal of PageCgroupAcctLRU\ntest from mem_cgroup_split_huge_fixup(), makes this now a necessary fix:\nunder load, the MEM_CGROUP_ZSTAT count was wrapping to a huge number,\nmessing up reclaim calculations and causing a freeze at rmdir of cgroup.\n\nAdd a VM_BUG_ON to mem_cgroup_lru_del_list() when we\u0027re about to wrap that\ncount - this has not been the only such incident.  Document that\nlru_add_page_tail() is for Transparent HugePages by #ifdef around it.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0cee34fd72c582b4f8ad8ce00645b75fb4168199",
      "tree": "3b3bd79df0a2ebc869dba091d922c252784ffd23",
      "parents": [
        "fe4b1b244bdb96136855f2c694071cb09d140766"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:49 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: vmscan: check if reclaim should really abort even if compaction_ready() is true for one zone\n\nIf compaction can proceed for a given zone, shrink_zones() does not\nreclaim any more pages from it.  After commit [e0c2327: vmscan: abort\nreclaim/compaction if compaction can proceed], do_try_to_free_pages()\ntries to finish as soon as possible once one zone can compact.\n\nThis was intended to prevent slabs being shrunk unnecessarily but there\nare side-effects.  One is that a small zone that is ready for compaction\nwill abort reclaim even if the chances of successfully allocating a THP\nfrom that zone is small.  It also means that reclaim can return too early\neven though sc-\u003enr_to_reclaim pages were not reclaimed.\n\nThis partially reverts the commit until it is proven that slabs are really\nbeing shrunk unnecessarily but preserves the check to return 1 to avoid\nOOM if reclaim was aborted prematurely.\n\n[aarcange@redhat.com: This patch replaces a revert from Andrea]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "fe4b1b244bdb96136855f2c694071cb09d140766",
      "tree": "c1fafe7ef5b5bd7c77ae981b47fa82916e0436eb",
      "parents": [
        "a6bc32b899223a877f595ef9ddc1e89ead5072b8"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:45 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: vmscan: when reclaiming for compaction, ensure there are sufficient free pages available\n\nIn commit e0887c19 (\"vmscan: limit direct reclaim for higher order\nallocations\"), Rik noted that reclaim was too aggressive when THP was\nenabled.  In his initial patch he used the number of free pages to decide\nif reclaim should abort for compaction.  My feedback was that reclaim and\ncompaction should be using the same logic when deciding if reclaim should\nbe aborted.\n\nUnfortunately, this had the effect of reducing THP success rates when the\nworkload included something like streaming reads that continually\nallocated pages.  The window during which compaction could run and return\na THP was too small.\n\nThis patch combines Rik\u0027s two patches together.  compaction_suitable() is\nstill used to decide if reclaim should be aborted to allow compaction is\nused.  However, it will also ensure that there is a reasonable buffer of\nfree pages available.  This improves upon the THP allocation success rates\nbut bounds the number of pages that are freed for compaction.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel\u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "a6bc32b899223a877f595ef9ddc1e89ead5072b8",
      "tree": "a9529f7af2cf8e77bb6670acea32169c891a2b76",
      "parents": [
        "66199712e9eef5aede09dbcd9dfff87798a66917"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:43 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: compaction: introduce sync-light migration for use by compaction\n\nThis patch adds a lightweight sync migrate operation MIGRATE_SYNC_LIGHT\nmode that avoids writing back pages to backing storage.  Async compaction\nmaps to MIGRATE_ASYNC while sync compaction maps to MIGRATE_SYNC_LIGHT.\nFor other migrate_pages users such as memory hotplug, MIGRATE_SYNC is\nused.\n\nThis avoids sync compaction stalling for an excessive length of time,\nparticularly when copying files to a USB stick where there might be a\nlarge number of dirty pages backed by a filesystem that does not support\n-\u003ewritepages.\n\n[aarcange@redhat.com: This patch is heavily based on Andrea\u0027s work]\n[akpm@linux-foundation.org: fix fs/nfs/write.c build]\n[akpm@linux-foundation.org: fix fs/btrfs/disk-io.c build]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "66199712e9eef5aede09dbcd9dfff87798a66917",
      "tree": "9994be003d97d9596fadb5e4c38c271ed3e79333",
      "parents": [
        "c82449352854ff09e43062246af86bdeb628f0c3"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:41 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: page allocator: do not call direct reclaim for THP allocations while compaction is deferred\n\nIf compaction is deferred, direct reclaim is used to try to free enough\npages for the allocation to succeed.  For small high-orders, this has a\nreasonable chance of success.  However, if the caller has specified\n__GFP_NO_KSWAPD to limit the disruption to the system, it makes more sense\nto fail the allocation rather than stall the caller in direct reclaim.\nThis patch skips direct reclaim if compaction is deferred and the caller\nspecifies __GFP_NO_KSWAPD.\n\nAsync compaction only considers a subset of pages so it is possible for\ncompaction to be deferred prematurely and not enter direct reclaim even in\ncases where it should.  To compensate for this, this patch also defers\ncompaction only if sync compaction failed.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Rik van Riel\u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "c82449352854ff09e43062246af86bdeb628f0c3",
      "tree": "9cb8052e425c8cdab24ac41e83bbb672832ce54e",
      "parents": [
        "b969c4ab9f182a6e1b2a0848be349f99714947b0"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:38 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: compaction: make isolate_lru_page() filter-aware again\n\nCommit 39deaf85 (\"mm: compaction: make isolate_lru_page() filter-aware\")\nnoted that compaction does not migrate dirty or writeback pages and that\nis was meaningless to pick the page and re-add it to the LRU list.  This\nhad to be partially reverted because some dirty pages can be migrated by\ncompaction without blocking.\n\nThis patch updates \"mm: compaction: make isolate_lru_page\" by skipping\nover pages that migration has no possibility of migrating to minimise LRU\ndisruption.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel\u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "b969c4ab9f182a6e1b2a0848be349f99714947b0",
      "tree": "dc1c6e4375cfec7b15f13a37307eba8a9e07f40f",
      "parents": [
        "7335084d446b83cbcb15da80497d03f0c1dc9e21"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:34 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: compaction: determine if dirty pages can be migrated without blocking within -\u003emigratepage\n\nAsynchronous compaction is used when allocating transparent hugepages to\navoid blocking for long periods of time.  Due to reports of stalling,\nthere was a debate on disabling synchronous compaction but this severely\nimpacted allocation success rates.  Part of the reason was that many dirty\npages are skipped in asynchronous compaction by the following check;\n\n\tif (PageDirty(page) \u0026\u0026 !sync \u0026\u0026\n\t\tmapping-\u003ea_ops-\u003emigratepage !\u003d migrate_page)\n\t\t\trc \u003d -EBUSY;\n\nThis skips over all mapping aops using buffer_migrate_page() even though\nit is possible to migrate some of these pages without blocking.  This\npatch updates the -\u003emigratepage callback with a \"sync\" parameter.  It is\nthe responsibility of the callback to fail gracefully if migration would\nblock.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "7335084d446b83cbcb15da80497d03f0c1dc9e21",
      "tree": "1bc34f3cc12a4f6fce19b8eeaed52dc3e4202b5b",
      "parents": [
        "5013473152d1ac9d44d787fb02edda845fdf2cb3"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: vmscan: do not OOM if aborting reclaim to start compaction\n\nDuring direct reclaim it is possible that reclaim will be aborted so that\ncompaction can be attempted to satisfy a high-order allocation.  If this\ndecision is made before any pages are reclaimed, it is possible that 0 is\nreturned to the page allocator potentially triggering an OOM.  This has\nnot been observed but it is a possibility so this patch addresses it.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "5013473152d1ac9d44d787fb02edda845fdf2cb3",
      "tree": "639d241cdc804f09d56caf8ff844e09291b99170",
      "parents": [
        "b16d3d5a5219d01e9be5e586e5d50fbf1ca955ea"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 12 17:19:29 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "mm: vmscan: check if we isolated a compound page during lumpy scan\n\nProperly take into account if we isolated a compound page during the lumpy\nscan in reclaim and skip over the tail pages when encountered.  This\ncorrects the values given to the tracepoint for number of lumpy pages\nisolated and will avoid breaking the loop early if compound pages smaller\nthan the requested allocation size are requested.\n\n[mgorman@suse.de: Updated changelog]\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "b16d3d5a5219d01e9be5e586e5d50fbf1ca955ea",
      "tree": "790422876526d780e1b66dd47ae522bfa3b73484",
      "parents": [
        "a77ebd333cd810d7b680d544be88c875131c2bd3"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:26 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "mm: compaction: use synchronous compaction for /proc/sys/vm/compact_memory\n\nWhen asynchronous compaction was introduced, the\n/proc/sys/vm/compact_memory handler should have been updated to always use\nsynchronous compaction.  This did not happen so this patch addresses it.\n\nThe assumption is if a user writes to /proc/sys/vm/compact_memory, they\nare willing for that process to stall.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "a77ebd333cd810d7b680d544be88c875131c2bd3",
      "tree": "f7e3baabdb4d81e089924e402442b21c4eaa3aab",
      "parents": [
        "ea4d349ffa8028c655236497c2ba17c17aaa0d65"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:22 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "mm: compaction: allow compaction to isolate dirty pages\n\nShort summary: There are severe stalls when a USB stick using VFAT is\nused with THP enabled that are reduced by this series.  If you are\nexperiencing this problem, please test and report back and considering I\nhave seen complaints from openSUSE and Fedora users on this as well as a\nfew private mails, I\u0027m guessing it\u0027s a widespread issue.  This is a new\ntype of USB-related stall because it is due to synchronous compaction\nwriting where as in the past the big problem was dirty pages reaching\nthe end of the LRU and being written by reclaim.\n\nAm cc\u0027ing Andrew this time and this series would replace\nmm-do-not-stall-in-synchronous-compaction-for-thp-allocations.patch.\nI\u0027m also cc\u0027ing Dave Jones as he might have merged that patch to Fedora\nfor wider testing and ideally it would be reverted and replaced by this\nseries.\n\nThat said, the later patches could really do with some review.  If this\nseries is not the answer then a new direction needs to be discussed\nbecause as it is, the stalls are unacceptable as the results in this\nleader show.\n\nFor testers that try backporting this to 3.1, it won\u0027t work because\nthere is a non-obvious dependency on not writing back pages in direct\nreclaim so you need those patches too.\n\nChangelog since V5\no Rebase to 3.2-rc5\no Tidy up the changelogs a bit\n\nChangelog since V4\no Added reviewed-bys, credited Andrea properly for sync-light\no Allow dirty pages without mappings to be considered for migration\no Bound the number of pages freed for compaction\no Isolate PageReclaim pages on their own LRU list\n\nThis is against 3.2-rc5 and follows on from discussions on \"mm: Do\nnot stall in synchronous compaction for THP allocations\" and \"[RFC\nPATCH 0/5] Reduce compaction-related stalls\". Initially, the proposed\npatch eliminated stalls due to compaction which sometimes resulted in\nuser-visible interactivity problems on browsers by simply never using\nsync compaction. The downside was that THP success allocation rates\nwere lower because dirty pages were not being migrated as reported by\nAndrea. His approach at fixing this was nacked on the grounds that\nit reverted fixes from Rik merged that reduced the amount of pages\nreclaimed as it severely impacted his workloads performance.\n\nThis series attempts to reconcile the requirements of maximising THP\nusage, without stalling in a user-visible fashion due to compaction\nor cheating by reclaiming an excessive number of pages.\n\nPatch 1 partially reverts commit 39deaf85 to allow migration to isolate\n\tdirty pages. This is because migration can move some dirty\n\tpages without blocking.\n\nPatch 2 notes that the /proc/sys/vm/compact_memory handler is not using\n\tsynchronous compaction when it should be. This is unrelated\n\tto the reported stalls but is worth fixing.\n\nPatch 3 checks if we isolated a compound page during lumpy scan and\n\taccount for it properly. For the most part, this affects\n\ttracing so it\u0027s unrelated to the stalls but worth fixing.\n\nPatch 4 notes that it is possible to abort reclaim early for compaction\n\tand return 0 to the page allocator potentially entering the\n\t\"may oom\" path. This has not been observed in practice but\n\tthe rest of the series potentially makes it easier to happen.\n\nPatch 5 adds a sync parameter to the migratepage callback and gives\n\tthe callback responsibility for migrating the page without\n\tblocking if sync\u003d\u003dfalse. For example, fallback_migrate_page\n\twill not call writepage if sync\u003d\u003dfalse. This increases the\n\tnumber of pages that can be handled by asynchronous compaction\n\tthereby reducing stalls.\n\nPatch 6 restores filter-awareness to isolate_lru_page for migration.\n\tIn practice, it means that pages under writeback and pages\n\twithout a -\u003emigratepage callback will not be isolated\n\tfor migration.\n\nPatch 7 avoids calling direct reclaim if compaction is deferred but\n\tmakes sure that compaction is only deferred if sync\n\tcompaction was used.\n\nPatch 8 introduces a sync-light migration mechanism that sync compaction\n\tuses. The objective is to allow some stalls but to not call\n\t-\u003ewritepage which can lead to significant user-visible stalls.\n\nPatch 9 notes that while we want to abort reclaim ASAP to allow\n\tcompation to go ahead that we leave a very small window of\n\topportunity for compaction to run. This patch allows more pages\n\tto be freed by reclaim but bounds the number to a reasonable\n\tlevel based on the high watermark on each zone.\n\nPatch 10 allows slabs to be shrunk even after compaction_ready() is\n\ttrue for one zone. This is to avoid a problem whereby a single\n\tsmall zone can abort reclaim even though no pages have been\n\treclaimed and no suitably large zone is in a usable state.\n\nPatch 11 fixes a problem with the rate of page scanning. As reclaim is\n\trarely stalling on pages under writeback it means that scan\n\trates are very high. This is particularly true for direct\n\treclaim which is not calling writepage. The vmstat figures\n\timplied that much of this was busy work with PageReclaim pages\n\tmarked for immediate reclaim. This patch is a prototype that\n\tmoves these pages to their own LRU list.\n\nThis has been tested and other than 2 USB keys getting trashed,\nnothing horrible fell out. That said, I am a bit unhappy with the\nrescue logic in patch 11 but did not find a better way around it. It\ndoes significantly reduce scan rates and System CPU time indicating\nit is the right direction to take.\n\nWhat is of critical importance is that stalls due to compaction\nare massively reduced even though sync compaction was still\nallowed. Testing from people complaining about stalls copying to USBs\nwith THP enabled are particularly welcome.\n\nThe following tests all involve THP usage and USB keys in some\nway. Each test follows this type of pattern\n\n1. Read from some fast fast storage, be it raw device or file. Each time\n   the copy finishes, start again until the test ends\n2. Write a large file to a filesystem on a USB stick. Each time the copy\n   finishes, start again until the test ends\n3. When memory is low, start an alloc process that creates a mapping\n   the size of physical memory to stress THP allocation. This is the\n   \"real\" part of the test and the part that is meant to trigger\n   stalls when THP is enabled. Copying continues in the background.\n4. Record the CPU usage and time to execute of the alloc process\n5. Record the number of THP allocs and fallbacks as well as the number of THP\n   pages in use a the end of the test just before alloc exited\n6. Run the test 5 times to get an idea of variability\n7. Between each run, sync is run and caches dropped and the test\n   waits until nr_dirty is a small number to avoid interference\n   or caching between iterations that would skew the figures.\n\nThe individual tests were then\n\nwritebackCPDeviceBasevfat\n\tDisable THP, read from a raw device (sda), vfat on USB stick\nwritebackCPDeviceBaseext4\n\tDisable THP, read from a raw device (sda), ext4 on USB stick\nwritebackCPDevicevfat\n\tTHP enabled, read from a raw device (sda), vfat on USB stick\nwritebackCPDeviceext4\n\tTHP enabled, read from a raw device (sda), ext4 on USB stick\nwritebackCPFilevfat\n\tTHP enabled, read from a file on fast storage and USB, both vfat\nwritebackCPFileext4\n\tTHP enabled, read from a file on fast storage and USB, both ext4\n\nThe kernels tested were\n\n3.1\t\t3.1\nvanilla\t\t3.2-rc5\nfreemore\tPatches 1-10\nimmediate\tPatches 1-11\nandrea\t\tThe 8 patches Andrea posted as a basis of comparison\n\nThe results are very long unfortunately. I\u0027ll start with the case\nwhere we are not using THP at all\n\nwritebackCPDeviceBasevfat\n                   3.1.0-vanilla         rc5-vanilla       freemore-v6r1        isolate-v6r1         andrea-v2r1\nSystem Time         1.28 (    0.00%)   54.49 (-4143.46%)   48.63 (-3687.69%)    4.69 ( -265.11%)   51.88 (-3940.81%)\n+/-                 0.06 (    0.00%)    2.45 (-4305.55%)    4.75 (-8430.57%)    7.46 (-13282.76%)    4.76 (-8440.70%)\nUser Time           0.09 (    0.00%)    0.05 (   40.91%)    0.06 (   29.55%)    0.07 (   15.91%)    0.06 (   27.27%)\n+/-                 0.02 (    0.00%)    0.01 (   45.39%)    0.02 (   25.07%)    0.00 (   77.06%)    0.01 (   52.24%)\nElapsed Time      110.27 (    0.00%)   56.38 (   48.87%)   49.95 (   54.70%)   11.77 (   89.33%)   53.43 (   51.54%)\n+/-                 7.33 (    0.00%)    3.77 (   48.61%)    4.94 (   32.63%)    6.71 (    8.50%)    4.76 (   35.03%)\nTHP Active          0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\n+/-                 0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\nFault Alloc         0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\n+/-                 0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\nFault Fallback      0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\n+/-                 0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)    0.00 (    0.00%)\n\nThe THP figures are obviously all 0 because THP was enabled. The\nmain thing to watch is the elapsed times and how they compare to\ntimes when THP is enabled later. It\u0027s also important to note that\nelapsed time is improved by this series as System CPu time is much\nreduced.\n\nwritebackCPDevicevfat\n\n                   3.1.0-vanilla         rc5-vanilla       freemore-v6r1        isolate-v6r1         andrea-v2r1\nSystem Time         1.22 (    0.00%)   13.89 (-1040.72%)   46.40 (-3709.20%)    4.44 ( -264.37%)   47.37 (-3789.33%)\n+/-                 0.06 (    0.00%)   22.82 (-37635.56%)    3.84 (-6249.44%)    6.48 (-10618.92%)    6.60\n(-10818.53%)\nUser Time           0.06 (    0.00%)    0.06 (   -6.90%)    0.05 (   17.24%)    0.05 (   13.79%)    0.04 (   31.03%)\n+/-                 0.01 (    0.00%)    0.01 (   33.33%)    0.01 (   33.33%)    0.01 (   39.14%)    0.01 (   25.46%)\nElapsed Time     10445.54 (    0.00%) 2249.92 (   78.46%)   70.06 (   99.33%)   16.59 (   99.84%)  472.43 (\n95.48%)\n+/-               643.98 (    0.00%)  811.62 (  -26.03%)   10.02 (   98.44%)    7.03 (   98.91%)   59.99 (   90.68%)\nTHP Active         15.60 (    0.00%)   35.20 (  225.64%)   65.00 (  416.67%)   70.80 (  453.85%)   62.20 (  398.72%)\n+/-                18.48 (    0.00%)   51.29 (  277.59%)   15.99 (   86.52%)   37.91 (  205.18%)   22.02 (  119.18%)\nFault Alloc       121.80 (    0.00%)   76.60 (   62.89%)  155.40 (  127.59%)  181.20 (  148.77%)  286.60 (  235.30%)\n+/-                73.51 (    0.00%)   61.11 (   83.12%)   34.89 (   47.46%)   31.88 (   43.36%)   68.13 (   92.68%)\nFault Fallback    881.20 (    0.00%)  926.60 (   -5.15%)  847.60 (    3.81%)  822.00 (    6.72%)  716.60 (   18.68%)\n+/-                73.51 (    0.00%)   61.26 (   16.67%)   34.89 (   52.54%)   31.65 (   56.94%)   67.75 (    7.84%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)       3540.88   1945.37    716.04     64.97   1937.03\nTotal Elapsed Time (seconds)              52417.33  11425.90    501.02    230.95   2520.28\n\nThe first thing to note is the \"Elapsed Time\" for the vanilla kernels\nof 2249 seconds versus 56 with THP disabled which might explain the\nreports of USB stalls with THP enabled. Applying the patches brings\nperformance in line with THP-disabled performance while isolating\npages for immediate reclaim from the LRU cuts down System CPU time.\n\nThe \"Fault Alloc\" success rate figures are also improved. The vanilla\nkernel only managed to allocate 76.6 pages on average over the course\nof 5 iterations where as applying the series allocated 181.20 on\naverage albeit it is well within variance. It\u0027s worth noting that\napplies the series at least descreases the amount of variance which\nimplies an improvement.\n\nAndrea\u0027s series had a higher success rate for THP allocations but\nat a severe cost to elapsed time which is still better than vanilla\nbut still much worse than disabling THP altogether. One can bring my\nseries close to Andrea\u0027s by removing this check\n\n        /*\n         * If compaction is deferred for high-order allocations, it is because\n         * sync compaction recently failed. In this is the case and the caller\n         * has requested the system not be heavily disrupted, fail the\n         * allocation now instead of entering direct reclaim\n         */\n        if (deferred_compaction \u0026\u0026 (gfp_mask \u0026 __GFP_NO_KSWAPD))\n                goto nopage;\n\nI didn\u0027t include a patch that removed the above check because hurting\noverall performance to improve the THP figure is not what the average\nuser wants. It\u0027s something to consider though if someone really wants\nto maximise THP usage no matter what it does to the workload initially.\n\nThis is summary of vmstat figures from the same test.\n\n                                       3.1.0-vanilla rc5-vanilla freemore-v6r1 isolate-v6r1 andrea-v2r1\nPage Ins                                  3257266139  1111844061    17263623    10901575   161423219\nPage Outs                                   81054922    30364312     3626530     3657687     8753730\nSwap Ins                                        3294        2851        6560        4964        4592\nSwap Outs                                     390073      528094      620197      790912      698285\nDirect pages scanned                      1077581700  3024951463  1764930052   115140570  5901188831\nKswapd pages scanned                        34826043     7112868     2131265     1686942     1893966\nKswapd pages reclaimed                      28950067     4911036     1246044      966475     1497726\nDirect pages reclaimed                     805148398   280167837     3623473     2215044    40809360\nKswapd efficiency                                83%         69%         58%         57%         79%\nKswapd velocity                              664.399     622.521    4253.852    7304.360     751.490\nDirect efficiency                                74%          9%          0%          1%          0%\nDirect velocity                            20557.737  264745.137 3522673.849  498551.938 2341481.435\nPercentage direct scans                          96%         99%         99%         98%         99%\nPage writes by reclaim                        722646      529174      620319      791018      699198\nPage writes file                              332573        1080         122         106         913\nPage writes anon                              390073      528094      620197      790912      698285\nPage reclaim immediate                             0  2552514720  1635858848   111281140  5478375032\nPage rescued immediate                             0           0           0       87848           0\nSlabs scanned                                  23552       23552        9216        8192        9216\nDirect inode steals                              231           0           0           0           0\nKswapd inode steals                                0           0           0           0           0\nKswapd skipped wait                            28076         786           0          61           6\nTHP fault alloc                                  609         383         753         906        1433\nTHP collapse alloc                                12           6           0           0           6\nTHP splits                                       536         211         456         593        1136\nTHP fault fallback                              4406        4633        4263        4110        3583\nTHP collapse fail                                120         127           0           0           4\nCompaction stalls                               1810         728         623         779        3200\nCompaction success                               196          53          60          80         123\nCompaction failures                             1614         675         563         699        3077\nCompaction pages moved                        193158       53545      243185      333457      226688\nCompaction move failure                         9952        9396       16424       23676       45070\n\nThe main things to look at are\n\n1. Page In/out figures are much reduced by the series.\n\n2. Direct page scanning is incredibly high (264745.137 pages scanned\n   per second on the vanilla kernel) but isolating PageReclaim pages\n   on their own list reduces the number of pages scanned significantly.\n\n3. The fact that \"Page rescued immediate\" is a positive number implies\n   that we sometimes race removing pages from the LRU_IMMEDIATE list\n   that need to be put back on a normal LRU but it happens only for\n   0.07% of the pages marked for immediate reclaim.\n\nwritebackCPDeviceext4\n                   3.1.0-vanilla         rc5-vanilla       freemore-v6r1        isolate-v6r1         andrea-v2r1\nSystem Time         1.51 (    0.00%)    1.77 (  -17.66%)    1.46 (    2.92%)    1.15 (   23.77%)    1.89 (  -25.63%)\n+/-                 0.27 (    0.00%)    0.67 ( -148.52%)    0.33 (  -22.76%)    0.30 (  -11.15%)    0.19 (   30.16%)\nUser Time           0.03 (    0.00%)    0.04 (  -37.50%)    0.05 (  -62.50%)    0.07 ( -112.50%)    0.04 (  -18.75%)\n+/-                 0.01 (    0.00%)    0.02 ( -146.64%)    0.02 (  -97.91%)    0.02 (  -75.59%)    0.02 (  -63.30%)\nElapsed Time      124.93 (    0.00%)  114.49 (    8.36%)   96.77 (   22.55%)   27.48 (   78.00%)  205.70 (  -64.65%)\n+/-                20.20 (    0.00%)   74.39 ( -268.34%)   59.88 ( -196.48%)    7.72 (   61.79%)   25.03 (  -23.95%)\nTHP Active        161.80 (    0.00%)   83.60 (   51.67%)  141.20 (   87.27%)   84.60 (   52.29%)   82.60 (   51.05%)\n+/-                71.95 (    0.00%)   43.80 (   60.88%)   26.91 (   37.40%)   59.02 (   82.03%)   52.13 (   72.45%)\nFault Alloc       471.40 (    0.00%)  228.60 (   48.49%)  282.20 (   59.86%)  225.20 (   47.77%)  388.40 (   82.39%)\n+/-                88.07 (    0.00%)   87.42 (   99.26%)   73.79 (   83.78%)  109.62 (  124.47%)   82.62 (   93.81%)\nFault Fallback    531.60 (    0.00%)  774.60 (  -45.71%)  720.80 (  -35.59%)  777.80 (  -46.31%)  614.80 (  -15.65%)\n+/-                88.07 (    0.00%)   87.26 (    0.92%)   73.79 (   16.22%)  109.62 (  -24.47%)   82.29 (    6.56%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)         50.22     33.76     30.65     24.14    128.45\nTotal Elapsed Time (seconds)               1113.73   1132.19   1029.45    759.49   1707.26\n\nSimilar test but the USB stick is using ext4 instead of vfat. As\next4 does not use writepage for migration, the large stalls due to\ncompaction when THP is enabled are not observed. Still, isolating\nPageReclaim pages on their own list helped completion time largely\nby reducing the number of pages scanned by direct reclaim although\ntime spend in congestion_wait could also be a factor.\n\nAgain, Andrea\u0027s series had far higher success rates for THP allocation\nat the cost of elapsed time. I didn\u0027t look too closely but a quick\nlook at the vmstat figures tells me kswapd reclaimed 8 times more pages\nthan the patch series and direct reclaim reclaimed roughly three times\nas many pages. It follows that if memory is aggressively reclaimed,\nthere will be more available for THP.\n\nwritebackCPFilevfat\n                   3.1.0-vanilla         rc5-vanilla       freemore-v6r1        isolate-v6r1         andrea-v2r1\nSystem Time         1.76 (    0.00%)   29.10 (-1555.52%)   46.01 (-2517.18%)    4.79 ( -172.35%)   54.89 (-3022.53%)\n+/-                 0.14 (    0.00%)   25.61 (-18185.17%)    2.15 (-1434.83%)    6.60 (-4610.03%)    9.75\n(-6863.76%)\nUser Time           0.05 (    0.00%)    0.07 (  -45.83%)    0.05 (   -4.17%)    0.06 (  -29.17%)    0.06 (  -16.67%)\n+/-                 0.02 (    0.00%)    0.02 (   20.11%)    0.02 (   -3.14%)    0.01 (   31.58%)    0.01 (   47.41%)\nElapsed Time     22520.79 (    0.00%) 1082.85 (   95.19%)   73.30 (   99.67%)   32.43 (   99.86%)  291.84 (  98.70%)\n+/-              7277.23 (    0.00%)  706.29 (   90.29%)   19.05 (   99.74%)   17.05 (   99.77%)  125.55 (   98.27%)\nTHP Active         83.80 (    0.00%)   12.80 (   15.27%)   15.60 (   18.62%)   13.00 (   15.51%)    0.80 (    0.95%)\n+/-                66.81 (    0.00%)   20.19 (   30.22%)    5.92 (    8.86%)   15.06 (   22.54%)    1.17 (    1.75%)\nFault Alloc       171.00 (    0.00%)   67.80 (   39.65%)   97.40 (   56.96%)  125.60 (   73.45%)  133.00 (   77.78%)\n+/-                82.91 (    0.00%)   30.69 (   37.02%)   53.91 (   65.02%)   55.05 (   66.40%)   21.19 (   25.56%)\nFault Fallback    832.00 (    0.00%)  935.20 (  -12.40%)  906.00 (   -8.89%)  877.40 (   -5.46%)  870.20 (   -4.59%)\n+/-                82.91 (    0.00%)   30.69 (   62.98%)   54.01 (   34.86%)   55.05 (   33.60%)   20.91 (   74.78%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)       7229.81    928.42    704.52     80.68   1330.76\nTotal Elapsed Time (seconds)             112849.04   5618.69    571.11    360.54   1664.28\n\nIn this case, the test is reading/writing only from filesystems but as\nit\u0027s vfat, it\u0027s slow due to calling writepage during compaction. Little\nto observe really - the time to complete the test goes way down\nwith the series applied and THP allocation success rates go up in\ncomparison to 3.2-rc5.  The success rates are lower than 3.1.0 but\nthe elapsed time for that kernel is abysmal so it is not really a\nsensible comparison.\n\nAs before, Andrea\u0027s series allocates more THPs at the cost of overall\nperformance.\n\nwritebackCPFileext4\n                   3.1.0-vanilla         rc5-vanilla       freemore-v6r1        isolate-v6r1         andrea-v2r1\nSystem Time         1.51 (    0.00%)    1.77 (  -17.66%)    1.46 (    2.92%)    1.15 (   23.77%)    1.89 (  -25.63%)\n+/-                 0.27 (    0.00%)    0.67 ( -148.52%)    0.33 (  -22.76%)    0.30 (  -11.15%)    0.19 (   30.16%)\nUser Time           0.03 (    0.00%)    0.04 (  -37.50%)    0.05 (  -62.50%)    0.07 ( -112.50%)    0.04 (  -18.75%)\n+/-                 0.01 (    0.00%)    0.02 ( -146.64%)    0.02 (  -97.91%)    0.02 (  -75.59%)    0.02 (  -63.30%)\nElapsed Time      124.93 (    0.00%)  114.49 (    8.36%)   96.77 (   22.55%)   27.48 (   78.00%)  205.70 (  -64.65%)\n+/-                20.20 (    0.00%)   74.39 ( -268.34%)   59.88 ( -196.48%)    7.72 (   61.79%)   25.03 (  -23.95%)\nTHP Active        161.80 (    0.00%)   83.60 (   51.67%)  141.20 (   87.27%)   84.60 (   52.29%)   82.60 (   51.05%)\n+/-                71.95 (    0.00%)   43.80 (   60.88%)   26.91 (   37.40%)   59.02 (   82.03%)   52.13 (   72.45%)\nFault Alloc       471.40 (    0.00%)  228.60 (   48.49%)  282.20 (   59.86%)  225.20 (   47.77%)  388.40 (   82.39%)\n+/-                88.07 (    0.00%)   87.42 (   99.26%)   73.79 (   83.78%)  109.62 (  124.47%)   82.62 (   93.81%)\nFault Fallback    531.60 (    0.00%)  774.60 (  -45.71%)  720.80 (  -35.59%)  777.80 (  -46.31%)  614.80 (  -15.65%)\n+/-                88.07 (    0.00%)   87.26 (    0.92%)   73.79 (   16.22%)  109.62 (  -24.47%)   82.29 (    6.56%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)         50.22     33.76     30.65     24.14    128.45\nTotal Elapsed Time (seconds)               1113.73   1132.19   1029.45    759.49   1707.26\n\nSame type of story - elapsed times go down. In this case, allocation\nsuccess rates are roughtly the same. As before, Andrea\u0027s has higher\nsuccess rates but takes a lot longer.\n\nOverall the series does reduce latencies and while the tests are\ninherency racy as alloc competes with the cp processes, the variability\nwas included. The THP allocation rates are not as high as they could\nbe but that is because we would have to be more aggressive about\nreclaim and compaction impacting overall performance.\n\nThis patch:\n\nCommit 39deaf85 (\"mm: compaction: make isolate_lru_page() filter-aware\")\nnoted that compaction does not migrate dirty or writeback pages and that\nis was meaningless to pick the page and re-add it to the LRU list.\n\nWhat was missed during review is that asynchronous migration moves dirty\npages if their -\u003emigratepage callback is migrate_page() because these can\nbe moved without blocking.  This potentially impacted hugepage allocation\nsuccess rates by a factor depending on how many dirty pages are in the\nsystem.\n\nThis patch partially reverts 39deaf85 to allow migration to isolate dirty\npages again.  This increases how much compaction disrupts the LRU but that\nis addressed later in the series.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "ea4d349ffa8028c655236497c2ba17c17aaa0d65",
      "tree": "b983961282dea73db03a1257fa4aaec109aee5cc",
      "parents": [
        "45676885b76237a4c236d26fe20a9b0cfdb2eb22"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Thu Jan 12 17:19:20 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "vmscan/trace: Add \u0027file\u0027 info to trace_mm_vmscan_lru_isolate()\n\nIn trace_mm_vmscan_lru_isolate(), we don\u0027t output \u0027file\u0027 information to\nthe trace event and it is a bit inconvenient for the user to get the\nreal information(like pasted below).  mm_vmscan_lru_isolate:\nisolate_mode\u003d2 order\u003d0 nr_requested\u003d32 nr_scanned\u003d32 nr_taken\u003d32\ncontig_taken\u003d0 contig_dirty\u003d0 contig_failed\u003d0\n\n\u0027active\u0027 can be obtained by analyzing mode(Thanks go to Minchan and\nMel), So this patch adds \u0027file\u0027 to the trace event and it now looks\nlike: mm_vmscan_lru_isolate: isolate_mode\u003d2 order\u003d0 nr_requested\u003d32\nnr_scanned\u003d32 nr_taken\u003d32 contig_taken\u003d0 contig_dirty\u003d0 contig_failed\u003d0\nfile\u003d0\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "45676885b76237a4c236d26fe20a9b0cfdb2eb22",
      "tree": "e1a5222c4c7b439cb6a27ace0e36e0280f8b7870",
      "parents": [
        "f21760b15dcd091e5afd38d0b97197b45f7ef2ea"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 12 17:19:18 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "thp: improve order in lru list for split huge page\n\nPut the tail subpages of an isolated hugepage under splitting in the lru\nreclaim head as they supposedly should be isolated too next.\n\nQueues the subpages in physical order in the lru for non isolated\nhugepages under splitting.  That might provide some theoretical cache\nbenefit to the buddy allocator later.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f21760b15dcd091e5afd38d0b97197b45f7ef2ea",
      "tree": "84dd0f9016b46630d6b67e48ff0382b78a1bc519",
      "parents": [
        "e5591307f0c1eb733d280a0b72473e01d7f88530"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 12 17:19:16 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "thp: add tlb_remove_pmd_tlb_entry\n\nWe have tlb_remove_tlb_entry to indicate a pte tlb flush entry should be\nflushed, but not a corresponding API for pmd entry.  This isn\u0027t a\nproblem so far because THP is only for x86 currently and tlb_flush()\nunder x86 will flush entire TLB.  But this is confusion and could be\nmissed if thp is ported to other arch.\n\nAlso convert tlb-\u003eneed_flush \u003d 1 to a VM_BUG_ON(!tlb-\u003eneed_flush) in\n__tlb_remove_page() as suggested by Andrea Arcangeli.  The\n__tlb_remove_page() function is supposed to be called after\ntlb_remove_xxx_tlb_entry() and we can catch any misuse.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e5591307f0c1eb733d280a0b72473e01d7f88530",
      "tree": "3021a7e07c92e63260d1d03f14f34f771399aa92",
      "parents": [
        "569e55900a5c3c30de6e25c3f259ae7c7dbadb96"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 12 17:19:13 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "thp: remove unnecessary tlb flush for mprotect\n\nchange_protection() will do TLB flush later, don\u0027t need duplicate tlb\nflush.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "569e55900a5c3c30de6e25c3f259ae7c7dbadb96",
      "tree": "66bfd4d2ea26f1b9d77580d5397a07552a62e4fd",
      "parents": [
        "0efc8eb9c6a177836dac88b2cbb8815f9e4f8d5a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Jan 12 17:19:11 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "thp: improve the error code path\n\nImprove the error code path.  Delete unnecessary sysfs file for example.\nAlso remove the #ifdef xxx to make code better.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0efc8eb9c6a177836dac88b2cbb8815f9e4f8d5a",
      "tree": "e0da1e44675f2c8be76f75b39efefc5f96c64a3f",
      "parents": [
        "d0048b0e59c1218d62bb4d014f34bbd7e7c0a214"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Thu Jan 12 17:19:08 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:08 2012 -0800"
      },
      "message": "page_cgroup: drop multi CONFIG_MEMORY_HOTPLUG\n\nNo need for two CONFIG_MEMORY_HOTPLUG blocks.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "d0048b0e59c1218d62bb4d014f34bbd7e7c0a214",
      "tree": "f6a69889bcb60b253ab37029616ebe6fa2bd24f9",
      "parents": [
        "3ed28fa1080c73747ce17f2025b28b062fb5aa7f"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Thu Jan 12 17:19:07 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "page_alloc: break early in check_for_regular_memory()\n\nIf there is a zone below ZONE_NORMAL has present_pages, we can set node\nstate to N_NORMAL_MEMORY, no need to loop to end.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "3ed28fa1080c73747ce17f2025b28b062fb5aa7f",
      "tree": "f4eab7da502fb728fac728220bc1f296ee04dca1",
      "parents": [
        "38c5d72f3ebe5ddd57d2f08dc035070fc6c9a287"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Thu Jan 12 17:19:04 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: cleanup for_each_node_state()\n\nWe already have for_each_node(node) define in nodemask.h, better to use it.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "38c5d72f3ebe5ddd57d2f08dc035070fc6c9a287",
      "tree": "6461c0dfec95dccc92191f059fbe99b5660a8860",
      "parents": [
        "4e5f01c2b9b94321992acb09c35d34f5ee5bb274"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:19:01 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: simplify LRU handling by new rule\n\nNow, at LRU handling, memory cgroup needs to do complicated works to see\nvalid pc-\u003emem_cgroup, which may be overwritten.\n\nThis patch is for relaxing the protocol. This patch guarantees\n   - when pc-\u003emem_cgroup is overwritten, page must not be on LRU.\n\nBy this, LRU routine can believe pc-\u003emem_cgroup and don\u0027t need to check\nbits on pc-\u003eflags.  This new rule may adds small overheads to swapin.  But\nin most case, lru handling gets faster.\n\nAfter this patch, PCG_ACCT_LRU bit is obsolete and removed.\n\n[akpm@linux-foundation.org: remove unneeded VM_BUG_ON(), restore hannes\u0027s christmas tree]\n[akpm@linux-foundation.org: clean up code comment]\n[hughd@google.com: fix NULL mem_cgroup_try_charge]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\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": "4e5f01c2b9b94321992acb09c35d34f5ee5bb274",
      "tree": "4e6ac9d29539dc26468fe2630d0e64cd022b1155",
      "parents": [
        "36b62ad539498d00c2d280a151abad5f7630fa73"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:58 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: clear pc-\u003emem_cgroup if necessary.\n\nThis is a preparation before removing a flag PCG_ACCT_LRU in page_cgroup\nand reducing atomic ops/complexity in memcg LRU handling.\n\nIn some cases, pages are added to lru before charge to memcg and pages\nare not classfied to memory cgroup at lru addtion.  Now, the lru where\nthe page should be added is determined a bit in page_cgroup-\u003eflags and\npc-\u003emem_cgroup.  I\u0027d like to remove the check of flag.\n\nTo handle the case pc-\u003emem_cgroup may contain stale pointers if pages\nare added to LRU before classification.  This patch resets\npc-\u003emem_cgroup to root_mem_cgroup before lru additions.\n\n[akpm@linux-foundation.org: fix CONFIG_CGROUP_MEM_CONT\u003dn build]\n[hughd@google.com: fix CONFIG_CGROUP_MEM_RES_CTLR\u003dy CONFIG_CGROUP_MEM_RES_CTLR_SWAP\u003dn build]\n[akpm@linux-foundation.org: ksm.c needs memcontrol.h, per Michal]\n[hughd@google.com: stop oops in mem_cgroup_reset_owner()]\n[hughd@google.com: fix page migration to reset_owner]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\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": "36b62ad539498d00c2d280a151abad5f7630fa73",
      "tree": "553409901df6210e4a698c1991f9d455199e098b",
      "parents": [
        "dc67d50465f249bb357bf85b3ed1f642eb00130a"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:57 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: simplify corner case handling of LRU.\n\nThis patch simplifies LRU handling of racy case (memcg+SwapCache).  At\ncharging, SwapCache tend to be on LRU already.  So, before overwriting\npc-\u003emem_cgroup, the page must be removed from LRU and added to LRU\nlater.\n\nThis patch does\n        spin_lock(zone-\u003elru_lock);\n        if (PageLRU(page))\n                remove from LRU\n        overwrite pc-\u003emem_cgroup\n        if (PageLRU(page))\n                add to new LRU.\n        spin_unlock(zone-\u003elru_lock);\n\nAnd guarantee all pages are not on LRU at modifying pc-\u003emem_cgroup.\nThis patch also unfies lru handling of replace_page_cache() and\nswapin.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.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": "dc67d50465f249bb357bf85b3ed1f642eb00130a",
      "tree": "f3808a1bebe5dfbf1691603007966b7222376d55",
      "parents": [
        "de077d222d5ca6108cab119a09593344c12100ab"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:55 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: simplify page cache charging\n\nThis patch is a clean up. No functional/logical changes.\n\nBecause of commit ef6a3c6311 (\"mm: add replace_page_cache_page()\nfunction\") , FUSE uses replace_page_cache() instead of\nadd_to_page_cache().  Then, mem_cgroup_cache_charge() is not called\nagainst FUSE\u0027s pages from splice.\n\nSo now, mem_cgroup_cache_charge() gets pages that are not on the LRU\nwith the exception of PageSwapCache pages.  For checking,\nWARN_ON_ONCE(PageLRU(page)) is added.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.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": "de077d222d5ca6108cab119a09593344c12100ab",
      "tree": "c59efc8b4fff063d2c318480881050b1913ed21b",
      "parents": [
        "c3cecc683446ad54ca587d7123bd3ce94bd7b8e1"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Thu Jan 12 17:18:52 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "oom, memcg: fix exclusion of memcg threads after they have detached their mm\n\nThe oom killer relies on logic that identifies threads that have already\nbeen oom killed when scanning the tasklist and, if found, deferring\nuntil such threads have exited.  This is done by checking for any\ncandidate threads that have the TIF_MEMDIE bit set.\n\nFor memcg ooms, candidate threads are first found by calling\ntask_in_mem_cgroup() since the oom killer should not defer if there\u0027s an\noom killed thread in another memcg.\n\nUnfortunately, task_in_mem_cgroup() excludes threads if they have\ndetached their mm in the process of exiting so TIF_MEMDIE is never\ndetected for such conditions.  This is different for global, mempolicy,\nand cpuset oom conditions where a detached mm is only excluded after\nchecking for TIF_MEMDIE and deferring, if necessary, in\nselect_bad_process().\n\nThe fix is to return true if a task has a detached mm but is still in\nthe memcg or its hierarchy that is currently oom.  This will allow the\noom killer to appropriately defer rather than kill unnecessarily or, in\nthe worst case, panic the machine if nothing else is available to kill.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c3cecc683446ad54ca587d7123bd3ce94bd7b8e1",
      "tree": "27dfb859c1c45a6369d62eac4b5b9ad62871b7ce",
      "parents": [
        "9fb4b7cc0724f178d4b24a2a566ea1e7cb120b82"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Thu Jan 12 17:18:50 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "memcg: free entries in soft_limit_tree if allocation fails\n\nIf we are not able to allocate tree nodes for all NUMA nodes then we\nshould release those that were allocated.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9fb4b7cc0724f178d4b24a2a566ea1e7cb120b82",
      "tree": "0f2db9102d46f5e5c8492864fb1bd21f2e7cd768",
      "parents": [
        "40f23a21a8501c1b2c65c50c19b516488ac31313"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Thu Jan 12 17:18:48 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:07 2012 -0800"
      },
      "message": "page_cgroup: add helper function to get swap_cgroup\n\nThere are multiple places which need to get the swap_cgroup address, so\nadd a helper function:\n\n  static struct swap_cgroup *swap_cgroup_getsc(swp_entry_t ent,\n                                struct swap_cgroup_ctrl **ctrl);\n\nto simplify the code.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "40f23a21a8501c1b2c65c50c19b516488ac31313",
      "tree": "4e70dbd9e7cc1dda350156bf05786ede7dbf8256",
      "parents": [
        "7a0524cfc8f9f585471a31b1282a9ce4a1a7d444"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:45 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: remove unneeded checks from uncharge_page()\n\nmem_cgroup_uncharge_page() is only called on either freshly allocated\npages without page-\u003emapping or on rmapped PageAnon() pages.  There is no\nneed to check for a page-\u003emapping that is not an anon_vma.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.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": "7a0524cfc8f9f585471a31b1282a9ce4a1a7d444",
      "tree": "4e31e1ec7e892d67e48d1199b9e8590ad5718e7a",
      "parents": [
        "00c54c0bac24bb02d2460c516da76651a7451286"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:43 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: remove unneeded checks from newpage_charge()\n\nAll callsites pass in freshly allocated pages and a valid mm.  As a\nresult, all checks pertaining to the page\u0027s mapcount, page-\u003emapping or the\nfallback to init_mm are unneeded.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.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": "00c54c0bac24bb02d2460c516da76651a7451286",
      "tree": "d88356ab217fa4c119a6c11dd7f614413adc020a",
      "parents": [
        "cfa449461e67b60df986170eecb089831fa9e49a"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Thu Jan 12 17:18:40 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: page_cgroup: check page_cgroup arrays in lookup_page_cgroup() only when necessary\n\nlookup_page_cgroup() is usually used only against pages that are used in\nuserspace.\n\nThe exception is the CONFIG_DEBUG_VM-only memcg check from the page\nallocator: it can run on pages without page_cgroup descriptors allocated\nwhen the pages are fed into the page allocator for the first time during\nboot or memory hotplug.\n\nInclude the array check only when CONFIG_DEBUG_VM is set and save the\nunnecessary check in production kernels.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.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": "cfa449461e67b60df986170eecb089831fa9e49a",
      "tree": "ff40cff591e27250b91b2f1fb4409875f397b048",
      "parents": [
        "0e574a932d2cab8eb3b02d21feb59f2c09154738"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:38 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: lookup_page_cgroup (almost) never returns NULL\n\nPages have their corresponding page_cgroup descriptors set up before\nthey are used in userspace, and thus managed by a memory cgroup.\n\nThe only time where lookup_page_cgroup() can return NULL is in the\nCONFIG_DEBUG_VM-only page sanity checking code that executes while\nfeeding pages into the page allocator for the first time.\n\nRemove the NULL checks against lookup_page_cgroup() results from all\ncallsites where we know that corresponding page_cgroup descriptors must\nbe allocated, and add a comment to the callsite that actually does have\nto check the return value.\n\n[hughd@google.com: stop oops in mem_cgroup_update_page_stat()]\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\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": "0e574a932d2cab8eb3b02d21feb59f2c09154738",
      "tree": "5bfae84ec49d6e92efcf6ba1cb92235f546c8e38",
      "parents": [
        "72835c86ca15d0126354b73d5f29ce9194931c9b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:35 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: memcg: clean up fault accounting\n\nThe fault accounting functions have a single, memcg-internal user, so they\ndon\u0027t need to be global.  In fact, their one-line bodies can be directly\nfolded into the caller.  And since faults happen one at a time, use\nthis_cpu_inc() directly instead of this_cpu_add(foo, 1).\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.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": "72835c86ca15d0126354b73d5f29ce9194931c9b",
      "tree": "369f31168b405e4d597b3cd067a1fd0ac2025dbc",
      "parents": [
        "ec0fffd84b162e0563a28a81aa049f946b31a8e2"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:32 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: unify remaining mem_cont, mem, etc. variable names to memcg\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.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": "ec0fffd84b162e0563a28a81aa049f946b31a8e2",
      "tree": "48e4c79076a917207c869b960ecd26da8fcb8505",
      "parents": [
        "0527b6903b2838e214c895d527806aefd61b3c8f"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:29 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:06 2012 -0800"
      },
      "message": "mm: oom_kill: remove memcg argument from oom_kill_task()\n\nThe memcg argument of oom_kill_task() hasn\u0027t been used since 341aea2\n\u0027oom-kill: remove boost_dying_task_prio()\u0027.  Kill it.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.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": "f53d7ce32e13dbd09573b176e6521a04c2c77803",
      "tree": "af88d1c256d06e3d37c5df013de9ff41f86ed4a2",
      "parents": [
        "e94c8a9cbce1aee4af9e1285802785481b7f93c5"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:23 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: memcg: shorten preempt-disabled section around event checks\n\nOnly the ratelimit checks themselves have to run with preemption\ndisabled, the resulting actions - checking for usage thresholds,\nupdating the soft limit tree - can and should run with preemption\nenabled.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReported-by: Yong Zhang \u003cyong.zhang0@gmail.com\u003e\nTested-by: Yong Zhang \u003cyong.zhang0@gmail.com\u003e\nReported-by: Luis Henriques \u003chenrix@camandro.org\u003e\nTested-by: Luis Henriques \u003chenrix@camandro.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\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": "e94c8a9cbce1aee4af9e1285802785481b7f93c5",
      "tree": "14d496e62c2e8d59a8954ff10368d59d8dfaea03",
      "parents": [
        "6b208e3f6e35aa76d254c395bdcd984b17c6b626"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:18:20 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "memcg: make mem_cgroup_split_huge_fixup() more efficient\n\nIn split_huge_page(), mem_cgroup_split_huge_fixup() is called to handle\npage_cgroup modifcations.  It takes move_lock_page_cgroup() and modifies\npage_cgroup and LRU accounting jobs and called HPAGE_PMD_SIZE - 1 times.\n\nBut thinking again,\n  - compound_lock() is held at move_accout...then, it\u0027s not necessary\n    to take move_lock_page_cgroup().\n  - LRU is locked and all tail pages will go into the same LRU as\n    head is now on.\n  - page_cgroup is contiguous in huge page range.\n\nThis patch fixes mem_cgroup_split_huge_fixup() as to be called once per\nhugepage and reduce costs for spliting.\n\n[akpm@linux-foundation.org: fix typo, per Michal]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6b208e3f6e35aa76d254c395bdcd984b17c6b626",
      "tree": "f7e65f9e1fa41907bf48f05007a10c83be668b3f",
      "parents": [
        "925b7673cce39116ce61e7a06683a4a0dad1e72a"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:18 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: memcg: remove unused node/section info from pc-\u003eflags\n\nTo find the page corresponding to a certain page_cgroup, the pc-\u003eflags\nencoded the node or section ID with the base array to compare the pc\npointer to.\n\nNow that the per-memory cgroup LRU lists link page descriptors directly,\nthere is no longer any code that knows the struct page_cgroup of a PFN\nbut not the struct page.\n\n[hughd@google.com: remove unused node/section info from pc-\u003eflags fix]\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: \"Kirill A. Shutemov\" \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\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": "925b7673cce39116ce61e7a06683a4a0dad1e72a",
      "tree": "66c134db836e531e196ee3dfc23c124ff74ac827",
      "parents": [
        "6290df545814990ca2663baf6e894669132d5f73"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:15 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: make per-memcg LRU lists exclusive\n\nNow that all code that operated on global per-zone LRU lists is\nconverted to operate on per-memory cgroup LRU lists instead, there is no\nreason to keep the double-LRU scheme around any longer.\n\nThe pc-\u003elru member is removed and page-\u003elru is linked directly to the\nper-memory cgroup LRU lists, which removes two pointers from a\ndescriptor that exists for every page frame in the system.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.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": "6290df545814990ca2663baf6e894669132d5f73",
      "tree": "c62472270ba81a7146bed0854be74e2e2338c629",
      "parents": [
        "b95a2f2d486d0d768a92879c023a03757b9c7e58"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:10 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: collect LRU list heads into struct lruvec\n\nHaving a unified structure with a LRU list set for both global zones and\nper-memcg zones allows to keep that code simple which deals with LRU\nlists and does not care about the container itself.\n\nOnce the per-memcg LRU lists directly link struct pages, the isolation\nfunction and all other list manipulations are shared between the memcg\ncase and the global LRU case.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\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": "b95a2f2d486d0d768a92879c023a03757b9c7e58",
      "tree": "4f07a63d7587131bd82c49e0d9ac124d057539fd",
      "parents": [
        "ad2b8e601099a23dffffb53f91c18d874fe98854"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:06 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: vmscan: convert global reclaim to per-memcg LRU lists\n\nThe global per-zone LRU lists are about to go away on memcg-enabled\nkernels, global reclaim must be able to find its pages on the per-memcg\nLRU lists.\n\nSince the LRU pages of a zone are distributed over all existing memory\ncgroups, a scan target for a zone is complete when all memory cgroups\nare scanned for their proportional share of a zone\u0027s memory.\n\nThe forced scanning of small scan targets from kswapd is limited to\nzones marked unreclaimable, otherwise kswapd can quickly overreclaim by\nforce-scanning the LRU lists of multiple memory cgroups.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\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": "ad2b8e601099a23dffffb53f91c18d874fe98854",
      "tree": "6b7706f3005fd799f23d0ddc21fe5b33fd1e79ac",
      "parents": [
        "5660048ccac8735d9bc0a46325a02e6a6518b5b2"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:18:02 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: memcg: remove optimization of keeping the root_mem_cgroup LRU lists empty\n\nroot_mem_cgroup, lacking a configurable limit, was never subject to\nlimit reclaim, so the pages charged to it could be kept off its LRU\nlists.  They would be found on the global per-zone LRU lists upon\nphysical memory pressure and it made sense to avoid uselessly linking\nthem to both lists.\n\nThe global per-zone LRU lists are about to go away on memcg-enabled\nkernels, with all pages being exclusively linked to their respective\nper-memcg LRU lists.  As a result, pages of the root_mem_cgroup must\nalso be linked to its LRU lists again.  This is purely about the LRU\nlist, root_mem_cgroup is still not charged.\n\nThe overhead is temporary until the double-LRU scheme is going away\ncompletely.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\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": "5660048ccac8735d9bc0a46325a02e6a6518b5b2",
      "tree": "4b2269ddd6ca001843187a89fb91278192028d87",
      "parents": [
        "527a5ec9a53471d855291ba9f1fdf1dd4e12a184"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:59 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:05 2012 -0800"
      },
      "message": "mm: move memcg hierarchy reclaim to generic reclaim code\n\nMemory cgroup limit reclaim and traditional global pressure reclaim will\nsoon share the same code to reclaim from a hierarchical tree of memory\ncgroups.\n\nIn preparation of this, move the two right next to each other in\nshrink_zone().\n\nThe mem_cgroup_hierarchical_reclaim() polymath is split into a soft\nlimit reclaim function, which still does hierarchy walking on its own,\nand a limit (shrinking) reclaim function, which relies on generic\nreclaim code to walk the hierarchy.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\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": "527a5ec9a53471d855291ba9f1fdf1dd4e12a184",
      "tree": "156a8be57e66e1c6f54e498beda0f2d8412cee12",
      "parents": [
        "f16015fbf2f6ac45505d6ad21455ff9f6c14473d"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:55 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "mm: memcg: per-priority per-zone hierarchy scan generations\n\nMemory cgroup limit reclaim currently picks one memory cgroup out of the\ntarget hierarchy, remembers it as the last scanned child, and reclaims\nall zones in it with decreasing priority levels.\n\nThe new hierarchy reclaim code will pick memory cgroups from the same\nhierarchy concurrently from different zones and priority levels, it\nbecomes necessary that hierarchy roots not only remember the last\nscanned child, but do so for each zone and priority level.\n\nUntil now, we reclaimed memcgs like this:\n\n    mem \u003d mem_cgroup_iter(root)\n    for each priority level:\n      for each zone in zonelist:\n        reclaim(mem, zone)\n\nBut subsequent patches will move the memcg iteration inside the loop\nover the zones:\n\n    for each priority level:\n      for each zone in zonelist:\n        mem \u003d mem_cgroup_iter(root)\n        reclaim(mem, zone)\n\nAnd to keep with the original scan order - memcg -\u003e priority -\u003e zone -\nthe last scanned memcg has to be remembered per zone and per priority\nlevel.\n\nFurthermore, global reclaim will be switched to the hierarchy walk as\nwell.  Different from limit reclaim, which can just recheck the limit\nafter some reclaim progress, its target is to scan all memcgs for the\ndesired zone pages, proportional to the memcg size, and so reliably\ndetecting a full hierarchy round-trip will become crucial.\n\nCurrently, the code relies on one reclaimer encountering the same memcg\ntwice, but that is error-prone with concurrent reclaimers.  Instead, use\na generation counter that is increased every time the child with the\nhighest ID has been visited, so that reclaimers can stop when the\ngeneration changes.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\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": "f16015fbf2f6ac45505d6ad21455ff9f6c14473d",
      "tree": "ad9c7574566ed492f2b2d9ff655bb90773442c05",
      "parents": [
        "89b5fae5368f6aec62fb09c8e19b6c61f1154603"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:52 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "mm: vmscan: distinguish between memcg triggering reclaim and memcg being scanned\n\nMemory cgroup hierarchies are currently handled completely outside of\nthe traditional reclaim code, which is invoked with a single memory\ncgroup as an argument for the whole call stack.\n\nSubsequent patches will switch this code to do hierarchical reclaim, so\nthere needs to be a distinction between a) the memory cgroup that is\ntriggering reclaim due to hitting its limit and b) the memory cgroup\nthat is being scanned as a child of a).\n\nThis patch introduces a struct mem_cgroup_zone that contains the\ncombination of the memory cgroup and the zone being scanned, which is\nthen passed down the stack instead of the zone argument.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\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": "89b5fae5368f6aec62fb09c8e19b6c61f1154603",
      "tree": "48ba5619b31b54941ad127acc1c11edfd9701fe9",
      "parents": [
        "9f3a0d0933de079665ec1b498947ffbf805b0018"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:50 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "mm: vmscan: distinguish global reclaim from global LRU scanning\n\nThe traditional zone reclaim code is scanning the per-zone LRU lists\nduring direct reclaim and kswapd, and the per-zone per-memory cgroup LRU\nlists when reclaiming on behalf of a memory cgroup limit.\n\nSubsequent patches will convert the traditional reclaim code to reclaim\nexclusively from the per-memory cgroup LRU lists.  As a result, using\nthe predicate for which LRU list is scanned will no longer be\nappropriate to tell global reclaim from limit reclaim.\n\nThis patch adds a global_reclaim() predicate to tell direct/kswapd\nreclaim from memory cgroup limit reclaim and substitutes it in all\nplaces where currently scanning_global_lru() is used for that.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\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": "9f3a0d0933de079665ec1b498947ffbf805b0018",
      "tree": "495b27908e328eff16a2269734109b8d6e5be95d",
      "parents": [
        "ab936cbcd02072a34b60d268f94440fd5cf1970b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Thu Jan 12 17:17:48 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "mm: memcg: consolidate hierarchy iteration primitives\n\nThe memcg naturalization series:\n\nMemory control groups are currently bolted onto the side of\ntraditional memory management in places where better integration would\nbe preferrable.  To reclaim memory, for example, memory control groups\nmaintain their own LRU list and reclaim strategy aside from the global\nper-zone LRU list reclaim.  But an extra list head for each existing\npage frame is expensive and maintaining it requires additional code.\n\nThis patchset disables the global per-zone LRU lists on memory cgroup\nconfigurations and converts all its users to operate on the per-memory\ncgroup lists instead.  As LRU pages are then exclusively on one list,\nthis saves two list pointers for each page frame in the system:\n\npage_cgroup array size with 4G physical memory\n\n  vanilla: allocated 31457280 bytes of page_cgroup\n  patched: allocated 15728640 bytes of page_cgroup\n\nAt the same time, system performance for various workloads is\nunaffected:\n\n100G sparse file cat, 4G physical memory, 10 runs, to test for code\nbloat in the traditional LRU handling and kswapd \u0026 direct reclaim\npaths, without/with the memory controller configured in\n\n  vanilla: 71.603(0.207) seconds\n  patched: 71.640(0.156) seconds\n\n  vanilla: 79.558(0.288) seconds\n  patched: 77.233(0.147) seconds\n\n100G sparse file cat in 1G memory cgroup, 10 runs, to test for code\nbloat in the traditional memory cgroup LRU handling and reclaim path\n\n  vanilla: 96.844(0.281) seconds\n  patched: 94.454(0.311) seconds\n\n4 unlimited memcgs running kbuild -j32 each, 4G physical memory, 500M\nswap on SSD, 10 runs, to test for regressions in kswapd \u0026 direct\nreclaim using per-memcg LRU lists with multiple memcgs and multiple\nallocators within each memcg\n\n  vanilla: 717.722(1.440) seconds [ 69720.100(11600.835) majfaults ]\n  patched: 714.106(2.313) seconds [ 71109.300(14886.186) majfaults ]\n\n16 unlimited memcgs running kbuild, 1900M hierarchical limit, 500M\nswap on SSD, 10 runs, to test for regressions in hierarchical memcg\nsetups\n\n  vanilla: 2742.058(1.992) seconds [ 26479.600(1736.737) majfaults ]\n  patched: 2743.267(1.214) seconds [ 27240.700(1076.063) majfaults ]\n\nThis patch:\n\nThere are currently two different implementations of iterating over a\nmemory cgroup hierarchy tree.\n\nConsolidate them into one worker function and base the convenience\nlooping-macros on top of it.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\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": "ab936cbcd02072a34b60d268f94440fd5cf1970b",
      "tree": "d37e3e3c54cc4cc691a428b6ceb71b4b40e4f42b",
      "parents": [
        "28d82dc1c4edbc352129f97f4ca22624d1fe61de"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:17:44 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:04 2012 -0800"
      },
      "message": "memcg: add mem_cgroup_replace_page_cache() to fix LRU issue\n\nCommit ef6a3c6311 (\"mm: add replace_page_cache_page() function\") added a\nfunction replace_page_cache_page().  This function replaces a page in the\nradix-tree with a new page.  WHen doing this, memory cgroup needs to fix\nup the accounting information.  memcg need to check PCG_USED bit etc.\n\nIn some(many?) cases, \u0027newpage\u0027 is on LRU before calling\nreplace_page_cache().  So, memcg\u0027s LRU accounting information should be\nfixed, too.\n\nThis patch adds mem_cgroup_replace_page_cache() and removes the old hooks.\n In that function, old pages will be unaccounted without touching\nres_counter and new page will be accounted to the memcg (of old page).\nWHen overwriting pc-\u003emem_cgroup of newpage, take zone-\u003elru_lock and avoid\nraces with LRU handling.\n\nBackground:\n  replace_page_cache_page() is called by FUSE code in its splice() handling.\n  Here, \u0027newpage\u0027 is replacing oldpage but this newpage is not a newly allocated\n  page and may be on LRU. LRU mis-accounting will be critical for memory cgroup\n  because rmdir() checks the whole LRU is empty and there is no account leak.\n  If a page is on the other LRU than it should be, rmdir() will fail.\n\nThis bug was added in March 2011, but no bug report yet.  I guess there\nare not many people who use memcg and FUSE at the same time with upstream\nkernels.\n\nThe result of this bug is that admin cannot destroy a memcg because of\naccount leak.  So, no panic, no deadlock.  And, even if an active cgroup\nexist, umount can succseed.  So no problem at shutdown.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: \u003cstable@vger.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": "2565409fc0303f3ab8d66b8326702a687962a29b",
      "tree": "b57f238d77ee87a991371a7021462b8c71351659",
      "parents": [
        "4156153c4daddf12dd386016f96a947a01e93bf4"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Thu Jan 12 17:17:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:03 2012 -0800"
      },
      "message": "mm,x86,um: move CMPXCHG_DOUBLE config option\n\nMove CMPXCHG_DOUBLE and rename it to HAVE_CMPXCHG_DOUBLE so architectures\ncan simply select the option if it is supported.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4156153c4daddf12dd386016f96a947a01e93bf4",
      "tree": "6a8653a47bcda09b97870e5c79919790638afe0c",
      "parents": [
        "43570fd2f47ba518145e9289f54cde3dba4c8b25"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Thu Jan 12 17:17:30 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:03 2012 -0800"
      },
      "message": "mm,x86,um: move CMPXCHG_LOCAL config option\n\nMove CMPXCHG_LOCAL and rename it to HAVE_CMPXCHG_LOCAL so architectures\ncan simply select the option if it is supported.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "43570fd2f47ba518145e9289f54cde3dba4c8b25",
      "tree": "67aa61c8b972f4b3af66cd89082222e77e06a4cb",
      "parents": [
        "0d259cf8190b9c446eefd5225ffcc3941e76a432"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Thu Jan 12 17:17:27 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:03 2012 -0800"
      },
      "message": "mm,slub,x86: decouple size of struct page from CONFIG_CMPXCHG_LOCAL\n\nWhile implementing cmpxchg_double() on s390 I realized that we don\u0027t set\nCONFIG_CMPXCHG_LOCAL despite the fact that we have support for it.\n\nHowever setting that option will increase the size of struct page by\neight bytes on 64 bit, which we certainly do not want.  Also, it doesn\u0027t\nmake sense that a present cpu feature should increase the size of struct\npage.\n\nBesides that it looks like the dependency to CMPXCHG_LOCAL is wrong and\nthat it should depend on CMPXCHG_DOUBLE instead.\n\nThis patch:\n\nIf an architecture supports CMPXCHG_LOCAL this shouldn\u0027t result\nautomatically in larger struct pages if the SLUB allocator is used.\nInstead introduce a new config option \"HAVE_ALIGNED_STRUCT_PAGE\" which\ncan be selected if a double word aligned struct page is required.  Also\nupdate x86 Kconfig so that it should work as before.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d0b9706c20ebb4ba181dc26e52ac9a6861abf425",
      "tree": "436e89246fd5ebcf737cae27e135a1995155329b",
      "parents": [
        "02d929502ce7b57f4835d8bb7c828d36e6d9e8ce",
        "54eed6cb16ec315565aaaf8e34252ca253a68b7b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 11 19:12:10 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 11 19:12:10 2012 -0800"
      },
      "message": "Merge branch \u0027x86-mm-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\n* \u0027x86-mm-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:\n  x86/numa: Add constraints check for nid parameters\n  mm, x86: Remove debug_pagealloc_enabled\n  x86/mm: Initialize high mem before free_all_bootmem()\n  arch/x86/kernel/e820.c: quiet sparse noise about plain integer as NULL pointer\n  arch/x86/kernel/e820.c: Eliminate bubble sort from sanitize_e820_map()\n  x86: Fix mmap random address range\n  x86, mm: Unify zone_sizes_init()\n  x86, mm: Prepare zone_sizes_init() for unification\n  x86, mm: Use max_low_pfn for ZONE_NORMAL on 64-bit\n  x86, mm: Wrap ZONE_DMA32 with CONFIG_ZONE_DMA32\n  x86, mm: Use max_pfn instead of highend_pfn\n  x86, mm: Move zone init from paging_init() on 64-bit\n  x86, mm: Use MAX_DMA_PFN for ZONE_DMA on 32-bit\n"
    },
    {
      "commit": "6296e5d3c067df41980a5fd09ad4cc6765f79bb9",
      "tree": "ac10bc5321ac1d750612c0e0ae53d6c4097c5734",
      "parents": [
        "c086ae4ed94f9a1d283318e006813268c2dbf9fc",
        "5878cf431ca7233a56819ca6970153ac0b129599"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 11 18:52:23 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 11 18:52:23 2012 -0800"
      },
      "message": "Merge branch \u0027slab/for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/linux\n\n* \u0027slab/for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/linux:\n  slub: disallow changing cpu_partial from userspace for debug caches\n  slub: add missed accounting\n  slub: Extract get_freelist from __slab_alloc\n  slub: Switch per cpu partial page support off for debugging\n  slub: fix a possible memleak in __slab_alloc()\n  slub: fix slub_max_order Documentation\n  slub: add missed accounting\n  slab: add taint flag outputting to debug paths.\n  slub: add taint flag outputting to debug paths\n  slab: introduce slab_max_order kernel parameter\n  slab: rename slab_break_gfp_order to slab_max_order\n"
    },
    {
      "commit": "5878cf431ca7233a56819ca6970153ac0b129599",
      "tree": "e5d21d04a0b468d2dabbe3a3824f23b5537fc6a7",
      "parents": [
        "74ee4ef1f901fbb014bdcdc9171d126490ce2b62",
        "b13683d1cc14d1dd30b8e20f3ebea3f814ad029f"
      ],
      "author": {
        "name": "Pekka Enberg",
        "email": "penberg@kernel.org",
        "time": "Wed Jan 11 21:11:29 2012 +0200"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@kernel.org",
        "time": "Wed Jan 11 21:11:29 2012 +0200"
      },
      "message": "Merge branch \u0027slab/urgent\u0027 into slab/for-linus\n"
    },
    {
      "commit": "001a541ea9163ace5e8243ee0e907ad80a4c0ec2",
      "tree": "a76225046369c440de93739add9823f5ea060245",
      "parents": [
        "40ba587923ae67090d9f141c1d3c951be5c1420e",
        "bc31b86a5923fad5f3fbb6192f767f410241ba27"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:59:59 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:59:59 2012 -0800"
      },
      "message": "Merge branch \u0027writeback-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux\n\n* \u0027writeback-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux:\n  writeback: move MIN_WRITEBACK_PAGES to fs-writeback.c\n  writeback: balanced_rate cannot exceed write bandwidth\n  writeback: do strict bdi dirty_exceeded\n  writeback: avoid tiny dirty poll intervals\n  writeback: max, min and target dirty pause time\n  writeback: dirty ratelimit - think time compensation\n  btrfs: fix dirtied pages accounting on sub-page writes\n  writeback: fix dirtied pages accounting on redirty\n  writeback: fix dirtied pages accounting on sub-page writes\n  writeback: charge leaked page dirties to active tasks\n  writeback: Include all dirty inodes in background writeback\n"
    },
    {
      "commit": "db1aecafef58b5dda39c4228debe2c845e4a27ab",
      "tree": "4f8848463794e2e2d90039dc95a304d5efd7ca5a",
      "parents": [
        "3770490ec82ca63d5fdcebeb95f2f68af2626357"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan@kernel.org",
        "time": "Tue Jan 10 15:08:39 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:46 2012 -0800"
      },
      "message": "mm/vmalloc.c: change void* into explict vm_struct*\n\nvmap_area-\u003eprivate is void* but we don\u0027t use the field for various purpose\nbut use only for vm_struct.  So change it to a vm_struct* with naming to\nimprove for readability and type checking.\n\nSigned-off-by: Minchan Kim \u003cminchan@kernel.org\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3770490ec82ca63d5fdcebeb95f2f68af2626357",
      "tree": "4bbd061f44be4250394f4d580d169efaf07a7368",
      "parents": [
        "043bcbe5ec51e0478ef2b44acef17193e01d7f70"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Tue Jan 10 15:08:36 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:46 2012 -0800"
      },
      "message": "mm: vmscan: fix typo in isolating lru pages\n\nIt is not the tag page but the cursor page that we should process, and it\nlooks a typo.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "043bcbe5ec51e0478ef2b44acef17193e01d7f70",
      "tree": "4b93556acfdd790ea3e85ed60240134bd06c0d1b",
      "parents": [
        "faed836a2371a96901057f310e436a09eded94fd"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue Jan 10 15:08:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:46 2012 -0800"
      },
      "message": "mm: test PageSwapBacked in lumpy reclaim\n\nLumpy reclaim does well to stop at a PageAnon when there\u0027s no swap, but\nbetter is to stop at any PageSwapBacked, which includes shmem/tmpfs too.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-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": "faed836a2371a96901057f310e436a09eded94fd",
      "tree": "3f6f0b09d80afb5f38feffadcf33c104a53c63e0",
      "parents": [
        "ea5768c74b8e0d6a866508fc6399d5ff958da5e3"
      ],
      "author": {
        "name": "Wang Sheng-Hui",
        "email": "shhuiw@gmail.com",
        "time": "Tue Jan 10 15:08:32 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:46 2012 -0800"
      },
      "message": "mm/migrate.c: remove the unused macro lru_to_page\n\nlru_to_page is not used in mm/migrate.c.\n\nSigned-off-by: Wang Sheng-Hui \u003cshhuiw@gmail.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Kyungmin Park \u003ckyungmin.park@samsung.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ea5768c74b8e0d6a866508fc6399d5ff958da5e3",
      "tree": "c9669e800bca28d9b905b6e47c206a5ea3fe149b",
      "parents": [
        "1ebb7044c9142c67d1d2b04d84010b4810a43fd8"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Tue Jan 10 15:08:30 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:45 2012 -0800"
      },
      "message": "mm/hugetlb.c: avoid bogus counter of surplus huge page\n\nIf we have to hand back the newly allocated huge page to page allocator,\nfor any reason, the changed counter should be recovered.\n\nThis affects only s390 at present.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.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": "1ebb7044c9142c67d1d2b04d84010b4810a43fd8",
      "tree": "bfacd21f2aabf0b727d678797e2764d010918f29",
      "parents": [
        "0565d317768cc66b13e37184f29d9f270c2886dc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 10 15:08:28 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:45 2012 -0800"
      },
      "message": "mempool: fix first round failure behavior\n\nmempool modifies gfp_mask so that the backing allocator doesn\u0027t try too\nhard or trigger warning message when there\u0027s pool to fall back on.  In\naddition, for the first try, it removes __GFP_WAIT and IO, so that it\ndoesn\u0027t trigger reclaim or wait when allocation can be fulfilled from\npool; however, when that allocation fails and pool is empty too, it waits\nfor the pool to be replenished before retrying.\n\nAllocation which could have succeeded after a bit of reclaim has to wait\non the reserved items and it\u0027s not like mempool doesn\u0027t retry with\n__GFP_WAIT and IO.  It just does that *after* someone returns an element,\npointlessly delaying things.\n\nFix it by retrying immediately if the first round of allocation attempts\nw/o __GFP_WAIT and IO fails.\n\n[akpm@linux-foundation.org: shorten the lock hold time]\nSigned-off-by: Tejun Heo \u003ctj@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": "0565d317768cc66b13e37184f29d9f270c2886dc",
      "tree": "9618e46da0eac37472cde829d9574a98a1d28bbb",
      "parents": [
        "5b990546e33477c34ee6fbc20fad6584386b46c3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 10 15:08:26 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:45 2012 -0800"
      },
      "message": "mempool: drop unnecessary and incorrect BUG_ON() from mempool_destroy()\n\nmempool_destroy() is a thin wrapper around free_pool().  The only thing it\nadds is BUG_ON(pool-\u003ecurr_nr !\u003d pool-\u003emin_nr).  The intention seems to be\nto enforce that all allocated elements are freed; however, the BUG_ON()\ncan\u0027t achieve that (it doesn\u0027t know anything about objects above min_nr)\nand incorrect as mempool_resize() is allowed to leave the pool extended\nbut not filled.  Furthermore, panicking is way worse than any memory leak\nand there are better debug tools to track memory leaks.\n\nDrop the BUG_ON() from mempool_destory() and as that leaves the function\nidentical to free_pool(), replace it.\n\nSigned-off-by: Tejun Heo \u003ctj@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": "5b990546e33477c34ee6fbc20fad6584386b46c3",
      "tree": "2e4aa8b194aefee6286a2d0040e15d31df5f66c1",
      "parents": [
        "564c81db19f3630f53a14bbceb7b85eb9660ded3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jan 10 15:08:23 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:45 2012 -0800"
      },
      "message": "mempool: fix and document synchronization and memory barrier usage\n\nmempool_alloc/free() use undocumented smp_mb()\u0027s.  The code is slightly\nbroken and misleading.\n\nThe lockless part is in mempool_free().  It wants to determine whether the\nitem being freed needs to be returned to the pool or backing allocator\nwithout grabbing pool-\u003elock.  Two things need to be guaranteed for correct\noperation.\n\n1. pool-\u003ecurr_nr + #allocated should never dip below pool-\u003emin_nr.\n2. Waiters shouldn\u0027t be left dangling.\n\nFor #1, The only necessary condition is that curr_nr visible at free is\nfrom after the allocation of the element being freed (details in the\ncomment).  For most cases, this is true without any barrier but there can\nbe fringe cases where the allocated pointer is passed to the freeing task\nwithout going through memory barriers.  To cover this case, wmb is\nnecessary before returning from allocation and rmb is necessary before\nreading curr_nr.  IOW,\n\n\tALLOCATING TASK\t\t\tFREEING TASK\n\n\tupdate pool state after alloc;\n\twmb();\n\tpass pointer to freeing task;\n\t\t\t\t\tread pointer;\n\t\t\t\t\trmb();\n\t\t\t\t\tread pool state to free;\n\nThe current code doesn\u0027t have wmb after pool update during allocation and\nmay theoretically, on machines where unlock doesn\u0027t behave as full wmb,\nlead to pool depletion and deadlock.  smp_wmb() needs to be added after\nsuccessful allocation from reserved elements and smp_mb() in\nmempool_free() can be replaced with smp_rmb().\n\nFor #2, the waiter needs to add itself to waitqueue and then check the\nwait condition and the waker needs to update the wait condition and then\nwake up.  Because waitqueue operations always go through full spinlock\nsynchronization, there is no need for extra memory barriers.\n\nFurthermore, mempool_alloc() is already holding pool-\u003elock when it decides\nthat it needs to wait.  There is no reason to do unlock - add waitqueue -\ntest condition again.  It can simply add itself to waitqueue while holding\npool-\u003elock and then unlock and sleep.\n\nThis patch adds smp_wmb() after successful allocation from reserved pool,\nreplaces smp_mb() in mempool_free() with smp_rmb() and extend pool-\u003elock\nover waitqueue addition.  More importantly, it explains what memory\nbarriers do and how the lockless testing is correct.\n\n-v2: Oleg pointed out that unlock doesn\u0027t imply wmb.  Added explicit\n     smp_wmb() after successful allocation from reserved pool and\n     updated comments accordingly.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: David Howells \u003cdhowells@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": "564c81db19f3630f53a14bbceb7b85eb9660ded3",
      "tree": "c8da7f1d2eed5999af067c714d65de7b90840f79",
      "parents": [
        "fcfb4dcc9698f932836aa63ba0d82e7dbd300fb3"
      ],
      "author": {
        "name": "Wang Sheng-Hui",
        "email": "shhuiw@gmail.com",
        "time": "Tue Jan 10 15:08:22 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:45 2012 -0800"
      },
      "message": "mm/migrate.c: cleanup comment for migration_entry_wait()\n\nmigration_entry_wait() can also be called from hugetlb_fault() now.\nRemove the incorrect comment.\n\nSigned-off-by: Wang Sheng-Hui \u003cshhuiw@gmail.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": "fcfb4dcc9698f932836aa63ba0d82e7dbd300fb3",
      "tree": "3a01fc96cc2ba9c339e2848c20a241a9ec9d2423",
      "parents": [
        "0c176d52b0b2619f231b2bbf329b90c028134f58"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Jan 10 15:08:21 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:45 2012 -0800"
      },
      "message": "mm/mempolicy.c: mpol_equal(): use bool\n\nmpol_equal() logically returns a boolean.  Use a bool type to slightly\nimprove readability.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Stephen Wilson \u003cwilsons@start.ca\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0c176d52b0b2619f231b2bbf329b90c028134f58",
      "tree": "540d2b64a9efe0cd307c04fecedf72e5f3875260",
      "parents": [
        "86cfd3a45042ab242d47f3935a02811a402beab6"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Tue Jan 10 15:08:19 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:45 2012 -0800"
      },
      "message": "mm: hugetlb: fix pgoff computation when unmapping page from vma\n\nThe computation for pgoff is incorrect, at least with\n\n\t(vma-\u003evm_pgoff \u003e\u003e PAGE_SHIFT)\n\ninvolved.  It is fixed with the available method if HPAGE_SIZE is\nconcerned in page cache lookup.\n\n[akpm@linux-foundation.org: use vma_hugecache_offset() directly, per Michal]\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "86cfd3a45042ab242d47f3935a02811a402beab6",
      "tree": "bd189c05dc3176f2193192ecea01f6b3a1ff8c71",
      "parents": [
        "799f933a82d878d7f15215473c5561ce984ada75"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan@kernel.org",
        "time": "Tue Jan 10 15:08:18 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:45 2012 -0800"
      },
      "message": "mm/vmscan.c: consider swap space when deciding whether to continue reclaim\n\nIt\u0027s pointless to continue reclaiming when we have no swap space and lots\nof anon pages in the inactive list.\n\nWithout this patch, it is possible when swap is disabled to continue\ntrying to reclaim when there are only anonymous pages in the system even\nthough that will not make any progress.\n\nSigned-off-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.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": "799f933a82d878d7f15215473c5561ce984ada75",
      "tree": "a096ac8de8da31385026c3d51eec292815438ac4",
      "parents": [
        "560a036b3a3733e33424385c0a0c799dee454d05"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jan 10 15:08:15 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:45 2012 -0800"
      },
      "message": "mm: bootmem: try harder to free pages in bulk\n\nThe loop that frees pages to the page allocator while bootstrapping tries\nto free higher-order blocks only when the starting address is aligned to\nthat block size.  Otherwise it will free all pages on that node\none-by-one.\n\nChange it to free individual pages up to the first aligned block and then\ntry higher-order frees from there.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nCc: Tejun Heo \u003ctj@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": "560a036b3a3733e33424385c0a0c799dee454d05",
      "tree": "07d1ddc729e233d0590b308f1ea7d04405e796b6",
      "parents": [
        "c3993076f842de3754360e5b998d6657a9d30303"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jan 10 15:08:13 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:44 2012 -0800"
      },
      "message": "mm: bootmem: drop superfluous range check when freeing pages in bulk\n\nThe area node_bootmem_map represents is aligned to BITS_PER_LONG, and all\nbits in any aligned word of that map valid.  When the represented area\nextends beyond the end of the node, the non-existant pages will be marked\nas reserved.\n\nAs a result, when freeing a page block, doing an explicit range check for\nwhether that block is within the node\u0027s range is redundant as the bitmap\nis consulted anyway to see whether all pages in the block are unreserved.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nCc: Tejun Heo \u003ctj@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": "c3993076f842de3754360e5b998d6657a9d30303",
      "tree": "78c1ca3d031483932e2f236706b20064742c0b0c",
      "parents": [
        "43d2b113241d6797b890318767e0af78e313414b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jan 10 15:08:10 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:44 2012 -0800"
      },
      "message": "mm: page_alloc: generalize order handling in __free_pages_bootmem()\n\n__free_pages_bootmem() used to special-case higher-order frees to save\nindividual page checking with free_pages_bulk().\n\nNowadays, both zero order and non-zero order frees use free_pages(), which\nchecks each individual page anyway, and so there is little point in making\nthe distinction anymore.  The higher-order loop will work just fine for\nzero order pages.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nCc: Tejun Heo \u003ctj@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": "43d2b113241d6797b890318767e0af78e313414b",
      "tree": "6f25647f2660f8fca63cc8355b70ad643993dab8",
      "parents": [
        "6bd4837de96e7d9f9bf33e59117c24fc230862ac"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jan 10 15:08:09 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:44 2012 -0800"
      },
      "message": "tracepoint: add tracepoints for debugging oom_score_adj\n\noom_score_adj is used for guarding processes from OOM-Killer.  One of\nproblem is that it\u0027s inherited at fork().  When a daemon set oom_score_adj\nand make children, it\u0027s hard to know where the value is set.\n\nThis patch adds some tracepoints useful for debugging. This patch adds\n3 trace points.\n  - creating new task\n  - renaming a task (exec)\n  - set oom_score_adj\n\nTo debug, users need to enable some trace pointer. Maybe filtering is useful as\n\n# EVENT\u003d/sys/kernel/debug/tracing/events/task/\n# echo \"oom_score_adj !\u003d 0\" \u003e $EVENT/task_newtask/filter\n# echo \"oom_score_adj !\u003d 0\" \u003e $EVENT/task_rename/filter\n# echo 1 \u003e $EVENT/enable\n# EVENT\u003d/sys/kernel/debug/tracing/events/oom/\n# echo 1 \u003e $EVENT/enable\n\noutput will be like this.\n# grep oom /sys/kernel/debug/tracing/trace\nbash-7699  [007] d..3  5140.744510: oom_score_adj_update: pid\u003d7699 comm\u003dbash oom_score_adj\u003d-1000\nbash-7699  [007] ...1  5151.818022: task_newtask: pid\u003d7729 comm\u003dbash clone_flags\u003d1200011 oom_score_adj\u003d-1000\nls-7729  [003] ...2  5151.818504: task_rename: pid\u003d7729 oldcomm\u003dbash newcomm\u003dls oom_score_adj\u003d-1000\nbash-7699  [002] ...1  5175.701468: task_newtask: pid\u003d7730 comm\u003dbash clone_flags\u003d1200011 oom_score_adj\u003d-1000\ngrep-7730  [007] ...2  5175.701993: task_rename: pid\u003d7730 oldcomm\u003dbash newcomm\u003dgrep oom_score_adj\u003d-1000\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6bd4837de96e7d9f9bf33e59117c24fc230862ac",
      "tree": "633d23438e31aeef61063c6de490cc5696f4e5f5",
      "parents": [
        "948f017b093a9baac23855fcd920d3a970b71bb6"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Jan 10 15:08:07 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:44 2012 -0800"
      },
      "message": "mm: simplify find_vma_prev()\n\ncommit 297c5eee37 (\"mm: make the vma list be doubly linked\") added the\nvm_prev member to vm_area_struct.  We can simplify find_vma_prev() by\nusing it.  Also, this change helps to improve page fault performance\nbecause it has stronger locality of reference.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "948f017b093a9baac23855fcd920d3a970b71bb6",
      "tree": "4536a9cbe1077133e600da2072998f5e60c696c6",
      "parents": [
        "df0a6daa01fa3856c08f4274d4f21a8092caa480"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Tue Jan 10 15:08:05 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:44 2012 -0800"
      },
      "message": "mremap: enforce rmap src/dst vma ordering in case of vma_merge() succeeding in copy_vma()\n\nmigrate was doing an rmap_walk with speculative lock-less access on\npagetables.  That could lead it to not serializing properly against mremap\nPT locks.  But a second problem remains in the order of vmas in the\nsame_anon_vma list used by the rmap_walk.\n\nIf vma_merge succeeds in copy_vma, the src vma could be placed after the\ndst vma in the same_anon_vma list.  That could still lead to migrate\nmissing some pte.\n\nThis patch adds an anon_vma_moveto_tail() function to force the dst vma at\nthe end of the list before mremap starts to solve the problem.\n\nIf the mremap is very large and there are a lots of parents or childs\nsharing the anon_vma root lock, this should still scale better than taking\nthe anon_vma root lock around every pte copy practically for the whole\nduration of mremap.\n\nUpdate: Hugh noticed special care is needed in the error path where\nmove_page_tables goes in the reverse direction, a second\nanon_vma_moveto_tail() call is needed in the error path.\n\nThis program exercises the anon_vma_moveto_tail:\n\n\u003d\u003d\u003d\n\nint main()\n{\n\tstatic struct timeval oldstamp, newstamp;\n\tlong diffsec;\n\tchar *p, *p2, *p3, *p4;\n\tif (posix_memalign((void **)\u0026p, 2*1024*1024, SIZE))\n\t\tperror(\"memalign\"), exit(1);\n\tif (posix_memalign((void **)\u0026p2, 2*1024*1024, SIZE))\n\t\tperror(\"memalign\"), exit(1);\n\tif (posix_memalign((void **)\u0026p3, 2*1024*1024, SIZE))\n\t\tperror(\"memalign\"), exit(1);\n\n\tmemset(p, 0xff, SIZE);\n\tprintf(\"%p\\n\", p);\n\tmemset(p2, 0xff, SIZE);\n\tmemset(p3, 0x77, 4096);\n\tif (memcmp(p, p2, SIZE))\n\t\tprintf(\"error\\n\");\n\tp4 \u003d mremap(p+SIZE/2, SIZE/2, SIZE/2, MREMAP_FIXED|MREMAP_MAYMOVE, p3);\n\tif (p4 !\u003d p3)\n\t\tperror(\"mremap\"), exit(1);\n\tp4 \u003d mremap(p4, SIZE/2, SIZE/2, MREMAP_FIXED|MREMAP_MAYMOVE, p+SIZE/2);\n\tif (p4 !\u003d p+SIZE/2)\n\t\tperror(\"mremap\"), exit(1);\n\tif (memcmp(p, p2, SIZE))\n\t\tprintf(\"error\\n\");\n\tprintf(\"ok\\n\");\n\n\treturn 0;\n}\n\u003d\u003d\u003d\n\n$ perf probe -a anon_vma_moveto_tail\nAdd new event:\n  probe:anon_vma_moveto_tail (on anon_vma_moveto_tail)\n\nYou can now use it on all perf tools, such as:\n\n        perf record -e probe:anon_vma_moveto_tail -aR sleep 1\n\n$ perf record -e probe:anon_vma_moveto_tail -aR ./anon_vma_moveto_tail\n0x7f2ca2800000\nok\n[ perf record: Woken up 1 times to write data ]\n[ perf record: Captured and wrote 0.043 MB perf.data (~1860 samples) ]\n$ perf report --stdio\n   100.00%  anon_vma_moveto  [kernel.kallsyms]  [k] anon_vma_moveto_tail\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReported-by: Nai Xia \u003cnai.xia@gmail.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Pawel Sikora \u003cpluto@agmk.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "df0a6daa01fa3856c08f4274d4f21a8092caa480",
      "tree": "089c112e98c87c4326443c21711bf9410c1989ce",
      "parents": [
        "9571a982903bf9dcbca2479fd3e7dafd2211ecf9"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Jan 10 15:08:02 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:44 2012 -0800"
      },
      "message": "mm: fix off-by-two in __zone_watermark_ok()\n\nCommit 88f5acf88ae6 (\"mm: page allocator: adjust the per-cpu counter\nthreshold when memory is low\") changed the form how free_pages is\ncalculated but it forgot that we used to do free_pages - ((1 \u003c\u003c order) -\n1) so we ended up with off-by-two when calculating free_pages.\n\nReported-by: Wang Sheng-Hui \u003cshhuiw@gmail.com\u003e\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Mel Gorman \u003cmgorman@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": "9571a982903bf9dcbca2479fd3e7dafd2211ecf9",
      "tree": "6a426c81c23cc4e5e81388c52ff37ed33a1187ac",
      "parents": [
        "31b8384a555d94c78e2ea2284a323cb985441f60"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "u.kleine-koenig@pengutronix.de",
        "time": "Tue Jan 10 15:08:00 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:44 2012 -0800"
      },
      "message": "bootmem: micro optimize freeing pages in bulk\n\nThe first entry of bdata-\u003enode_bootmem_map holds the data for\nbdata-\u003enode_min_pfn up to bdata-\u003enode_min_pfn + BITS_PER_LONG - 1.  So the\ntest for freeing all pages of a single map entry can be slightly relaxed.\n\nMoreover use DIV_ROUND_UP in another place instead of open coding it.\n\nSigned-off-by: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nCc: Johannes Weiner \u003channes@saeurebad.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "31b8384a555d94c78e2ea2284a323cb985441f60",
      "tree": "6e9b3fc9d14e7bbd8c6c97a1277fd3e9b5034f5b",
      "parents": [
        "e3a41a5ba9c2ab988b9f1442925109dca2382fd9"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Tue Jan 10 15:07:59 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:44 2012 -0800"
      },
      "message": "mm: compaction: push isolate search base of compact control one pfn ahead\n\nAfter isolated the current pfn will no longer be scanned and isolated if\nthe next round is necessary, so push the isolate_migratepages search base\nof the given compact_control one step ahead.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Mel Gorman \u003cmgorman@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": "0faa70cb0180d45a06208e54b552a538aabb8a30",
      "tree": "7d734a556ad1568301cf802c5afbaa83cc0bdcd5",
      "parents": [
        "a756cf5908530e8b40bdf569eb48b40139e8d7fd"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Tue Jan 10 15:07:53 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:43 2012 -0800"
      },
      "message": "mm: filemap: pass __GFP_WRITE from grab_cache_page_write_begin()\n\nTell the page allocator that pages allocated through\ngrab_cache_page_write_begin() are expected to become dirty soon.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\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": "a756cf5908530e8b40bdf569eb48b40139e8d7fd",
      "tree": "ba9df151d5468098c7eae563ce09faea6a539fc0",
      "parents": [
        "ccafa2879fb8d13b8031337a8743eac4189e5d6e"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Tue Jan 10 15:07:49 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:43 2012 -0800"
      },
      "message": "mm: try to distribute dirty pages fairly across zones\n\nThe maximum number of dirty pages that exist in the system at any time is\ndetermined by a number of pages considered dirtyable and a user-configured\npercentage of those, or an absolute number in bytes.\n\nThis number of dirtyable pages is the sum of memory provided by all the\nzones in the system minus their lowmem reserves and high watermarks, so\nthat the system can retain a healthy number of free pages without having\nto reclaim dirty pages.\n\nBut there is a flaw in that we have a zoned page allocator which does not\ncare about the global state but rather the state of individual memory\nzones.  And right now there is nothing that prevents one zone from filling\nup with dirty pages while other zones are spared, which frequently leads\nto situations where kswapd, in order to restore the watermark of free\npages, does indeed have to write pages from that zone\u0027s LRU list.  This\ncan interfere so badly with IO from the flusher threads that major\nfilesystems (btrfs, xfs, ext4) mostly ignore write requests from reclaim\nalready, taking away the VM\u0027s only possibility to keep such a zone\nbalanced, aside from hoping the flushers will soon clean pages from that\nzone.\n\nEnter per-zone dirty limits.  They are to a zone\u0027s dirtyable memory what\nthe global limit is to the global amount of dirtyable memory, and try to\nmake sure that no single zone receives more than its fair share of the\nglobally allowed dirty pages in the first place.  As the number of pages\nconsidered dirtyable excludes the zones\u0027 lowmem reserves and high\nwatermarks, the maximum number of dirty pages in a zone is such that the\nzone can always be balanced without requiring page cleaning.\n\nAs this is a placement decision in the page allocator and pages are\ndirtied only after the allocation, this patch allows allocators to pass\n__GFP_WRITE when they know in advance that the page will be written to and\nbecome dirty soon.  The page allocator will then attempt to allocate from\nthe first zone of the zonelist - which on NUMA is determined by the task\u0027s\nNUMA memory policy - that has not exceeded its dirty limit.\n\nAt first glance, it would appear that the diversion to lower zones can\nincrease pressure on them, but this is not the case.  With a full high\nzone, allocations will be diverted to lower zones eventually, so it is\nmore of a shift in timing of the lower zone allocations.  Workloads that\npreviously could fit their dirty pages completely in the higher zone may\nbe forced to allocate from lower zones, but the amount of pages that\n\"spill over\" are limited themselves by the lower zones\u0027 dirty constraints,\nand thus unlikely to become a problem.\n\nFor now, the problem of unfair dirty page distribution remains for NUMA\nconfigurations where the zones allowed for allocation are in sum not big\nenough to trigger the global dirty limits, wake up the flusher threads and\nremedy the situation.  Because of this, an allocation that could not\nsucceed on any of the considered zones is allowed to ignore the dirty\nlimits before going into direct reclaim or even failing the allocation,\nuntil a future patch changes the global dirty throttling and flusher\nthread activation so that they take individual zone states into account.\n\n\t\t\tTest results\n\n15M DMA + 3246M DMA32 + 504 Normal \u003d 3765M memory\n40% dirty ratio\n16G USB thumb drive\n10 runs of dd if\u003d/dev/zero of\u003ddisk/zeroes bs\u003d32k count\u003d$((10 \u003c\u003c 15))\n\n\t\tseconds\t\t\tnr_vmscan_write\n\t\t        (stddev)\t       min|     median|        max\nxfs\nvanilla:\t 549.747( 3.492)\t     0.000|      0.000|      0.000\npatched:\t 550.996( 3.802)\t     0.000|      0.000|      0.000\n\nfuse-ntfs\nvanilla:\t1183.094(53.178)\t 54349.000|  59341.000|  65163.000\npatched:\t 558.049(17.914)\t     0.000|      0.000|     43.000\n\nbtrfs\nvanilla:\t 573.679(14.015)\t156657.000| 460178.000| 606926.000\npatched:\t 563.365(11.368)\t     0.000|      0.000|   1362.000\n\next4\nvanilla:\t 561.197(15.782)\t     0.000|2725438.000|4143837.000\npatched:\t 568.806(17.496)\t     0.000|      0.000|      0.000\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nTested-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Rik van Riel \u003criel@redhat.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": "ccafa2879fb8d13b8031337a8743eac4189e5d6e",
      "tree": "0202fd26218faba5751de0906c430f422b0ccbac",
      "parents": [
        "ab8fabd46f811d5153d8a0cd2fac9a0d41fb593d"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Tue Jan 10 15:07:44 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:43 2012 -0800"
      },
      "message": "mm: writeback: cleanups in preparation for per-zone dirty limits\n\nThe next patch will introduce per-zone dirty limiting functions in\naddition to the traditional global dirty limiting.\n\nRename determine_dirtyable_memory() to global_dirtyable_memory() before\nadding the zone-specific version, and fix up its documentation.\n\nAlso, move the functions to determine the dirtyable memory and the\nfunction to calculate the dirty limit based on that together so that their\nrelationship is more apparent and that they can be commented on as a\ngroup.\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Mel Gorman \u003cmel@suse.de\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\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: Rik van Riel \u003criel@redhat.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": "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": "25bd91bd27820d5971258cecd1c0e64b0e485144",
      "tree": "dab03e7e19132c6e630d9e65baa125d60825bbd9",
      "parents": [
        "f6d7e0cb3ecc248e98fa11d83253f6174bd7e085"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Jan 10 15:07:40 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:43 2012 -0800"
      },
      "message": "vmscan: add task name to warn_scan_unevictable() messages\n\nIf we need to know a usecase, caller program name is critical important.\nShow it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nDavid Rientjes \u003crientjes@google.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "ad8a1b558e6c76fb53901956d3c8f29b82a4ccfa"
}
