)]}'
{
  "log": [
    {
      "commit": "f14851af0ebb32745c6c5a2e400aa0549f9d20df",
      "tree": "861f66b55bafe4a669d29469c24a3535ac1b8e2b",
      "parents": [
        "0ba8f2d59304dfe69b59c034de723ad80f7ab9ac"
      ],
      "author": {
        "name": "qiuxishi",
        "email": "qiuxishi@gmail.com",
        "time": "Mon Sep 17 14:09:24 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 17 15:00:38 2012 -0700"
      },
      "message": "memory hotplug: fix section info double registration bug\n\nThere may be a bug when registering section info.  For example, on my\nItanium platform, the pfn range of node0 includes the other nodes, so\nother nodes\u0027 section info will be double registered, and memmap\u0027s page\ncount will equal to 3.\n\n  node0: start_pfn\u003d0x100,    spanned_pfn\u003d0x20fb00, present_pfn\u003d0x7f8a3, \u003d\u003e 0x000100-0x20fc00\n  node1: start_pfn\u003d0x80000,  spanned_pfn\u003d0x80000,  present_pfn\u003d0x80000, \u003d\u003e 0x080000-0x100000\n  node2: start_pfn\u003d0x100000, spanned_pfn\u003d0x80000,  present_pfn\u003d0x80000, \u003d\u003e 0x100000-0x180000\n  node3: start_pfn\u003d0x180000, spanned_pfn\u003d0x80000,  present_pfn\u003d0x80000, \u003d\u003e 0x180000-0x200000\n\n  free_all_bootmem_node()\n\tregister_page_bootmem_info_node()\n\t\tregister_page_bootmem_info_section()\n\nWhen hot remove memory, we can\u0027t free the memmap\u0027s page because\npage_count() is 2 after put_page_bootmem().\n\n  sparse_remove_one_section()\n\tfree_section_usemap()\n\t\tfree_map_bootmem()\n\t\t\tput_page_bootmem()\n\n[akpm@linux-foundation.org: add code comment]\nSigned-off-by: Xishi Qiu \u003cqiuxishi@huawei.com\u003e\nSigned-off-by: Jiang Liu \u003cjiang.liu@huawei.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nCc: Yasuaki Ishimatsu \u003cisimatu.yasuaki@jp.fujitsu.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": "0ba8f2d59304dfe69b59c034de723ad80f7ab9ac",
      "tree": "c6866a0514f55028499c473572dae48bd502f78f",
      "parents": [
        "8dcebaa9a0ae8a0487f4342f3d56d2cb1c980860"
      ],
      "author": {
        "name": "Li Haifeng",
        "email": "omycle@gmail.com",
        "time": "Mon Sep 17 14:09:21 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 17 15:00:38 2012 -0700"
      },
      "message": "mm/page_alloc: fix the page address of higher page\u0027s buddy calculation\n\nThe heuristic method for buddy has been introduced since commit\n43506fad21ca (\"mm/page_alloc.c: simplify calculation of combined index\nof adjacent buddy lists\").  But the page address of higher page\u0027s buddy\nwas wrongly calculated, which will lead page_is_buddy to fail for ever.\nIOW, the heuristic method would be disabled with the wrong page address\nof higher page\u0027s buddy.\n\nCalculating the page address of higher page\u0027s buddy should be based\nhigher_page with the offset between index of higher page and index of\nhigher page\u0027s buddy.\n\nSigned-off-by: Haifeng Li \u003comycle@gmail.com\u003e\nSigned-off-by: Gavin Shan \u003cshangw@linux.vnet.ibm.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KyongHo Cho \u003cpullip.cho@samsung.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\t[2.6.38+]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8ba00bb68a067c221cc3ea3a0293e8fcbdcb7ba1",
      "tree": "6642f9819b79c51891d7f829c5cf1f384ffc6cc5",
      "parents": [
        "d014dc2ed4fae84cb92509416c8bfc9078d4f0d9"
      ],
      "author": {
        "name": "Joonsoo Kim",
        "email": "js1304@gmail.com",
        "time": "Mon Sep 17 14:09:09 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 17 15:00:38 2012 -0700"
      },
      "message": "slub: consider pfmemalloc_match() in get_partial_node()\n\nget_partial() is currently not checking pfmemalloc_match() meaning that\nit is possible for pfmemalloc pages to leak to non-pfmemalloc users.\nThis is a problem in the following situation.  Assume that there is a\nrequest from normal allocation and there are no objects in the per-cpu\ncache and no node-partial slab.\n\nIn this case, slab_alloc enters the slow path and new_slab_objects() is\ncalled which may return a PFMEMALLOC page.  As the current user is not\nallowed to access PFMEMALLOC page, deactivate_slab() is called\n([5091b74a: mm: slub: optimise the SLUB fast path to avoid pfmemalloc\nchecks]) and returns an object from PFMEMALLOC page.\n\nNext time, when we get another request from normal allocation,\nslab_alloc() enters the slow-path and calls new_slab_objects().  In\nnew_slab_objects(), we call get_partial() and get a partial slab which\nwas just deactivated but is a pfmemalloc page.  We extract one object\nfrom it and re-deactivate.\n\n  \"deactivate -\u003e re-get in get_partial -\u003e re-deactivate\" occures repeatedly.\n\nAs a result, access to PFMEMALLOC page is not properly restricted and it\ncan cause a performance degradation due to frequent deactivation.\ndeactivation frequently.\n\nThis patch changes get_partial_node() to take pfmemalloc_match() into\naccount and prevents the \"deactivate -\u003e re-get in get_partial()\nscenario.  Instead, new_slab() is called.\n\nSigned-off-by: Joonsoo Kim \u003cjs1304@gmail.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Chuck Lever \u003cchuck.lever@oracle.com\u003e\nCc: Pekka Enberg \u003cpenberg@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": "d014dc2ed4fae84cb92509416c8bfc9078d4f0d9",
      "tree": "18fc37fa196f4450daa8f31b25313e350fed312d",
      "parents": [
        "30c29bea6af2d3b6ffc8865864de7fc08cadb5df"
      ],
      "author": {
        "name": "Joonsoo Kim",
        "email": "js1304@gmail.com",
        "time": "Mon Sep 17 14:09:06 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 17 15:00:38 2012 -0700"
      },
      "message": "slab: fix starting index for finding another object\n\nIn array cache, there is a object at index 0, check it.\n\nSigned-off-by: Joonsoo Kim \u003cjs1304@gmail.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Chuck Lever \u003cchuck.lever@oracle.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Pekka Enberg \u003cpenberg@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": "30c29bea6af2d3b6ffc8865864de7fc08cadb5df",
      "tree": "b01c1ad1f07cfe5d2a7b0b6b2704358c70994899",
      "parents": [
        "fded4e090c60100d709318896c79816d68d5b47d"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Mon Sep 17 14:09:03 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 17 15:00:38 2012 -0700"
      },
      "message": "slab: do ClearSlabPfmemalloc() for all pages of slab\n\nRight now, we call ClearSlabPfmemalloc() for first page of slab when we\nclear SlabPfmemalloc flag.  This is fine for most swap-over-network use\ncases as it is expected that order-0 pages are in use.  Unfortunately it\nis possible that that __ac_put_obj() checks SlabPfmemalloc on a tail\npage and while this is harmless, it is sloppy.  This patch ensures that\nthe head page is always used.\n\nThis problem was originally identified by Joonsoo Kim.\n\n[js1304@gmail.com: Original implementation and problem identification]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Chuck Lever \u003cchuck.lever@oracle.com\u003e\nCc: Joonsoo Kim \u003cjs1304@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Pekka Enberg \u003cpenberg@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": "18b48d5873a6fc8e0e6044ddb572fcda26988f19",
      "tree": "0f26f8c1e70b8d07b1e45b36f0dfc1b1c7a60131",
      "parents": [
        "6bf6104573482570f7103d3e5ddf9574db43a363"
      ],
      "author": {
        "name": "Wen Congyang",
        "email": "wency@cn.fujitsu.com",
        "time": "Mon Sep 17 14:08:55 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 17 15:00:37 2012 -0700"
      },
      "message": "memory hotplug: reset pgdat-\u003ekswapd to NULL if creating kernel thread fails\n\nIf kthread_run() fails, pgdat-\u003ekswapd contains errno.  When we stop this\nthread, we only check whether pgdat-\u003ekswapd is NULL and access it.  If\nit contains errno, it will cause page fault.  Reset pgdat-\u003ekswapd to\nNULL when creating kernel thread fails can avoid this problem.\n\nSigned-off-by: Wen Congyang \u003cwency@cn.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": "7076cca9a700af5ccb0bd5eb7261dcfd7356dc5a",
      "tree": "0bc442d3c96b2a65f0fb6f0267cd797c30ef46ed",
      "parents": [
        "a1362d504e26f32f853c65d0448ebc9ffb190f7d",
        "15674868d6c5985466835c56dd89d39235f16302"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 14 17:43:14 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 14 17:43:14 2012 -0700"
      },
      "message": "Merge branch \u0027core-urgent-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull a core sparse warning fix from Ingo Molnar\n\n* \u0027core-urgent-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:\n  mm/memblock: Use NULL instead of 0 for pointers\n"
    },
    {
      "commit": "80de7c3138ee9fd86a98696fd2cf7ad89b995d0a",
      "tree": "22fab8f6c06e4de548734d165eebb0352c76556f",
      "parents": [
        "080909503664641432cc8adf2ee2084775fd992a"
      ],
      "author": {
        "name": "Dave Jones",
        "email": "davej@redhat.com",
        "time": "Thu Sep 06 12:01:00 2012 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 06 09:37:58 2012 -0700"
      },
      "message": "Remove user-triggerable BUG from mpol_to_str\n\nTrivially triggerable, found by trinity:\n\n  kernel BUG at mm/mempolicy.c:2546!\n  Process trinity-child2 (pid: 23988, threadinfo ffff88010197e000, task ffff88007821a670)\n  Call Trace:\n    show_numa_map+0xd5/0x450\n    show_pid_numa_map+0x13/0x20\n    traverse+0xf2/0x230\n    seq_read+0x34b/0x3e0\n    vfs_read+0xac/0x180\n    sys_pread64+0xa2/0xc0\n    system_call_fastpath+0x1a/0x1f\n  RIP: mpol_to_str+0x156/0x360\n\nCc: stable@vger.kernel.org\nSigned-off-by: Dave Jones \u003cdavej@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "15674868d6c5985466835c56dd89d39235f16302",
      "tree": "c1e303c7d5463803a44a25cdb79e0028ac24e96c",
      "parents": [
        "5b716ac728bcc01b1f2a7ed6e437196602237c27"
      ],
      "author": {
        "name": "Sachin Kamat",
        "email": "sachin.kamat@linaro.org",
        "time": "Tue Sep 04 13:55:05 2012 +0530"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@kernel.org",
        "time": "Wed Sep 05 08:32:30 2012 +0200"
      },
      "message": "mm/memblock: Use NULL instead of 0 for pointers\n\nThis type cleanup also fixes the following sparse warning:\n\n  mm/memblock.c:249:49: warning: Using plain integer as NULL pointer\n\nSigned-off-by: Sachin Kamat \u003csachin.kamat@linaro.org\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: patches@linaro.org\nCc: linux-mm@kvack.org\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\n"
    },
    {
      "commit": "51cd8e6ff265650e35e46b5bcbe2ee381a7a2877",
      "tree": "810b33b488093ecac152252cbe22d4d62c7c9763",
      "parents": [
        "c182ae42cc3611f7b3fa803c0bcab6e5d29bea63"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Aug 28 19:57:21 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 29 11:32:21 2012 -0700"
      },
      "message": "mm, slab: lock the correct nodelist after reenabling irqs\n\ncache_grow() can reenable irqs so the cpu (and node) can change, so ensure\nthat we take list_lock on the correct nodelist.\n\nThis fixes an issue with commit 072bb0aa5e06 (\"mm: sl[au]b: add\nknowledge of PFMEMALLOC reserve pages\") where list_lock for the wrong\nnode was taken after growing the cache.\n\nReported-and-tested-by: Haggai Eran \u003chaggaie@mellanox.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a7e546f175f07630453c44b5afe14dd667dcfec9",
      "tree": "352c2577161f0cbe8c3b49bb6f053cfd49ed32b4",
      "parents": [
        "da31ce727e8cc6920de5840e35b4e770c08e86e3",
        "676ce6d5ca3098339c028d44fe0427d1566a4d2d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 25 11:36:43 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 25 11:36:43 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-block\n\nPull block-related fixes from Jens Axboe:\n\n - Improvements to the buffered and direct write IO plugging from\n   Fengguang.\n\n - Abstract out the mapping of a bio in a request, and use that to\n   provide a blk_bio_map_sg() helper.  Useful for mapping just a bio\n   instead of a full request.\n\n - Regression fix from Hugh, fixing up a patch that went into the\n   previous release cycle (and marked stable, too) attempting to prevent\n   a loop in __getblk_slow().\n\n - Updates to discard requests, fixing up the sizing and how we align\n   them.  Also a change to disallow merging of discard requests, since\n   that doesn\u0027t really work properly yet.\n\n - A few drbd fixes.\n\n - Documentation updates.\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-block:\n  block: replace __getblk_slow misfix by grow_dev_page fix\n  drbd: Write all pages of the bitmap after an online resize\n  drbd: Finish requests that completed while IO was frozen\n  drbd: fix drbd wire compatibility for empty flushes\n  Documentation: update tunable options in block/cfq-iosched.txt\n  Documentation: update tunable options in block/cfq-iosched.txt\n  Documentation: update missing index files in block/00-INDEX\n  block: move down direct IO plugging\n  block: remove plugging at buffered write time\n  block: disable discard request merge temporarily\n  bio: Fix potential memory leak in bio_find_or_create_slab()\n  block: Don\u0027t use static to define \"void *p\" in show_partition_start()\n  block: Add blk_bio_map_sg() helper\n  block: Introduce __blk_segment_map_sg() helper\n  fs/block-dev.c:fix performance regression in O_DIRECT writes to md block devices\n  block: split discard into aligned requests\n  block: reorganize rounding of max_discard_sectors\n"
    },
    {
      "commit": "7ca63ee1b005623af7c4f3481a2976de3b9fed53",
      "tree": "43095ed12f75a7930e91625ea974b61e9664d2bc",
      "parents": [
        "caf1aaf6d20684f532099c242a18ad3f46cf7a17",
        "f5042d037544215de530a375431c3fca60140823"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 23 21:48:41 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 23 21:48:41 2012 -0700"
      },
      "message": "Merge branch \u0027perf-urgent-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull perf fixes from Ingo Molnar:\n \"This tree contains misc fixlets: a perf script python binding fix, a\n  uprobes fix and a syscall tracing fix.\"\n\n* \u0027perf-urgent-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:\n  perf tools: Add missing files to build the python binding\n  uprobes: Fix mmap_region()\u0027s mm-\u003emm_rb corruption if uprobe_mmap() fails\n  tracing/syscalls: Fix perf syscall tracing when syscall_nr \u003d\u003d -1\n"
    },
    {
      "commit": "c67fe3752abe6ab47639e2f9b836900c3dc3da84",
      "tree": "c66f8f1c7a26c0277875e90107d9315f69ec2adf",
      "parents": [
        "de74f1cc3b1e9730d9b58580cd11361d30cd182d"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Aug 21 16:16:17 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 21 16:45:03 2012 -0700"
      },
      "message": "mm: compaction: Abort async compaction if locks are contended or taking too long\n\nJim Schutt reported a problem that pointed at compaction contending\nheavily on locks.  The workload is straight-forward and in his own words;\n\n\tThe systems in question have 24 SAS drives spread across 3 HBAs,\n\trunning 24 Ceph OSD instances, one per drive.  FWIW these servers\n\tare dual-socket Intel 5675 Xeons w/48 GB memory.  I\u0027ve got ~160\n\tCeph Linux clients doing dd simultaneously to a Ceph file system\n\tbacked by 12 of these servers.\n\nEarly in the test everything looks fine\n\n  procs -------------------memory------------------ ---swap-- -----io---- --system-- -----cpu-------\n   r  b       swpd       free       buff      cache   si   so    bi    bo   in   cs  us sy  id wa st\n  31 15          0     287216        576   38606628    0    0     2  1158    2   14   1  3  95  0  0\n  27 15          0     225288        576   38583384    0    0    18 2222016 203357 134876  11 56  17 15  0\n  28 17          0     219256        576   38544736    0    0    11 2305932 203141 146296  11 49  23 17  0\n   6 18          0     215596        576   38552872    0    0     7 2363207 215264 166502  12 45  22 20  0\n  22 18          0     226984        576   38596404    0    0     3 2445741 223114 179527  12 43  23 22  0\n\nand then it goes to pot\n\n  procs -------------------memory------------------ ---swap-- -----io---- --system-- -----cpu-------\n   r  b       swpd       free       buff      cache   si   so    bi    bo   in   cs  us sy  id wa st\n  163  8          0     464308        576   36791368    0    0    11 22210  866  536   3 13  79  4  0\n  207 14          0     917752        576   36181928    0    0   712 1345376 134598 47367   7 90   1  2  0\n  123 12          0     685516        576   36296148    0    0   429 1386615 158494 60077   8 84   5  3  0\n  123 12          0     598572        576   36333728    0    0  1107 1233281 147542 62351   7 84   5  4  0\n  622  7          0     660768        576   36118264    0    0   557 1345548 151394 59353   7 85   4  3  0\n  223 11          0     283960        576   36463868    0    0    46 1107160 121846 33006   6 93   1  1  0\n\nNote that system CPU usage is very high blocks being written out has\ndropped by 42%. He analysed this with perf and found\n\n  perf record -g -a sleep 10\n  perf report --sort symbol --call-graph fractal,5\n    34.63%  [k] _raw_spin_lock_irqsave\n            |\n            |--97.30%-- isolate_freepages\n            |          compaction_alloc\n            |          unmap_and_move\n            |          migrate_pages\n            |          compact_zone\n            |          compact_zone_order\n            |          try_to_compact_pages\n            |          __alloc_pages_direct_compact\n            |          __alloc_pages_slowpath\n            |          __alloc_pages_nodemask\n            |          alloc_pages_vma\n            |          do_huge_pmd_anonymous_page\n            |          handle_mm_fault\n            |          do_page_fault\n            |          page_fault\n            |          |\n            |          |--87.39%-- skb_copy_datagram_iovec\n            |          |          tcp_recvmsg\n            |          |          inet_recvmsg\n            |          |          sock_recvmsg\n            |          |          sys_recvfrom\n            |          |          system_call\n            |          |          __recv\n            |          |          |\n            |          |           --100.00%-- (nil)\n            |          |\n            |           --12.61%-- memcpy\n             --2.70%-- [...]\n\nThere was other data but primarily it is all showing that compaction is\ncontended heavily on the zone-\u003elock and zone-\u003elru_lock.\n\ncommit [b2eef8c0: mm: compaction: minimise the time IRQs are disabled\nwhile isolating pages for migration] noted that it was possible for\nmigration to hold the lru_lock for an excessive amount of time. Very\nbroadly speaking this patch expands the concept.\n\nThis patch introduces compact_checklock_irqsave() to check if a lock\nis contended or the process needs to be scheduled. If either condition\nis true then async compaction is aborted and the caller is informed.\nThe page allocator will fail a THP allocation if compaction failed due\nto contention. This patch also introduces compact_trylock_irqsave()\nwhich will acquire the lock only if it is not contended and the process\ndoes not need to schedule.\n\nReported-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nTested-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nSigned-off-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": "de74f1cc3b1e9730d9b58580cd11361d30cd182d",
      "tree": "436c660650712ede2a31f994d154094bbaddce87",
      "parents": [
        "9a9a9a7adafe62a34de8b4fb48936c1c5f9bafa5"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Aug 21 16:16:15 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 21 16:45:03 2012 -0700"
      },
      "message": "mm: have order \u003e 0 compaction start near a pageblock with free pages\n\nCommit 7db8889ab05b (\"mm: have order \u003e 0 compaction start off where it\nleft\") introduced a caching mechanism to reduce the amount work the free\npage scanner does in compaction.  However, it has a problem.  Consider\ntwo process simultaneously scanning free pages\n\n\t\t\t\t\t    \t\t\tC\n\tProcess A\t\tM     S     \t\t\tF\n\t\t\t|---------------------------------------|\n\tProcess B\t\tM \tFS\n\n\tC is zone-\u003ecompact_cached_free_pfn\n\tS is cc-\u003estart_pfree_pfn\n\tM is cc-\u003emigrate_pfn\n\tF is cc-\u003efree_pfn\n\nIn this diagram, Process A has just reached its migrate scanner, wrapped\naround and updated compact_cached_free_pfn accordingly.\n\nSimultaneously, Process B finishes isolating in a block and updates\ncompact_cached_free_pfn again to the location of its free scanner.\n\nProcess A moves to \"end_of_zone - one_pageblock\" and runs this check\n\n                if (cc-\u003eorder \u003e 0 \u0026\u0026 (!cc-\u003ewrapped ||\n                                      zone-\u003ecompact_cached_free_pfn \u003e\n                                      cc-\u003estart_free_pfn))\n                        pfn \u003d min(pfn, zone-\u003ecompact_cached_free_pfn);\n\ncompact_cached_free_pfn is above where it started so the free scanner\nskips almost the entire space it should have scanned.  When there are\nmultiple processes compacting it can end in a situation where the entire\nzone is not being scanned at all.  Further, it is possible for two\nprocesses to ping-pong update to compact_cached_free_pfn which is just\nrandom.\n\nOverall, the end result wrecks allocation success rates.\n\nThere is not an obvious way around this problem without introducing new\nlocking and state so this patch takes a different approach.\n\nFirst, it gets rid of the skip logic because it\u0027s not clear that it\nmatters if two free scanners happen to be in the same block but with\nracing updates it\u0027s too easy for it to skip over blocks it should not.\n\nSecond, it updates compact_cached_free_pfn in a more limited set of\ncircumstances.\n\nIf a scanner has wrapped, it updates compact_cached_free_pfn to the end\n\tof the zone. When a wrapped scanner isolates a page, it updates\n\tcompact_cached_free_pfn to point to the highest pageblock it\n\tcan isolate pages from.\n\nIf a scanner has not wrapped when it has finished isolated pages it\n\tchecks if compact_cached_free_pfn is pointing to the end of the\n\tzone. If so, the value is updated to point to the highest\n\tpageblock that pages were isolated from. This value will not\n\tbe updated again until a free page scanner wraps and resets\n\tcompact_cached_free_pfn.\n\nThis is not optimal and it can still race but the compact_cached_free_pfn\nwill be pointing to or very near a pageblock with free pages.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.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": "b121186ab1b12e2a96a945d88eae0735b4542158",
      "tree": "9d142b77b090af2c508302457435f33143630a0b",
      "parents": [
        "5ed12f12825c6c0451d703bfe918a7fc190e2738"
      ],
      "author": {
        "name": "Alex Shi",
        "email": "alex.shi@intel.com",
        "time": "Tue Aug 21 16:16:08 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 21 16:45:03 2012 -0700"
      },
      "message": "mm: correct page-\u003epfmemalloc to fix deactivate_slab regression\n\nCommit cfd19c5a9ecf (\"mm: only set page-\u003epfmemalloc when\nALLOC_NO_WATERMARKS was used\") tried to narrow down page-\u003epfmemalloc\nsetting, but it missed some places the pfmemalloc should be set.\n\nSo, in __slab_alloc, the unalignment pfmemalloc and ALLOC_NO_WATERMARKS\ncause incorrect deactivate_slab() on our core2 server:\n\n    64.73%           fio  [kernel.kallsyms]     [k] _raw_spin_lock\n                     |\n                     --- _raw_spin_lock\n                        |\n                        |---0.34%-- deactivate_slab\n                        |          __slab_alloc\n                        |          kmem_cache_alloc\n                        |          |\n\nThat causes our fio sync write performance to have a 40% regression.\n\nMove the checking in get_page_from_freelist() which resolves this issue.\n\nSigned-off-by: Alex Shi \u003calex.shi@intel.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nTested-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nTested-by: Sage Weil \u003csage@inktank.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c81758fbe0fdbbc0c74b37798f55bd9c91d5c068",
      "tree": "5f25b6a2220c5e358e278681d6edc734b87288c3",
      "parents": [
        "7838f994b4fceff24c343f4e26a6cf4393869579"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan@kernel.org",
        "time": "Tue Aug 21 16:16:03 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 21 16:45:03 2012 -0700"
      },
      "message": "mm/compaction.c: fix deferring compaction mistake\n\nCommit aff622495c9a (\"vmscan: only defer compaction for failed order and\nhigher\") fixed bad deferring policy but made mistake about checking\ncompact_order_failed in __compact_pgdat().  So it can\u0027t update\ncompact_order_failed with the new order.  This ends up preventing\ncorrect operation of policy deferral.  This patch fixes it.\n\nSigned-off-by: Minchan Kim \u003cminchan@kernel.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f9aed62a2b12a8e04077737c9942111e14ed738e",
      "tree": "c6e4702415f153c615c961a7d6d5f35a718c34ef",
      "parents": [
        "61e01be22e954f53a4bbac8066015d9f4ab9e42d"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue Aug 21 16:15:45 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 21 16:45:02 2012 -0700"
      },
      "message": "mm: change nr_ptes BUG_ON to WARN_ON\n\nOccasionally an isolated BUG_ON(mm-\u003enr_ptes) gets reported, indicating\nthat not all the page tables allocated could be found and freed when\nexit_mmap() tore down the user address space.\n\nThere\u0027s usually nothing we can say about it, beyond that it\u0027s probably a\nsign of some bad memory or memory corruption; though it might still\nindicate a bug in vma or page table management (and did recently reveal a\nrace in THP, fixed a few months ago).\n\nBut one overdue change we can make is from BUG_ON to WARN_ON.\n\nIt\u0027s fairly likely that the system will crash shortly afterwards in some\nother way (for example, the BUG_ON(page_mapped(page)) in\n__delete_from_page_cache(), once an inode mapped into the lost page tables\ngets evicted); but might tell us more before that.\n\nChange the BUG_ON(page_mapped) to WARN_ON too?  Later perhaps: I\u0027m less\neager, since that one has several times led to fixes.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c7a3a88c938fbe3d70c2278e082b80eb830d1c58",
      "tree": "e25070dc5141c2614fbcfaae543de4237418a623",
      "parents": [
        "9160338de92c0305329be5163a76f849806e83de"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Aug 19 19:10:42 2012 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@kernel.org",
        "time": "Tue Aug 21 11:48:12 2012 +0200"
      },
      "message": "uprobes: Fix mmap_region()\u0027s mm-\u003emm_rb corruption if uprobe_mmap() fails\n\nThis patch fixes:\n\n  https://bugzilla.redhat.com/show_bug.cgi?id\u003d843640\n\nIf mmap_region()-\u003euprobe_mmap() fails, unmap_and_free_vma path\ndoes unmap_region() but does not remove the soon-to-be-freed vma\nfrom rb tree. Actually there are more problems but this is how\nWilliam noticed this bug.\n\nPerhaps we could do do_munmap() + return in this case, but in\nfact it is simply wrong to abort if uprobe_mmap() fails. Until\nat least we move the !UPROBE_COPY_INSN code from\ninstall_breakpoint() to uprobe_register().\n\nFor example, uprobe_mmap()-\u003einstall_breakpoint() can fail if the\nprobed insn is not supported (remember, uprobe_register()\nsucceeds if nobody mmaps inode/offset), mmap() should not fail\nin this case.\n\ndup_mmap()-\u003euprobe_mmap() is wrong too by the same reason,\nfork() can race with uprobe_register() and fail for no reason if\nit wins the race and does install_breakpoint() first.\n\nAnd, if nothing else, both mmap_region() and dup_mmap() return\nsuccess if uprobe_mmap() fails. Change them to ignore the error\ncode from uprobe_mmap().\n\nReported-and-tested-by: William Cohen \u003cwcohen@redhat.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e # v3.5\nCc: Anton Arapov \u003canton@redhat.com\u003e\nCc: William Cohen \u003cwcohen@redhat.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nLink: http://lkml.kernel.org/r/20120819171042.GB26957@redhat.com\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\n"
    },
    {
      "commit": "647d1e4c5235763b83fbfe74a09d148edc6ca152",
      "tree": "5c7be727323b16ee80ddba672b3b3baa69454486",
      "parents": [
        "8430f9772f9ac305211f177b0fa56a312175da11"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Aug 09 15:23:09 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Aug 09 15:23:09 2012 +0200"
      },
      "message": "block: move down direct IO plugging\n\nMove unplugging for direct I/O from around -\u003edirect_IO() down to\ndo_blockdev_direct_IO(). This implicitly adds plugging for direct\nwrites.\n\nCC: Li Shaohua \u003cshli@fusionio.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "8430f9772f9ac305211f177b0fa56a312175da11",
      "tree": "02756ec7fd9c3f5545858dd7aa8c6da4b3e77866",
      "parents": [
        "276f0f5d157bb4a816053f4f3a941dbcd4f76556"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Aug 09 15:23:07 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Thu Aug 09 15:23:07 2012 +0200"
      },
      "message": "block: remove plugging at buffered write time\n\nBuffered write(2) is not directly tied to IO, so it\u0027s not suitable to\nhandle plug in generic_file_aio_write().\n\nNote that plugging for O_SYNC writes is also removed. The user may pass\narbitrary @size arguments, which may be much larger than the preferable\nI/O size, or may cross extent/device boundaries. Let the lower layers\nhandle the plugging. The plugging code here actually turns them into\nno-ops.\n\nCC: Li Shaohua \u003cshli@fusionio.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "f0cd2dbb6cf387c11f87265462e370bb5469299e",
      "tree": "21c9b6237dd9131763654a6cd715461177701607",
      "parents": [
        "d42d1dabf34bdd5ad832cb56a7338817aad8a052"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "artem.bityutskiy@linux.intel.com",
        "time": "Wed Jul 25 18:11:59 2012 +0300"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Aug 04 01:24:44 2012 +0400"
      },
      "message": "vfs: kill write_super and sync_supers\n\nFinally we can kill the \u0027sync_supers\u0027 kernel thread along with the\n\u0027-\u003ewrite_super()\u0027 superblock operation because all the users are gone.\nNow every file-system is supposed to self-manage own superblock and\nits dirty state.\n\nThe nice thing about killing this thread is that it improves power management.\nIndeed, \u0027sync_supers\u0027 is a source of monotonic system wake-ups - it woke up\nevery 5 seconds no matter what - even if there were no dirty superblocks and\neven if there were no file-systems using this service (e.g., btrfs and\njournalled ext4 do not need it). So it was wasting power most of the time. And\nbecause the thread was in the core of the kernel, all systems had to have it.\nSo I am quite happy to make it go away.\n\nInterestingly, this thread is a left-over from the pdflush kernel thread which\nwas a self-forking kernel thread responsible for all the write-back in old\nLinux kernels. It was turned into per-block device BDI threads, and\n\u0027sync_supers\u0027 was a left-over. Thus, R.I.P, pdflush as well.\n\nSigned-off-by: Artem Bityutskiy \u003cartem.bityutskiy@linux.intel.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8783b6e2b2cb726f2734cf208d101f73ac1ba616",
      "tree": "faf2a4a652b123083bed519bf6c287faadd00325",
      "parents": [
        "1a9b4993b70fb1884716902774dc9025b457760d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 02 10:37:03 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 02 10:37:03 2012 -0700"
      },
      "message": "mm: remove node_start_pfn checking in new WARN_ON for now\n\nBorislav Petkov reports that the new warning added in commit\n88fdf75d1bb5 (\"mm: warn if pg_data_t isn\u0027t initialized with zero\")\ntriggers for him, and it is the node_start_pfn field that has already\nbeen initialized once.\n\nThe call trace looks like this:\n\n  x86_64_start_kernel -\u003e\n    x86_64_start_reservations -\u003e\n    start_kernel -\u003e\n    setup_arch -\u003e\n    paging_init -\u003e\n    zone_sizes_init -\u003e\n    free_area_init_nodes -\u003e\n    free_area_init_node\n\nand (with the warning replaced by debug output), Borislav sees\n\n  On node 0 totalpages: 4193848\n    DMA zone: 64 pages used for memmap\n    DMA zone: 6 pages reserved\n    DMA zone: 3890 pages, LIFO batch:0\n    DMA32 zone: 16320 pages used for memmap\n    DMA32 zone: 798464 pages, LIFO batch:31\n    Normal zone: 52736 pages used for memmap\n    Normal zone: 3322368 pages, LIFO batch:31\n  free_area_init_node: pgdat-\u003enode_start_pfn: 4423680      \u003c----\n  On node 1 totalpages: 4194304\n    Normal zone: 65536 pages used for memmap\n    Normal zone: 4128768 pages, LIFO batch:31\n  free_area_init_node: pgdat-\u003enode_start_pfn: 8617984      \u003c----\n  On node 2 totalpages: 4194304\n    Normal zone: 65536 pages used for memmap\n    Normal zone: 4128768 pages, LIFO batch:31\n  free_area_init_node: pgdat-\u003enode_start_pfn: 12812288     \u003c----\n  On node 3 totalpages: 4194304\n    Normal zone: 65536 pages used for memmap\n    Normal zone: 4128768 pages, LIFO batch:31\n\nso remove the bogus warning for now to avoid annoying people.  Minchan\nKim is looking at it.\n\nReported-by: Borislav Petkov \u003cbp@amd64.org\u003e\nCc: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a0e881b7c189fa2bd76c024dbff91e79511c971d",
      "tree": "0c801918565b08921d21aceee5b326f64d998f5f",
      "parents": [
        "eff0d13f3823f35d70228cd151d2a2c89288ff32",
        "dbc6e0222d79e78925fe20733844a796a4b72cf9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 01 10:26:23 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 01 10:26:23 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\nPull second vfs pile from Al Viro:\n \"The stuff in there: fsfreeze deadlock fixes by Jan (essentially, the\n  deadlock reproduced by xfstests 068), symlink and hardlink restriction\n  patches, plus assorted cleanups and fixes.\n\n  Note that another fsfreeze deadlock (emergency thaw one) is *not*\n  dealt with - the series by Fernando conflicts a lot with Jan\u0027s, breaks\n  userland ABI (FIFREEZE semantics gets changed) and trades the deadlock\n  for massive vfsmount leak; this is going to be handled next cycle.\n  There probably will be another pull request, but that stuff won\u0027t be\n  in it.\"\n\nFix up trivial conflicts due to unrelated changes next to each other in\ndrivers/{staging/gdm72xx/usb_boot.c, usb/gadget/storage_common.c}\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (54 commits)\n  delousing target_core_file a bit\n  Documentation: Correct s_umount state for freeze_fs/unfreeze_fs\n  fs: Remove old freezing mechanism\n  ext2: Implement freezing\n  btrfs: Convert to new freezing mechanism\n  nilfs2: Convert to new freezing mechanism\n  ntfs: Convert to new freezing mechanism\n  fuse: Convert to new freezing mechanism\n  gfs2: Convert to new freezing mechanism\n  ocfs2: Convert to new freezing mechanism\n  xfs: Convert to new freezing code\n  ext4: Convert to new freezing mechanism\n  fs: Protect write paths by sb_start_write - sb_end_write\n  fs: Skip atime update on frozen filesystem\n  fs: Add freezing handling to mnt_want_write() / mnt_drop_write()\n  fs: Improve filesystem freezing handling\n  switch the protection of percpu_counter list to spinlock\n  nfsd: Push mnt_want_write() outside of i_mutex\n  btrfs: Push mnt_want_write() outside of i_mutex\n  fat: Push mnt_want_write() outside of i_mutex\n  ...\n"
    },
    {
      "commit": "8cf1a3fce0b95050b63d451c9d561da0da2aa4d6",
      "tree": "0dc7f93474c3be601a5893900db1418dfd60ba5d",
      "parents": [
        "fcff06c438b60f415af5983efe92811d6aa02ad1",
        "80799fbb7d10c30df78015b3fa21f7ffcfc0eb2c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 01 09:02:41 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 01 09:02:41 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.6/core\u0027 of git://git.kernel.dk/linux-block\n\nPull core block IO bits from Jens Axboe:\n \"The most complicated part if this is the request allocation rework by\n  Tejun, which has been queued up for a long time and has been in\n  for-next ditto as well.\n\n  There are a few commits from yesterday and today, mostly trivial and\n  obvious fixes.  So I\u0027m pretty confident that it is sound.  It\u0027s also\n  smaller than usual.\"\n\n* \u0027for-3.6/core\u0027 of git://git.kernel.dk/linux-block:\n  block: remove dead func declaration\n  block: add partition resize function to blkpg ioctl\n  block: uninitialized ioc-\u003enr_tasks triggers WARN_ON\n  block: do not artificially constrain max_sectors for stacking drivers\n  blkcg: implement per-blkg request allocation\n  block: prepare for multiple request_lists\n  block: add q-\u003enr_rqs[] and move q-\u003erq.elvpriv to q-\u003enr_rqs_elvpriv\n  blkcg: inline bio_blkcg() and friends\n  block: allocate io_context upfront\n  block: refactor get_request[_wait]()\n  block: drop custom queue draining used by scsi_transport_{iscsi|fc}\n  mempool: add @gfp_mask to mempool_create_node()\n  blkcg: make root blkcg allocation use %GFP_KERNEL\n  blkcg: __blkg_lookup_create() doesn\u0027t need radix preload\n"
    },
    {
      "commit": "ac694dbdbc403c00e2c14d10bc7b8412cc378259",
      "tree": "e37328cfbeaf43716dd5914cad9179e57e84df76",
      "parents": [
        "a40a1d3d0a2fd613fdec6d89d3c053268ced76ed",
        "437ea90cc3afdca5229b41c6b1d38c4842756cb9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 19:25:39 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 19:25:39 2012 -0700"
      },
      "message": "Merge branch \u0027akpm\u0027 (Andrew\u0027s patch-bomb)\n\nMerge Andrew\u0027s second set of patches:\n - MM\n - a few random fixes\n - a couple of RTC leftovers\n\n* emailed patches from Andrew Morton \u003cakpm@linux-foundation.org\u003e: (120 commits)\n  rtc/rtc-88pm80x: remove unneed devm_kfree\n  rtc/rtc-88pm80x: assign ret only when rtc_register_driver fails\n  mm: hugetlbfs: close race during teardown of hugetlbfs shared page tables\n  tmpfs: distribute interleave better across nodes\n  mm: remove redundant initialization\n  mm: warn if pg_data_t isn\u0027t initialized with zero\n  mips: zero out pg_data_t when it\u0027s allocated\n  memcg: gix memory accounting scalability in shrink_page_list\n  mm/sparse: remove index_init_lock\n  mm/sparse: more checks on mem_section number\n  mm/sparse: optimize sparse_index_alloc\n  memcg: add mem_cgroup_from_css() helper\n  memcg: further prevent OOM with too many dirty pages\n  memcg: prevent OOM with too many dirty pages\n  mm: mmu_notifier: fix freed page still mapped in secondary MMU\n  mm: memcg: only check anon swapin page charges for swap cache\n  mm: memcg: only check swap cache pages for repeated charging\n  mm: memcg: split swapin charge function into private and public part\n  mm: memcg: remove needless !mm fixup to init_mm when charging\n  mm: memcg: remove unneeded shmem charge type\n  ...\n"
    },
    {
      "commit": "d833352a4338dc31295ed832a30c9ccff5c7a183",
      "tree": "17d0da8ace1daaabe465304bca861c38e85216b5",
      "parents": [
        "09c231cb8bfdc35e7d896850d34440b8553b084f"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:46:20 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:50 2012 -0700"
      },
      "message": "mm: hugetlbfs: close race during teardown of hugetlbfs shared page tables\n\nIf a process creates a large hugetlbfs mapping that is eligible for page\ntable sharing and forks heavily with children some of whom fault and\nothers which destroy the mapping then it is possible for page tables to\nget corrupted.  Some teardowns of the mapping encounter a \"bad pmd\" and\noutput a message to the kernel log.  The final teardown will trigger a\nBUG_ON in mm/filemap.c.\n\nThis was reproduced in 3.4 but is known to have existed for a long time\nand goes back at least as far as 2.6.37.  It was probably was introduced\nin 2.6.20 by [39dde65c: shared page table for hugetlb page].  The messages\nlook like this;\n\n[  ..........] Lots of bad pmd messages followed by this\n[  127.164256] mm/memory.c:391: bad pmd ffff880412e04fe8(80000003de4000e7).\n[  127.164257] mm/memory.c:391: bad pmd ffff880412e04ff0(80000003de6000e7).\n[  127.164258] mm/memory.c:391: bad pmd ffff880412e04ff8(80000003de0000e7).\n[  127.186778] ------------[ cut here ]------------\n[  127.186781] kernel BUG at mm/filemap.c:134!\n[  127.186782] invalid opcode: 0000 [#1] SMP\n[  127.186783] CPU 7\n[  127.186784] Modules linked in: af_packet cpufreq_conservative cpufreq_userspace cpufreq_powersave acpi_cpufreq mperf ext3 jbd dm_mod coretemp crc32c_intel usb_storage ghash_clmulni_intel aesni_intel i2c_i801 r8169 mii uas sr_mod cdrom sg iTCO_wdt iTCO_vendor_support shpchp serio_raw cryptd aes_x86_64 e1000e pci_hotplug dcdbas aes_generic container microcode ext4 mbcache jbd2 crc16 sd_mod crc_t10dif i915 drm_kms_helper drm i2c_algo_bit ehci_hcd ahci libahci usbcore rtc_cmos usb_common button i2c_core intel_agp video intel_gtt fan processor thermal thermal_sys hwmon ata_generic pata_atiixp libata scsi_mod\n[  127.186801]\n[  127.186802] Pid: 9017, comm: hugetlbfs-test Not tainted 3.4.0-autobuild #53 Dell Inc. OptiPlex 990/06D7TR\n[  127.186804] RIP: 0010:[\u003cffffffff810ed6ce\u003e]  [\u003cffffffff810ed6ce\u003e] __delete_from_page_cache+0x15e/0x160\n[  127.186809] RSP: 0000:ffff8804144b5c08  EFLAGS: 00010002\n[  127.186810] RAX: 0000000000000001 RBX: ffffea000a5c9000 RCX: 00000000ffffffc0\n[  127.186811] RDX: 0000000000000000 RSI: 0000000000000009 RDI: ffff88042dfdad00\n[  127.186812] RBP: ffff8804144b5c18 R08: 0000000000000009 R09: 0000000000000003\n[  127.186813] R10: 0000000000000000 R11: 000000000000002d R12: ffff880412ff83d8\n[  127.186814] R13: ffff880412ff83d8 R14: 0000000000000000 R15: ffff880412ff83d8\n[  127.186815] FS:  00007fe18ed2c700(0000) GS:ffff88042dce0000(0000) knlGS:0000000000000000\n[  127.186816] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\n[  127.186817] CR2: 00007fe340000503 CR3: 0000000417a14000 CR4: 00000000000407e0\n[  127.186818] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n[  127.186819] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n[  127.186820] Process hugetlbfs-test (pid: 9017, threadinfo ffff8804144b4000, task ffff880417f803c0)\n[  127.186821] Stack:\n[  127.186822]  ffffea000a5c9000 0000000000000000 ffff8804144b5c48 ffffffff810ed83b\n[  127.186824]  ffff8804144b5c48 000000000000138a 0000000000001387 ffff8804144b5c98\n[  127.186825]  ffff8804144b5d48 ffffffff811bc925 ffff8804144b5cb8 0000000000000000\n[  127.186827] Call Trace:\n[  127.186829]  [\u003cffffffff810ed83b\u003e] delete_from_page_cache+0x3b/0x80\n[  127.186832]  [\u003cffffffff811bc925\u003e] truncate_hugepages+0x115/0x220\n[  127.186834]  [\u003cffffffff811bca43\u003e] hugetlbfs_evict_inode+0x13/0x30\n[  127.186837]  [\u003cffffffff811655c7\u003e] evict+0xa7/0x1b0\n[  127.186839]  [\u003cffffffff811657a3\u003e] iput_final+0xd3/0x1f0\n[  127.186840]  [\u003cffffffff811658f9\u003e] iput+0x39/0x50\n[  127.186842]  [\u003cffffffff81162708\u003e] d_kill+0xf8/0x130\n[  127.186843]  [\u003cffffffff81162812\u003e] dput+0xd2/0x1a0\n[  127.186845]  [\u003cffffffff8114e2d0\u003e] __fput+0x170/0x230\n[  127.186848]  [\u003cffffffff81236e0e\u003e] ? rb_erase+0xce/0x150\n[  127.186849]  [\u003cffffffff8114e3ad\u003e] fput+0x1d/0x30\n[  127.186851]  [\u003cffffffff81117db7\u003e] remove_vma+0x37/0x80\n[  127.186853]  [\u003cffffffff81119182\u003e] do_munmap+0x2d2/0x360\n[  127.186855]  [\u003cffffffff811cc639\u003e] sys_shmdt+0xc9/0x170\n[  127.186857]  [\u003cffffffff81410a39\u003e] system_call_fastpath+0x16/0x1b\n[  127.186858] Code: 0f 1f 44 00 00 48 8b 43 08 48 8b 00 48 8b 40 28 8b b0 40 03 00 00 85 f6 0f 88 df fe ff ff 48 89 df e8 e7 cb 05 00 e9 d2 fe ff ff \u003c0f\u003e 0b 55 83 e2 fd 48 89 e5 48 83 ec 30 48 89 5d d8 4c 89 65 e0\n[  127.186868] RIP  [\u003cffffffff810ed6ce\u003e] __delete_from_page_cache+0x15e/0x160\n[  127.186870]  RSP \u003cffff8804144b5c08\u003e\n[  127.186871] ---[ end trace 7cbac5d1db69f426 ]---\n\nThe bug is a race and not always easy to reproduce.  To reproduce it I was\ndoing the following on a single socket I7-based machine with 16G of RAM.\n\n$ hugeadm --pool-pages-max DEFAULT:13G\n$ echo $((18*1048576*1024)) \u003e /proc/sys/kernel/shmmax\n$ echo $((18*1048576*1024)) \u003e /proc/sys/kernel/shmall\n$ for i in `seq 1 9000`; do ./hugetlbfs-test; done\n\nOn my particular machine, it usually triggers within 10 minutes but\nenabling debug options can change the timing such that it never hits.\nOnce the bug is triggered, the machine is in trouble and needs to be\nrebooted.  The machine will respond but processes accessing proc like \"ps\naux\" will hang due to the BUG_ON.  shutdown will also hang and needs a\nhard reset or a sysrq-b.\n\nThe basic problem is a race between page table sharing and teardown.  For\nthe most part page table sharing depends on i_mmap_mutex.  In some cases,\nit is also taking the mm-\u003epage_table_lock for the PTE updates but with\nshared page tables, it is the i_mmap_mutex that is more important.\n\nUnfortunately it appears to be also insufficient. Consider the following\nsituation\n\nProcess A\t\t\t\t\tProcess B\n---------\t\t\t\t\t---------\nhugetlb_fault\t\t\t\t\tshmdt\n  \t\t\t\t\t\tLockWrite(mmap_sem)\n    \t\t\t\t\t\t  do_munmap\n\t\t\t\t\t\t    unmap_region\n\t\t\t\t\t\t      unmap_vmas\n\t\t\t\t\t\t        unmap_single_vma\n\t\t\t\t\t\t          unmap_hugepage_range\n      \t\t\t\t\t\t            Lock(i_mmap_mutex)\n\t\t\t\t\t\t\t    Lock(mm-\u003epage_table_lock)\n\t\t\t\t\t\t\t    huge_pmd_unshare/unmap tables \u003c--- (1)\n\t\t\t\t\t\t\t    Unlock(mm-\u003epage_table_lock)\n      \t\t\t\t\t\t            Unlock(i_mmap_mutex)\n  huge_pte_alloc\t\t\t\t      ...\n    Lock(i_mmap_mutex)\t\t\t\t      ...\n    vma_prio_walk, find svma, spte\t\t      ...\n    Lock(mm-\u003epage_table_lock)\t\t\t      ...\n    share spte\t\t\t\t\t      ...\n    Unlock(mm-\u003epage_table_lock)\t\t\t      ...\n    Unlock(i_mmap_mutex)\t\t\t      ...\n  hugetlb_no_page\t\t\t\t\t\t\t\t\t  \u003c--- (2)\n\t\t\t\t\t\t      free_pgtables\n\t\t\t\t\t\t        unlink_file_vma\n\t\t\t\t\t\t\thugetlb_free_pgd_range\n\t\t\t\t\t\t    remove_vma_list\n\nIn this scenario, it is possible for Process A to share page tables with\nProcess B that is trying to tear them down.  The i_mmap_mutex on its own\ndoes not prevent Process A walking Process B\u0027s page tables.  At (1) above,\nthe page tables are not shared yet so it unmaps the PMDs.  Process A sets\nup page table sharing and at (2) faults a new entry.  Process B then trips\nup on it in free_pgtables.\n\nThis patch fixes the problem by adding a new function\n__unmap_hugepage_range_final that is only called when the VMA is about to\nbe destroyed.  This function clears VM_MAYSHARE during\nunmap_hugepage_range() under the i_mmap_mutex.  This makes the VMA\nineligible for sharing and avoids the race.  Superficially this looks like\nit would then be vunerable to truncate and madvise issues but hugetlbfs\nhas its own truncate handlers so does not use unmap_mapping_range() and\ndoes not support madvise(DONTNEED).\n\nThis should be treated as a -stable candidate if it is merged.\n\nTest program is as follows. The test case was mostly written by Michal\nHocko with a few minor changes to reproduce this bug.\n\n\u003d\u003d\u003d\u003d CUT HERE \u003d\u003d\u003d\u003d\n\nstatic size_t huge_page_size \u003d (2UL \u003c\u003c 20);\nstatic size_t nr_huge_page_A \u003d 512;\nstatic size_t nr_huge_page_B \u003d 5632;\n\nunsigned int get_random(unsigned int max)\n{\n\tstruct timeval tv;\n\n\tgettimeofday(\u0026tv, NULL);\n\tsrandom(tv.tv_usec);\n\treturn random() % max;\n}\n\nstatic void play(void *addr, size_t size)\n{\n\tunsigned char *start \u003d addr,\n\t\t      *end \u003d start + size,\n\t\t      *a;\n\tstart +\u003d get_random(size/2);\n\n\t/* we could itterate on huge pages but let\u0027s give it more time. */\n\tfor (a \u003d start; a \u003c end; a +\u003d 4096)\n\t\t*a \u003d 0;\n}\n\nint main(int argc, char **argv)\n{\n\tkey_t key \u003d IPC_PRIVATE;\n\tsize_t sizeA \u003d nr_huge_page_A * huge_page_size;\n\tsize_t sizeB \u003d nr_huge_page_B * huge_page_size;\n\tint shmidA, shmidB;\n\tvoid *addrA \u003d NULL, *addrB \u003d NULL;\n\tint nr_children \u003d 300, n \u003d 0;\n\n\tif ((shmidA \u003d shmget(key, sizeA, IPC_CREAT|SHM_HUGETLB|0660)) \u003d\u003d -1) {\n\t\tperror(\"shmget:\");\n\t\treturn 1;\n\t}\n\n\tif ((addrA \u003d shmat(shmidA, addrA, SHM_R|SHM_W)) \u003d\u003d (void *)-1UL) {\n\t\tperror(\"shmat\");\n\t\treturn 1;\n\t}\n\tif ((shmidB \u003d shmget(key, sizeB, IPC_CREAT|SHM_HUGETLB|0660)) \u003d\u003d -1) {\n\t\tperror(\"shmget:\");\n\t\treturn 1;\n\t}\n\n\tif ((addrB \u003d shmat(shmidB, addrB, SHM_R|SHM_W)) \u003d\u003d (void *)-1UL) {\n\t\tperror(\"shmat\");\n\t\treturn 1;\n\t}\n\nfork_child:\n\tswitch(fork()) {\n\t\tcase 0:\n\t\t\tswitch (n%3) {\n\t\t\tcase 0:\n\t\t\t\tplay(addrA, sizeA);\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tplay(addrB, sizeB);\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase -1:\n\t\t\tperror(\"fork:\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tif (++n \u003c nr_children)\n\t\t\t\tgoto fork_child;\n\t\t\tplay(addrA, sizeA);\n\t\t\tbreak;\n\t}\n\tshmdt(addrA);\n\tshmdt(addrB);\n\tdo {\n\t\twait(NULL);\n\t} while (--n \u003e 0);\n\tshmctl(shmidA, IPC_RMID, NULL);\n\tshmctl(shmidB, IPC_RMID, NULL);\n\treturn 0;\n}\n\n[akpm@linux-foundation.org: name the declaration\u0027s args, fix CONFIG_HUGETLBFS\u003dn build]\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\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": "09c231cb8bfdc35e7d896850d34440b8553b084f",
      "tree": "f9a9dcc93c875253e0d879329b1f955b1a08638f",
      "parents": [
        "6527af5d1bea219d64095a5e30c1b1e0868aae16"
      ],
      "author": {
        "name": "Nathan Zimmer",
        "email": "nzimmer@sgi.com",
        "time": "Tue Jul 31 16:46:17 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:50 2012 -0700"
      },
      "message": "tmpfs: distribute interleave better across nodes\n\nWhen tmpfs has the interleave memory policy, it always starts allocating\nfor each file from node 0 at offset 0.  When there are many small files,\nthe lower nodes fill up disproportionately.\n\nThis patch spreads out node usage by starting files at nodes other than 0,\nby using the inode number to bias the starting node for interleave.\n\nSigned-off-by: Nathan Zimmer \u003cnzimmer@sgi.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Nick Piggin \u003cnpiggin@gmail.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6527af5d1bea219d64095a5e30c1b1e0868aae16",
      "tree": "99f36cf0b3744e5d7cdaf52c22a3e9897e17f7bb",
      "parents": [
        "88fdf75d1bb51d85ba00c466391770056d44bc03"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan@kernel.org",
        "time": "Tue Jul 31 16:46:16 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:50 2012 -0700"
      },
      "message": "mm: remove redundant initialization\n\npg_data_t is zeroed before reaching free_area_init_core(), so remove the\nnow unnecessary initializations.\n\nSigned-off-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "88fdf75d1bb51d85ba00c466391770056d44bc03",
      "tree": "0b4f6d9b9c0fb39fd03199c6b19ae626608b2fbb",
      "parents": [
        "93180cec0064d072a984f91c429c5e6bcc816976"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan@kernel.org",
        "time": "Tue Jul 31 16:46:14 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:50 2012 -0700"
      },
      "message": "mm: warn if pg_data_t isn\u0027t initialized with zero\n\nWarn if memory-hotplug/boot code doesn\u0027t initialize pg_data_t with zero\nwhen it is allocated.  Arch code and memory hotplug already initiailize\npg_data_t.  So this warning should never happen.  I select fields randomly\nnear the beginning, middle and end of pg_data_t for checking.\n\nThis patch isn\u0027t for performance but for removing initialization code\nwhich is necessary to add whenever we adds new field to pg_data_t or zone.\n\nFirstly, Andrew suggested clearing out of pg_data_t in MM core part but\nTejun doesn\u0027t like it because in the future, some archs can initialize\nsome fields in arch code and pass them into general MM part so blindly\nclearing it out in mm core part would be very annoying.\n\nSigned-off-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "69980e31754ef23307d51372e61bf7c2584f8a4b",
      "tree": "f36caa9cfcd5d5e118e53e6f6fdb48b1efc57e1c",
      "parents": [
        "c1c9518331969f97ea403bac66f0fd4a85d204d5"
      ],
      "author": {
        "name": "Tim Chen",
        "email": "tim.c.chen@linux.intel.com",
        "time": "Tue Jul 31 16:46:08 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:49 2012 -0700"
      },
      "message": "memcg: gix memory accounting scalability in shrink_page_list\n\nI noticed in a multi-process parallel files reading benchmark I ran on a 8\nsocket machine, throughput slowed down by a factor of 8 when I ran the\nbenchmark within a cgroup container.  I traced the problem to the\nfollowing code path (see below) when we are trying to reclaim memory from\nfile cache.  The res_counter_uncharge function is called on every page\nthat\u0027s reclaimed and created heavy lock contention.  The patch below\nallows the reclaimed pages to be uncharged from the resource counter in\nbatch and recovered the regression.\n\nTim\n\n     40.67%           usemem  [kernel.kallsyms]                   [k] _raw_spin_lock\n                      |\n                      --- _raw_spin_lock\n                         |\n                         |--92.61%-- res_counter_uncharge\n                         |          |\n                         |          |--100.00%-- __mem_cgroup_uncharge_common\n                         |          |          |\n                         |          |          |--100.00%-- mem_cgroup_uncharge_cache_page\n                         |          |          |          __remove_mapping\n                         |          |          |          shrink_page_list\n                         |          |          |          shrink_inactive_list\n                         |          |          |          shrink_mem_cgroup_zone\n                         |          |          |          shrink_zone\n                         |          |          |          do_try_to_free_pages\n                         |          |          |          try_to_free_pages\n                         |          |          |          __alloc_pages_nodemask\n                         |          |          |          alloc_pages_current\n\nSigned-off-by: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill.shutemov@linux.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": "c1c9518331969f97ea403bac66f0fd4a85d204d5",
      "tree": "9a3122ec4600b94784e86a99aec61a1e93a27da5",
      "parents": [
        "db36a46113e101a8aa2d6ede41e78f2eaabed3f1"
      ],
      "author": {
        "name": "Gavin Shan",
        "email": "shangw@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:46:06 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:49 2012 -0700"
      },
      "message": "mm/sparse: remove index_init_lock\n\nsparse_index_init() uses the index_init_lock spinlock to protect root\nmem_section assignment.  The lock is not necessary anymore because the\nfunction is called only during boot (during paging init which is executed\nonly from a single CPU) and from the hotplug code (by add_memory() via\narch_add_memory()) which uses mem_hotplug_mutex.\n\nThe lock was introduced by 28ae55c9 (\"sparsemem extreme: hotplug\npreparation\") and sparse_index_init() was used only during boot at that\ntime.\n\nLater when the hotplug code (and add_memory()) was introduced there was no\nsynchronization so it was possible to online more sections from the same\nroot probably (though I am not 100% sure about that).  The first\nsynchronization has been added by 6ad696d2 (\"mm: allow memory hotplug and\nhibernation in the same kernel\") which was later replaced by the\nmem_hotplug_mutex - 20d6c96b (\"mem-hotplug: introduce\n{un}lock_memory_hotplug()\").\n\nLet\u0027s remove the lock as it is not needed and it makes the code more\nconfusing.\n\n[mhocko@suse.cz: changelog]\nSigned-off-by: Gavin Shan \u003cshangw@linux.vnet.ibm.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\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": "db36a46113e101a8aa2d6ede41e78f2eaabed3f1",
      "tree": "bb438589b620dbdca16bf5918468cd56c5b19f42",
      "parents": [
        "5b760e64a64c8940cdccd0ba6fce19a9bd010d20"
      ],
      "author": {
        "name": "Gavin Shan",
        "email": "shangw@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:46:04 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:49 2012 -0700"
      },
      "message": "mm/sparse: more checks on mem_section number\n\n__section_nr() was implemented to retrieve the corresponding memory\nsection number according to its descriptor.  It\u0027s possible that the\nspecified memory section descriptor doesn\u0027t exist in the global array.  So\nadd more checking on that and report an error for a wrong case.\n\nSigned-off-by: Gavin Shan \u003cshangw@linux.vnet.ibm.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.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": "5b760e64a64c8940cdccd0ba6fce19a9bd010d20",
      "tree": "b4765cd744dd5710ba6cd4d784185247dc317cef",
      "parents": [
        "b214514592d2dcb0b9d14ee8dd14f3699e3b0a84"
      ],
      "author": {
        "name": "Gavin Shan",
        "email": "shangw@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:46:02 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:49 2012 -0700"
      },
      "message": "mm/sparse: optimize sparse_index_alloc\n\nWith CONFIG_SPARSEMEM_EXTREME, the two levels of memory section\ndescriptors are allocated from slab or bootmem.  When allocating from\nslab, let slab/bootmem allocator clear the memory chunk.  We needn\u0027t clear\nit explicitly.\n\nSigned-off-by: Gavin Shan \u003cshangw@linux.vnet.ibm.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\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": "b214514592d2dcb0b9d14ee8dd14f3699e3b0a84",
      "tree": "317258b7f9229e56a26373c81551d24e7b83142f",
      "parents": [
        "c3b94f44fcb0725471ecebb701c077a0ed67bd07"
      ],
      "author": {
        "name": "Wanpeng Li",
        "email": "liwanp@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:46:01 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:49 2012 -0700"
      },
      "message": "memcg: add mem_cgroup_from_css() helper\n\nAdd a mem_cgroup_from_css() helper to replace open-coded invokations of\ncontainer_of().  To clarify the code and to add a little more type safety.\n\n[akpm@linux-foundation.org: fix extensive breakage]\nSigned-off-by: Wanpeng Li \u003cliwanp@linux.vnet.ibm.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Gavin Shan \u003cshangw@linux.vnet.ibm.com\u003e\nCc: Wanpeng Li \u003cliwanp@linux.vnet.ibm.com\u003e\nCc: Gavin Shan \u003cshangw@linux.vnet.ibm.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "c3b94f44fcb0725471ecebb701c077a0ed67bd07",
      "tree": "526dd574ec3d35bc39a4a05759a8f4c33f91abb3",
      "parents": [
        "e62e384e9da8d9a0c599795464a7e76fd490931c"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue Jul 31 16:45:59 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:49 2012 -0700"
      },
      "message": "memcg: further prevent OOM with too many dirty pages\n\nThe may_enter_fs test turns out to be too restrictive: though I saw no\nproblem with it when testing on 3.5-rc6, it very soon OOMed when I tested\non 3.5-rc6-mm1.  I don\u0027t know what the difference there is, perhaps I just\nslightly changed the way I started off the testing: dd if\u003d/dev/zero\nof\u003d/mnt/temp bs\u003d1M count\u003d1024; rm -f /mnt/temp; sync repeatedly, in 20M\nmemory.limit_in_bytes cgroup to ext4 on USB stick.\n\next4 (and gfs2 and xfs) turn out to allocate new pages for writing with\nAOP_FLAG_NOFS: that seems a little worrying, and it\u0027s unclear to me why\nthe transaction needs to be started even before allocating pagecache\nmemory.  But it may not be worth worrying about these days: if direct\nreclaim avoids FS writeback, does __GFP_FS now mean anything?\n\nAnyway, we insisted on the may_enter_fs test to avoid hangs with the loop\ndevice; but since that also masks off __GFP_IO, we can test for __GFP_IO\ndirectly, ignoring may_enter_fs and __GFP_FS.\n\nBut even so, the test still OOMs sometimes: when originally testing on\n3.5-rc6, it OOMed about one time in five or ten; when testing just now on\n3.5-rc6-mm1, it OOMed on the first iteration.\n\nThis residual problem comes from an accumulation of pages under ordinary\nwriteback, not marked PageReclaim, so rightly not causing the memcg check\nto wait on their writeback: these too can prevent shrink_page_list() from\nfreeing any pages, so many times that memcg reclaim fails and OOMs.\n\nDeal with these in the same way as direct reclaim now deals with dirty FS\npages: mark them PageReclaim.  It is appropriate to rotate these to tail\nof list when writepage completes, but more importantly, the PageReclaim\nflag makes memcg reclaim wait on them if encountered again.  Increment\nNR_VMSCAN_IMMEDIATE?  That\u0027s arguable: I chose not.\n\nSetting PageReclaim here may occasionally race with end_page_writeback()\nclearing it: lru_deactivate_fn() already faced the same race, and\ncorrectly concluded that the window is small and the issue non-critical.\n\nWith these changes, the test runs indefinitely without OOMing on ext4,\next3 and ext2: I\u0027ll move on to test with other filesystems later.\n\nTrivia: invert conditions for a clearer block without an else, and goto\nkeep_locked to do the unlock_page.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujtisu.com\u003e\nCc: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Theodore Ts\u0027o \u003ctytso@mit.edu\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": "e62e384e9da8d9a0c599795464a7e76fd490931c",
      "tree": "07d92bd50f42e5f919ddfb03b185a270daa2e1b1",
      "parents": [
        "3ad3d901bbcfb15a5e4690e55350db0899095a68"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Jul 31 16:45:55 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:49 2012 -0700"
      },
      "message": "memcg: prevent OOM with too many dirty pages\n\nThe current implementation of dirty pages throttling is not memcg aware\nwhich makes it easy to have memcg LRUs full of dirty pages.  Without\nthrottling, these LRUs can be scanned faster than the rate of writeback,\nleading to memcg OOM conditions when the hard limit is small.\n\nThis patch fixes the problem by throttling the allocating process\n(possibly a writer) during the hard limit reclaim by waiting on\nPageReclaim pages.  We are waiting only for PageReclaim pages because\nthose are the pages that made one full round over LRU and that means that\nthe writeback is much slower than scanning.\n\nThe solution is far from being ideal - long term solution is memcg aware\ndirty throttling - but it is meant to be a band aid until we have a real\nfix.  We are seeing this happening during nightly backups which are placed\ninto containers to prevent from eviction of the real working set.\n\nThe change affects only memcg reclaim and only when we encounter\nPageReclaim pages which is a signal that the reclaim doesn\u0027t catch up on\nwith the writers so somebody should be throttled.  This could be\npotentially unfair because it could be somebody else from the group who\ngets throttled on behalf of the writer but as writers need to allocate as\nwell and they allocate in higher rate the probability that only innocent\nprocesses would be penalized is not that high.\n\nI have tested this change by a simple dd copying /dev/zero to tmpfs or\next3 running under small memcg (1G copy under 5M, 60M, 300M and 2G\ncontainers) and dd got killed by OOM killer every time.  With the patch I\ncould run the dd with the same size under 5M controller without any OOM.\nThe issue is more visible with slower devices for output.\n\n* With the patch\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n* tmpfs size\u003d2G\n---------------\n$ vim cgroup_cache_oom_test.sh\n$ ./cgroup_cache_oom_test.sh 5M\nusing Limit 5M for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 30.4049 s, 34.5 MB/s\n$ ./cgroup_cache_oom_test.sh 60M\nusing Limit 60M for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 31.4561 s, 33.3 MB/s\n$ ./cgroup_cache_oom_test.sh 300M\nusing Limit 300M for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 20.4618 s, 51.2 MB/s\n$ ./cgroup_cache_oom_test.sh 2G\nusing Limit 2G for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 1.42172 s, 738 MB/s\n\n* ext3\n------\n$ ./cgroup_cache_oom_test.sh 5M\nusing Limit 5M for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 27.9547 s, 37.5 MB/s\n$ ./cgroup_cache_oom_test.sh 60M\nusing Limit 60M for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 30.3221 s, 34.6 MB/s\n$ ./cgroup_cache_oom_test.sh 300M\nusing Limit 300M for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 24.5764 s, 42.7 MB/s\n$ ./cgroup_cache_oom_test.sh 2G\nusing Limit 2G for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 3.35828 s, 312 MB/s\n\n* Without the patch\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n* tmpfs size\u003d2G\n---------------\n$ ./cgroup_cache_oom_test.sh 5M\nusing Limit 5M for group\n./cgroup_cache_oom_test.sh: line 46:  4668 Killed                  dd if\u003d/dev/zero of\u003d$OUT/zero bs\u003d1M count\u003d$count\n$ ./cgroup_cache_oom_test.sh 60M\nusing Limit 60M for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 25.4989 s, 41.1 MB/s\n$ ./cgroup_cache_oom_test.sh 300M\nusing Limit 300M for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 24.3928 s, 43.0 MB/s\n$ ./cgroup_cache_oom_test.sh 2G\nusing Limit 2G for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 1.49797 s, 700 MB/s\n\n* ext3\n------\n$ ./cgroup_cache_oom_test.sh 5M\nusing Limit 5M for group\n./cgroup_cache_oom_test.sh: line 46:  4689 Killed                  dd if\u003d/dev/zero of\u003d$OUT/zero bs\u003d1M count\u003d$count\n$ ./cgroup_cache_oom_test.sh 60M\nusing Limit 60M for group\n./cgroup_cache_oom_test.sh: line 46:  4692 Killed                  dd if\u003d/dev/zero of\u003d$OUT/zero bs\u003d1M count\u003d$count\n$ ./cgroup_cache_oom_test.sh 300M\nusing Limit 300M for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 20.248 s, 51.8 MB/s\n$ ./cgroup_cache_oom_test.sh 2G\nusing Limit 2G for group\n1000+0 records in\n1000+0 records out\n1048576000 bytes (1.0 GB) copied, 2.85201 s, 368 MB/s\n\n[akpm@linux-foundation.org: tweak changelog, reordered the test to optimize for CONFIG_CGROUP_MEM_RES_CTLR\u003dn]\n[hughd@google.com: fix deadlock with loop driver]\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujtisu.com\u003e\nCc: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\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": "3ad3d901bbcfb15a5e4690e55350db0899095a68",
      "tree": "f560891bb97cb3faf129d6849e25b120b3991a78",
      "parents": [
        "bdf4f4d2161a795b9323855a81a047bd68f16202"
      ],
      "author": {
        "name": "Xiao Guangrong",
        "email": "xiaoguangrong@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:45:52 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:49 2012 -0700"
      },
      "message": "mm: mmu_notifier: fix freed page still mapped in secondary MMU\n\nmmu_notifier_release() is called when the process is exiting.  It will\ndelete all the mmu notifiers.  But at this time the page belonging to the\nprocess is still present in page tables and is present on the LRU list, so\nthis race will happen:\n\n      CPU 0                 CPU 1\nmmu_notifier_release:    try_to_unmap:\n   hlist_del_init_rcu(\u0026mn-\u003ehlist);\n                            ptep_clear_flush_notify:\n                                  mmu nofifler not found\n                            free page  !!!!!!\n                            /*\n                             * At the point, the page has been\n                             * freed, but it is still mapped in\n                             * the secondary MMU.\n                             */\n\n  mn-\u003eops-\u003erelease(mn, mm);\n\nThen the box is not stable and sometimes we can get this bug:\n\n[  738.075923] BUG: Bad page state in process migrate-perf  pfn:03bec\n[  738.075931] page:ffffea00000efb00 count:0 mapcount:0 mapping:          (null) index:0x8076\n[  738.075936] page flags: 0x20000000000014(referenced|dirty)\n\nThe same issue is present in mmu_notifier_unregister().\n\nWe can call -\u003erelease before deleting the notifier to ensure the page has\nbeen unmapped from the secondary MMU before it is freed.\n\nSigned-off-by: Xiao Guangrong \u003cxiaoguangrong@linux.vnet.ibm.com\u003e\nCc: Avi Kivity \u003cavi@redhat.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.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": "bdf4f4d2161a795b9323855a81a047bd68f16202",
      "tree": "3aa457660c69f2945cb9ab477079e7441f220b27",
      "parents": [
        "90deb78839faedd194b65d419dbd9cba981e1922"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jul 31 16:45:50 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:49 2012 -0700"
      },
      "message": "mm: memcg: only check anon swapin page charges for swap cache\n\nshmem knows for sure that the page is in swap cache when attempting to\ncharge a page, because the cache charge entry function has a check for it.\nOnly anon pages may be removed from swap cache already when trying to\ncharge their swapin.\n\nAdjust the comment, though: \u00274969c11 mm: fix swapin race condition\u0027 added\na stable PageSwapCache check under the page lock in the do_swap_page()\nbefore calling the memory controller, so it\u0027s unuse_pte()\u0027s pte_same()\nthat may fail.\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: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "90deb78839faedd194b65d419dbd9cba981e1922",
      "tree": "2262e84058ece104e056bbb3c90abe3e3684a709",
      "parents": [
        "0435a2fdcb50f8e53a67e98c27708e5d9396b71a"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jul 31 16:45:47 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:49 2012 -0700"
      },
      "message": "mm: memcg: only check swap cache pages for repeated charging\n\nOnly anon and shmem pages in the swap cache are attempted to be charged\nmultiple times, from every swap pte fault or from shmem_unuse().  No other\npages require checking PageCgroupUsed().\n\nCharging pages in the swap cache is also serialized by the page lock, and\nsince both the try_charge and commit_charge are called under the same page\nlock section, the PageCgroupUsed() check might as well happen before the\ncounter charging, let alone reclaim.\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: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0435a2fdcb50f8e53a67e98c27708e5d9396b71a",
      "tree": "9ef0a6916792f738056dda01b3d5b592fe6d5d44",
      "parents": [
        "24467cacc03cf8b156d4c6786697e5e5d13c9321"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jul 31 16:45:43 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:48 2012 -0700"
      },
      "message": "mm: memcg: split swapin charge function into private and public part\n\nWhen shmem is charged upon swapin, it does not need to check twice whether\nthe memory controller is enabled.\n\nAlso, shmem pages do not have to be checked for everything that regular\nanon pages have to be checked for, so let shmem use the internal version\ndirectly and allow future patches to move around checks that are only\nrequired when swapping in anon pages.\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: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "24467cacc03cf8b156d4c6786697e5e5d13c9321",
      "tree": "d62344582c4b980226a65faa6ceefabb6d106204",
      "parents": [
        "62ba7442c8e286b6dd68fe82a3cc85c9414d909b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jul 31 16:45:40 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:48 2012 -0700"
      },
      "message": "mm: memcg: remove needless !mm fixup to init_mm when charging\n\nIt does not matter to __mem_cgroup_try_charge() if the passed mm is NULL\nor init_mm, it will charge the root memcg in either case.\n\nAlso fix up the comment in __mem_cgroup_try_charge() that claimed the\ninit_mm would be charged when no mm was passed.  It\u0027s not really\nincorrect, but confusing.  Clarify that the root memcg is charged in this\ncase.\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: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "62ba7442c8e286b6dd68fe82a3cc85c9414d909b",
      "tree": "c46f57d2607562ce6682b780a7085ea2f32ef79f",
      "parents": [
        "827a03d22e776ff7838b5b2780b71092e0b9de1e"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jul 31 16:45:39 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:48 2012 -0700"
      },
      "message": "mm: memcg: remove unneeded shmem charge type\n\nshmem page charges have not needed a separate charge type to tell them\nfrom regular file pages since 08e552c (\"memcg: synchronized LRU\").\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: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "827a03d22e776ff7838b5b2780b71092e0b9de1e",
      "tree": "c05e8f590a6b4c1dbd4c517cbe2b5a622ea326d6",
      "parents": [
        "7d188958bb64708577aa77e6b1ad68abbf0480f5"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jul 31 16:45:36 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:48 2012 -0700"
      },
      "message": "mm: memcg: move swapin charge functions above callsites\n\nCharging cache pages may require swapin in the shmem case.  Save the\nforward declaration and just move the swapin functions above the cache\ncharging functions.\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: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7d188958bb64708577aa77e6b1ad68abbf0480f5",
      "tree": "34e954784a6adce1a03ab91dd38b66cc7fd060b4",
      "parents": [
        "0c59b89c81eab7fe7dcf08f2252ae22a6c081ce8"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jul 31 16:45:34 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:48 2012 -0700"
      },
      "message": "mm: memcg: only check for PageSwapCache when uncharging anon\n\nOnly anon pages that are uncharged at the time of the last page table\nmapping vanishing may be in swapcache.\n\nWhen shmem pages, file pages, swap-freed anon pages, or just migrated\npages are uncharged, they are known for sure to be not in swapcache.\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: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0c59b89c81eab7fe7dcf08f2252ae22a6c081ce8",
      "tree": "b6b6510704282d59dd875fed59c999c93455c973",
      "parents": [
        "5d84c7766e8aacc6e3477bdf02fdb417163cf89b"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jul 31 16:45:31 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:48 2012 -0700"
      },
      "message": "mm: memcg: push down PageSwapCache check into uncharge entry functions\n\nNot all uncharge paths need to check if the page is swapcache, some of\nthem can know for sure.\n\nPush down the check into all callsites of uncharge_common() so that the\npatch that removes some of them is more obvious.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5d84c7766e8aacc6e3477bdf02fdb417163cf89b",
      "tree": "c0cfc049f0b47713f30e36a56f6dd85b9f4363a5",
      "parents": [
        "0030f535a5cf9b1841d2088c10a0b2f8f2987460"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jul 31 16:45:28 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:48 2012 -0700"
      },
      "message": "mm: swapfile: clean up unuse_pte race handling\n\nThe conditional mem_cgroup_cancel_charge_swapin() is a leftover from when\nthe function would continue to reestablish the page even after\nmem_cgroup_try_charge_swapin() failed.  After 85d9fc8 \"memcg: fix refcnt\nhandling at swapoff\", the condition is always true when this code is\nreached.\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: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0030f535a5cf9b1841d2088c10a0b2f8f2987460",
      "tree": "5a71a5057fb0d3e1b5f22c550c4374ea709ac3bc",
      "parents": [
        "737449236240e30a7bbe99f4d5586b8ed1416763"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jul 31 16:45:25 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:48 2012 -0700"
      },
      "message": "mm: memcg: fix compaction/migration failing due to memcg limits\n\nCompaction (and page migration in general) can currently be hindered\nthrough pages being owned by memory cgroups that are at their limits and\nunreclaimable.\n\nThe reason is that the replacement page is being charged against the limit\nwhile the page being replaced is also still charged.  But this seems\nunnecessary, given that only one of the two pages will still be in use\nafter migration finishes.\n\nThis patch changes the memcg migration sequence so that the replacement\npage is not charged.  Whatever page is still in use after successful or\nfailed migration gets to keep the charge of the page that was going to be\nreplaced.\n\nThe replacement page will still show up temporarily in the rss/cache\nstatistics, this can be fixed in a later patch as it\u0027s less urgent.\n\nReported-by: David Rientjes \u003crientjes@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\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "737449236240e30a7bbe99f4d5586b8ed1416763",
      "tree": "288fbd38b6c0e250901e218037fae64e79a91f7a",
      "parents": [
        "192e501b0438bb0e1574179773537f84c4752e25"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:45:20 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:48 2012 -0700"
      },
      "message": "swapfile: avoid dereferencing bd_disk during swap_entry_free for network storage\n\nCommit b3a27d (\"swap: Add swap slot free callback to\nblock_device_operations\") dereferences p-\u003ebdev-\u003ebd_disk but this is a NULL\ndereference if using swap-over-NFS.  This patch checks SWP_BLKDEV on the\nswap_info_struct before dereferencing.\n\nWith reference to this callback, Christoph Hellwig stated \"Please just\nremove the callback entirely.  It has no user outside the staging tree and\nwas added clearly against the rules for that staging tree\".  This would\nalso be my preference but there was not an obvious way of keeping zram in\nstaging/ happy.\n\nSigned-off-by: Xiaotian Feng \u003cdfeng@redhat.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5a178119b0fbe37f7dfb602b37df9cc4b1dc9d71",
      "tree": "22ddd286aac202ccb8c063f02792fc9c90a0b8da",
      "parents": [
        "a509bc1a9e487d952d9404318f7f990166ab57a7"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:45:02 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:47 2012 -0700"
      },
      "message": "mm: add support for direct_IO to highmem pages\n\nThe patch \"mm: add support for a filesystem to activate swap files and use\ndirect_IO for writing swap pages\" added support for using direct_IO to\nwrite swap pages but it is insufficient for highmem pages.\n\nTo support highmem pages, this patch kmaps() the page before calling the\ndirect_IO() handler.  As direct_IO deals with virtual addresses an\nadditional helper is necessary for get_kernel_pages() to lookup the struct\npage for a kmap virtual address.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Xiaotian Feng \u003cdfeng@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a509bc1a9e487d952d9404318f7f990166ab57a7",
      "tree": "40a8f8a20877da8a5b855cfbc3813c0874605093",
      "parents": [
        "62c230bc1790923a1b35da03596a68a6c9b5b100"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:57 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:47 2012 -0700"
      },
      "message": "mm: swap: implement generic handler for swap_activate\n\nThe version of swap_activate introduced is sufficient for swap-over-NFS\nbut would not provide enough information to implement a generic handler.\nThis patch shuffles things slightly to ensure the same information is\navailable for aops-\u003eswap_activate() as is available to the core.\n\nNo functionality change.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Xiaotian Feng \u003cdfeng@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "62c230bc1790923a1b35da03596a68a6c9b5b100",
      "tree": "46b300a00929087627e029b0f4d53e486a97ba7f",
      "parents": [
        "18022c5d8627a7a9ba8097a0f238b513fae6f5b8"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:55 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:47 2012 -0700"
      },
      "message": "mm: add support for a filesystem to activate swap files and use direct_IO for writing swap pages\n\nCurrently swapfiles are managed entirely by the core VM by using -\u003ebmap to\nallocate space and write to the blocks directly.  This effectively ensures\nthat the underlying blocks are allocated and avoids the need for the swap\nsubsystem to locate what physical blocks store offsets within a file.\n\nIf the swap subsystem is to use the filesystem information to locate the\nblocks, it is critical that information such as block groups, block\nbitmaps and the block descriptor table that map the swap file were\nresident in memory.  This patch adds address_space_operations that the VM\ncan call when activating or deactivating swap backed by a file.\n\n  int swap_activate(struct file *);\n  int swap_deactivate(struct file *);\n\nThe -\u003eswap_activate() method is used to communicate to the file that the\nVM relies on it, and the address_space should take adequate measures such\nas reserving space in the underlying device, reserving memory for mempools\nand pinning information such as the block descriptor table in memory.  The\n-\u003eswap_deactivate() method is called on sys_swapoff() if -\u003eswap_activate()\nreturned success.\n\nAfter a successful swapfile -\u003eswap_activate, the swapfile is marked\nSWP_FILE and swapper_space.a_ops will proxy to\nsis-\u003eswap_file-\u003ef_mappings-\u003ea_ops using -\u003edirect_io to write swapcache\npages and -\u003ereadpage to read.\n\nIt is perfectly possible that direct_IO be used to read the swap pages but\nit is an unnecessary complication.  Similarly, it is possible that\n-\u003ewritepage be used instead of direct_io to write the pages but filesystem\ndevelopers have stated that calling writepage from the VM is undesirable\nfor a variety of reasons and using direct_IO opens up the possibility of\nwriting back batches of swap pages in the future.\n\n[a.p.zijlstra@chello.nl: Original patch]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Xiaotian Feng \u003cdfeng@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "18022c5d8627a7a9ba8097a0f238b513fae6f5b8",
      "tree": "57e0d0ec6a5369c56bd00957eb9c0e1220e62917",
      "parents": [
        "f981c5950fa85916ba49bea5d9a7a5078f47e569"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:51 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:47 2012 -0700"
      },
      "message": "mm: add get_kernel_page[s] for pinning of kernel addresses for I/O\n\nThis patch adds two new APIs get_kernel_pages() and get_kernel_page() that\nmay be used to pin a vector of kernel addresses for IO.  The initial user\nis expected to be NFS for allowing pages to be written to swap using\naops-\u003edirect_IO().  Strictly speaking, swap-over-NFS only needs to pin one\npage for IO but it makes sense to express the API in terms of a vector and\nadd a helper for pinning single pages.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Xiaotian Feng \u003cdfeng@redhat.com\u003e\nCc: Mark Salter \u003cmsalter@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f981c5950fa85916ba49bea5d9a7a5078f47e569",
      "tree": "e742598755e57e1bbed06dc90b05fe6e13091236",
      "parents": [
        "6290c2c439732727899405f39fb76c2f5585b707"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:47 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:47 2012 -0700"
      },
      "message": "mm: methods for teaching filesystems about PG_swapcache pages\n\nIn order to teach filesystems to handle swap cache pages, three new page\nfunctions are introduced:\n\n  pgoff_t page_file_index(struct page *);\n  loff_t page_file_offset(struct page *);\n  struct address_space *page_file_mapping(struct page *);\n\npage_file_index() - gives the offset of this page in the file in\nPAGE_CACHE_SIZE blocks.  Like page-\u003eindex is for mapped pages, this\nfunction also gives the correct index for PG_swapcache pages.\n\npage_file_offset() - uses page_file_index(), so that it will give the\nexpected result, even for PG_swapcache pages.\n\npage_file_mapping() - gives the mapping backing the actual page; that is\nfor swap cache pages it will give swap_file-\u003ef_mapping.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Xiaotian Feng \u003cdfeng@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "68243e76ee343d63c6cf76978588a885951e2818",
      "tree": "e6ec975265272c81e03312e1ebc1c27fd6fdfa19",
      "parents": [
        "5515061d22f0f9976ae7815864bfd22042d36848"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:39 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:46 2012 -0700"
      },
      "message": "mm: account for the number of times direct reclaimers get throttled\n\nUnder significant pressure when writing back to network-backed storage,\ndirect reclaimers may get throttled.  This is expected to be a short-lived\nevent and the processes get woken up again but processes do get stalled.\nThis patch counts how many times such stalling occurs.  It\u0027s up to the\nadministrator whether to reduce these stalls by increasing\nmin_free_kbytes.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5515061d22f0f9976ae7815864bfd22042d36848",
      "tree": "13b53a29166f19eb864e96b3b58539a207e5fa2f",
      "parents": [
        "7f338fe4540b1d0600b02314c7d885fd358e9eca"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:35 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:46 2012 -0700"
      },
      "message": "mm: throttle direct reclaimers if PF_MEMALLOC reserves are low and swap is backed by network storage\n\nIf swap is backed by network storage such as NBD, there is a risk that a\nlarge number of reclaimers can hang the system by consuming all\nPF_MEMALLOC reserves.  To avoid these hangs, the administrator must tune\nmin_free_kbytes in advance which is a bit fragile.\n\nThis patch throttles direct reclaimers if half the PF_MEMALLOC reserves\nare in use.  If the system is routinely getting throttled the system\nadministrator can increase min_free_kbytes so degradation is smoother but\nthe system will keep running.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "381760eadc393bcb1bb328510ad75cf13431806d",
      "tree": "4db4e80b82ea78e1b486ebde7feb835a2de5c2ef",
      "parents": [
        "b4b9e3558508980fc0cd161a545ffb55a1f13ee9"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:30 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:46 2012 -0700"
      },
      "message": "mm: micro-optimise slab to avoid a function call\n\nGetting and putting objects in SLAB currently requires a function call but\nthe bulk of the work is related to PFMEMALLOC reserves which are only\nconsumed when network-backed storage is critical.  Use an inline function\nto determine if the function call is required.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c93bdd0e03e848555d144eb44a1f275b871a8dd5",
      "tree": "8aff3bc2b9ff9f32e51040a7652bfb31257db626",
      "parents": [
        "7cb0240492caea2f6467f827313478f41877e6ef"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:46 2012 -0700"
      },
      "message": "netvm: allow skb allocation to use PFMEMALLOC reserves\n\nChange the skb allocation API to indicate RX usage and use this to fall\nback to the PFMEMALLOC reserve when needed.  SKBs allocated from the\nreserve are tagged in skb-\u003epfmemalloc.  If an SKB is allocated from the\nreserve and the socket is later found to be unrelated to page reclaim, the\npacket is dropped so that the memory remains available for page reclaim.\nNetwork protocols are expected to recover from this packet loss.\n\n[a.p.zijlstra@chello.nl: Ideas taken from various patches]\n[davem@davemloft.net: Use static branches, coding style corrections]\n[sebastian@breakpoint.cc: Avoid unnecessary cast, fix !CONFIG_NET build]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "183f6371aac2a5496a8ef2b0b0a68562652c3cdb",
      "tree": "1c265a292ca79410a820168fbd0b5636ab4596f8",
      "parents": [
        "cfd19c5a9ecf8e5e38de2603077c4330af21316e"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:12 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:45 2012 -0700"
      },
      "message": "mm: ignore mempolicies when using ALLOC_NO_WATERMARK\n\nThe reserve is proportionally distributed over all !highmem zones in the\nsystem.  So we need to allow an emergency allocation access to all zones.\nIn order to do that we need to break out of any mempolicy boundaries we\nmight have.\n\nIn my opinion that does not break mempolicies as those are user oriented\nand not system oriented.  That is, system allocations are not guaranteed\nto be within mempolicy boundaries.  For instance IRQs do not even have a\nmempolicy.\n\nSo breaking out of mempolicy boundaries for \u0027rare\u0027 emergency allocations,\nwhich are always system allocations (as opposed to user) is ok.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cfd19c5a9ecf8e5e38de2603077c4330af21316e",
      "tree": "5ecf3f51012676c60d12e78ad5a762597ec26385",
      "parents": [
        "907aed48f65efeecf91575397e3d79335d93a466"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:10 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:45 2012 -0700"
      },
      "message": "mm: only set page-\u003epfmemalloc when ALLOC_NO_WATERMARKS was used\n\n__alloc_pages_slowpath() is called when the number of free pages is below\nthe low watermark.  If the caller is entitled to use ALLOC_NO_WATERMARKS\nthen the page will be marked page-\u003epfmemalloc.  This protects more pages\nthan are strictly necessary as we only need to protect pages allocated\nbelow the min watermark (the pfmemalloc reserves).\n\nThis patch only sets page-\u003epfmemalloc when ALLOC_NO_WATERMARKS was\nrequired to allocate the page.\n\n[rientjes@google.com: David noticed the problem during review]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "907aed48f65efeecf91575397e3d79335d93a466",
      "tree": "8e06d29e71888f65a7217880c55472125d1b88d4",
      "parents": [
        "b37f1dd0f543d9714f96c2f9b9f74f7bdfdfdf31"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:07 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:45 2012 -0700"
      },
      "message": "mm: allow PF_MEMALLOC from softirq context\n\nThis is needed to allow network softirq packet processing to make use of\nPF_MEMALLOC.\n\nCurrently softirq context cannot use PF_MEMALLOC due to it not being\nassociated with a task, and therefore not having task flags to fiddle with\n- thus the gfp to alloc flag mapping ignores the task flags when in\ninterrupts (hard or soft) context.\n\nAllowing softirqs to make use of PF_MEMALLOC therefore requires some\ntrickery.  This patch borrows the task flags from whatever process happens\nto be preempted by the softirq.  It then modifies the gfp to alloc flags\nmapping to not exclude task flags in softirq context, and modify the\nsoftirq code to save, clear and restore the PF_MEMALLOC flag.\n\nThe save and clear, ensures the preempted task\u0027s PF_MEMALLOC flag doesn\u0027t\nleak into the softirq.  The restore ensures a softirq\u0027s PF_MEMALLOC flag\ncannot leak back into the preempted process.  This should be safe due to\nthe following reasons\n\nSoftirqs can run on multiple CPUs sure but the same task should not be\n\texecuting the same softirq code. Neither should the softirq\n\thandler be preempted by any other softirq handler so the flags\n\tshould not leak to an unrelated softirq.\n\nSoftirqs re-enable hardware interrupts in __do_softirq() so can be\n\tpreempted by hardware interrupts so PF_MEMALLOC is inherited\n\tby the hard IRQ. However, this is similar to a process in\n\treclaim being preempted by a hardirq. While PF_MEMALLOC is\n\tset, gfp_to_alloc_flags() distinguishes between hard and\n\tsoft irqs and avoids giving a hardirq the ALLOC_NO_WATERMARKS\n\tflag.\n\nIf the softirq is deferred to ksoftirq then its flags may be used\n        instead of a normal tasks but as the softirq cannot be preempted,\n        the PF_MEMALLOC flag does not leak to other code by accident.\n\n[davem@davemloft.net: Document why PF_MEMALLOC is safe]\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b37f1dd0f543d9714f96c2f9b9f74f7bdfdfdf31",
      "tree": "4d01913bd950d60c65605cd14e0ff88b74f5f716",
      "parents": [
        "5091b74a95d447e34530e713a8971450a45498b3"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:44:03 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:45 2012 -0700"
      },
      "message": "mm: introduce __GFP_MEMALLOC to allow access to emergency reserves\n\n__GFP_MEMALLOC will allow the allocation to disregard the watermarks, much\nlike PF_MEMALLOC.  It allows one to pass along the memalloc state in\nobject related allocation flags as opposed to task related flags, such as\nsk-\u003esk_allocation.  This removes the need for ALLOC_PFMEMALLOC as callers\nusing __GFP_MEMALLOC can get the ALLOC_NO_WATERMARK flag which is now\nenough to identify allocations related to page reclaim.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5091b74a95d447e34530e713a8971450a45498b3",
      "tree": "7761a47736e539f829e1d9fe18e11bb7109ec76b",
      "parents": [
        "072bb0aa5e062902968c5c1007bba332c7820cf4"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux.com",
        "time": "Tue Jul 31 16:44:00 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:45 2012 -0700"
      },
      "message": "mm: slub: optimise the SLUB fast path to avoid pfmemalloc checks\n\nThis patch removes the check for pfmemalloc from the alloc hotpath and\nputs the logic after the election of a new per cpu slab.  For a pfmemalloc\npage we do not use the fast path but force the use of the slow path which\nis also used for the debug case.\n\nThis has the side-effect of weakening pfmemalloc processing in the\nfollowing way;\n\n1. A process that is allocating for network swap calls __slab_alloc.\n   pfmemalloc_match is true so the freelist is loaded and c-\u003efreelist is\n   now pointing to a pfmemalloc page.\n\n2. A process that is attempting normal allocations calls slab_alloc,\n   finds the pfmemalloc page on the freelist and uses it because it did\n   not check pfmemalloc_match()\n\nThe patch allows non-pfmemalloc allocations to use pfmemalloc pages with\nthe kmalloc slabs being the most vunerable caches on the grounds they\nare most likely to have a mix of pfmemalloc and !pfmemalloc requests. A\nlater patch will still protect the system as processes will get throttled\nif the pfmemalloc reserves get depleted but performance will not degrade\nas smoothly.\n\n[mgorman@suse.de: Expanded changelog]\nSigned-off-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\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": "072bb0aa5e062902968c5c1007bba332c7820cf4",
      "tree": "1b4a602c16b07a41484c0664d1936848387f0916",
      "parents": [
        "702d1a6e0766d45642c934444fd41f658d251305"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Jul 31 16:43:58 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:45 2012 -0700"
      },
      "message": "mm: sl[au]b: add knowledge of PFMEMALLOC reserve pages\n\nWhen a user or administrator requires swap for their application, they\ncreate a swap partition and file, format it with mkswap and activate it\nwith swapon.  Swap over the network is considered as an option in diskless\nsystems.  The two likely scenarios are when blade servers are used as part\nof a cluster where the form factor or maintenance costs do not allow the\nuse of disks and thin clients.\n\nThe Linux Terminal Server Project recommends the use of the Network Block\nDevice (NBD) for swap according to the manual at\nhttps://sourceforge.net/projects/ltsp/files/Docs-Admin-Guide/LTSPManual.pdf/download\nThere is also documentation and tutorials on how to setup swap over NBD at\nplaces like https://help.ubuntu.com/community/UbuntuLTSP/EnableNBDSWAP The\nnbd-client also documents the use of NBD as swap.  Despite this, the fact\nis that a machine using NBD for swap can deadlock within minutes if swap\nis used intensively.  This patch series addresses the problem.\n\nThe core issue is that network block devices do not use mempools like\nnormal block devices do.  As the host cannot control where they receive\npackets from, they cannot reliably work out in advance how much memory\nthey might need.  Some years ago, Peter Zijlstra developed a series of\npatches that supported swap over an NFS that at least one distribution is\ncarrying within their kernels.  This patch series borrows very heavily\nfrom Peter\u0027s work to support swapping over NBD as a pre-requisite to\nsupporting swap-over-NFS.  The bulk of the complexity is concerned with\npreserving memory that is allocated from the PFMEMALLOC reserves for use\nby the network layer which is needed for both NBD and NFS.\n\nPatch 1 adds knowledge of the PFMEMALLOC reserves to SLAB and SLUB to\n\tpreserve access to pages allocated under low memory situations\n\tto callers that are freeing memory.\n\nPatch 2 optimises the SLUB fast path to avoid pfmemalloc checks\n\nPatch 3 introduces __GFP_MEMALLOC to allow access to the PFMEMALLOC\n\treserves without setting PFMEMALLOC.\n\nPatch 4 opens the possibility for softirqs to use PFMEMALLOC reserves\n\tfor later use by network packet processing.\n\nPatch 5 only sets page-\u003epfmemalloc when ALLOC_NO_WATERMARKS was required\n\nPatch 6 ignores memory policies when ALLOC_NO_WATERMARKS is set.\n\nPatches 7-12 allows network processing to use PFMEMALLOC reserves when\n\tthe socket has been marked as being used by the VM to clean pages. If\n\tpackets are received and stored in pages that were allocated under\n\tlow-memory situations and are unrelated to the VM, the packets\n\tare dropped.\n\n\tPatch 11 reintroduces __skb_alloc_page which the networking\n\tfolk may object to but is needed in some cases to propogate\n\tpfmemalloc from a newly allocated page to an skb. If there is a\n\tstrong objection, this patch can be dropped with the impact being\n\tthat swap-over-network will be slower in some cases but it should\n\tnot fail.\n\nPatch 13 is a micro-optimisation to avoid a function call in the\n\tcommon case.\n\nPatch 14 tags NBD sockets as being SOCK_MEMALLOC so they can use\n\tPFMEMALLOC if necessary.\n\nPatch 15 notes that it is still possible for the PFMEMALLOC reserve\n\tto be depleted. To prevent this, direct reclaimers get throttled on\n\ta waitqueue if 50% of the PFMEMALLOC reserves are depleted.  It is\n\texpected that kswapd and the direct reclaimers already running\n\twill clean enough pages for the low watermark to be reached and\n\tthe throttled processes are woken up.\n\nPatch 16 adds a statistic to track how often processes get throttled\n\nSome basic performance testing was run using kernel builds, netperf on\nloopback for UDP and TCP, hackbench (pipes and sockets), iozone and\nsysbench.  Each of them were expected to use the sl*b allocators\nreasonably heavily but there did not appear to be significant performance\nvariances.\n\nFor testing swap-over-NBD, a machine was booted with 2G of RAM with a\nswapfile backed by NBD.  8*NUM_CPU processes were started that create\nanonymous memory mappings and read them linearly in a loop.  The total\nsize of the mappings were 4*PHYSICAL_MEMORY to use swap heavily under\nmemory pressure.\n\nWithout the patches and using SLUB, the machine locks up within minutes\nand runs to completion with them applied.  With SLAB, the story is\ndifferent as an unpatched kernel run to completion.  However, the patched\nkernel completed the test 45% faster.\n\nMICRO\n                                         3.5.0-rc2 3.5.0-rc2\n\t\t\t\t\t vanilla     swapnbd\nUnrecognised test vmscan-anon-mmap-write\nMMTests Statistics: duration\nSys Time Running Test (seconds)             197.80    173.07\nUser+Sys Time Running Test (seconds)        206.96    182.03\nTotal Elapsed Time (seconds)               3240.70   1762.09\n\nThis patch: mm: sl[au]b: add knowledge of PFMEMALLOC reserve pages\n\nAllocations of pages below the min watermark run a risk of the machine\nhanging due to a lack of memory.  To prevent this, only callers who have\nPF_MEMALLOC or TIF_MEMDIE set and are not processing an interrupt are\nallowed to allocate with ALLOC_NO_WATERMARKS.  Once they are allocated to\na slab though, nothing prevents other callers consuming free objects\nwithin those slabs.  This patch limits access to slab pages that were\nalloced from the PFMEMALLOC reserves.\n\nWhen this patch is applied, pages allocated from below the low watermark\nare returned with page-\u003epfmemalloc set and it is up to the caller to\ndetermine how the page should be protected.  SLAB restricts access to any\npage with page-\u003epfmemalloc set to callers which are known to able to\naccess the PFMEMALLOC reserve.  If one is not available, an attempt is\nmade to allocate a new page rather than use a reserve.  SLUB is a bit more\nrelaxed in that it only records if the current per-CPU page was allocated\nfrom PFMEMALLOC reserve and uses another partial slab if the caller does\nnot have the necessary GFP or process flags.  This was found to be\nsufficient in tests to avoid hangs due to SLUB generally maintaining\nsmaller lists than SLAB.\n\nIn low-memory conditions it does mean that !PFMEMALLOC allocators can fail\na slab allocation even though free objects are available because they are\nbeing preserved for callers that are freeing pages.\n\n[a.p.zijlstra@chello.nl: Original implementation]\n[sebastian@breakpoint.cc: Correct order of page flag clearing]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nCc: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Sebastian Andrzej Siewior \u003csebastian@breakpoint.cc\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "702d1a6e0766d45642c934444fd41f658d251305",
      "tree": "6c9144521b03f11f7ea2e709f066b90a9b9f38d5",
      "parents": [
        "2cfed0752808625d30aca7fc9f383af386fd8a13"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan@kernel.org",
        "time": "Tue Jul 31 16:43:56 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:45 2012 -0700"
      },
      "message": "memory-hotplug: fix kswapd looping forever problem\n\nWhen hotplug offlining happens on zone A, it starts to mark freed page as\nMIGRATE_ISOLATE type in buddy for preventing further allocation.\n(MIGRATE_ISOLATE is very irony type because it\u0027s apparently on buddy but\nwe can\u0027t allocate them).\n\nWhen the memory shortage happens during hotplug offlining, current task\nstarts to reclaim, then wake up kswapd.  Kswapd checks watermark, then go\nsleep because current zone_watermark_ok_safe doesn\u0027t consider\nMIGRATE_ISOLATE freed page count.  Current task continue to reclaim in\ndirect reclaim path without kswapd\u0027s helping.  The problem is that\nzone-\u003eall_unreclaimable is set by only kswapd so that current task would\nbe looping forever like below.\n\n__alloc_pages_slowpath\nrestart:\n\twake_all_kswapd\nrebalance:\n\t__alloc_pages_direct_reclaim\n\t\tdo_try_to_free_pages\n\t\t\tif global_reclaim \u0026\u0026 !all_unreclaimable\n\t\t\t\treturn 1; /* It means we did did_some_progress */\n\tskip __alloc_pages_may_oom\n\tshould_alloc_retry\n\t\tgoto rebalance;\n\nIf we apply KOSAKI\u0027s patch[1] which doesn\u0027t depends on kswapd about\nsetting zone-\u003eall_unreclaimable, we can solve this problem by killing some\ntask in direct reclaim path.  But it doesn\u0027t wake up kswapd, still.  It\ncould be a problem still if other subsystem needs GFP_ATOMIC request.  So\nkswapd should consider MIGRATE_ISOLATE when it calculate free pages BEFORE\ngoing sleep.\n\nThis patch counts the number of MIGRATE_ISOLATE page block and\nzone_watermark_ok_safe will consider it if the system has such blocks\n(fortunately, it\u0027s very rare so no problem in POV overhead and kswapd is\nnever hotpath).\n\nCopy/modify from Mel\u0027s quote\n\"\nIdeal solution would be \"allocating\" the pageblock.\nIt would keep the free space accounting as it is but historically,\nmemory hotplug didn\u0027t allocate pages because it would be difficult to\ndetect if a pageblock was isolated or if part of some balloon.\nAllocating just full pageblocks would work around this, However,\nit would play very badly with CMA.\n\"\n\n[1] http://lkml.org/lkml/2012/6/14/74\n\n[akpm@linux-foundation.org: simplify nr_zone_isolate_freepages(), rework zone_watermark_ok_safe() comment, simplify set_pageblock_isolate() and restore_pageblock_isolate()]\n[akpm@linux-foundation.org: fix CONFIG_MEMORY_ISOLATION\u003dn build]\nSigned-off-by: Minchan Kim \u003cminchan@kernel.org\u003e\nSuggested-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nTested-by: Aaditya Kumar \u003caaditya.kumar.30@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\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": "2cfed0752808625d30aca7fc9f383af386fd8a13",
      "tree": "5e92da86e42e55b253cc04e10545e05b6b472542",
      "parents": [
        "ee6f509c3274014d1f52e7a7a10aee9f85393c5e"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan@kernel.org",
        "time": "Tue Jul 31 16:43:53 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:45 2012 -0700"
      },
      "message": "mm: fix free page check in zone_watermark_ok()\n\n__zone_watermark_ok currently compares free_pages which is a signed type\nwith z-\u003elowmem_reserve[classzone_idx] which is unsigned which might lead\nto sign overflow if free_pages doesn\u0027t satisfy the given order (or it came\nas negative already) and then we rely on the following order loop to fix\nit (which doesn\u0027t work for order-0).  Let\u0027s fix the type conversion and do\nnot rely on the given value of free_pages or follow up fixups.\n\nThis patch fixes it because \"memory-hotplug: fix kswapd looping forever\nproblem\" depends on this.\n\nAs benefit of this patch, it doesn\u0027t rely on the loop to exit\n__zone_watermark_ok in case of high order check and make the first test\neffective.(ie, if (free_pages \u003c\u003d min + lowmem_reserve))\n\nAaditya reported this problem when he test my hotplug patch.\n\nReported-off-by: Aaditya Kumar \u003caaditya.kumar@ap.sony.com\u003e\nTested-by: Aaditya Kumar \u003caaditya.kumar@ap.sony.com\u003e\nSigned-off-by: Aaditya Kumar \u003caaditya.kumar@ap.sony.com\u003e\nSigned-off-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\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": "ee6f509c3274014d1f52e7a7a10aee9f85393c5e",
      "tree": "d8e5c816de0752b70b63f5de50ed52808ef3be9f",
      "parents": [
        "876aafbfd9ba5bb352f1b14622c27f3fe9a99013"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan@kernel.org",
        "time": "Tue Jul 31 16:43:50 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:45 2012 -0700"
      },
      "message": "mm: factor out memory isolate functions\n\nmm/page_alloc.c has some memory isolation functions but they are used only\nwhen we enable CONFIG_{CMA|MEMORY_HOTPLUG|MEMORY_FAILURE}.  So let\u0027s make\nit configurable by new CONFIG_MEMORY_ISOLATION so that it can reduce\nbinary size and we can check it simple by CONFIG_MEMORY_ISOLATION, not if\ndefined CONFIG_{CMA|MEMORY_HOTPLUG|MEMORY_FAILURE}.\n\nSigned-off-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Marek Szyprowski \u003cm.szyprowski@samsung.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: 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": "876aafbfd9ba5bb352f1b14622c27f3fe9a99013",
      "tree": "fdd18b6caa0c9baa56b76feb9b05339919f283dd",
      "parents": [
        "6b0c81b3be114a93f79bd4c5639ade5107d77c21"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jul 31 16:43:48 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:45 2012 -0700"
      },
      "message": "mm, memcg: move all oom handling to memcontrol.c\n\nBy globally defining check_panic_on_oom(), the memcg oom handler can be\nmoved entirely to mm/memcontrol.c.  This removes the ugly #ifdef in the\noom killer and cleans up the code.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Oleg Nesterov \u003coleg@redhat.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": "6b0c81b3be114a93f79bd4c5639ade5107d77c21",
      "tree": "4298dd463fcd7bbb629f37c309daf382c57017ce",
      "parents": [
        "9cbb78bb314360a860a8b23723971cb6fcb54176"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jul 31 16:43:45 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:44 2012 -0700"
      },
      "message": "mm, oom: reduce dependency on tasklist_lock\n\nSince exiting tasks require write_lock_irq(\u0026tasklist_lock) several times,\ntry to reduce the amount of time the readside is held for oom kills.  This\nmakes the interface with the memcg oom handler more consistent since it\nnow never needs to take tasklist_lock unnecessarily.\n\nThe only time the oom killer now takes tasklist_lock is when iterating the\nchildren of the selected task, everything else is protected by\nrcu_read_lock().\n\nThis requires that a reference to the selected process, p, is grabbed\nbefore calling oom_kill_process().  It may release it and grab a reference\non another one of p\u0027s threads if !p-\u003emm, but it also guarantees that it\nwill release the reference before returning.\n\n[hughd@google.com: fix duplicate put_task_struct()]\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9cbb78bb314360a860a8b23723971cb6fcb54176",
      "tree": "7983de03845b5914e0188ce119f9374711ffcce7",
      "parents": [
        "462607ecc519b197f7b5cc6b024a1c26fa6fc0ac"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jul 31 16:43:44 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:44 2012 -0700"
      },
      "message": "mm, memcg: introduce own oom handler to iterate only over its own threads\n\nThe global oom killer is serialized by the per-zonelist\ntry_set_zonelist_oom() which is used in the page allocator.  Concurrent\noom kills are thus a rare event and only occur in systems using\nmempolicies and with a large number of nodes.\n\nMemory controller oom kills, however, can frequently be concurrent since\nthere is no serialization once the oom killer is called for oom conditions\nin several different memcgs in parallel.\n\nThis creates a massive contention on tasklist_lock since the oom killer\nrequires the readside for the tasklist iteration.  If several memcgs are\ncalling the oom killer, this lock can be held for a substantial amount of\ntime, especially if threads continue to enter it as other threads are\nexiting.\n\nSince the exit path grabs the writeside of the lock with irqs disabled in\na few different places, this can cause a soft lockup on cpus as a result\nof tasklist_lock starvation.\n\nThe kernel lacks unfair writelocks, and successful calls to the oom killer\nusually result in at least one thread entering the exit path, so an\nalternative solution is needed.\n\nThis patch introduces a seperate oom handler for memcgs so that they do\nnot require tasklist_lock for as much time.  Instead, it iterates only\nover the threads attached to the oom memcg and grabs a reference to the\nselected thread before calling oom_kill_process() to ensure it doesn\u0027t\nprematurely exit.\n\nThis still requires tasklist_lock for the tasklist dump, iterating\nchildren of the selected process, and killing all other threads on the\nsystem sharing the same memory as the selected victim.  So while this\nisn\u0027t a complete solution to tasklist_lock starvation, it significantly\nreduces the amount of time that it is held.\n\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Sha Zhengju \u003chandai.szj@taobao.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "462607ecc519b197f7b5cc6b024a1c26fa6fc0ac",
      "tree": "3ecf52a4c1052a4af7d1ea7f10ef193938a9d046",
      "parents": [
        "62ce1c706f817cb9defef3ac2dfdd815149f2968"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jul 31 16:43:40 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:44 2012 -0700"
      },
      "message": "mm, oom: introduce helper function to process threads during scan\n\nThis patch introduces a helper function to process each thread during the\niteration over the tasklist.  A new return type, enum oom_scan_t, is\ndefined to determine the future behavior of the iteration:\n\n - OOM_SCAN_OK: continue scanning the thread and find its badness,\n\n - OOM_SCAN_CONTINUE: do not consider this thread for oom kill, it\u0027s\n   ineligible,\n\n - OOM_SCAN_ABORT: abort the iteration and return, or\n\n - OOM_SCAN_SELECT: always select this thread with the highest badness\n   possible.\n\nThere is no functional change with this patch.  This new helper function\nwill be used in the next patch in the memory controller.\n\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Sha Zhengju \u003chandai.szj@taobao.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4ed7e02222aba062bd0ed3ab12dfc8e9fc0467b5",
      "tree": "82e6c1c3bc30cab1220c97797bd68a60bd98cab2",
      "parents": [
        "340175b7d14d5617559d0c1a54fa0ea204d9edcd"
      ],
      "author": {
        "name": "Jiang Liu",
        "email": "jiang.liu@huawei.com",
        "time": "Tue Jul 31 16:43:35 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:44 2012 -0700"
      },
      "message": "mm/hotplug: mark memory hotplug code in page_alloc.c as __meminit\n\nMark functions used by both boot and memory hotplug as __meminit to reduce\nmemory footprint when memory hotplug is disabled.\n\nAlos guard zone_pcp_update() with CONFIG_MEMORY_HOTPLUG because it\u0027s only\nused by memory hotplug code.\n\nSigned-off-by: Jiang Liu \u003cliuj97@gmail.com\u003e\nCc: Wei Wang \u003cBessel.Wang@huawei.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Yinghai Lu \u003cyinghai@kernel.org\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Keping Chen \u003cchenkeping@huawei.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "340175b7d14d5617559d0c1a54fa0ea204d9edcd",
      "tree": "7b2fb51d5bf1e54bf258a058fea347ee2d75ac7b",
      "parents": [
        "08dff7b7d629807dbb1f398c68dd9cd58dd657a1"
      ],
      "author": {
        "name": "Jiang Liu",
        "email": "jiang.liu@huawei.com",
        "time": "Tue Jul 31 16:43:32 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:44 2012 -0700"
      },
      "message": "mm/hotplug: free zone-\u003epageset when a zone becomes empty\n\nWhen a zone becomes empty after memory offlining, free zone-\u003epageset.\nOtherwise it will cause memory leak when adding memory to the empty zone\nagain because build_all_zonelists() will allocate zone-\u003epageset for an\nempty zone.\n\nSigned-off-by: Jiang Liu \u003cliuj97@gmail.com\u003e\nSigned-off-by: Wei Wang \u003cBessel.Wang@huawei.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Yinghai Lu \u003cyinghai@kernel.org\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Keping Chen \u003cchenkeping@huawei.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "08dff7b7d629807dbb1f398c68dd9cd58dd657a1",
      "tree": "4cbd0e4aa0b04f4089509ecf1042007cd57d0e5f",
      "parents": [
        "9adb62a5df9c0fbef7b4665919329f73a34651ed"
      ],
      "author": {
        "name": "Jiang Liu",
        "email": "jiang.liu@huawei.com",
        "time": "Tue Jul 31 16:43:30 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:44 2012 -0700"
      },
      "message": "mm/hotplug: correctly add new zone to all other nodes\u0027 zone lists\n\nWhen online_pages() is called to add new memory to an empty zone, it\nrebuilds all zone lists by calling build_all_zonelists().  But there\u0027s a\nbug which prevents the new zone to be added to other nodes\u0027 zone lists.\n\nonline_pages() {\n\tbuild_all_zonelists()\n\t.....\n\tnode_set_state(zone_to_nid(zone), N_HIGH_MEMORY)\n}\n\nHere the node of the zone is put into N_HIGH_MEMORY state after calling\nbuild_all_zonelists(), but build_all_zonelists() only adds zones from\nnodes in N_HIGH_MEMORY state to the fallback zone lists.\nbuild_all_zonelists()\n\n    -\u003e__build_all_zonelists()\n\t-\u003ebuild_zonelists()\n\t    -\u003efind_next_best_node()\n\t\t-\u003efor_each_node_state(n, N_HIGH_MEMORY)\n\nSo memory in the new zone will never be used by other nodes, and it may\ncause strange behavor when system is under memory pressure.  So put node\ninto N_HIGH_MEMORY state before calling build_all_zonelists().\n\nSigned-off-by: Jianguo Wu \u003cwujianguo@huawei.com\u003e\nSigned-off-by: Jiang Liu \u003cliuj97@gmail.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Yinghai Lu \u003cyinghai@kernel.org\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Keping Chen \u003cchenkeping@huawei.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9adb62a5df9c0fbef7b4665919329f73a34651ed",
      "tree": "8372c9c1202adac889714ea99319346279107f33",
      "parents": [
        "da92c47d069890106484cb6605df701a54d24499"
      ],
      "author": {
        "name": "Jiang Liu",
        "email": "jiang.liu@huawei.com",
        "time": "Tue Jul 31 16:43:28 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:44 2012 -0700"
      },
      "message": "mm/hotplug: correctly setup fallback zonelists when creating new pgdat\n\nWhen hotadd_new_pgdat() is called to create new pgdat for a new node, a\nfallback zonelist should be created for the new node.  There\u0027s code to try\nto achieve that in hotadd_new_pgdat() as below:\n\n\t/*\n\t * The node we allocated has no zone fallback lists. For avoiding\n\t * to access not-initialized zonelist, build here.\n\t */\n\tmutex_lock(\u0026zonelists_mutex);\n\tbuild_all_zonelists(pgdat, NULL);\n\tmutex_unlock(\u0026zonelists_mutex);\n\nBut it doesn\u0027t work as expected.  When hotadd_new_pgdat() is called, the\nnew node is still in offline state because node_set_online(nid) hasn\u0027t\nbeen called yet.  And build_all_zonelists() only builds zonelists for\nonline nodes as:\n\n        for_each_online_node(nid) {\n                pg_data_t *pgdat \u003d NODE_DATA(nid);\n\n                build_zonelists(pgdat);\n                build_zonelist_cache(pgdat);\n        }\n\nThough we hope to create zonelist for the new pgdat, but it doesn\u0027t.  So\nadd a new parameter \"pgdat\" the build_all_zonelists() to build pgdat for\nthe new pgdat too.\n\nSigned-off-by: Jiang Liu \u003cliuj97@gmail.com\u003e\nSigned-off-by: Xishi Qiu \u003cqiuxishi@huawei.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Yinghai Lu \u003cyinghai@kernel.org\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Keping Chen \u003cchenkeping@huawei.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "da92c47d069890106484cb6605df701a54d24499",
      "tree": "374915962f0e8071e27156f2dad39bc408572ff5",
      "parents": [
        "aaad153e3408a4b8784de4c8446a40e70d57481f"
      ],
      "author": {
        "name": "Wanpeng Li",
        "email": "liwp@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:43:26 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:44 2012 -0700"
      },
      "message": "mm/memcg: replace inexistence move_lock_page_cgroup() by move_lock_mem_cgroup() in comment\n\nSigned-off-by: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aaad153e3408a4b8784de4c8446a40e70d57481f",
      "tree": "2dadfd1998bec652dc6264f1380997407d3daeda",
      "parents": [
        "05a73ed29a3aef4cf8d095ec5b08afecb959fa24"
      ],
      "author": {
        "name": "Wanpeng Li",
        "email": "liwp@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:43:23 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:44 2012 -0700"
      },
      "message": "mm/memcg: mem_cgroup_relize_xxx_limit can guarantee memcg-\u003eres.limit \u003c\u003d memcg-\u003ememsw.limit\n\nSigned-off-by: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ca57df79d4f64e1a4886606af4289d40636189c5",
      "tree": "e56d0411e552dec588778caaaa5e7d9885dd1a2c",
      "parents": [
        "51a07e50b230d14e1b8bef50d66655d003fa006c"
      ],
      "author": {
        "name": "Xishi Qiu",
        "email": "qiuxishi@huawei.com",
        "time": "Tue Jul 31 16:43:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:43 2012 -0700"
      },
      "message": "mm: setup pageblock_order before it\u0027s used by sparsemem\n\nOn architectures with CONFIG_HUGETLB_PAGE_SIZE_VARIABLE set, such as\nItanium, pageblock_order is a variable with default value of 0.  It\u0027s set\nto the right value by set_pageblock_order() in function\nfree_area_init_core().\n\nBut pageblock_order may be used by sparse_init() before free_area_init_core()\nis called along path:\nsparse_init()\n    -\u003esparse_early_usemaps_alloc_node()\n\t-\u003eusemap_size()\n\t    -\u003eSECTION_BLOCKFLAGS_BITS\n\t\t-\u003e((1UL \u003c\u003c (PFN_SECTION_SHIFT - pageblock_order)) *\nNR_PAGEBLOCK_BITS)\n\nThe uninitialized pageblock_size will cause memory wasting because\nusemap_size() returns a much bigger value then it\u0027s really needed.\n\nFor example, on an Itanium platform,\nsparse_init() pageblock_order\u003d0 usemap_size\u003d24576\nfree_area_init_core() before pageblock_order\u003d0, usemap_size\u003d24576\nfree_area_init_core() after pageblock_order\u003d12, usemap_size\u003d8\n\nThat means 24K memory has been wasted for each section, so fix it by calling\nset_pageblock_order() from sparse_init().\n\nSigned-off-by: Xishi Qiu \u003cqiuxishi@huawei.com\u003e\nSigned-off-by: Jiang Liu \u003cliuj97@gmail.com\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: Yinghai Lu \u003cyinghai@kernel.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Keping Chen \u003cchenkeping@huawei.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": "51a07e50b230d14e1b8bef50d66655d003fa006c",
      "tree": "20e79dbe3e7d86f23ff6d877a68eea0c00aabeee",
      "parents": [
        "8e125cd85517c9716695b0abfabc0a4a3fcb94f3"
      ],
      "author": {
        "name": "Jeff Liu",
        "email": "jeff.liu@oracle.com",
        "time": "Tue Jul 31 16:43:18 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:43 2012 -0700"
      },
      "message": "mm/memory.c:print_vma_addr(): call up_read(\u0026mm-\u003emmap_sem) directly\n\nCall up_read(\u0026mm-\u003emmap_sem) directly since we have already got mm via\ncurrent-\u003emm at the beginning of print_vma_addr().\n\nSigned-off-by: Jie Liu \u003cjeff.liu@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": "7db8889ab05b57200158432755af318fb68854a2",
      "tree": "dfce0ce79909bc102465d871dc7b949fa9525e85",
      "parents": [
        "ab2158848775c7918288f2c423d3e4dbbc7d34eb"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Tue Jul 31 16:43:12 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:43 2012 -0700"
      },
      "message": "mm: have order \u003e 0 compaction start off where it left\n\nOrder \u003e 0 compaction stops when enough free pages of the correct page\norder have been coalesced.  When doing subsequent higher order\nallocations, it is possible for compaction to be invoked many times.\n\nHowever, the compaction code always starts out looking for things to\ncompact at the start of the zone, and for free pages to compact things to\nat the end of the zone.\n\nThis can cause quadratic behaviour, with isolate_freepages starting at the\nend of the zone each time, even though previous invocations of the\ncompaction code already filled up all free memory on that end of the zone.\n\nThis can cause isolate_freepages to take enormous amounts of CPU with\ncertain workloads on larger memory systems.\n\nThe obvious solution is to have isolate_freepages remember where it left\noff last time, and continue at that point the next time it gets invoked\nfor an order \u003e 0 compaction.  This could cause compaction to fail if\ncc-\u003efree_pfn and cc-\u003emigrate_pfn are close together initially, in that\ncase we restart from the end of the zone and try once more.\n\nForced full (order \u003d\u003d -1) compactions are left alone.\n\n[akpm@linux-foundation.org: checkpatch fixes]\n[akpm@linux-foundation.org: s/laste/last/, use 80 cols]\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nReported-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nTested-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ab2158848775c7918288f2c423d3e4dbbc7d34eb",
      "tree": "96e1bbb83f38be4b5ef499733bc2e15c418a2380",
      "parents": [
        "567fb435bb7a37afda35902b884562c40756dc45"
      ],
      "author": {
        "name": "Wanpeng Li",
        "email": "liwp@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:43:09 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:43 2012 -0700"
      },
      "message": "memcg: rename mem_control_xxx to memcg_xxx\n\nReplace memory_cgroup_xxx() with memcg_xxx()\n\nSigned-off-by: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-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": "567fb435bb7a37afda35902b884562c40756dc45",
      "tree": "71c4cec3ab02bd69eafbfd98d38774466d52843e",
      "parents": [
        "ca28ddc908fcfef0e5c1b6e5df632db7fc26de10"
      ],
      "author": {
        "name": "Glauber Costa",
        "email": "glommer@parallels.com",
        "time": "Tue Jul 31 16:43:07 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:43 2012 -0700"
      },
      "message": "memcg: fix bad behavior in use_hierarchy file\n\nI have an application that does the following:\n\n* copy the state of all controllers attached to a hierarchy\n* replicate it as a child of the current level.\n\nI would expect writes to the files to mostly succeed, since they are\ninheriting sane values from parents.\n\nBut that is not the case for use_hierarchy.  If it is set to 0, we succeed\nok.  If we\u0027re set to 1, the value of the file is automatically set to 1 in\nthe children, but if userspace tries to write the very same 1, it will\nfail.  That same situation happens if we set use_hierarchy, create a\nchild, and then try to write 1 again.\n\nNow, there is no reason whatsoever for failing to write a value that is\nalready there.  It doesn\u0027t even match the comments, that states:\n\n /* If parent\u0027s use_hierarchy is set, we can\u0027t make any modifications\n  * in the child subtrees...\n\nsince we are not changing anything.\n\nSo test the new value against the one we\u0027re storing, and automatically\nreturn 0 if we\u0027re not proposing a change.\n\nSigned-off-by: Glauber Costa \u003cglommer@parallels.com\u003e\nCc: Dhaval Giani \u003cdhaval.giani@gmail.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Kamezawa Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c255a458055e459f65eb7b7f51dc5dbdd0caf1d8",
      "tree": "b143b1914eeb6f27f53e30f9f0275d0f1ca5480b",
      "parents": [
        "80934513b230bfcf70265f2ef0fdae89fb391633"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Jul 31 16:43:02 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:43 2012 -0700"
      },
      "message": "memcg: rename config variables\n\nSanity:\n\nCONFIG_CGROUP_MEM_RES_CTLR -\u003e CONFIG_MEMCG\nCONFIG_CGROUP_MEM_RES_CTLR_SWAP -\u003e CONFIG_MEMCG_SWAP\nCONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED -\u003e CONFIG_MEMCG_SWAP_ENABLED\nCONFIG_CGROUP_MEM_RES_CTLR_KMEM -\u003e CONFIG_MEMCG_KMEM\n\n[mhocko@suse.cz: fix missed bits]\nCc: Glauber Costa \u003cglommer@parallels.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "80934513b230bfcf70265f2ef0fdae89fb391633",
      "tree": "9737d9b84b52312af968fe97f7c55fbf53617570",
      "parents": [
        "97d255c816946388bab504122937730d3447c612"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan@kernel.org",
        "time": "Tue Jul 31 16:43:01 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:42 2012 -0700"
      },
      "message": "mm: clean up __count_immobile_pages()\n\nThe __count_immobile_pages() naming is rather awkward.  Choose a more\nclear name and add a comment.\n\nSigned-off-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Bartlomiej Zolnierkiewicz \u003cb.zolnierkie@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": "97d255c816946388bab504122937730d3447c612",
      "tree": "828927fe44ebb6c0bd6cfd2a0da36b68ed45b4ba",
      "parents": [
        "de34d965a80d0f61a354bdefa0b15a88bcff2028"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan@kernel.org",
        "time": "Tue Jul 31 16:42:59 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:42 2012 -0700"
      },
      "message": "mm: do not use page_count() without a page pin\n\nd179e84ba (\"mm: vmscan: do not use page_count without a page pin\") fixed\nthis problem in vmscan.c but same problem is in __count_immobile_pages().\n\nI copy and paste d179e84ba\u0027s contents for description.\n\n\"It is unsafe to run page_count during the physical pfn scan because\ncompound_head could trip on a dangling pointer when reading\npage-\u003efirst_page if the compound page is being freed by another CPU.\"\n\nSigned-off-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Wanpeng Li \u003cliwp.linux@gmail.com\u003e\nCc: Bartlomiej Zolnierkiewicz \u003cb.zolnierkie@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": "de34d965a80d0f61a354bdefa0b15a88bcff2028",
      "tree": "ac20c4e343a93234abc9c068830d9b0b0ed2bda9",
      "parents": [
        "121d1ba0a019e1465a53533aea133b1b0f6b442d"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jul 31 16:42:56 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:42 2012 -0700"
      },
      "message": "mm, oom: replace some information in tasklist dump\n\nThe number of ptes and swap entries are used in the oom killer\u0027s badness\nheuristic, so they should be shown in the tasklist dump.\n\nThis patch adds those fields and replaces cpu and oom_adj values that are\ncurrently emitted.  Cpu isn\u0027t interesting and oom_adj is deprecated and\nwill be removed later this year, the same information is already displayed\nas oom_score_adj which is used internally.\n\nAt the same time, make the documentation a little more clear to state this\ninformation is helpful to determine why the oom killer chose the task it\ndid to kill.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: 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": "121d1ba0a019e1465a53533aea133b1b0f6b442d",
      "tree": "ced96bee65407895048a50ba4cbf50a4fc0f12d2",
      "parents": [
        "2a13515c398bbe471bf64519ada87fd708152ced"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jul 31 16:42:55 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:42 2012 -0700"
      },
      "message": "mm, oom: fix potential killing of thread that is disabled from oom killing\n\n/proc/sys/vm/oom_kill_allocating_task will immediately kill current when\nthe oom killer is called to avoid a potentially expensive tasklist scan\nfor large systems.\n\nCurrently, however, it is not checking current\u0027s oom_score_adj value which\nmay be OOM_SCORE_ADJ_MIN, meaning that it has been disabled from oom\nkilling.\n\nThis patch avoids killing current in such a condition and simply falls\nback to the tasklist scan since memory still needs to be freed.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.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": "2a13515c398bbe471bf64519ada87fd708152ced",
      "tree": "6167884779ebd978b3889231fdeaf45d4178149a",
      "parents": [
        "3d3727cdb07ff17ddc3c551ef8d03d37b60a0372"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Jul 31 16:42:53 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:42 2012 -0700"
      },
      "message": "mm: clear pages_scanned only if draining a pcp adds pages to the buddy allocator again\n\ncommit 2ff754fa8f (\"mm: clear pages_scanned only if draining a pcp adds\npages to the buddy allocator again\") fixed one free_pcppages_bulk()\nmisuse.  But two another miuse still exist.\n\nThis patch fixes it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReviewed-by: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3d3727cdb07ff17ddc3c551ef8d03d37b60a0372",
      "tree": "c38036b00a6863a376cc592bc7d87a7560cb800d",
      "parents": [
        "c59e26104e3e0e952cd7d63e79cd71ee5a9ec25a"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Jul 31 16:42:50 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:42 2012 -0700"
      },
      "message": "mm, fadvise: don\u0027t return -EINVAL when filesystem cannot implement fadvise()\n\nEric Wong reported his test suite failex when /tmp is tmpfs.\n\nhttps://lkml.org/lkml/2012/2/24/479\n\nCurrentlt the input check of POSIX_FADV_WILLNEED has two problems.\n\n- requires a_ops-\u003ereadpage.  But in fact, force_page_cache_readahead()\n  requires that the target filesystem has either -\u003ereadpage or -\u003ereadpages.\n\n- returns -EINVAL when the filesystem doesn\u0027t have -\u003ereadpage.  But\n  posix says that fadvise is merely a hint.  Thus fadvise() should return\n  0 if filesystem has no means of implementing fadvise().  The userland\n  application should not know nor care whcih type of filesystem backs the\n  TMPDIR directory, as Eric pointed out.  There is nothing which userspace\n  can do to solve this error.\n\nSo change the return value to 0 when filesytem doesn\u0027t support readahead.\n\n[akpm@linux-foundation.org: checkpatch fixes]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nSigned-off-by: Eric Wong \u003cnormalperson@yhbt.net\u003e\nTested-by: Eric Wong \u003cnormalperson@yhbt.net\u003e\nReviewed-by: Wanlong Gao \u003cgaowanlong@cn.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3c935d189be9bb877c5a1110ac5fbf9c8e310658",
      "tree": "84aa62c9309a27cba588bb1a822a344b648a3497",
      "parents": [
        "6068bf0104becf07792b2867bc4d17c369419f8b"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 31 16:42:46 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:42 2012 -0700"
      },
      "message": "memcg: make mem_cgroup_force_empty_list() return bool\n\nmem_cgroup_force_empty_list() just returns 0 or -EBUSY and -EBUSY\nindicates \u0027you need to retry\u0027.  Make mem_cgroup_force_empty_list() return\na bool to simplify the logic.\n\n[akpm@linux-foundation.org: rework mem_cgroup_force_empty_list()\u0027s comment]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\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": "6068bf0104becf07792b2867bc4d17c369419f8b",
      "tree": "5dd52f4e786a94035267f7d84c9256916491d817",
      "parents": [
        "d845aa2c75bcff87dacf098378b5706b12d1588f"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 31 16:42:45 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:42 2012 -0700"
      },
      "message": "memcg: mem_cgroup_move_parent() doesn\u0027t need gfp_mask\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\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": "d845aa2c75bcff87dacf098378b5706b12d1588f",
      "tree": "2b8f35b6dc8e1b264fe78541246434d07922f606",
      "parents": [
        "59b8e85c26e77d236ebdd61866ffc5e69c5f531d"
      ],
      "author": {
        "name": "Kamezawa Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 31 16:42:44 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:42 2012 -0700"
      },
      "message": "memcg: clean up force_empty_list() return value check\n\nAfter bf544fdc241da8 \"memcg: move charges to root cgroup if\nuse_hierarchy\u003d0 in mem_cgroup_move_hugetlb_parent()\"\nmem_cgroup_move_parent() returns only -EBUSY or -EINVAL.  So we can remove\nthe -ENOMEM and -EINTR checks.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "59b8e85c26e77d236ebdd61866ffc5e69c5f531d",
      "tree": "deed7e77d0fdcd8a18477d59452cc0aa80f38238",
      "parents": [
        "fd07383b6bbc1418b1bdd5f295d13e600222fffa"
      ],
      "author": {
        "name": "Kamezawa Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 31 16:42:42 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:42 2012 -0700"
      },
      "message": "memcg: remove check for signal_pending() during rmdir()\n\nAfter bf544fdc241da8 \"memcg: move charges to root cgroup if\nuse_hierarchy\u003d0 in mem_cgroup_move_hugetlb_parent()\", no memory reclaim\nwill occur when removing a memory cgroup.  If -EINTR is returned here,\ncgroup will show a warning.\n\nWe don\u0027t need to handle any user interruption signal.  Remove this.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\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": "fd07383b6bbc1418b1bdd5f295d13e600222fffa",
      "tree": "d69a0c77708256a4d8bad40fe7b40b8e87240ec4",
      "parents": [
        "4f774b912dd1d5752cd33b696509531b0321c3e0"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Jul 31 16:42:40 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:41 2012 -0700"
      },
      "message": "mm/memblock.c:memblock_double_array(): cosmetic cleanups\n\nThis function is an 80-column eyesore, quite unnecessarily.  Clean that\nup, and use standard comment layout style.\n\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Greg Pearson \u003cgreg.pearson@hp.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Yinghai Lu \u003cyinghai@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": "4f774b912dd1d5752cd33b696509531b0321c3e0",
      "tree": "12d30b642d655c3cf75893f9619afe815c0a7932",
      "parents": [
        "75754681fe79b84dde1048470a44eeb64192fad6"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jul 31 16:42:37 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:41 2012 -0700"
      },
      "message": "mm, oom: do not schedule if current has been killed\n\nThe oom killer currently schedules away from current in an uninterruptible\nsleep if it does not have access to memory reserves.  It\u0027s possible that\ncurrent was killed because it shares memory with the oom killed thread or\nbecause it was killed by the user in the interim, however.\n\nThis patch only schedules away from current if it does not have a pending\nkill, i.e.  if it does not share memory with the oom killed thread.  It\u0027s\npossible that it will immediately retry its memory allocation and fail,\nbut it will immediately be given access to memory reserves if it calls the\noom killer again.\n\nThis prevents the delay of memory freeing when threads that share memory\nwith the oom killed thread get unnecessarily scheduled.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "75754681fe79b84dde1048470a44eeb64192fad6",
      "tree": "70951e240cf1f5f6e7e9b6cb8c0626f3b5ffcfba",
      "parents": [
        "94ae8ba7176666d1e7d8bbb9f93670a27540b6a8"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:42:36 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:41 2012 -0700"
      },
      "message": "hugetlb/cgroup: remove exclude and wakeup rmdir calls from migrate\n\nWe already hold the hugetlb_lock.  That should prevent a parallel cgroup\nrmdir from touching page\u0027s hugetlb cgroup.  So remove the exclude and\nwakeup calls.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.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": "94ae8ba7176666d1e7d8bbb9f93670a27540b6a8",
      "tree": "5c8a1478e2463c29be6a3e6f63d5acabaac65a17",
      "parents": [
        "79dbb2368ae3515fad9c8b7c8f831cd86be59b1d"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:42:35 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:41 2012 -0700"
      },
      "message": "hugetlb/cgroup: assign the page hugetlb cgroup when we move the page to active list.\n\nA page\u0027s hugetlb cgroup assignment and movement to the active list should\noccur with hugetlb_lock held.  Otherwise when we remove the hugetlb cgroup\nwe will iterate the active list and find pages with NULL hugetlb cgroup\nvalues.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.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": "79dbb2368ae3515fad9c8b7c8f831cd86be59b1d",
      "tree": "c25369353f439d2af5b78899cb91c43520ea48d3",
      "parents": [
        "585e27ea6d2e71d0091443c39a00a35e6a5c5e8f"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:42:32 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:41 2012 -0700"
      },
      "message": "hugetlb: move all the in use pages to active list\n\nWhen we fail to allocate pages from the reserve pool, hugetlb tries to\nallocate huge pages using alloc_buddy_huge_page.  Add these to the active\nlist.  We also need to add the huge page we allocate when we soft offline\nthe oldpage to active list.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.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": "8e6ac7fab374816de9a8b0a8fbb02ef761a30ff4",
      "tree": "94439bfcceb9e11af842da63f18f608aff4919c4",
      "parents": [
        "abb8206cb07734d0b7bf033c715995d6371a94c3"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:42:27 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:41 2012 -0700"
      },
      "message": "hugetlb/cgroup: migrate hugetlb cgroup info from oldpage to new page during migration\n\nWith HugeTLB pages, hugetlb cgroup is uncharged in compound page\ndestructor.  Since we are holding a hugepage reference, we can be sure\nthat old page won\u0027t get uncharged till the last put_page().\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\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": "abb8206cb07734d0b7bf033c715995d6371a94c3",
      "tree": "a27a55420bd6fad941c559bb80176f10931deb60",
      "parents": [
        "da1def55919f4852c4759249a78d63a0c5d2d8f9"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:42:24 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:41 2012 -0700"
      },
      "message": "hugetlb/cgroup: add hugetlb cgroup control files\n\nAdd the control files for hugetlb controller\n\n[akpm@linux-foundation.org: s/CONFIG_CGROUP_HUGETLB_RES_CTLR/CONFIG_MEMCG_HUGETLB/g]\n[akpm@linux-foundation.org: s/CONFIG_MEMCG_HUGETLB/CONFIG_CGROUP_HUGETLB/]\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\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": "da1def55919f4852c4759249a78d63a0c5d2d8f9",
      "tree": "9397a43deef85cf9c7f94671593454d77605d2b2",
      "parents": [
        "6d76dcf40405144a448040a350fd214ddc243d5e"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Jul 31 16:42:21 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 31 18:42:41 2012 -0700"
      },
      "message": "hugetlb/cgroup: add support for cgroup removal\n\nAdd support for cgroup removal.  If we don\u0027t have parent cgroup, the\ncharges are moved to root cgroup.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\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"
    }
  ],
  "next": "6d76dcf40405144a448040a350fd214ddc243d5e"
}
