)]}'
{
  "log": [
    {
      "commit": "a76e99abc558aed633ba28ff61c5328116292bf3",
      "tree": "60f7677f0baafa00825accc1214839246b3e78dd",
      "parents": [
        "a54734678ff9cb97938b9f7648547174f3b118e4",
        "1d05f993784973189395051cc711fdd6dd5eb389"
      ],
      "author": {
        "name": "Rohit Vaswani",
        "email": "rvaswani@codeaurora.org",
        "time": "Fri Mar 30 00:09:34 2012 -0700"
      },
      "committer": {
        "name": "Rohit Vaswani",
        "email": "rvaswani@codeaurora.org",
        "time": "Fri Mar 30 00:09:34 2012 -0700"
      },
      "message": "Merge branch \u0027Linux 3.0.21\u0027 into msm-3.0\n\nMerge Upstream\u0027s stable 3.0.21 branch into msm-3.0\nThis consists 814 commits and some merge conflicts.\n\nThe merge conflicts are because of some local changes to\nmsm-3.0 as well as some conflicts between google\u0027s tree and\nthe upstream tree.\n\nConflicts:\n\tarch/arm/kernel/head.S\n\tdrivers/bluetooth/ath3k.c\n\tdrivers/bluetooth/btusb.c\n\tdrivers/mmc/core/core.c\n\tdrivers/tty/serial/serial_core.c\n\tdrivers/usb/host/ehci-hub.c\n\tdrivers/usb/serial/qcserial.c\n\tfs/namespace.c\n\tfs/proc/base.c\n\nChange-Id: I62e2edbe213f84915e27f8cd6e4f6ce23db22a21\nSigned-off-by: Rohit Vaswani \u003crvaswani@codeaurora.org\u003e\n"
    },
    {
      "commit": "91b08ca08c8f5fbad289950086d6fb7ab0642d63",
      "tree": "a9229fcb99dd4f846ca1577c213d822345f52a28",
      "parents": [
        "b9134812300fd0e3c242c50af5c563065d2f1b1e"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Feb 08 17:13:40 2012 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Feb 13 11:06:11 2012 -0800"
      },
      "message": "mm: fix UP THP spin_is_locked BUGs\n\ncommit b9980cdcf2524c5fe15d8cbae9c97b3ed6385563 upstream.\n\nFix CONFIG_TRANSPARENT_HUGEPAGE\u003dy CONFIG_SMP\u003dn CONFIG_DEBUG_VM\u003dy\nCONFIG_DEBUG_SPINLOCK\u003dn kernel: spin_is_locked() is then always false,\nand so triggers some BUGs in Transparent HugePage codepaths.\n\nasm-generic/bug.h mentions this problem, and provides a WARN_ON_SMP(x);\nbut being too lazy to add VM_BUG_ON_SMP, BUG_ON_SMP, WARN_ON_SMP_ONCE,\nVM_WARN_ON_SMP_ONCE, just test NR_CPUS !\u003d 1 in the existing VM_BUG_ONs.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "b9134812300fd0e3c242c50af5c563065d2f1b1e",
      "tree": "22ad88cbd319fcd0f1ad9ffa4442ef24a8ee7657",
      "parents": [
        "a5e2ba3e021e7a3135a7dbb8e188d21971a59f49"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Wed Feb 08 17:13:38 2012 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Feb 13 11:06:11 2012 -0800"
      },
      "message": "mm: compaction: check for overlapping nodes during isolation for migration\n\ncommit dc9086004b3d5db75997a645b3fe08d9138b7ad0 upstream.\n\nWhen isolating pages for migration, migration starts at the start of a\nzone while the free scanner starts at the end of the zone.  Migration\navoids entering a new zone by never going beyond the free scanned.\n\nUnfortunately, in very rare cases nodes can overlap.  When this happens,\nmigration isolates pages without the LRU lock held, corrupting lists\nwhich will trigger errors in reclaim or during page free such as in the\nfollowing oops\n\n  BUG: unable to handle kernel NULL pointer dereference at 0000000000000008\n  IP: [\u003cffffffff810f795c\u003e] free_pcppages_bulk+0xcc/0x450\n  PGD 1dda554067 PUD 1e1cb58067 PMD 0\n  Oops: 0000 [#1] SMP\n  CPU 37\n  Pid: 17088, comm: memcg_process_s Tainted: G            X\n  RIP: free_pcppages_bulk+0xcc/0x450\n  Process memcg_process_s (pid: 17088, threadinfo ffff881c2926e000, task ffff881c2926c0c0)\n  Call Trace:\n    free_hot_cold_page+0x17e/0x1f0\n    __pagevec_free+0x90/0xb0\n    release_pages+0x22a/0x260\n    pagevec_lru_move_fn+0xf3/0x110\n    putback_lru_page+0x66/0xe0\n    unmap_and_move+0x156/0x180\n    migrate_pages+0x9e/0x1b0\n    compact_zone+0x1f3/0x2f0\n    compact_zone_order+0xa2/0xe0\n    try_to_compact_pages+0xdf/0x110\n    __alloc_pages_direct_compact+0xee/0x1c0\n    __alloc_pages_slowpath+0x370/0x830\n    __alloc_pages_nodemask+0x1b1/0x1c0\n    alloc_pages_vma+0x9b/0x160\n    do_huge_pmd_anonymous_page+0x160/0x270\n    do_page_fault+0x207/0x4c0\n    page_fault+0x25/0x30\n\nThe \"X\" in the taint flag means that external modules were loaded but but\nis unrelated to the bug triggering.  The real problem was because the PFN\nlayout looks like this\n\n  Zone PFN ranges:\n    DMA      0x00000010 -\u003e 0x00001000\n    DMA32    0x00001000 -\u003e 0x00100000\n    Normal   0x00100000 -\u003e 0x01e80000\n  Movable zone start PFN for each node\n  early_node_map[14] active PFN ranges\n      0: 0x00000010 -\u003e 0x0000009b\n      0: 0x00000100 -\u003e 0x0007a1ec\n      0: 0x0007a354 -\u003e 0x0007a379\n      0: 0x0007f7ff -\u003e 0x0007f800\n      0: 0x00100000 -\u003e 0x00680000\n      1: 0x00680000 -\u003e 0x00e80000\n      0: 0x00e80000 -\u003e 0x01080000\n      1: 0x01080000 -\u003e 0x01280000\n      0: 0x01280000 -\u003e 0x01480000\n      1: 0x01480000 -\u003e 0x01680000\n      0: 0x01680000 -\u003e 0x01880000\n      1: 0x01880000 -\u003e 0x01a80000\n      0: 0x01a80000 -\u003e 0x01c80000\n      1: 0x01c80000 -\u003e 0x01e80000\n\nThe fix is straight-forward.  isolate_migratepages() has to make a\nsimilar check to isolate_freepage to ensure that it never isolates pages\nfrom a zone it does not hold the LRU lock for.\n\nThis was discovered in a 3.0-based kernel but it affects 3.1.x, 3.2.x\nand current mainline.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Michal Nazarewicz \u003cmina86@mina86.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "77650df5a701fb3a7acadfb347ebfb0e95cffe09",
      "tree": "c2bab32c60c99d8b33d879e3afda8c2b0708a8c0",
      "parents": [
        "c713decb179258db83fd048c09ec55d521d864d4"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Fri Feb 03 15:37:18 2012 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Feb 13 11:06:07 2012 -0800"
      },
      "message": "mm: compaction: check pfn_valid when entering a new MAX_ORDER_NR_PAGES block during isolation for migration\n\ncommit 0bf380bc70ecba68cb4d74dc656cc2fa8c4d801a upstream.\n\nWhen isolating for migration, migration starts at the start of a zone\nwhich is not necessarily pageblock aligned.  Further, it stops isolating\nwhen COMPACT_CLUSTER_MAX pages are isolated so migrate_pfn is generally\nnot aligned.  This allows isolate_migratepages() to call pfn_to_page() on\nan invalid PFN which can result in a crash.  This was originally reported\nagainst a 3.0-based kernel with the following trace in a crash dump.\n\nPID: 9902   TASK: d47aecd0  CPU: 0   COMMAND: \"memcg_process_s\"\n #0 [d72d3ad0] crash_kexec at c028cfdb\n #1 [d72d3b24] oops_end at c05c5322\n #2 [d72d3b38] __bad_area_nosemaphore at c0227e60\n #3 [d72d3bec] bad_area at c0227fb6\n #4 [d72d3c00] do_page_fault at c05c72ec\n #5 [d72d3c80] error_code (via page_fault) at c05c47a4\n    EAX: 00000000  EBX: 000c0000  ECX: 00000001  EDX: 00000807  EBP: 000c0000\n    DS:  007b      ESI: 00000001  ES:  007b      EDI: f3000a80  GS:  6f50\n    CS:  0060      EIP: c030b15a  ERR: ffffffff  EFLAGS: 00010002\n #6 [d72d3cb4] isolate_migratepages at c030b15a\n #7 [d72d3d14] zone_watermark_ok at c02d26cb\n #8 [d72d3d2c] compact_zone at c030b8de\n #9 [d72d3d68] compact_zone_order at c030bba1\n#10 [d72d3db4] try_to_compact_pages at c030bc84\n#11 [d72d3ddc] __alloc_pages_direct_compact at c02d61e7\n#12 [d72d3e08] __alloc_pages_slowpath at c02d66c7\n#13 [d72d3e78] __alloc_pages_nodemask at c02d6a97\n#14 [d72d3eb8] alloc_pages_vma at c030a845\n#15 [d72d3ed4] do_huge_pmd_anonymous_page at c03178eb\n#16 [d72d3f00] handle_mm_fault at c02f36c6\n#17 [d72d3f30] do_page_fault at c05c70ed\n#18 [d72d3fb0] error_code (via page_fault) at c05c47a4\n    EAX: b71ff000  EBX: 00000001  ECX: 00001600  EDX: 00000431\n    DS:  007b      ESI: 08048950  ES:  007b      EDI: bfaa3788\n    SS:  007b      ESP: bfaa36e0  EBP: bfaa3828  GS:  6f50\n    CS:  0073      EIP: 080487c8  ERR: ffffffff  EFLAGS: 00010202\n\nIt was also reported by Herbert van den Bergh against 3.1-based kernel\nwith the following snippet from the console log.\n\nBUG: unable to handle kernel paging request at 01c00008\nIP: [\u003cc0522399\u003e] isolate_migratepages+0x119/0x390\n*pdpt \u003d 000000002f7ce001 *pde \u003d 0000000000000000\n\nIt is expected that it also affects 3.2.x and current mainline.\n\nThe problem is that pfn_valid is only called on the first PFN being\nchecked and that PFN is not necessarily aligned.  Lets say we have a case\nlike this\n\nH \u003d MAX_ORDER_NR_PAGES boundary\n| \u003d pageblock boundary\nm \u003d cc-\u003emigrate_pfn\nf \u003d cc-\u003efree_pfn\no \u003d memory hole\n\nH------|------H------|----m-Hoooooo|ooooooH-f----|------H\n\nThe migrate_pfn is just below a memory hole and the free scanner is beyond\nthe hole.  When isolate_migratepages started, it scans from migrate_pfn to\nmigrate_pfn+pageblock_nr_pages which is now in a memory hole.  It checks\npfn_valid() on the first PFN but then scans into the hole where there are\nnot necessarily valid struct pages.\n\nThis patch ensures that isolate_migratepages calls pfn_valid when\nnecessary.\n\nReported-by: Herbert van den Bergh \u003cherbert.van.den.bergh@oracle.com\u003e\nTested-by: Herbert van den Bergh \u003cherbert.van.den.bergh@oracle.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Michal Nazarewicz \u003cmina86@mina86.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "c713decb179258db83fd048c09ec55d521d864d4",
      "tree": "21af250aa052d081215e7ebfe16ebaa7420a2c52",
      "parents": [
        "73632d80356dcadfcacc8e20a319850b112abb9b"
      ],
      "author": {
        "name": "Carsten Otte",
        "email": "carsteno@de.ibm.com",
        "time": "Fri Feb 03 15:37:14 2012 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Feb 13 11:06:07 2012 -0800"
      },
      "message": "mm/filemap_xip.c: fix race condition in xip_file_fault()\n\ncommit 99f02ef1f18631eb0a4e0ea0a3d56878dbcb4b90 upstream.\n\nFix a race condition that shows in conjunction with xip_file_fault() when\ntwo threads of the same user process fault on the same memory page.\n\nIn this case, the race winner will install the page table entry and the\nunlucky loser will cause an oops: xip_file_fault calls vm_insert_pfn (via\nvm_insert_mixed) which drops out at this check:\n\n\tretval \u003d -EBUSY;\n\tif (!pte_none(*pte))\n\t\tgoto out_unlock;\n\nThe resulting -EBUSY return value will trigger a BUG_ON() in\nxip_file_fault.\n\nThis fix simply considers the fault as fixed in this case, because the\nrace winner has successfully installed the pte.\n\n[akpm@linux-foundation.org: use conventional (and consistent) comment layout]\nReported-by: David Sadler \u003cdsadler@us.ibm.com\u003e\nSigned-off-by: Carsten Otte \u003ccotte@de.ibm.com\u003e\nReported-by: Louis Alex Eisner \u003cleisner@cs.ucsd.edu\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "99067d691614385f824b42f9a02da9708e66dbb6",
      "tree": "7b646002c40331060fbd17217d4c8c28765fddcb",
      "parents": [
        "bcac798f6c44e21a6bdb2c5f8b056b364e246a35"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Feb 03 15:37:17 2012 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Feb 13 11:06:04 2012 -0800"
      },
      "message": "readahead: fix pipeline break caused by block plug\n\ncommit 3deaa7190a8da38453c4fabd9dec7f66d17fff67 upstream.\n\nHerbert Poetzl reported a performance regression since 2.6.39.  The test\nis a simple dd read, but with big block size.  The reason is:\n\nT1: ra (A, A+128k), (A+128k, A+256k)\nT2: lock_page for page A, submit the 256k\nT3: hit page A+128K, ra (A+256k, A+384). the range isn\u0027t submitted\nbecause of plug and there isn\u0027t any lock_page till we hit page A+256k\nbecause all pages from A to A+256k is in memory\nT4: hit page A+256k, ra (A+384, A+ 512). Because of plug, the range isn\u0027t\nsubmitted again.\nT5: lock_page A+256k, so (A+256k, A+512k) will be submitted. The task is\nwaitting for (A+256k, A+512k) finish.\n\nThere is no request to disk in T3 and T4, so readahead pipeline breaks.\n\nWe really don\u0027t need block plug for generic_file_aio_read() for buffered\nI/O.  The readahead already has plug and has fine grained control when I/O\nshould be submitted.  Deleting plug for buffered I/O fixes the regression.\n\nOne side effect is plug makes the request size 256k, the size is 128k\nwithout it.  This is because default ra size is 128k and not a reason we\nneed plug here.\n\nVivek said:\n\n: We submit some readahead IO to device request queue but because of nested\n: plug, queue never gets unplugged.  When read logic reaches a page which is\n: not in page cache, it waits for page to be read from the disk\n: (lock_page_killable()) and that time we flush the plug list.\n:\n: So effectively read ahead logic is kind of broken in parts because of\n: nested plugging.  Removing top level plug (generic_file_aio_read()) for\n: buffered reads, will allow unplugging queue earlier for readahead.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nReported-by: Herbert Poetzl \u003cherbert@13thfloor.at\u003e\nTested-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "ae027cb3ececb2cf00c269a4fd86429e09e578d8",
      "tree": "35a293cc1f10c9e09b2efc4d16ba8c27e9bc14fe",
      "parents": [
        "32e59b5624b67b50fcf44667104e9e7d81b349b0",
        "0fc4d13984b356c41b5d3ba1545bbc1c6d54b067"
      ],
      "author": {
        "name": "Linux Build Service Account",
        "email": "lnxbuild@localhost",
        "time": "Wed Feb 08 04:33:06 2012 -0800"
      },
      "committer": {
        "name": "QuIC Gerrit Code Review",
        "email": "code-review@localhost",
        "time": "Wed Feb 08 04:33:06 2012 -0800"
      },
      "message": "Merge \"backing-dev: ensure wakeup_timer is deleted\" into msm-3.0"
    },
    {
      "commit": "bcbef18db94dfb991bd3025069b3413cbc52f8b6",
      "tree": "a6c432dc65b182b84b058ba9408e40000478d57f",
      "parents": [
        "c2c9f543718e15227a4aa0135e793480b94c4d97"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Fri Jan 20 14:33:55 2012 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Wed Jan 25 17:25:05 2012 -0800"
      },
      "message": "mm: fix NULL ptr dereference in __count_immobile_pages\n\ncommit 687875fb7de4a95223af20ee024282fa9099f860 upstream.\n\nFix the following NULL ptr dereference caused by\n\n  cat /sys/devices/system/memory/memory0/removable\n\nPid: 13979, comm: sed Not tainted 3.0.13-0.5-default #1 IBM BladeCenter LS21 -[7971PAM]-/Server Blade\nRIP: __count_immobile_pages+0x4/0x100\nProcess sed (pid: 13979, threadinfo ffff880221c36000, task ffff88022e788480)\nCall Trace:\n  is_pageblock_removable_nolock+0x34/0x40\n  is_mem_section_removable+0x74/0xf0\n  show_mem_removable+0x41/0x70\n  sysfs_read_file+0xfe/0x1c0\n  vfs_read+0xc7/0x130\n  sys_read+0x53/0xa0\n  system_call_fastpath+0x16/0x1b\n\nWe are crashing because we are trying to dereference NULL zone which\ncame from pfn\u003d0 (struct page ffffea0000000000). According to the boot\nlog this page is marked reserved:\ne820 update range: 0000000000000000 - 0000000000010000 (usable) \u003d\u003d\u003e (reserved)\n\nand early_node_map confirms that:\nearly_node_map[3] active PFN ranges\n    1: 0x00000010 -\u003e 0x0000009c\n    1: 0x00000100 -\u003e 0x000bffa3\n    1: 0x00100000 -\u003e 0x00240000\n\nThe problem is that memory_present works in PAGE_SECTION_MASK aligned\nblocks so the reserved range sneaks into the the section as well.  This\nalso means that free_area_init_node will not take care of those reserved\npages and they stay uninitialized.\n\nWhen we try to read the removable status we walk through all available\nsections and hope that the zone is valid for all pages in the section.\nBut this is not true in this case as the zone and nid are not initialized.\n\nWe have only one node in this particular case and it is marked as node\u003d1\n(rather than 0) and that made the problem visible because page_to_nid will\nreturn 0 and there are no zones on the node.\n\nLet\u0027s check that the zone is valid and that the given pfn falls into its\nboundaries and mark the section not removable.  This might cause some\nfalse positives, probably, but we do not have any sane way to find out\nwhether the page is reserved by the platform or it is just not used for\nwhatever other reasons.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "ea1c62778121f6ece5e0120250716b45e204cb13",
      "tree": "65501073ab7e5a33a351f375bb0fa24216852ef9",
      "parents": [
        "b9e11747e1227d7ad67c5b80be4b206e4059687e"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 12 17:17:44 2012 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Wed Jan 25 17:24:43 2012 -0800"
      },
      "message": "memcg: add mem_cgroup_replace_page_cache() to fix LRU issue\n\ncommit ab936cbcd02072a34b60d268f94440fd5cf1970b upstream.\n\nCommit ef6a3c6311 (\"mm: add replace_page_cache_page() function\") added a\nfunction replace_page_cache_page().  This function replaces a page in the\nradix-tree with a new page.  WHen doing this, memory cgroup needs to fix\nup the accounting information.  memcg need to check PCG_USED bit etc.\n\nIn some(many?) cases, \u0027newpage\u0027 is on LRU before calling\nreplace_page_cache().  So, memcg\u0027s LRU accounting information should be\nfixed, too.\n\nThis patch adds mem_cgroup_replace_page_cache() and removes the old hooks.\n In that function, old pages will be unaccounted without touching\nres_counter and new page will be accounted to the memcg (of old page).\nWHen overwriting pc-\u003emem_cgroup of newpage, take zone-\u003elru_lock and avoid\nraces with LRU handling.\n\nBackground:\n  replace_page_cache_page() is called by FUSE code in its splice() handling.\n  Here, \u0027newpage\u0027 is replacing oldpage but this newpage is not a newly allocated\n  page and may be on LRU. LRU mis-accounting will be critical for memory cgroup\n  because rmdir() checks the whole LRU is empty and there is no account leak.\n  If a page is on the other LRU than it should be, rmdir() will fail.\n\nThis bug was added in March 2011, but no bug report yet.  I guess there\nare not many people who use memcg and FUSE at the same time with upstream\nkernels.\n\nThe result of this bug is that admin cannot destroy a memcg because of\naccount leak.  So, no panic, no deadlock.  And, even if an active cgroup\nexist, umount can succseed.  So no problem at shutdown.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "aa7e9dec5cfd309cb9eb6cb56a284a61607a925a",
      "tree": "ed809f41f932159c0a92d7a8140635a2e695ee63",
      "parents": [
        "848bbb91be354d9bde3bacaadcc3dde9342cd236"
      ],
      "author": {
        "name": "Jack Cheung",
        "email": "jackc@codeaurora.org",
        "time": "Thu Jan 19 17:06:04 2012 -0800"
      },
      "committer": {
        "name": "Jack Cheung",
        "email": "jackc@codeaurora.org",
        "time": "Mon Jan 23 14:51:24 2012 -0800"
      },
      "message": "mm: Drain pages after onlining\n\nWhen onlining, the onlined pages must be added to the kernel\u0027s\nlist of free pages using __free_page(). However, pages are not\nimmediately added but placed in a queue to be processed\nwhen the queue size reaches a watermark. The last pages in\nthe queue may not be processed in time, and if you try to\noffline that memory before it is processed, offlining will\nalways fail.\n\nThis fix calls drain_all_pages(), which will process every\nfree page in the queue. This ensures that all pages are\naccounted for when onlining and nothing gets stuck in the queue.\n\nChange-Id: I54dbc0749556702407090e51ce9246abc5db7d1c\nSigned-off-by: Jack Cheung \u003cjackc@codeaurora.org\u003e\n"
    },
    {
      "commit": "0fc4d13984b356c41b5d3ba1545bbc1c6d54b067",
      "tree": "59cde2b4900112f3563bea32f16bfba79928bcba",
      "parents": [
        "5fd77778263af935a67e495dbabb8c270f726c7d"
      ],
      "author": {
        "name": "Rabin Vincent",
        "email": "rabin.vincent@stericsson.com",
        "time": "Fri Nov 11 13:29:04 2011 +0100"
      },
      "committer": {
        "name": "Pratibhasagar V",
        "email": "pratibha@codeaurora.org",
        "time": "Mon Jan 23 16:29:56 2012 +0530"
      },
      "message": "backing-dev: ensure wakeup_timer is deleted\n\nbdi_prune_sb() in bdi_unregister() attempts to removes the bdi links\nfrom all super_blocks and then del_timer_sync() the writeback timer.\n\nHowever, this can race with __mark_inode_dirty(), leading to\nbdi_wakeup_thread_delayed() rearming the writeback timer on the bdi\nwe\u0027re unregistering, after we\u0027ve called del_timer_sync().\n\nThis can end up with the bdi being freed with an active timer inside it,\nas in the case of the following dump after the removal of an SD card.\n\nFix this by redoing the del_timer_sync() in bdi_destory().\n\n ------------[ cut here ]------------\n WARNING: at /home/rabin/kernel/arm/lib/debugobjects.c:262 debug_print_object+0x9c/0xc8()\n ODEBUG: free active (active state 0) object type: timer_list hint: wakeup_timer_fn+0x0/0x180\n Modules linked in:\n Backtrace:\n [\u003cc00109dc\u003e] (dump_backtrace+0x0/0x110) from [\u003cc0236e4c\u003e] (dump_stack+0x18/0x1c)\n  r6:c02bc638 r5:00000106 r4:c79f5d18 r3:00000000\n [\u003cc0236e34\u003e] (dump_stack+0x0/0x1c) from [\u003cc0025e6c\u003e] (warn_slowpath_common+0x54/0x6c)\n [\u003cc0025e18\u003e] (warn_slowpath_common+0x0/0x6c) from [\u003cc0025f28\u003e] (warn_slowpath_fmt+0x38/0x40)\n  r8:20000013 r7:c780c6f0 r6:c031613c r5:c780c6f0 r4:c02b1b29\n r3:00000009\n [\u003cc0025ef0\u003e] (warn_slowpath_fmt+0x0/0x40) from [\u003cc015eb4c\u003e] (debug_print_object+0x9c/0xc8)\n  r3:c02b1b29 r2:c02bc662\n [\u003cc015eab0\u003e] (debug_print_object+0x0/0xc8) from [\u003cc015f574\u003e] (debug_check_no_obj_freed+0xac/0x1dc)\n  r6:c7964000 r5:00000001 r4:c7964000\n [\u003cc015f4c8\u003e] (debug_check_no_obj_freed+0x0/0x1dc) from [\u003cc00a9e38\u003e] (kmem_cache_free+0x88/0x1f8)\n [\u003cc00a9db0\u003e] (kmem_cache_free+0x0/0x1f8) from [\u003cc014286c\u003e] (blk_release_queue+0x70/0x78)\n [\u003cc01427fc\u003e] (blk_release_queue+0x0/0x78) from [\u003cc015290c\u003e] (kobject_release+0x70/0x84)\n  r5:c79641f0 r4:c796420c\n [\u003cc015289c\u003e] (kobject_release+0x0/0x84) from [\u003cc0153ce4\u003e] (kref_put+0x68/0x80)\n  r7:00000083 r6:c74083d0 r5:c015289c r4:c796420c\n [\u003cc0153c7c\u003e] (kref_put+0x0/0x80) from [\u003cc01527d0\u003e] (kobject_put+0x48/0x5c)\n  r5:c79643b4 r4:c79641f0\n [\u003cc0152788\u003e] (kobject_put+0x0/0x5c) from [\u003cc013ddd8\u003e] (blk_cleanup_queue+0x68/0x74)\n  r4:c7964000\n [\u003cc013dd70\u003e] (blk_cleanup_queue+0x0/0x74) from [\u003cc01a6370\u003e] (mmc_blk_put+0x78/0xe8)\n  r5:00000000 r4:c794c400\n [\u003cc01a62f8\u003e] (mmc_blk_put+0x0/0xe8) from [\u003cc01a64b4\u003e] (mmc_blk_release+0x24/0x38)\n  r5:c794c400 r4:c0322824\n [\u003cc01a6490\u003e] (mmc_blk_release+0x0/0x38) from [\u003cc00de11c\u003e] (__blkdev_put+0xe8/0x170)\n  r5:c78d5e00 r4:c74083c0\n [\u003cc00de034\u003e] (__blkdev_put+0x0/0x170) from [\u003cc00de2c0\u003e] (blkdev_put+0x11c/0x12c)\n  r8:c79f5f70 r7:00000001 r6:c74083d0 r5:00000083 r4:c74083c0\n r3:00000000\n [\u003cc00de1a4\u003e] (blkdev_put+0x0/0x12c) from [\u003cc00b0724\u003e] (kill_block_super+0x60/0x6c)\n  r7:c7942300 r6:c79f4000 r5:00000083 r4:c74083c0\n [\u003cc00b06c4\u003e] (kill_block_super+0x0/0x6c) from [\u003cc00b0a94\u003e] (deactivate_locked_super+0x44/0x70)\n  r6:c79f4000 r5:c031af64 r4:c794dc00 r3:c00b06c4\n [\u003cc00b0a50\u003e] (deactivate_locked_super+0x0/0x70) from [\u003cc00b1358\u003e] (deactivate_super+0x6c/0x70)\n  r5:c794dc00 r4:c794dc00\n [\u003cc00b12ec\u003e] (deactivate_super+0x0/0x70) from [\u003cc00c88b0\u003e] (mntput_no_expire+0x188/0x194)\n  r5:c794dc00 r4:c7942300\n [\u003cc00c8728\u003e] (mntput_no_expire+0x0/0x194) from [\u003cc00c95e0\u003e] (sys_umount+0x2e4/0x310)\n  r6:c7942300 r5:00000000 r4:00000000 r3:00000000\n [\u003cc00c92fc\u003e] (sys_umount+0x0/0x310) from [\u003cc000d940\u003e] (ret_fast_syscall+0x0/0x30)\n ---[ end trace e5c83c92ada51c76 ]---\n\nChange-Id: Iab5fb46548e97443d09f5556d7f57098b728bf07\nCc: stable@kernel.org\nSigned-off-by: Rabin Vincent \u003crabin.vincent@stericsson.com\u003e\nSigned-off-by: Linus Walleij \u003clinus.walleij@linaro.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Pratibhasagar V \u003cpratibha@codeaurora.org\u003e\n"
    },
    {
      "commit": "cf089c4da08614410c789fb61af3b712c3bd1850",
      "tree": "0d93ade65db98b376e5bd84adae97f93ef7615c5",
      "parents": [
        "1aa4848c00a370a2d7cf5d779da055fce19f037d"
      ],
      "author": {
        "name": "Shubhraprakash Das",
        "email": "sadas@codeaurora.org",
        "time": "Thu Dec 22 14:28:07 2011 -0700"
      },
      "committer": {
        "name": "Shubhraprakash Das",
        "email": "sadas@codeaurora.org",
        "time": "Fri Jan 20 12:26:47 2012 -0700"
      },
      "message": "mm: ashmem: Make sure vma is valid while flushing\n\nEnsure that the vma that the ashmem region is tied to\nis valid before flushing and hold the mm semaphore so\nthat the vma does not get destroyed from under while\nit\u0027s being flushed.\n\nCRs-Fixed: 326685\nChange-Id: I86320ffe9e6570e6ffa7dda68ab26be7aed86afd\nSigned-off-by: Shubhraprakash Das \u003csadas@codeaurora.org\u003e\n"
    },
    {
      "commit": "7204bf5ef7295b6041047d581153990164b58988",
      "tree": "f2159a9d4b99f4f7a332d395f27c68942a631a6a",
      "parents": [
        "6f4214ef6a0e3c8319880eb5570ba2ae787bb577"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Wed Dec 28 15:57:16 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Fri Jan 06 14:14:00 2012 -0800"
      },
      "message": "mm: hugetlb: fix non-atomic enqueue of huge page\n\ncommit b0365c8d0cb6e79eb5f21418ae61ab511f31b575 upstream.\n\nIf a huge page is enqueued under the protection of hugetlb_lock, then the\noperation is atomic and safe.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "4875f39a0548a1fa5f55b4a90dca0f4a7ad8f237",
      "tree": "0904055a723946e36bb9bab6dad25055b99417a5",
      "parents": [
        "a37fd0740a9d2b261dc3d7781e3f3923f9076bb1"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Mon Dec 19 17:11:57 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Fri Jan 06 14:13:55 2012 -0800"
      },
      "message": "memcg: keep root group unchanged if creation fails\n\ncommit a41c58a6665cc995e237303b05db42100b71b65e upstream.\n\nIf the request is to create non-root group and we fail to meet it, we\nshould leave the root unchanged.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "2f79eddd49d391aded0b0c20f7eef3bec6d5e096",
      "tree": "edb3ff8cf2b0f5fecac30d01ac691e0ec0672dfa",
      "parents": [
        "20e725bc08091c303a469d8e1e295bf3b360c778"
      ],
      "author": {
        "name": "Dave Kleikamp",
        "email": "dave.kleikamp@oracle.com",
        "time": "Wed Dec 21 11:05:48 2011 -0600"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Fri Jan 06 14:13:54 2012 -0800"
      },
      "message": "vfs: __read_cache_page should use gfp argument rather than GFP_KERNEL\n\ncommit e6f67b8c05f5e129e126f4409ddac6f25f58ffcb upstream.\n\nlockdep reports a deadlock in jfs because a special inode\u0027s rw semaphore\nis taken recursively.  The mapping\u0027s gfp mask is GFP_NOFS, but is not\nused when __read_cache_page() calls add_to_page_cache_lru().\n\nSigned-off-by: Dave Kleikamp \u003cdave.kleikamp@oracle.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "724c6ae2912dbfc5c6a9e309f92b786fbc141462",
      "tree": "d4045a5b572cc5185e53b743900db3cd6fc1982b",
      "parents": [
        "5b8befdb785856462ee5eafc8a52ceb78e720f77"
      ],
      "author": {
        "name": "Frantisek Hrbata",
        "email": "fhrbata@redhat.com",
        "time": "Mon Dec 19 17:11:59 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Fri Jan 06 14:13:51 2012 -0800"
      },
      "message": "oom: fix integer overflow of points in oom_badness\n\ncommit ff05b6f7ae762b6eb464183eec994b28ea09f6dd upstream.\n\nAn integer overflow will happen on 64bit archs if task\u0027s sum of rss,\nswapents and nr_ptes exceeds (2^31)/1000 value.  This was introduced by\ncommit\n\nf755a04 oom: use pte pages in OOM score\n\nwhere the oom score computation was divided into several steps and it\u0027s no\nlonger computed as one expression in unsigned long(rss, swapents, nr_pte\nare unsigned long), where the result value assigned to points(int) is in\nrange(1..1000).  So there could be an int overflow while computing\n\n176          points *\u003d 1000;\n\nand points may have negative value. Meaning the oom score for a mem hog task\nwill be one.\n\n196          if (points \u003c\u003d 0)\n197                  return 1;\n\nFor example:\n[ 3366]     0  3366 35390480 24303939   5       0             0 oom01\nOut of memory: Kill process 3366 (oom01) score 1 or sacrifice child\n\nHere the oom1 process consumes more than 24303939(rss)*4096~\u003d92GB physical\nmemory, but it\u0027s oom score is one.\n\nIn this situation the mem hog task is skipped and oom killer kills another and\nmost probably innocent task with oom score greater than one.\n\nThe points variable should be of type long instead of int to prevent the\nint overflow.\n\nSigned-off-by: Frantisek Hrbata \u003cfhrbata@redhat.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "d051424f29eac6b4c173365a3ba5b9bb76870ce6",
      "tree": "499af1fee3f4eb31d79e673cfc9718d0a0fb056a",
      "parents": [
        "5cb6d2895e510f77514ef15c8f061621f09e4d78"
      ],
      "author": {
        "name": "Eugene Surovegin",
        "email": "ebs@ebshome.net",
        "time": "Thu Dec 15 11:25:59 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Fri Jan 06 14:13:50 2012 -0800"
      },
      "message": "percpu: fix per_cpu_ptr_to_phys() handling of non-page-aligned addresses\n\ncommit 9f57bd4d6dc69a4e3bf43044fa00fcd24dd363e3 upstream.\n\nper_cpu_ptr_to_phys() incorrectly rounds up its result for non-kmalloc\ncase to the page boundary, which is bogus for any non-page-aligned\naddress.\n\nThis affects the only in-tree user of this function - sysfs handler\nfor per-cpu \u0027crash_notes\u0027 physical address.  The trouble is that the\ncrash_notes per-cpu variable is not page-aligned:\n\ncrash_notes \u003d 0xc08e8ed4\nPER-CPU OFFSET VALUES:\n CPU 0: 3711f000\n CPU 1: 37129000\n CPU 2: 37133000\n CPU 3: 3713d000\n\nSo, the per-cpu addresses are:\n crash_notes on CPU 0: f7a07ed4 \u003d\u003e phys 36b57ed4\n crash_notes on CPU 1: f7a11ed4 \u003d\u003e phys 36b4ded4\n crash_notes on CPU 2: f7a1bed4 \u003d\u003e phys 36b43ed4\n crash_notes on CPU 3: f7a25ed4 \u003d\u003e phys 36b39ed4\n\nHowever, /sys/devices/system/cpu/cpu*/crash_notes says:\n /sys/devices/system/cpu/cpu0/crash_notes: 36b57000\n /sys/devices/system/cpu/cpu1/crash_notes: 36b4d000\n /sys/devices/system/cpu/cpu2/crash_notes: 36b43000\n /sys/devices/system/cpu/cpu3/crash_notes: 36b39000\n\nAs you can see, all values are rounded down to a page\nboundary. Consequently, this is where kexec sets up the NOTE segments,\nand thus where the secondary kernel is looking for them. However, when\nthe first kernel crashes, it saves the notes to the unaligned\naddresses, where they are not found.\n\nFix it by adding offset_in_page() to the translated page address.\n\n-tj: Combined Eugene\u0027s and Petr\u0027s commit messages.\n\nSigned-off-by: Eugene Surovegin \u003cebs@ebshome.net\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Petr Tesarik \u003cptesarik@suse.cz\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "6400c8a382ded237df5dc1605f0d06e7939ff4da",
      "tree": "b1c13ae760a87d9d758e0741ab0e418d8a870915",
      "parents": [
        "5341e68f9b6c25c0a062de6d730034640988a605"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Nov 18 10:55:35 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Wed Dec 21 12:57:37 2011 -0800"
      },
      "message": "percpu: fix chunk range calculation\n\ncommit a855b84c3d8c73220d4d3cd392a7bee7c83de70e upstream.\n\nPercpu allocator recorded the cpus which map to the first and last\nunits in pcpu_first/last_unit_cpu respectively and used them to\ndetermine the address range of a chunk - e.g. it assumed that the\nfirst unit has the lowest address in a chunk while the last unit has\nthe highest address.\n\nThis simply isn\u0027t true.  Groups in a chunk can have arbitrary positive\nor negative offsets from the previous one and there is no guarantee\nthat the first unit occupies the lowest offset while the last one the\nhighest.\n\nFix it by actually comparing unit offsets to determine cpus occupying\nthe lowest and highest offsets.  Also, rename pcu_first/last_unit_cpu\nto pcpu_low/high_unit_cpu to avoid confusion.\n\nThe chunk address range is used to flush cache on vmalloc area\nmap/unmap and decide whether a given address is in the first chunk by\nper_cpu_ptr_to_phys() and the bug was discovered by invalid\nper_cpu_ptr_to_phys() translation for crash_note.\n\nKudos to Dave Young for tracking down the problem.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: WANG Cong \u003cxiyou.wangcong@gmail.com\u003e\nReported-by: Dave Young \u003cdyoung@redhat.com\u003e\nTested-by: Dave Young \u003cdyoung@redhat.com\u003e\nLKML-Reference: \u003c4EC21F67.10905@redhat.com\u003e\nSigned-off-by: Thomas Renninger \u003ctrenn@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "3a15d7377faf8b10d04febc6c265ecf5f52c2558",
      "tree": "eb8b8f5227812ebacfb2bf216e3c384c6cddcc22",
      "parents": [
        "21830d75b1b3752a6418157c0abae8a11938d356"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Dec 08 14:34:30 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Wed Dec 21 12:57:36 2011 -0800"
      },
      "message": "mm: vmalloc: check for page allocation failure before vmlist insertion\n\ncommit 1368edf0647ac112d8cfa6ce47257dc950c50f5c upstream.\n\nCommit f5252e00 (\"mm: avoid null pointer access in vm_struct via\n/proc/vmallocinfo\") adds newly allocated vm_structs to the vmlist after\nit is fully initialised.  Unfortunately, it did not check that\n__vmalloc_area_node() successfully populated the area.  In the event of\nallocation failure, the vmalloc area is freed but the pointer to freed\nmemory is inserted into the vmlist leading to a a crash later in\nget_vmalloc_info().\n\nThis patch adds a check for ____vmalloc_area_node() failure within\n__vmalloc_node_range.  It does not use \"goto fail\" as in the previous\nerror path as a warning was already displayed by __vmalloc_area_node()\nbefore it called vfree in its failure path.\n\nCredit goes to Luciano Chavez for doing all the real work of identifying\nexactly where the problem was.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReported-by: Luciano Chavez \u003clnx1138@linux.vnet.ibm.com\u003e\nTested-by: Luciano Chavez \u003clnx1138@linux.vnet.ibm.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "21830d75b1b3752a6418157c0abae8a11938d356",
      "tree": "53fdbee23b1512706d1ef4be2950c4bab64bd8d2",
      "parents": [
        "5b4993336fe6b14627ab85efde17aea094d333e8"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Thu Dec 08 14:34:27 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Wed Dec 21 12:57:36 2011 -0800"
      },
      "message": "mm: Ensure that pfn_valid() is called once per pageblock when reserving pageblocks\n\ncommit d021563888312018ca65681096f62e36c20e63cc upstream.\n\nsetup_zone_migrate_reserve() expects that zone-\u003estart_pfn starts at\npageblock_nr_pages aligned pfn otherwise we could access beyond an\nexisting memblock resulting in the following panic if\nCONFIG_HOLES_IN_ZONE is not configured and we do not check pfn_valid:\n\n  IP: [\u003cc02d331d\u003e] setup_zone_migrate_reserve+0xcd/0x180\n  *pdpt \u003d 0000000000000000 *pde \u003d f000ff53f000ff53\n  Oops: 0000 [#1] SMP\n  Pid: 1, comm: swapper Not tainted 3.0.7-0.7-pae #1 VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform\n  EIP: 0060:[\u003cc02d331d\u003e] EFLAGS: 00010006 CPU: 0\n  EIP is at setup_zone_migrate_reserve+0xcd/0x180\n  EAX: 000c0000 EBX: f5801fc0 ECX: 000c0000 EDX: 00000000\n  ESI: 000c01fe EDI: 000c01fe EBP: 00140000 ESP: f2475f58\n  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068\n  Process swapper (pid: 1, ti\u003df2474000 task\u003df2472cd0 task.ti\u003df2474000)\n  Call Trace:\n  [\u003cc02d389c\u003e] __setup_per_zone_wmarks+0xec/0x160\n  [\u003cc02d3a1f\u003e] setup_per_zone_wmarks+0xf/0x20\n  [\u003cc08a771c\u003e] init_per_zone_wmark_min+0x27/0x86\n  [\u003cc020111b\u003e] do_one_initcall+0x2b/0x160\n  [\u003cc086639d\u003e] kernel_init+0xbe/0x157\n  [\u003cc05cae26\u003e] kernel_thread_helper+0x6/0xd\n  Code: a5 39 f5 89 f7 0f 46 fd 39 cf 76 40 8b 03 f6 c4 08 74 32 eb 91 90 89 c8 c1 e8 0e 0f be 80 80 2f 86 c0 8b 14 85 60 2f 86 c0 89 c8 \u003c2b\u003e 82 b4 12 00 00 c1 e0 05 03 82 ac 12 00 00 8b 00 f6 c4 08 0f\n  EIP: [\u003cc02d331d\u003e] setup_zone_migrate_reserve+0xcd/0x180 SS:ESP 0068:f2475f58\n  CR2: 00000000000012b4\n\nWe crashed in pageblock_is_reserved() when accessing pfn 0xc0000 because\nhighstart_pfn \u003d 0x36ffe.\n\nThe issue was introduced in 3.0-rc1 by 6d3163ce (\"mm: check if any page\nin a pageblock is reserved before marking it MIGRATE_RESERVE\").\n\nMake sure that start_pfn is always aligned to pageblock_nr_pages to\nensure that pfn_valid s always called at the start of each pageblock.\nArchitectures with holes in pageblocks will be correctly handled by\npfn_valid_within in pageblock_is_reserved.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nTested-by: Dang Bo \u003cbdang@vmware.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Arve Hjnnevg \u003carve@android.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: John Stultz \u003cjohn.stultz@linaro.org\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "b492a377ac1507a67091c5232afd5ebd1c7c6e25",
      "tree": "1e8540841a9b4d3895b1cf852324d5914a439137",
      "parents": [
        "cd989fe1fe5da572e45468c6dcb361a7d3c63e5c"
      ],
      "author": {
        "name": "Youquan Song",
        "email": "youquan.song@intel.com",
        "time": "Thu Dec 08 14:34:18 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Wed Dec 21 12:57:35 2011 -0800"
      },
      "message": "thp: set compound tail page _count to zero\n\ncommit 58a84aa92723d1ac3e1cc4e3b0ff49291663f7e1 upstream.\n\nCommit 70b50f94f1644 (\"mm: thp: tail page refcounting fix\") keeps all\npage_tail-\u003e_count zero at all times.  But the current kernel does not\nset page_tail-\u003e_count to zero if a 1GB page is utilized.  So when an\nIOMMU 1GB page is used by KVM, it wil result in a kernel oops because a\ntail page\u0027s _count does not equal zero.\n\n  kernel BUG at include/linux/mm.h:386!\n  invalid opcode: 0000 [#1] SMP\n  Call Trace:\n    gup_pud_range+0xb8/0x19d\n    get_user_pages_fast+0xcb/0x192\n    ? trace_hardirqs_off+0xd/0xf\n    hva_to_pfn+0x119/0x2f2\n    gfn_to_pfn_memslot+0x2c/0x2e\n    kvm_iommu_map_pages+0xfd/0x1c1\n    kvm_iommu_map_memslots+0x7c/0xbd\n    kvm_iommu_map_guest+0xaa/0xbf\n    kvm_vm_ioctl_assigned_device+0x2ef/0xa47\n    kvm_vm_ioctl+0x36c/0x3a2\n    do_vfs_ioctl+0x49e/0x4e4\n    sys_ioctl+0x5a/0x7c\n    system_call_fastpath+0x16/0x1b\n  RIP  gup_huge_pud+0xf2/0x159\n\nSigned-off-by: Youquan Song \u003cyouquan.song@intel.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "b5cf8a409a1c272b85d66d64607d5328da48c6c1",
      "tree": "9b5382a6db0f37f25d3a4a53bb5645dc7ab44efb",
      "parents": [
        "1fe52638225e070a9730063d25f041293cf515d0",
        "45f580d9c36b93204882dffc6fb9f4a254c3d34a"
      ],
      "author": {
        "name": "Linux Build Service Account",
        "email": "lnxbuild@localhost",
        "time": "Fri Dec 09 13:32:33 2011 -0800"
      },
      "committer": {
        "name": "QuIC Gerrit Code Review",
        "email": "code-review@localhost",
        "time": "Fri Dec 09 13:32:33 2011 -0800"
      },
      "message": "Merge \"ARM: allow memory hotplug/hotremove\" into msm-3.0"
    },
    {
      "commit": "d98627dd4a3e2cd4a7602a845fd1c1c78d372e97",
      "tree": "8ec13bb0c0c05ad7da6659bf91098bf1a197c5c1",
      "parents": [
        "bfc769031803ed194374d4e79d30e6ee103d822e"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Tue Nov 15 14:36:12 2011 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Fri Dec 09 08:52:37 2011 -0800"
      },
      "message": "hugetlb: release pages in the error path of hugetlb_cow()\n\ncommit ea4039a34c4c206d015d34a49d0b00868e37db1d upstream.\n\nIf we fail to prepare an anon_vma, the {new, old}_page should be released,\nor they will leak.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "f077c70ec869660f6ca8188572d7c829952b23e3",
      "tree": "f9e184d54256555914de9c8f55647bb15831fdf1",
      "parents": [
        "1bcf72b08eab86755f21c32beb901eab96906b30",
        "59f9f1c9ae463a3d4499cd9353619f8b1993371b"
      ],
      "author": {
        "name": "Linux Build Service Account",
        "email": "lnxbuild@localhost",
        "time": "Fri Dec 09 02:43:11 2011 -0800"
      },
      "committer": {
        "name": "QuIC Gerrit Code Review",
        "email": "code-review@localhost",
        "time": "Fri Dec 09 02:43:11 2011 -0800"
      },
      "message": "Merge \"mm: Add total_unmovable_pages global variable\" into msm-3.0"
    },
    {
      "commit": "45f580d9c36b93204882dffc6fb9f4a254c3d34a",
      "tree": "33a4e6396ca4a73496274bf145a6fd5424f29ddb",
      "parents": [
        "c1ab5d376f687df0fd3fa9844c31a32161fbbc72"
      ],
      "author": {
        "name": "Bryan Huntsman",
        "email": "bryanh@codeaurora.org",
        "time": "Wed Nov 23 12:31:46 2011 -0800"
      },
      "committer": {
        "name": "Linux Build Service Account",
        "email": "lnxbuild@localhost",
        "time": "Fri Dec 09 01:22:18 2011 -0700"
      },
      "message": "ARM: allow memory hotplug/hotremove\n\nAdd ARM to the supported list of architectures for MEMORY_HOTPLUG.  For\nARM, the selection of MEMORY_HOTPLUG/REMOVE is specific to the sub-arch\nand has to be explicitly enabled by the sub-arch.\n\nSigned-off-by: Bryan Huntsman \u003cbryanh@codeaurora.org\u003e\n"
    },
    {
      "commit": "0174600ed1922f5d5f1928dd32194c0d4abf8f4f",
      "tree": "c5d540af782a705f0ad72abfcb3262a1c633f0af",
      "parents": [
        "eefbe8c3afe3ca643d7b7cb939dc0de492b32590",
        "d3d5691775a670ae1b73a6d0be47be705945afec"
      ],
      "author": {
        "name": "Linux Build Service Account",
        "email": "lnxbuild@localhost",
        "time": "Thu Dec 08 10:28:10 2011 -0800"
      },
      "committer": {
        "name": "QuIC Gerrit Code Review",
        "email": "code-review@localhost",
        "time": "Thu Dec 08 10:28:10 2011 -0800"
      },
      "message": "Merge \"slub: Enable backtrace for create/delete points\" into msm-3.0"
    },
    {
      "commit": "59f9f1c9ae463a3d4499cd9353619f8b1993371b",
      "tree": "c091bf4c74c696d412024d10ccb87e84b4c07d5e",
      "parents": [
        "c3a5a8cb8a7d082777d213cb6ff737450c5718a5"
      ],
      "author": {
        "name": "Jack Cheung",
        "email": "jackc@codeaurora.org",
        "time": "Tue Nov 29 16:52:49 2011 -0800"
      },
      "committer": {
        "name": "Jack Cheung",
        "email": "jackc@codeaurora.org",
        "time": "Tue Dec 06 15:00:36 2011 -0800"
      },
      "message": "mm: Add total_unmovable_pages global variable\n\nVmalloc will exit if the amount it needs to allocate is\ngreater than totalram_pages. Vmalloc cannot allocate\nfrom the movable zone, so pages in the movable zone should\nnot be counted.\n\nThis change adds a new global variable: total_unmovable_pages.\nIt is calculated in init.c, based on totalram_pages minus\nthe pages in the movable zone. Vmalloc now looks at this new\nglobal instead of totalram_pages.\n\ntotal_unmovable_pages can be modified during memory_hotplug.\nIf the zone you are offlining/onlining is unmovable, then\nyou modify it similar to totalram_pages.  If the zone is\nmovable, then no change is needed.\n\nChange-Id: Ie55c41051e9ad4b921eb04ecbb4798a8bd2344d6\nSigned-off-by: Jack Cheung \u003cjackc@codeaurora.org\u003e\n"
    },
    {
      "commit": "042f0e0b045f0c0ddcb1002c66c6370c7a5b8468",
      "tree": "958af21d3c904d2891180e4cd62079e944915f2f",
      "parents": [
        "5c5bed0c36d6389c426c617b122da6f73e15161a",
        "9f41da81017657a194a4e145bab337f13a4d7fd9"
      ],
      "author": {
        "name": "Linux Build Service Account",
        "email": "lnxbuild@localhost",
        "time": "Tue Dec 06 11:36:58 2011 -0800"
      },
      "committer": {
        "name": "QuIC Gerrit Code Review",
        "email": "code-review@localhost",
        "time": "Tue Dec 06 11:36:58 2011 -0800"
      },
      "message": "Merge \"mm: Cast lowmem_reserve to long\" into msm-3.0"
    },
    {
      "commit": "80c201e25e8dbc00427b73d90b1527c356526442",
      "tree": "618c4952e154c1bed45eb94b82a425e1dec79ebc",
      "parents": [
        "a699bce127690d87b5eb390068bae25b73dca19a"
      ],
      "author": {
        "name": "Jack Cheung",
        "email": "jackc@codeaurora.org",
        "time": "Tue Nov 29 16:53:34 2011 -0800"
      },
      "committer": {
        "name": "Jack Cheung",
        "email": "jackc@codeaurora.org",
        "time": "Sun Dec 04 17:14:03 2011 -0800"
      },
      "message": "mm: Fix zone-\u003epresent_pages underflow\n\nIf offlined_pages is greater than\nzone-\u003epresent_pages, underflow will occur.\n\nThis change will set zone-\u003epresent_pages to 0 if\nofflined_pages is greater.\n\nChange-Id: I728e90c60fb7fc391de7b9c4828ab264ca38653b\nSigned-off-by: Jack Cheung \u003cjackc@codeaurora.org\u003e\n"
    },
    {
      "commit": "d3d5691775a670ae1b73a6d0be47be705945afec",
      "tree": "d30d8a44bd66faa185259a70f9cc8d85029cf0cd",
      "parents": [
        "ce23e092e2a474141881b4b139bfb6ed9f842237"
      ],
      "author": {
        "name": "Ben Greear",
        "email": "greearb@candelatech.com",
        "time": "Thu Jul 07 11:36:36 2011 -0700"
      },
      "committer": {
        "name": "Stephen Boyd",
        "email": "sboyd@codeaurora.org",
        "time": "Thu Dec 01 17:05:34 2011 -0800"
      },
      "message": "slub: Enable backtrace for create/delete points\n\nThis patch attempts to grab a backtrace for the creation\nand deletion points of the slub object.  When a fault is\ndetected, we can then get a better idea of where the item\nwas deleted.\n\nExample output from debugging some funky nfs/rpc behaviour:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nBUG kmalloc-64: Object is on free-list\n-----------------------------------------------------------------------------\n\nINFO: Allocated in rpcb_getport_async+0x39c/0x5a5 [sunrpc] age\u003d381 cpu\u003d3 pid\u003d3750\n       __slab_alloc+0x348/0x3ba\n       kmem_cache_alloc_trace+0x67/0xe7\n       rpcb_getport_async+0x39c/0x5a5 [sunrpc]\n       call_bind+0x70/0x75 [sunrpc]\n       __rpc_execute+0x78/0x24b [sunrpc]\n       rpc_execute+0x3d/0x42 [sunrpc]\n       rpc_run_task+0x79/0x81 [sunrpc]\n       rpc_call_sync+0x3f/0x60 [sunrpc]\n       rpc_ping+0x42/0x58 [sunrpc]\n       rpc_create+0x4aa/0x527 [sunrpc]\n       nfs_create_rpc_client+0xb1/0xf6 [nfs]\n       nfs_init_client+0x3b/0x7d [nfs]\n       nfs_get_client+0x453/0x5ab [nfs]\n       nfs_create_server+0x10b/0x437 [nfs]\n       nfs_fs_mount+0x4ca/0x708 [nfs]\n       mount_fs+0x6b/0x152\nINFO: Freed in rpcb_map_release+0x3f/0x44 [sunrpc] age\u003d30 cpu\u003d2 pid\u003d29049\n       __slab_free+0x57/0x150\n       kfree+0x107/0x13a\n       rpcb_map_release+0x3f/0x44 [sunrpc]\n       rpc_release_calldata+0x12/0x14 [sunrpc]\n       rpc_free_task+0x59/0x61 [sunrpc]\n       rpc_final_put_task+0x82/0x8a [sunrpc]\n       __rpc_execute+0x23c/0x24b [sunrpc]\n       rpc_async_schedule+0x10/0x12 [sunrpc]\n       process_one_work+0x230/0x41d\n       worker_thread+0x133/0x217\n       kthread+0x7d/0x85\n       kernel_thread_helper+0x4/0x10\nINFO: Slab 0xffffea00029aa470 objects\u003d20 used\u003d9 fp\u003d0xffff8800be7830d8 flags\u003d0x20000000004081\nINFO: Object 0xffff8800be7830d8 @offset\u003d4312 fp\u003d0xffff8800be7827a8\n\nBytes b4 0xffff8800be7830c8:  87 a8 96 00 01 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a .�......ZZZZZZZZ\n Object 0xffff8800be7830d8:  6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk\n Object 0xffff8800be7830e8:  6b 6b 6b 6b 01 08 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkk..kkkkkkkkkk\n Object 0xffff8800be7830f8:  6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk\n Object 0xffff8800be783108:  6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5 kkkkkkkkkkkkkkk�\n Redzone 0xffff8800be783118:  bb bb bb bb bb bb bb bb                         �������������\n Padding 0xffff8800be783258:  5a 5a 5a 5a 5a 5a 5a 5a                         ZZZZZZZZ\nPid: 29049, comm: kworker/2:2 Not tainted 3.0.0-rc4+ #8\nCall Trace:\n [\u003cffffffff811055c3\u003e] print_trailer+0x131/0x13a\n [\u003cffffffff81105601\u003e] object_err+0x35/0x3e\n [\u003cffffffff8110746f\u003e] verify_mem_not_deleted+0x7a/0xb7\n [\u003cffffffffa02851b5\u003e] rpcb_getport_done+0x23/0x126 [sunrpc]\n [\u003cffffffffa027d0ba\u003e] rpc_exit_task+0x3f/0x6d [sunrpc]\n [\u003cffffffffa027d4ab\u003e] __rpc_execute+0x78/0x24b [sunrpc]\n [\u003cffffffffa027d6c0\u003e] ? rpc_execute+0x42/0x42 [sunrpc]\n [\u003cffffffffa027d6d0\u003e] rpc_async_schedule+0x10/0x12 [sunrpc]\n [\u003cffffffff810611b7\u003e] process_one_work+0x230/0x41d\n [\u003cffffffff81061102\u003e] ? process_one_work+0x17b/0x41d\n [\u003cffffffff81063613\u003e] worker_thread+0x133/0x217\n [\u003cffffffff810634e0\u003e] ? manage_workers+0x191/0x191\n [\u003cffffffff81066e10\u003e] kthread+0x7d/0x85\n [\u003cffffffff81485924\u003e] kernel_thread_helper+0x4/0x10\n [\u003cffffffff8147eb18\u003e] ? retint_restore_args+0x13/0x13\n [\u003cffffffff81066d93\u003e] ? __init_kthread_worker+0x56/0x56\n [\u003cffffffff81485920\u003e] ? gs_change+0x13/0x13\n\nAcked-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Ben Greear \u003cgreearb@candelatech.com\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\n\nSLUB: Fix missing \u003clinux/stacktrace.h\u003e include\n\nThis fixes the following build breakage commit d6543e3 (\"slub: Enable backtrace\nfor create/delete points\"):\n\n  CC      mm/slub.o\nmm/slub.c: In function ‘set_track’:\nmm/slub.c:428: error: storage size of ‘trace’ isn’t known\nmm/slub.c:435: error: implicit declaration of function ‘save_stack_trace’\nmm/slub.c:428: warning: unused variable ‘trace’\nmake[1]: *** [mm/slub.o] Error 1\nmake: *** [mm/slub.o] Error 2\n\nChange-Id: I5f5159a210d393d424e5c1d23a89dcb840f15d45\nSigned-off-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nSigned-off-by: Stephen Boyd \u003csboyd@codeaurora.org\u003e\n"
    },
    {
      "commit": "9f41da81017657a194a4e145bab337f13a4d7fd9",
      "tree": "b620a8cd103d0d10f6fec9692b0b58367306ac0d",
      "parents": [
        "2c60124cfd1fca38f961a88fbfcf2a0a96961e04"
      ],
      "author": {
        "name": "Jack Cheung",
        "email": "jackc@codeaurora.org",
        "time": "Mon Nov 28 16:41:28 2011 -0800"
      },
      "committer": {
        "name": "Jack Cheung",
        "email": "jackc@codeaurora.org",
        "time": "Tue Nov 29 18:28:05 2011 -0800"
      },
      "message": "mm: Cast lowmem_reserve to long\n\nz-\u003elowmem_reserve[classzone_idx] is an unsigned long but\nfree_pages and min are longs. If free_pages is\nnegative, the function will incorrectly return true\nbecause it will treat the negative long as a large,\npositive unsigned long.\n\nThis change casts z-\u003elowmem_reserve to a long and\nfixes a typo in the comment.\n\nChange-Id: Icada1fa5ca650fbcdb0656f637adbb98f223eec5\nSigned-off-by: Jack Cheung \u003cjackc@codeaurora.org\u003e\n"
    },
    {
      "commit": "1e6ec3c7e399aa84d29ced48b16a91acaba962f0",
      "tree": "aa4b5ab13a9f6d9c689110871d4a2473a26f8021",
      "parents": [
        "e2edeb1d2beeb3285bc4d64ac8f84048b1a060e0"
      ],
      "author": {
        "name": "Jack Cheung",
        "email": "jackc@codeaurora.org",
        "time": "Mon Nov 21 16:44:05 2011 -0800"
      },
      "committer": {
        "name": "Jack Cheung",
        "email": "jackc@codeaurora.org",
        "time": "Tue Nov 22 17:57:00 2011 -0800"
      },
      "message": "mm: Fix infinite loop when offlining\n\nWhen page migration is unable to find free memory it\nwill go into an infinite loop because the\nall_unreclaimable flag is never set.\n\nThis change will allow memory offlining to fail\ngracefully if there is not enough memory for page\nmigration.\n\n__GFP_NORETRY tells the page_alloc to not retry.\n__GFP_NOWARN suppresses page fault warnings when\npage allocation fails.\n__GFP_NOMEMALLOC prevents it from aggressively\nallocating beyond zone watermarks.\n\nChange-Id: I94dfd9059851c7b24953f44a4018a3bbac840688\nSigned-off-by: Jack Cheung \u003cjackc@codeaurora.org\u003e\n"
    },
    {
      "commit": "1f36bbbe41ab7043a428175a71b3948574938752",
      "tree": "5e2622d5929e1e37b036dc9c90a6516b4134cdf4",
      "parents": [
        "214af5d355ce204cd0bcf630245cdc37853cb484"
      ],
      "author": {
        "name": "Rabin Vincent",
        "email": "rabin.vincent@stericsson.com",
        "time": "Fri Nov 11 13:29:04 2011 +0100"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Nov 21 14:31:25 2011 -0800"
      },
      "message": "backing-dev: ensure wakeup_timer is deleted\n\ncommit 7a401a972df8e184b3d1a3fc958c0a4ddee8d312 upstream.\n\nbdi_prune_sb() in bdi_unregister() attempts to removes the bdi links\nfrom all super_blocks and then del_timer_sync() the writeback timer.\n\nHowever, this can race with __mark_inode_dirty(), leading to\nbdi_wakeup_thread_delayed() rearming the writeback timer on the bdi\nwe\u0027re unregistering, after we\u0027ve called del_timer_sync().\n\nThis can end up with the bdi being freed with an active timer inside it,\nas in the case of the following dump after the removal of an SD card.\n\nFix this by redoing the del_timer_sync() in bdi_destory().\n\n ------------[ cut here ]------------\n WARNING: at /home/rabin/kernel/arm/lib/debugobjects.c:262 debug_print_object+0x9c/0xc8()\n ODEBUG: free active (active state 0) object type: timer_list hint: wakeup_timer_fn+0x0/0x180\n Modules linked in:\n Backtrace:\n [\u003cc00109dc\u003e] (dump_backtrace+0x0/0x110) from [\u003cc0236e4c\u003e] (dump_stack+0x18/0x1c)\n  r6:c02bc638 r5:00000106 r4:c79f5d18 r3:00000000\n [\u003cc0236e34\u003e] (dump_stack+0x0/0x1c) from [\u003cc0025e6c\u003e] (warn_slowpath_common+0x54/0x6c)\n [\u003cc0025e18\u003e] (warn_slowpath_common+0x0/0x6c) from [\u003cc0025f28\u003e] (warn_slowpath_fmt+0x38/0x40)\n  r8:20000013 r7:c780c6f0 r6:c031613c r5:c780c6f0 r4:c02b1b29\n r3:00000009\n [\u003cc0025ef0\u003e] (warn_slowpath_fmt+0x0/0x40) from [\u003cc015eb4c\u003e] (debug_print_object+0x9c/0xc8)\n  r3:c02b1b29 r2:c02bc662\n [\u003cc015eab0\u003e] (debug_print_object+0x0/0xc8) from [\u003cc015f574\u003e] (debug_check_no_obj_freed+0xac/0x1dc)\n  r6:c7964000 r5:00000001 r4:c7964000\n [\u003cc015f4c8\u003e] (debug_check_no_obj_freed+0x0/0x1dc) from [\u003cc00a9e38\u003e] (kmem_cache_free+0x88/0x1f8)\n [\u003cc00a9db0\u003e] (kmem_cache_free+0x0/0x1f8) from [\u003cc014286c\u003e] (blk_release_queue+0x70/0x78)\n [\u003cc01427fc\u003e] (blk_release_queue+0x0/0x78) from [\u003cc015290c\u003e] (kobject_release+0x70/0x84)\n  r5:c79641f0 r4:c796420c\n [\u003cc015289c\u003e] (kobject_release+0x0/0x84) from [\u003cc0153ce4\u003e] (kref_put+0x68/0x80)\n  r7:00000083 r6:c74083d0 r5:c015289c r4:c796420c\n [\u003cc0153c7c\u003e] (kref_put+0x0/0x80) from [\u003cc01527d0\u003e] (kobject_put+0x48/0x5c)\n  r5:c79643b4 r4:c79641f0\n [\u003cc0152788\u003e] (kobject_put+0x0/0x5c) from [\u003cc013ddd8\u003e] (blk_cleanup_queue+0x68/0x74)\n  r4:c7964000\n [\u003cc013dd70\u003e] (blk_cleanup_queue+0x0/0x74) from [\u003cc01a6370\u003e] (mmc_blk_put+0x78/0xe8)\n  r5:00000000 r4:c794c400\n [\u003cc01a62f8\u003e] (mmc_blk_put+0x0/0xe8) from [\u003cc01a64b4\u003e] (mmc_blk_release+0x24/0x38)\n  r5:c794c400 r4:c0322824\n [\u003cc01a6490\u003e] (mmc_blk_release+0x0/0x38) from [\u003cc00de11c\u003e] (__blkdev_put+0xe8/0x170)\n  r5:c78d5e00 r4:c74083c0\n [\u003cc00de034\u003e] (__blkdev_put+0x0/0x170) from [\u003cc00de2c0\u003e] (blkdev_put+0x11c/0x12c)\n  r8:c79f5f70 r7:00000001 r6:c74083d0 r5:00000083 r4:c74083c0\n r3:00000000\n [\u003cc00de1a4\u003e] (blkdev_put+0x0/0x12c) from [\u003cc00b0724\u003e] (kill_block_super+0x60/0x6c)\n  r7:c7942300 r6:c79f4000 r5:00000083 r4:c74083c0\n [\u003cc00b06c4\u003e] (kill_block_super+0x0/0x6c) from [\u003cc00b0a94\u003e] (deactivate_locked_super+0x44/0x70)\n  r6:c79f4000 r5:c031af64 r4:c794dc00 r3:c00b06c4\n [\u003cc00b0a50\u003e] (deactivate_locked_super+0x0/0x70) from [\u003cc00b1358\u003e] (deactivate_super+0x6c/0x70)\n  r5:c794dc00 r4:c794dc00\n [\u003cc00b12ec\u003e] (deactivate_super+0x0/0x70) from [\u003cc00c88b0\u003e] (mntput_no_expire+0x188/0x194)\n  r5:c794dc00 r4:c7942300\n [\u003cc00c8728\u003e] (mntput_no_expire+0x0/0x194) from [\u003cc00c95e0\u003e] (sys_umount+0x2e4/0x310)\n  r6:c7942300 r5:00000000 r4:00000000 r3:00000000\n [\u003cc00c92fc\u003e] (sys_umount+0x0/0x310) from [\u003cc000d940\u003e] (ret_fast_syscall+0x0/0x30)\n ---[ end trace e5c83c92ada51c76 ]---\n\nSigned-off-by: Rabin Vincent \u003crabin.vincent@stericsson.com\u003e\nSigned-off-by: Linus Walleij \u003clinus.walleij@linaro.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "d074fa2796bdbc42c4f918c78d6711bafc80b1c8",
      "tree": "033929706a0aae95f65c134a8fc09cec3fb3e75d",
      "parents": [
        "53ae1740b250e4d02dd7a6ca82075355ad99dc23",
        "9ab6a29787b1221a697f85835645549668258bdc"
      ],
      "author": {
        "name": "Bryan Huntsman",
        "email": "bryanh@codeaurora.org",
        "time": "Wed Nov 16 13:52:50 2011 -0800"
      },
      "committer": {
        "name": "Bryan Huntsman",
        "email": "bryanh@codeaurora.org",
        "time": "Wed Nov 16 13:52:50 2011 -0800"
      },
      "message": "Merge remote-tracking branch \u0027common/android-3.0\u0027 into msm-3.0\n\n* common/android-3.0: (570 commits)\n  misc: remove kernel debugger core\n  ARM: common: fiq_debugger: dump sysrq directly to console if enabled\n  ARM: common: fiq_debugger: add irq context debug functions\n  net: wireless: bcmdhd: Call init_ioctl() only if was started properly for WEXT\n  net: wireless: bcmdhd: Call init_ioctl() only if was started properly\n  net: wireless: bcmdhd: Fix possible memory leak in escan/iscan\n  cpufreq: interactive governor: default 20ms timer\n  cpufreq: interactive governor: go to intermediate hi speed before max\n  cpufreq: interactive governor: scale to max only if at min speed\n  cpufreq: interactive governor: apply intermediate load on current speed\n  ARM: idle: update idle ticks before call idle end notifier\n  input: gpio_input: don\u0027t print debounce message unless flag is set\n  net: wireless: bcm4329: Skip dhd_bus_stop() if bus is already down\n  net: wireless: bcmdhd: Skip dhd_bus_stop() if bus is already down\n  net: wireless: bcmdhd: Improve suspend/resume processing\n  net: wireless: bcmdhd: Check if FW is Ok for internal FW call\n  tcp: Don\u0027t nuke connections for the wrong protocol\n  ARM: common: fiq_debugger: make uart irq be no_suspend\n  net: wireless: Skip connect warning for CONFIG_CFG80211_ALLOW_RECONNECT\n  mm: avoid livelock on !__GFP_FS allocations\n  ...\n\nConflicts:\n\tarch/arm/mm/cache-l2x0.c\n\tarch/arm/vfp/vfpmodule.c\n\tdrivers/mmc/core/host.c\n\tkernel/power/wakelock.c\n\tnet/bluetooth/hci_event.c\n\nSigned-off-by: Bryan Huntsman \u003cbryanh@codeaurora.org\u003e\n"
    },
    {
      "commit": "68fe9d9c796303de600dbc622086768ca4d8408b",
      "tree": "4d7c0a4d52960df61e3c61e4a894a182de5ae839",
      "parents": [
        "a00fb1451d630898c1380349ac3776688e58010f"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Wed Nov 02 13:36:59 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Fri Nov 11 09:36:29 2011 -0800"
      },
      "message": "mm: thp: tail page refcounting fix\n\ncommit 70b50f94f1644e2aa7cb374819cfd93f3c28d725 upstream.\n\nMichel while working on the working set estimation code, noticed that\ncalling get_page_unless_zero() on a random pfn_to_page(random_pfn)\nwasn\u0027t safe, if the pfn ended up being a tail page of a transparent\nhugepage under splitting by __split_huge_page_refcount().\n\nHe then found the problem could also theoretically materialize with\npage_cache_get_speculative() during the speculative radix tree lookups\nthat uses get_page_unless_zero() in SMP if the radix tree page is freed\nand reallocated and get_user_pages is called on it before\npage_cache_get_speculative has a chance to call get_page_unless_zero().\n\nSo the best way to fix the problem is to keep page_tail-\u003e_count zero at\nall times.  This will guarantee that get_page_unless_zero() can never\nsucceed on any tail page.  page_tail-\u003e_mapcount is guaranteed zero and\nis unused for all tail pages of a compound page, so we can simply\naccount the tail page references there and transfer them to\ntail_page-\u003e_count in __split_huge_page_refcount() (in addition to the\nhead_page-\u003e_mapcount).\n\nWhile debugging this s/_count/_mapcount/ change I also noticed get_page is\ncalled by direct-io.c on pages returned by get_user_pages.  That wasn\u0027t\nentirely safe because the two atomic_inc in get_page weren\u0027t atomic.  As\nopposed to other get_user_page users like secondary-MMU page fault to\nestablish the shadow pagetables would never call any superflous get_page\nafter get_user_page returns.  It\u0027s safer to make get_page universally safe\nfor tail pages and to use get_page_foll() within follow_page (inside\nget_user_pages()).  get_page_foll() is safe to do the refcounting for tail\npages without taking any locks because it is run within PT lock protected\ncritical sections (PT lock for pte and page_table_lock for\npmd_trans_huge).\n\nThe standard get_page() as invoked by direct-io instead will now take\nthe compound_lock but still only for tail pages.  The direct-io paths\nare usually I/O bound and the compound_lock is per THP so very\nfinegrined, so there\u0027s no risk of scalability issues with it.  A simple\ndirect-io benchmarks with all lockdep prove locking and spinlock\ndebugging infrastructure enabled shows identical performance and no\noverhead.  So it\u0027s worth it.  Ideally direct-io should stop calling\nget_page() on pages returned by get_user_pages().  The spinlock in\nget_page() is already optimized away for no-THP builds but doing\nget_page() on tail pages returned by GUP is generally a rare operation\nand usually only run in I/O paths.\n\nThis new refcounting on page_tail-\u003e_mapcount in addition to avoiding new\nRCU critical sections will also allow the working set estimation code to\nwork without any further complexity associated to the tail page\nrefcounting with THP.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReported-by: Michel Lespinasse \u003cwalken@google.com\u003e\nReviewed-by: Michel Lespinasse \u003cwalken@google.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: David Gibson \u003cdavid@gibson.dropbear.id.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "38af8ddb4b8877c0b90f8413a20517ba245c4d0b",
      "tree": "902c951d9637a24de29c54556f5fd388863c6dd8",
      "parents": [
        "ad417042d59a26bedf600ab162b20b79fdcd1fa1"
      ],
      "author": {
        "name": "Mitsuo Hayasaka",
        "email": "mitsuo.hayasaka.hu@hitachi.com",
        "time": "Mon Oct 31 17:08:13 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Fri Nov 11 09:36:18 2011 -0800"
      },
      "message": "mm: avoid null pointer access in vm_struct via /proc/vmallocinfo\n\ncommit f5252e009d5b87071a919221e4f6624184005368 upstream.\n\nThe /proc/vmallocinfo shows information about vmalloc allocations in\nvmlist that is a linklist of vm_struct.  It, however, may access pages\nfield of vm_struct where a page was not allocated.  This results in a null\npointer access and leads to a kernel panic.\n\nWhy this happens: In __vmalloc_node_range() called from vmalloc(), newly\nallocated vm_struct is added to vmlist at __get_vm_area_node() and then,\nsome fields of vm_struct such as nr_pages and pages are set at\n__vmalloc_area_node().  In other words, it is added to vmlist before it is\nfully initialized.  At the same time, when the /proc/vmallocinfo is read,\nit accesses the pages field of vm_struct according to the nr_pages field\nat show_numa_info().  Thus, a null pointer access happens.\n\nThe patch adds the newly allocated vm_struct to the vmlist *after* it is\nfully initialized.  So, it can avoid accessing the pages field with\nunallocated page when show_numa_info() is called.\n\nSigned-off-by: Mitsuo Hayasaka \u003cmitsuo.hayasaka.hu@hitachi.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy.fitzhardinge@citrix.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "0ce69296517f3410a174ced44b39eea746a94c55",
      "tree": "3032eb3abbcd8c1e9e3cc4adb3a55b9beb84f6b1",
      "parents": [
        "ea1c8d08bc9e71723869f7e754aa1d57c56f55ce"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jul 28 10:57:00 2011 +0200"
      },
      "committer": {
        "name": "Olav Haugan",
        "email": "ohaugan@codeaurora.org",
        "time": "Mon Nov 07 15:46:06 2011 -0800"
      },
      "message": "memblock: Make memblock functions handle overflowing range @size\n\nAllow memblock users to specify range where @base + @size overflows\nand automatically cap it at maximum.  This makes the interface more\nrobust and specifying till-the-end-of-memory easier.\n\nChange-Id: Iad3e1ce69a11ac7d3e5490eec56baf8468bd134a\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Yinghai Lu \u003cyinghai@kernel.org\u003e\n[ohaugan@codeaurora.org: Fix merge conflict in memblock_add_region]\nSigned-off-by: Olav Haugan \u003cohaugan@codeaurora.org\u003e\n"
    },
    {
      "commit": "3c0e977e524ba9071755707f168da8e4dc692606",
      "tree": "30254e9328420863e44beb91807232720fc3c9b6",
      "parents": [
        "0f8be3a00c5d1ac628076866d9eefdbadb23a4f2",
        "e6436864f939e77226c8e971610539649ed5f869"
      ],
      "author": {
        "name": "Linux Build Service Account",
        "email": "lnxbuild@localhost",
        "time": "Wed Nov 02 13:44:29 2011 -0700"
      },
      "committer": {
        "name": "QuIC Gerrit Code Review",
        "email": "code-review@localhost",
        "time": "Wed Nov 02 13:44:29 2011 -0700"
      },
      "message": "Merge changes I0b858c73,I285c6ad2,Ibecda03c into msm-3.0\n\n* changes:\n  mm: use required fixed size of movable zone if FIX_MOVABLE_ZONE\n  arm: ensure enough memory is available for movable zone\n  arm: add CONFIG_FIX_MOVABLE_ZONE\n"
    },
    {
      "commit": "481d4d2f29e7392146f4035fe50294bb87fad986",
      "tree": "e04a1287310f8a9d7b96c100388868ca0d564868",
      "parents": [
        "eae0020fdc1595d6bef53454b9cdedf3ed6ee924",
        "31c1431883a33122418f6133ae6aab8f25153922"
      ],
      "author": {
        "name": "Linux Build Service Account",
        "email": "lnxbuild@localhost",
        "time": "Tue Nov 01 21:30:48 2011 -0700"
      },
      "committer": {
        "name": "QuIC Gerrit Code Review",
        "email": "code-review@localhost",
        "time": "Tue Nov 01 21:30:48 2011 -0700"
      },
      "message": "Merge changes I99787ed3,I2ae66a56 into msm-3.0\n\n* changes:\n  slub: fix check_bytes() for slub debugging\n  slub: reduce overhead of slub_debug\n"
    },
    {
      "commit": "e6436864f939e77226c8e971610539649ed5f869",
      "tree": "328e285f17460eb3287730e520648c624c7ca717",
      "parents": [
        "f973fab692184e457095957336468146439f0a6e"
      ],
      "author": {
        "name": "Larry Bassel",
        "email": "lbassel@codeaurora.org",
        "time": "Fri Oct 14 10:59:07 2011 -0700"
      },
      "committer": {
        "name": "Larry Bassel",
        "email": "lbassel@codeaurora.org",
        "time": "Sun Oct 30 09:14:51 2011 -0700"
      },
      "message": "mm: use required fixed size of movable zone if FIX_MOVABLE_ZONE\n\nIf FIX_MOVABLE_ZONE is enabled, we want a specific size and\nlocation of ZONE_MOVABLE.\n\nChange-Id: I0b858c7310cd328e1118abc9d5fe6f364bb4ffad\nSigned-off-by: Larry Bassel \u003clbassel@codeaurora.org\u003e\n"
    },
    {
      "commit": "31c1431883a33122418f6133ae6aab8f25153922",
      "tree": "6deb94fff053440bb09704b83beacb0adfd632c6",
      "parents": [
        "ef28462edecef3107caca1a9d74dc31a13afc43e"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Sun Aug 07 18:30:38 2011 +0900"
      },
      "committer": {
        "name": "Stephen Boyd",
        "email": "sboyd@codeaurora.org",
        "time": "Fri Oct 28 15:42:42 2011 -0700"
      },
      "message": "slub: fix check_bytes() for slub debugging\n\nThe check_bytes() function is used by slub debugging.  It returns a pointer\nto the first unmatching byte for a character in the given memory area.\n\nIf the character for matching byte is greater than 0x80, check_bytes()\ndoesn\u0027t work.  Becuase 64-bit pattern is generated as below.\n\n\tvalue64 \u003d value | value \u003c\u003c 8 | value \u003c\u003c 16 | value \u003c\u003c 24;\n\tvalue64 \u003d value64 | value64 \u003c\u003c 32;\n\nThe integer promotions are performed and sign-extended as the type of value\nis u8.  The upper 32 bits of value64 is 0xffffffff in the first line, and\nthe second line has no effect.\n\nThis fixes the 64-bit pattern generation.\n\nChange-Id: I99787ed3da5ba0a112cb0d307d428adf032bb950\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nReviewed-by: Marcin Slusarz \u003cmarcin.slusarz@gmail.com\u003e\nAcked-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nSigned-off-by: Stephen Boyd \u003csboyd@codeaurora.org\u003e\n"
    },
    {
      "commit": "ef28462edecef3107caca1a9d74dc31a13afc43e",
      "tree": "ad4a535352d1767030b0048c8c9871e0240486a8",
      "parents": [
        "804c6b5a2672e2603d90ec6e1861a615b8ab0157"
      ],
      "author": {
        "name": "Marcin Slusarz",
        "email": "marcin.slusarz@gmail.com",
        "time": "Sun Jun 26 21:39:18 2011 +0200"
      },
      "committer": {
        "name": "Stephen Boyd",
        "email": "sboyd@codeaurora.org",
        "time": "Fri Oct 28 15:42:41 2011 -0700"
      },
      "message": "slub: reduce overhead of slub_debug\n\nslub checks for poison one byte by one, which is highly inefficient\nand shows up frequently as a highest cpu-eater in perf top.\n\nJoining reads gives nice speedup:\n\n(Compiling some project with different options)\n                                 make -j12    make clean\nslub_debug disabled:             1m 27s       1.2 s\nslub_debug enabled:              1m 46s       7.6 s\nslub_debug enabled + this patch: 1m 33s       3.2 s\n\ncheck_bytes still shows up high, but not always at the top.\n\nChange-Id: I2ae66a5617d6f240d082da9419de8604b8ebe5bb\nSigned-off-by: Marcin Slusarz \u003cmarcin.slusarz@gmail.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: linux-mm@kvack.org\nSigned-off-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nSigned-off-by: Stephen Boyd \u003csboyd@codeaurora.org\u003e\n"
    },
    {
      "commit": "2bb3e310159b65c88caf0c67a20ed257568be267",
      "tree": "e4ad01c06a9e27939781c5dd9d0cb92e6fcd54d5",
      "parents": [
        "2f53cb72c1574d3880d9e88e254b756565fe2f6d",
        "97596c34030ed28657ccafddb67e17a03890b90a"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Oct 27 15:01:19 2011 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Oct 27 15:01:19 2011 -0700"
      },
      "message": "Merge commit \u0027v3.0.8\u0027 into android-3.0\n"
    },
    {
      "commit": "2f53cb72c1574d3880d9e88e254b756565fe2f6d",
      "tree": "1defa097001d4eab5cd7cefe4e9e62c7b14c52ca",
      "parents": [
        "f41047365480510bfb12260d9f4fc7a8b95a734e"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Mon Oct 24 16:33:42 2011 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Oct 26 21:49:46 2011 -0700"
      },
      "message": "mm: avoid livelock on !__GFP_FS allocations\n\nUnder the following conditions, __alloc_pages_slowpath can loop\nforever:\ngfp_mask \u0026 __GFP_WAIT is true\ngfp_mask \u0026 __GFP_FS is false\nreclaim and compaction make no progress\norder \u003c\u003d PAGE_ALLOC_COSTLY_ORDER\n\nThe gfp conditions are normally invalid, because !__GFP_FS\ndisables most of the reclaim methods that __GFP_WAIT would\nwait for.  However, these conditions happen very often during\nsuspend and resume, when pm_restrict_gfp_mask() effectively\nconverts all GFP_KERNEL allocations into __GFP_WAIT.\n\nThe oom killer is not run because gfp_mask \u0026 __GFP_FS is false,\nbut should_alloc_retry will always return true when order is less\nthan PAGE_ALLOC_COSTLY_ORDER.  __alloc_pages_slowpath will\nloop forever between the rebalance label and should_alloc_retry,\nunless another thread happens to release enough pages to satisfy\nthe allocation.\n\nAdd a check to detect when PM has disabled __GFP_FS, and do not\nretry if reclaim is not making any progress.\n\n[taken from patch on lkml by Mel Gorman, commit message by ccross]\nChange-Id: I864a24e9d9fd98bd0e3d6e9c1e85b6c1b766850e\nSigned-off-by: Colin Cross \u003cccross@android.com\u003e\n"
    },
    {
      "commit": "2421717cb10a06814d7bdb431485aa3a5e364f36",
      "tree": "3c68d4b1a5c5e6ac951bd95908f7bf156a963b9f",
      "parents": [
        "bedd1c6828e5e97ebfdd74fbdee404252cb9b8f2"
      ],
      "author": {
        "name": "Larry Bassel",
        "email": "lbassel@codeaurora.org",
        "time": "Fri Oct 14 10:36:45 2011 -0700"
      },
      "committer": {
        "name": "Larry Bassel",
        "email": "lbassel@codeaurora.org",
        "time": "Tue Oct 25 14:33:46 2011 -0700"
      },
      "message": "mm: make physical memory offline work\n\nIn recent versions, the platform specific physical\noffline returns the number of bytes offlined, so\na value of 0 indicates an error, not success as in\nolder versions. Make sure that the memory\nfor the original memory resource nodes is not\nfreed via kfree, as this memory was obtained\nfrom alloc_bootmem very early in the system\u0027s life.\n\nChange-Id: Iffcdd8be4483e043d7605fce596ed438b15f3e02\nSigned-off-by: Larry Bassel \u003clbassel@codeaurora.org\u003e\n"
    },
    {
      "commit": "6b2f66dc9cabb7eb348587fdac6b3a64545e2d5f",
      "tree": "4800442831a0c82882c893f2516e999772c723ed",
      "parents": [
        "63e010153fc0f683bb1170917874824a1927ef69"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Oct 19 12:50:35 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Tue Oct 25 07:10:17 2011 +0200"
      },
      "message": "mm: fix race between mremap and removing migration entry\n\ncommit 486cf46f3f9be5f2a966016c1a8fe01e32cde09e upstream.\n\nI don\u0027t usually pay much attention to the stale \"? \" addresses in\nstack backtraces, but this lucky report from Pawel Sikora hints that\nmremap\u0027s move_ptes() has inadequate locking against page migration.\n\n 3.0 BUG_ON(!PageLocked(p)) in migration_entry_to_page():\n kernel BUG at include/linux/swapops.h:105!\n RIP: 0010:[\u003cffffffff81127b76\u003e]  [\u003cffffffff81127b76\u003e]\n                       migration_entry_wait+0x156/0x160\n  [\u003cffffffff811016a1\u003e] handle_pte_fault+0xae1/0xaf0\n  [\u003cffffffff810feee2\u003e] ? __pte_alloc+0x42/0x120\n  [\u003cffffffff8112c26b\u003e] ? do_huge_pmd_anonymous_page+0xab/0x310\n  [\u003cffffffff81102a31\u003e] handle_mm_fault+0x181/0x310\n  [\u003cffffffff81106097\u003e] ? vma_adjust+0x537/0x570\n  [\u003cffffffff81424bed\u003e] do_page_fault+0x11d/0x4e0\n  [\u003cffffffff81109a05\u003e] ? do_mremap+0x2d5/0x570\n  [\u003cffffffff81421d5f\u003e] page_fault+0x1f/0x30\n\nmremap\u0027s down_write of mmap_sem, together with i_mmap_mutex or lock,\nand pagetable locks, were good enough before page migration (with its\nrequirement that every migration entry be found) came in, and enough\nwhile migration always held mmap_sem; but not enough nowadays, when\nthere\u0027s memory hotremove and compaction.\n\nThe danger is that move_ptes() lets a migration entry dodge around\nbehind remove_migration_pte()\u0027s back, so it\u0027s in the old location when\nlooking at the new, then in the new location when looking at the old.\n\nEither mremap\u0027s move_ptes() must additionally take anon_vma lock(), or\nmigration\u0027s remove_migration_pte() must stop peeking for is_swap_entry()\nbefore it takes pagetable lock.\n\nConsensus chooses the latter: we prefer to add overhead to migration\nthan to mremapping, which gets used by JVMs and by exec stack setup.\n\nReported-and-tested-by: Paweł Sikora \u003cpluto@agmk.net\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "94f202a4c2fdf9d1dbd153d2906952764e83e652",
      "tree": "3487a0856c4d35f7d04c0de1a360cf29a601ba6e",
      "parents": [
        "3ce4a81bc3dd15cbb371246ad0daa909346ff0bd"
      ],
      "author": {
        "name": "Laura Abbott",
        "email": "lauraa@codeaurora.org",
        "time": "Fri Oct 07 13:51:58 2011 -0700"
      },
      "committer": {
        "name": "Laura Abbott",
        "email": "lauraa@codeaurora.org",
        "time": "Sat Oct 15 11:55:03 2011 -0700"
      },
      "message": "kmemleak: Add support for memory hotplug\n\nEnsure that memory hotplug can co-exist with kmemleak\nby taking the hotplug lock before scanning the memory\nbanks.\n\nChange-Id: Ice6e5eaac45b4d71848ff1d3f30d468c1f088232\nSigned-off-by: Laura Abbott \u003clauraa@codeaurora.org\u003e\n"
    },
    {
      "commit": "e19fe0341717e9f9a9d04dbc6e3365886e95b577",
      "tree": "5571141cf7abbf6e1d848f45b1c2535f63bb693f",
      "parents": [
        "81aac2ec5c236e54389d8940da0d318dd23e06ee"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Jul 26 16:08:24 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Oct 03 11:41:08 2011 -0700"
      },
      "message": "memcg: fix vmscan count in small memcgs\n\ncommit 4508378b9523e22a2a0175d8bf64d932fb10a67d upstream.\n\nCommit 246e87a93934 (\"memcg: fix get_scan_count() for small targets\")\nfixes the memcg/kswapd behavior against small targets and prevent vmscan\npriority too high.\n\nBut the implementation is too naive and adds another problem to small\nmemcg.  It always force scan to 32 pages of file/anon and doesn\u0027t handle\nswappiness and other rotate_info.  It makes vmscan to scan anon LRU\nregardless of swappiness and make reclaim bad.  This patch fixes it by\nadjusting scanning count with regard to swappiness at el.\n\nAt a test \"cat 1G file under 300M limit.\" (swappiness\u003d20)\n before patch\n        scanned_pages_by_limit 360919\n        scanned_anon_pages_by_limit 180469\n        scanned_file_pages_by_limit 180450\n        rotated_pages_by_limit 31\n        rotated_anon_pages_by_limit 25\n        rotated_file_pages_by_limit 6\n        freed_pages_by_limit 180458\n        freed_anon_pages_by_limit 19\n        freed_file_pages_by_limit 180439\n        elapsed_ns_by_limit 429758872\n after patch\n        scanned_pages_by_limit 180674\n        scanned_anon_pages_by_limit 24\n        scanned_file_pages_by_limit 180650\n        rotated_pages_by_limit 35\n        rotated_anon_pages_by_limit 24\n        rotated_file_pages_by_limit 11\n        freed_pages_by_limit 180634\n        freed_anon_pages_by_limit 0\n        freed_file_pages_by_limit 180634\n        elapsed_ns_by_limit 367119089\n        scanned_pages_by_system 0\n\nthe numbers of scanning anon are decreased(as expected), and elapsed time\nreduced. By this patch, small memcgs will work better.\n(*) Because the amount of file-cache is much bigger than anon,\n    recalaim_stat\u0027s rotate-scan counter make scanning files more.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "ac693061b11c33d5a5c5ec1925de7abd3fcb0971",
      "tree": "968e4efb688a21caedd5a3e7baea3d6343abf4bd",
      "parents": [
        "0d39ea76fa3b9a97e9dc45282613bc239ffa8509"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Jun 06 10:38:15 2010 -0600"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Oct 03 11:40:43 2011 -0700"
      },
      "message": "writeback: introduce .tagged_writepages for the WB_SYNC_NONE sync stage\n\ncommit 6e6938b6d3130305a5960c86b1a9b21e58cf6144 upstream.\n\nsync(2) is performed in two stages: the WB_SYNC_NONE sync and the\nWB_SYNC_ALL sync. Identify the first stage with .tagged_writepages and\ndo livelock prevention for it, too.\n\nJan\u0027s commit f446daaea9 (\"mm: implement writeback livelock avoidance\nusing page tagging\") is a partial fix in that it only fixed the\nWB_SYNC_ALL phase livelock.\n\nAlthough ext4 is tested to no longer livelock with commit f446daaea9,\nit may due to some \"redirty_tail() after pages_skipped\" effect which\nis by no means a guarantee for _all_ the file systems.\n\nNote that writeback_inodes_sb() is called by not only sync(), they are\ntreated the same because the other callers also need livelock prevention.\n\nImpact:  It changes the order in which pages/inodes are synced to disk.\nNow in the WB_SYNC_NONE stage, it won\u0027t proceed to write the next inode\nuntil finished with the current inode.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nCC: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "d63c8a029e509ad48ee9290874731789f9008537",
      "tree": "0a7c79f56bbc8a624d09486cdc88c5a7d1f872ae",
      "parents": [
        "97abc52eb26f2ae8d033100c4c024e6138bdfd60"
      ],
      "author": {
        "name": "David Vrabel",
        "email": "david.vrabel@citrix.com",
        "time": "Wed Sep 14 16:22:02 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Oct 03 11:40:30 2011 -0700"
      },
      "message": "mm: sync vmalloc address space page tables in alloc_vm_area()\n\ncommit 461ae488ecb125b140d7ea29ceeedbcce9327003 upstream.\n\nXen backend drivers (e.g., blkback and netback) would sometimes fail to\nmap grant pages into the vmalloc address space allocated with\nalloc_vm_area().  The GNTTABOP_map_grant_ref would fail because Xen could\nnot find the page (in the L2 table) containing the PTEs it needed to\nupdate.\n\n(XEN) mm.c:3846:d0 Could not find L1 PTE for address fbb42000\n\nnetback and blkback were making the hypercall from a kernel thread where\ntask-\u003eactive_mm !\u003d \u0026init_mm and alloc_vm_area() was only updating the page\ntables for init_mm.  The usual method of deferring the update to the page\ntables of other processes (i.e., after taking a fault) doesn\u0027t work as a\nfault cannot occur during the hypercall.\n\nThis would work on some systems depending on what else was using vmalloc.\n\nFix this by reverting ef691947d8a3 (\"vmalloc: remove vmalloc_sync_all()\nfrom alloc_vm_area()\") and add a comment to explain why it\u0027s needed.\n\nSigned-off-by: David Vrabel \u003cdavid.vrabel@citrix.com\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy.fitzhardinge@citrix.com\u003e\nCc: Konrad Rzeszutek Wilk \u003ckonrad.wilk@oracle.com\u003e\nCc: Ian Campbell \u003cIan.Campbell@citrix.com\u003e\nCc: Keir Fraser \u003ckeir.xen@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "66d52cb7c42a5df2a6aded5f29dba98ac2882064",
      "tree": "6d154119840cec22ecaeda4cc76a5d9d412d5e09",
      "parents": [
        "42274b5f8129467095e8b907b5bc9536caf30fa8"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Mon Jul 25 17:12:30 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Oct 03 11:40:04 2011 -0700"
      },
      "message": "mm: page allocator: reconsider zones for allocation after direct reclaim\n\ncommit 76d3fbf8fbf6cc78ceb63549e0e0c5bc8a88f838 upstream.\n\nWith zone_reclaim_mode enabled, it\u0027s possible for zones to be considered\nfull in the zonelist_cache so they are skipped in the future.  If the\nprocess enters direct reclaim, the ZLC may still consider zones to be full\neven after reclaiming pages.  Reconsider all zones for allocation if\ndirect reclaim returns successfully.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Stefan Priebe \u003cs.priebe@profihost.ag\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "42274b5f8129467095e8b907b5bc9536caf30fa8",
      "tree": "9f4d0a531adab1763b673a081e49704c481f1d09",
      "parents": [
        "10927d967aa3e7031b0a573be8f002af607e6227"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Mon Jul 25 17:12:29 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Oct 03 11:40:04 2011 -0700"
      },
      "message": "mm: page allocator: initialise ZLC for first zone eligible for zone_reclaim\n\ncommit cd38b115d5ad79b0100ac6daa103c4fe2c50a913 upstream.\n\nThere have been a small number of complaints about significant stalls\nwhile copying large amounts of data on NUMA machines reported on a\ndistribution bugzilla.  In these cases, zone_reclaim was enabled by\ndefault due to large NUMA distances.  In general, the complaints have not\nbeen about the workload itself unless it was a file server (in which case\nthe recommendation was disable zone_reclaim).\n\nThe stalls are mostly due to significant amounts of time spent scanning\nthe preferred zone for pages to free.  After a failure, it might fallback\nto another node (as zonelists are often node-ordered rather than\nzone-ordered) but stall quickly again when the next allocation attempt\noccurs.  In bad cases, each page allocated results in a full scan of the\npreferred zone.\n\nPatch 1 checks the preferred zone for recent allocation failure\n        which is particularly important if zone_reclaim has failed\n        recently.  This avoids rescanning the zone in the near future and\n        instead falling back to another node.  This may hurt node locality\n        in some cases but a failure to zone_reclaim is more expensive than\n        a remote access.\n\nPatch 2 clears the zlc information after direct reclaim.\n        Otherwise, zone_reclaim can mark zones full, direct reclaim can\n        reclaim enough pages but the zone is still not considered for\n        allocation.\n\nThis was tested on a 24-thread 2-node x86_64 machine.  The tests were\nfocused on large amounts of IO.  All tests were bound to the CPUs on\nnode-0 to avoid disturbances due to processes being scheduled on different\nnodes.  The kernels tested are\n\n3.0-rc6-vanilla\t\tVanilla 3.0-rc6\nzlcfirst\t\tPatch 1 applied\nzlcreconsider\t\tPatches 1+2 applied\n\nFS-Mark\n./fs_mark  -d  /tmp/fsmark-10813  -D  100  -N  5000  -n  208  -L  35  -t  24  -S0  -s  524288\n                fsmark-3.0-rc6       3.0-rc6       \t\t3.0-rc6\n                   vanilla\t\t\t zlcfirs \tzlcreconsider\nFiles/s  min          54.90 ( 0.00%)       49.80 (-10.24%)       49.10 (-11.81%)\nFiles/s  mean        100.11 ( 0.00%)      135.17 (25.94%)      146.93 (31.87%)\nFiles/s  stddev       57.51 ( 0.00%)      138.97 (58.62%)      158.69 (63.76%)\nFiles/s  max         361.10 ( 0.00%)      834.40 (56.72%)      802.40 (55.00%)\nOverhead min       76704.00 ( 0.00%)    76501.00 ( 0.27%)    77784.00 (-1.39%)\nOverhead mean    1485356.51 ( 0.00%)  1035797.83 (43.40%)  1594680.26 (-6.86%)\nOverhead stddev  1848122.53 ( 0.00%)   881489.88 (109.66%)  1772354.90 ( 4.27%)\nOverhead max     7989060.00 ( 0.00%)  3369118.00 (137.13%) 10135324.00 (-21.18%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)        501.49    493.91    499.93\nTotal Elapsed Time (seconds)               2451.57   2257.48   2215.92\n\nMMTests Statistics: vmstat\nPage Ins                                       46268       63840       66008\nPage Outs                                   90821596    90671128    88043732\nSwap Ins                                           0           0           0\nSwap Outs                                          0           0           0\nDirect pages scanned                        13091697     8966863     8971790\nKswapd pages scanned                               0     1830011     1831116\nKswapd pages reclaimed                             0     1829068     1829930\nDirect pages reclaimed                      13037777     8956828     8648314\nKswapd efficiency                               100%         99%         99%\nKswapd velocity                                0.000     810.643     826.346\nDirect efficiency                                99%         99%         96%\nDirect velocity                             5340.128    3972.068    4048.788\nPercentage direct scans                         100%         83%         83%\nPage writes by reclaim                             0           3           0\nSlabs scanned                                 796672      720640      720256\nDirect inode steals                          7422667     7160012     7088638\nKswapd inode steals                                0     1736840     2021238\n\nTest completes far faster with a large increase in the number of files\ncreated per second.  Standard deviation is high as a small number of\niterations were much higher than the mean.  The number of pages scanned by\nzone_reclaim is reduced and kswapd is used for more work.\n\nLARGE DD\n               \t\t3.0-rc6       3.0-rc6       3.0-rc6\n                   \tvanilla     zlcfirst     zlcreconsider\ndownload tar           59 ( 0.00%)   59 ( 0.00%)   55 ( 7.27%)\ndd source files       527 ( 0.00%)  296 (78.04%)  320 (64.69%)\ndelete source          36 ( 0.00%)   19 (89.47%)   20 (80.00%)\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)        125.03    118.98    122.01\nTotal Elapsed Time (seconds)                624.56    375.02    398.06\n\nMMTests Statistics: vmstat\nPage Ins                                     3594216      439368      407032\nPage Outs                                   23380832    23380488    23377444\nSwap Ins                                           0           0           0\nSwap Outs                                          0         436         287\nDirect pages scanned                        17482342    69315973    82864918\nKswapd pages scanned                               0      519123      575425\nKswapd pages reclaimed                             0      466501      522487\nDirect pages reclaimed                       5858054     2732949     2712547\nKswapd efficiency                               100%         89%         90%\nKswapd velocity                                0.000    1384.254    1445.574\nDirect efficiency                                33%          3%          3%\nDirect velocity                            27991.453  184832.737  208171.929\nPercentage direct scans                         100%         99%         99%\nPage writes by reclaim                             0        5082       13917\nSlabs scanned                                  17280       29952       35328\nDirect inode steals                           115257     1431122      332201\nKswapd inode steals                                0           0      979532\n\nThis test downloads a large tarfile and copies it with dd a number of\ntimes - similar to the most recent bug report I\u0027ve dealt with.  Time to\ncompletion is reduced.  The number of pages scanned directly is still\ndisturbingly high with a low efficiency but this is likely due to the\nnumber of dirty pages encountered.  The figures could probably be improved\nwith more work around how kswapd is used and how dirty pages are handled\nbut that is separate work and this result is significant on its own.\n\nStreaming Mapped Writer\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)        124.47    111.67    112.64\nTotal Elapsed Time (seconds)               2138.14   1816.30   1867.56\n\nMMTests Statistics: vmstat\nPage Ins                                       90760       89124       89516\nPage Outs                                  121028340   120199524   120736696\nSwap Ins                                           0          86          55\nSwap Outs                                          0           0           0\nDirect pages scanned                       114989363    96461439    96330619\nKswapd pages scanned                        56430948    56965763    57075875\nKswapd pages reclaimed                      27743219    27752044    27766606\nDirect pages reclaimed                         49777       46884       36655\nKswapd efficiency                                49%         48%         48%\nKswapd velocity                            26392.541   31363.631   30561.736\nDirect efficiency                                 0%          0%          0%\nDirect velocity                            53780.091   53108.759   51581.004\nPercentage direct scans                          67%         62%         62%\nPage writes by reclaim                           385         122        1513\nSlabs scanned                                  43008       39040       42112\nDirect inode steals                                0          10           8\nKswapd inode steals                              733         534         477\n\nThis test just creates a large file mapping and writes to it linearly.\nTime to completion is again reduced.\n\nThe gains are mostly down to two things.  In many cases, there is less\nscanning as zone_reclaim simply gives up faster due to recent failures.\nThe second reason is that memory is used more efficiently.  Instead of\nscanning the preferred zone every time, the allocator falls back to\nanother zone and uses it instead improving overall memory utilisation.\n\nThis patch: initialise ZLC for first zone eligible for zone_reclaim.\n\nThe zonelist cache (ZLC) is used among other things to record if\nzone_reclaim() failed for a particular zone recently.  The intention is to\navoid a high cost scanning extremely long zonelists or scanning within the\nzone uselessly.\n\nCurrently the zonelist cache is setup only after the first zone has been\nconsidered and zone_reclaim() has been called.  The objective was to avoid\na costly setup but zone_reclaim is itself quite expensive.  If it is\nfailing regularly such as the first eligible zone having mostly mapped\npages, the cost in scanning and allocation stalls is far higher than the\nZLC initialisation step.\n\nThis patch initialises ZLC before the first eligible zone calls\nzone_reclaim().  Once initialised, it is checked whether the zone failed\nzone_reclaim recently.  If it has, the zone is skipped.  As the first zone\nis now being checked, additional care has to be taken about zones marked\nfull.  A zone can be marked \"full\" because it should not have enough\nunmapped pages for zone_reclaim but this is excessive as direct reclaim or\nkswapd may succeed where zone_reclaim fails.  Only mark zones \"full\" after\nzone_reclaim fails if it failed to reclaim enough pages after scanning.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Stefan Priebe \u003cs.priebe@profihost.ag\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "5cd33b37653f4c32b9d8e992bab5938c37eae130",
      "tree": "1576740c74ae4192ace8f8131ab9e6b504d3fd67",
      "parents": [
        "a5ee43644bcdcae9146349ba5163d991cfca1324"
      ],
      "author": {
        "name": "Shubhraprakash Das",
        "email": "sadas@codeaurora.org",
        "time": "Mon Jul 18 18:07:10 2011 -0600"
      },
      "committer": {
        "name": "Bryan Huntsman",
        "email": "bryanh@codeaurora.org",
        "time": "Mon Oct 03 10:25:50 2011 -0700"
      },
      "message": "mm: ashmem: Add cache clean and invalidate ioctls for ashmem\n\nCRs-fixed: 291124\nSigned-off-by: Shubhraprakash Das \u003csadas@codeaurora.org\u003e\n"
    },
    {
      "commit": "7429cea50e3a0020a1bf0a6e9d596ebe2d3aba40",
      "tree": "ff1d279b5ffdf7bc0ce8c76260e9e779adce2252",
      "parents": [
        "15187778e4af8e8f675639dbc8c942aab3658f20"
      ],
      "author": {
        "name": "Larry Bassel",
        "email": "lbassel@codeaurora.org",
        "time": "Fri Jul 08 15:08:58 2011 -0700"
      },
      "committer": {
        "name": "Bryan Huntsman",
        "email": "bryanh@codeaurora.org",
        "time": "Mon Oct 03 09:58:55 2011 -0700"
      },
      "message": "pmem: remove support for unstable PMEM devices\n\nThis functionality has never been used, is ugly and\ncomplicates the DMM design.\n\nSigned-off-by: Larry Bassel \u003clbassel@codeaurora.org\u003e\n"
    },
    {
      "commit": "3f2bc4d6eb5a4fada842462ba22bb6bbb41d00c7",
      "tree": "088e0646c8abcbde263d13ee865ba69032ac86dd",
      "parents": [
        "f06154cc47399dfdb3950d3e6b71d67ee186f69d"
      ],
      "author": {
        "name": "Bryan Huntsman",
        "email": "bryanh@codeaurora.org",
        "time": "Tue Aug 16 17:27:22 2011 -0700"
      },
      "committer": {
        "name": "Bryan Huntsman",
        "email": "bryanh@codeaurora.org",
        "time": "Mon Oct 03 09:57:10 2011 -0700"
      },
      "message": "Initial Contribution\n\nmsm-2.6.38: tag AU_LINUX_ANDROID_GINGERBREAD.02.03.04.00.142\n\nSigned-off-by: Bryan Huntsman \u003cbryanh@codeaurora.org\u003e\n"
    },
    {
      "commit": "2366d7cc46e70064f33be79dc415b069d3122772",
      "tree": "a6d2655cd014bb268cdcba7bf6032df8f2970d52",
      "parents": [
        "a4e0b4cc115c938f75ca7cf24b0a739da846a6c7"
      ],
      "author": {
        "name": "Clemens Ladisch",
        "email": "clemens@ladisch.de",
        "time": "Tue Jun 21 22:09:50 2011 +0200"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Wed Aug 17 10:55:53 2011 -0700"
      },
      "message": "mm: fix wrong vmap address calculations with odd NR_CPUS values\n\ncommit f982f91516fa4cfd9d20518833cd04ad714585be upstream.\n\nCommit db64fe02258f (\"mm: rewrite vmap layer\") introduced code that does\naddress calculations under the assumption that VMAP_BLOCK_SIZE is a\npower of two.  However, this might not be true if CONFIG_NR_CPUS is not\nset to a power of two.\n\nWrong vmap_block index/offset values could lead to memory corruption.\nHowever, this has never been observed in practice (or never been\ndiagnosed correctly); what caught this was the BUG_ON in vb_alloc() that\nchecks for inconsistent vmap_block indices.\n\nTo fix this, ensure that VMAP_BLOCK_SIZE always is a power of two.\n\nBugLink: https://bugzilla.kernel.org/show_bug.cgi?id\u003d31572\nReported-by: Pavel Kysilka \u003cgoldenfish@linuxsoft.cz\u003e\nReported-by: Matias A. Fonzo \u003cselk@dragora.org\u003e\nSigned-off-by: Clemens Ladisch \u003cclemens@ladisch.de\u003e\nSigned-off-by: Stefan Richter \u003cstefanr@s5r6.in-berlin.de\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@goop.org\u003e\nCc: Krzysztof Helt \u003ckrzysztof.h1@poczta.fm\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "9abd59b0df155835a970c2b9c8f93367eb793797",
      "tree": "bcf0868f831d204e2b582113c53b8de3ff015eca",
      "parents": [
        "4e111751cfcb75f26d2725eab934b6eb91a3d115",
        "94ed5b4788a7cdbe68bc7cb8516972cbebdc8274"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Aug 10 18:07:59 2011 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Aug 10 18:07:59 2011 -0700"
      },
      "message": "Merge commit \u0027v3.0.1\u0027 into android-3.0\n"
    },
    {
      "commit": "4e111751cfcb75f26d2725eab934b6eb91a3d115",
      "tree": "b3d63b5b44bd2036db6e0f0b2e81769c84cc5ca3",
      "parents": [
        "ca64b0cd3a12d7704f4e98f4f5d51f41eb5047a2",
        "02f8c6aee8df3cdc935e9bdd4f2d020306035dbe"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Aug 10 18:04:30 2011 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Aug 10 18:04:30 2011 -0700"
      },
      "message": "Merge commit \u0027v3.0\u0027 into android-3.0\n"
    },
    {
      "commit": "84416db67616ae44e7111c1c904a53cc79b95b6a",
      "tree": "4a87402339a3488109972558c78a8b9c6840d30e",
      "parents": [
        "06b943855b6dbcc8cb3cdca954c19711ce7b76b6"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jul 30 16:35:02 2011 +0200"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu Aug 04 21:58:42 2011 -0700"
      },
      "message": "oom: task-\u003emm \u003d\u003d NULL doesn\u0027t mean the memory was freed\n\ncommit c027a474a68065391c8773f6e83ed5412657e369 upstream.\n\nexit_mm() sets -\u003emm \u003d\u003d NULL then it does mmput()-\u003eexit_mmap() which\nfrees the memory.\n\nHowever select_bad_process() checks -\u003emm !\u003d NULL before TIF_MEMDIE,\nso it continues to kill other tasks even if we have the oom-killed\ntask freeing its memory.\n\nChange select_bad_process() to check -\u003emm after TIF_MEMDIE, but skip\nthe tasks which have already passed exit_notify() to ensure a zombie\nwith TIF_MEMDIE set can\u0027t block oom-killer. Alternatively we could\nprobably clear TIF_MEMDIE after exit_mmap().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "a6f0411fbde8a3677fc3e0843db68ca031fa727c",
      "tree": "09988678715828e045c0b3dfac6f33ee52698d38",
      "parents": [
        "ea530dbfb61aef022d468b597ce13c32da2fb944"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Tue Jul 26 16:08:25 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu Aug 04 21:58:41 2011 -0700"
      },
      "message": "memcg: fix behavior of mem_cgroup_resize_limit()\n\ncommit 108b6a78463bb8c7163e4f9779f36ad8bbade334 upstream.\n\nCommit 22a668d7c3ef (\"memcg: fix behavior under memory.limit equals to\nmemsw.limit\") introduced \"memsw_is_minimum\" flag, which becomes true\nwhen mem_limit \u003d\u003d memsw_limit.  The flag is checked at the beginning of\nreclaim, and \"noswap\" is set if the flag is true, because using swap is\nmeaningless in this case.\n\nThis works well in most cases, but when we try to shrink mem_limit,\nwhich is the same as memsw_limit now, we might fail to shrink mem_limit\nbecause swap doesn\u0027t used.\n\nThis patch fixes this behavior by:\n - check MEM_CGROUP_RECLAIM_SHRINK at the begining of reclaim\n - If it is set, don\u0027t set \"noswap\" flag even if memsw_is_minimum is true.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\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\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "650957da7699e730e78e82735b8c2595fcf7794a",
      "tree": "1f44a3a822a79e5f89eb6c71427d2576a087e7d5",
      "parents": [
        "b045b9a265fb46d8197b7d78aff1a8f6ab8e23df"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "peterz@infradead.org",
        "time": "Mon Jul 25 17:11:57 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu Aug 04 21:58:39 2011 -0700"
      },
      "message": "mm/backing-dev.c: reset bdi min_ratio in bdi_unregister()\n\ncommit ccb6108f5b0b541d3eb332c3a73e645c0f84278e upstream.\n\nVito said:\n\n: The system has many usb disks coming and going day to day, with their\n: respective bdi\u0027s having min_ratio set to 1 when inserted.  It works for\n: some time until eventually min_ratio can no longer be set, even when the\n: active set of bdi\u0027s seen in /sys/class/bdi/*/min_ratio doesn\u0027t add up to\n: anywhere near 100.\n:\n: This then leads to an unrelated starvation problem caused by write-heavy\n: fuse mounts being used atop the usb disks, a problem the min_ratio setting\n: at the underlying devices bdi effectively prevents.\n\nFix this leakage by resetting the bdi min_ratio when unregistering the\nBDI.\n\nSigned-off-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nReported-by: Vito Caputo \u003clkml@pengaru.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "b045b9a265fb46d8197b7d78aff1a8f6ab8e23df",
      "tree": "650daaba84981a7ac749611f2ccee133380940c5",
      "parents": [
        "cb83d9f7840657a0f0cc29ba5c01ce7320e28e9a"
      ],
      "author": {
        "name": "Benjamin Herrenschmidt",
        "email": "benh@kernel.crashing.org",
        "time": "Mon Jul 25 17:12:32 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu Aug 04 21:58:38 2011 -0700"
      },
      "message": "mm/futex: fix futex writes on archs with SW tracking of dirty \u0026 young\n\ncommit 2efaca927f5cd7ecd0f1554b8f9b6a9a2c329c03 upstream.\n\nI haven\u0027t reproduced it myself but the fail scenario is that on such\nmachines (notably ARM and some embedded powerpc), if you manage to hit\nthat futex path on a writable page whose dirty bit has gone from the PTE,\nyou\u0027ll livelock inside the kernel from what I can tell.\n\nIt will go in a loop of trying the atomic access, failing, trying gup to\n\"fix it up\", getting succcess from gup, go back to the atomic access,\nfailing again because dirty wasn\u0027t fixed etc...\n\nSo I think you essentially hang in the kernel.\n\nThe scenario is probably rare\u0027ish because affected architecture are\nembedded and tend to not swap much (if at all) so we probably rarely hit\nthe case where dirty is missing or young is missing, but I think Shan has\na piece of SW that can reliably reproduce it using a shared writable\nmapping \u0026 fork or something like that.\n\nOn archs who use SW tracking of dirty \u0026 young, a page without dirty is\neffectively mapped read-only and a page without young unaccessible in the\nPTE.\n\nAdditionally, some architectures might lazily flush the TLB when relaxing\nwrite protection (by doing only a local flush), and expect a fault to\ninvalidate the stale entry if it\u0027s still present on another processor.\n\nThe futex code assumes that if the \"in_atomic()\" access -EFAULT\u0027s, it can\n\"fix it up\" by causing get_user_pages() which would then be equivalent to\ntaking the fault.\n\nHowever that isn\u0027t the case.  get_user_pages() will not call\nhandle_mm_fault() in the case where the PTE seems to have the right\npermissions, regardless of the dirty and young state.  It will eventually\nupdate those bits ...  in the struct page, but not in the PTE.\n\nAdditionally, it will not handle the lazy TLB flushing that can be\nrequired by some architectures in the fault case.\n\nBasically, gup is the wrong interface for the job.  The patch provides a\nmore appropriate one which boils down to just calling handle_mm_fault()\nsince what we are trying to do is simulate a real page fault.\n\nThe futex code currently attempts to write to user memory within a\npagefault disabled section, and if that fails, tries to fix it up using\nget_user_pages().\n\nThis doesn\u0027t work on archs where the dirty and young bits are maintained\nby software, since they will gate access permission in the TLB, and will\nnot be updated by gup().\n\nIn addition, there\u0027s an expectation on some archs that a spurious write\nfault triggers a local TLB flush, and that is missing from the picture as\nwell.\n\nI decided that adding those \"features\" to gup() would be too much for this\nalready too complex function, and instead added a new simpler\nfixup_user_fault() which is essentially a wrapper around handle_mm_fault()\nwhich the futex code can call.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[akpm@linux-foundation.org: fix some nits Darren saw, fiddle comment layout]\nSigned-off-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nReported-by: Shan Hai \u003chaishan.bai@gmail.com\u003e\nTested-by: Shan Hai \u003chaishan.bai@gmail.com\u003e\nCc: David Laight \u003cDavid.Laight@ACULAB.COM\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Darren Hart \u003cdarren.hart@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "4746efded84d7c5a9c8d64d4c6e814ff0cf9fb42",
      "tree": "174f400db27c1a1d9a66407931199aabfdce6bba",
      "parents": [
        "f7b88631a89757d70192044c9d9f2e8d2fc02f2c"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Jul 19 08:49:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 19 22:09:31 2011 -0700"
      },
      "message": "vmscan: fix a livelock in kswapd\n\nI\u0027m running a workload which triggers a lot of swap in a machine with 4\nnodes.  After I kill the workload, I found a kswapd livelock.  Sometimes\nkswapd3 or kswapd2 are keeping running and I can\u0027t access filesystem,\nbut most memory is free.\n\nThis looks like a regression since commit 08951e545918c159 (\"mm: vmscan:\ncorrect check for kswapd sleeping in sleeping_prematurely\").\n\nNode 2 and 3 have only ZONE_NORMAL, but balance_pgdat() will return 0\nfor classzone_idx.  The reason is end_zone in balance_pgdat() is 0 by\ndefault, if all zones have watermark ok, end_zone will keep 0.\n\nLater sleeping_prematurely() always returns true.  Because this is an\norder 3 wakeup, and if classzone_idx is 0, both balanced_pages and\npresent_pages in pgdat_balanced() are 0.  We add a special case here.\nIf a zone has no page, we think it\u0027s balanced.  This fixes the livelock.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "75c56a81116e51c5cf15c0641906d0745188cd16",
      "tree": "c1d8e7def5bbb099a39d5e9ccfb13508ea5ca46a",
      "parents": [
        "b4294d618e8a19bb47826e51ae52b9fb2fe05f80",
        "620917de59eeb934b9f8cf35cc2d95c1ac8ed0fc"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Jul 12 20:10:37 2011 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Jul 12 20:10:37 2011 -0700"
      },
      "message": "Merge commit \u0027v3.0-rc7\u0027 into android-3.0\n"
    },
    {
      "commit": "8f3b1327aa454bc8283e96bca7669c3c88b83f79",
      "tree": "c18f10d34bd41c9eeb74a64d5838ee8b6c0ce817",
      "parents": [
        "f607e7fc5fb94d92030c4527287e9c149ddf9e65"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Fri Jul 08 15:39:46 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 08 21:14:44 2011 -0700"
      },
      "message": "mm/nommu.c: fix remap_pfn_range()\n\nremap_pfn_range() means map physical address pfn\u003c\u003cPAGE_SHIFT to user addr.\n\nFor nommu arch it\u0027s implemented by vma-\u003evm_start \u003d pfn \u003c\u003c PAGE_SHIFT which\nis wrong acroding the original meaning of this function.  And some driver\ndeveloper using remap_pfn_range() with correct parameter will get\nunexpected result because vm_start is changed.  It should be implementd\nlike addr \u003d pfn \u003c\u003c PAGE_SHIFT but which is meanless on nommu arch, this\npatch just make it simply return.\n\nParameter name and setting of vma-\u003evm_flags also be fixed.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nCc: Geert Uytterhoeven \u003cgeert@linux-m68k.org\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Greg Ungerer \u003cgerg@uclinux.org\u003e\nCc: Mike Frysinger \u003cvapier@gentoo.org\u003e\nCc: Bob Liu \u003clliubbo@gmail.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "453a9bf347f1e22a5bb3605ced43b2366921221d",
      "tree": "dfe355892b8ace86f74f6b8a34ad86da159f697d",
      "parents": [
        "4d0c066d29f030d47d19678f8008933e67dd3b72"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Fri Jul 08 15:39:43 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 08 21:14:44 2011 -0700"
      },
      "message": "memcg: fix numa scan information update to be triggered by memory event\n\ncommit 889976dbcb12 (\"memcg: reclaim memory from nodes in round-robin\norder\") adds an numa node round-robin for memcg.  But the information is\nupdated once per 10sec.\n\nThis patch changes the update trigger from jiffies to memcg\u0027s event count.\n After this patch, numa scan information will be updated when we see 1024\nevents of pagein/pageout under a memcg.\n\n[akpm@linux-foundation.org: attempt to repair code layout]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4d0c066d29f030d47d19678f8008933e67dd3b72",
      "tree": "96f46e845b7a937b2e41b735061f696d2cb03293",
      "parents": [
        "0b43c3aab0137595335b08b340a3f3e5af9818a6"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Fri Jul 08 15:39:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 08 21:14:43 2011 -0700"
      },
      "message": "memcg: fix reclaimable lru check in memcg\n\nNow, in mem_cgroup_hierarchical_reclaim(), mem_cgroup_local_usage() is\nused for checking whether the memcg contains reclaimable pages or not.  If\nno pages in it, the routine skips it.\n\nBut, mem_cgroup_local_usage() contains Unevictable pages and cannot handle\n\"noswap\" condition correctly.  This doesn\u0027t work on a swapless system.\n\nThis patch adds test_mem_cgroup_reclaimable() and replaces\nmem_cgroup_local_usage().  test_mem_cgroup_reclaimable() see LRU counter\nand returns correct answer to the caller.  And this new function has\n\"noswap\" argument and can see only FILE LRU if necessary.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[akpm@linux-foundation.org: fix kerneldoc layout]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0b43c3aab0137595335b08b340a3f3e5af9818a6",
      "tree": "dad2556800b89d42875470744a25533d1d983989",
      "parents": [
        "215ddd6664ced067afca7eebd2d1eb83f064ff5a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jul 08 15:39:41 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 08 21:14:43 2011 -0700"
      },
      "message": "mm: __tlb_remove_page() check the correct batch\n\n__tlb_remove_page() switches to a new batch page, but still checks space\nin the old batch.  This check always fails, and causes a forced tlb flush.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "215ddd6664ced067afca7eebd2d1eb83f064ff5a",
      "tree": "b0e01235355d9c77b3bf63e0a57a6721fc8e3793",
      "parents": [
        "da175d06b437093f93109ba9e5efbe44dfdf9409"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Fri Jul 08 15:39:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 08 21:14:43 2011 -0700"
      },
      "message": "mm: vmscan: only read new_classzone_idx from pgdat when reclaiming successfully\n\nDuring allocator-intensive workloads, kswapd will be woken frequently\ncausing free memory to oscillate between the high and min watermark.  This\nis expected behaviour.  Unfortunately, if the highest zone is small, a\nproblem occurs.\n\nWhen balance_pgdat() returns, it may be at a lower classzone_idx than it\nstarted because the highest zone was unreclaimable.  Before checking if it\nshould go to sleep though, it checks pgdat-\u003eclasszone_idx which when there\nis no other activity will be MAX_NR_ZONES-1.  It interprets this as it has\nbeen woken up while reclaiming, skips scheduling and reclaims again.  As\nthere is no useful reclaim work to do, it enters into a loop of shrinking\nslab consuming loads of CPU until the highest zone becomes reclaimable for\na long period of time.\n\nThere are two problems here.  1) If the returned classzone or order is\nlower, it\u0027ll continue reclaiming without scheduling.  2) if the highest\nzone was marked unreclaimable but balance_pgdat() returns immediately at\nDEF_PRIORITY, the new lower classzone is not communicated back to kswapd()\nfor sleeping.\n\nThis patch does two things that are related.  If the end_zone is\nunreclaimable, this information is communicated back.  Second, if the\nclasszone or order was reduced due to failing to reclaim, new information\nis not read from pgdat and instead an attempt is made to go to sleep.  Due\nto this, it is also necessary that pgdat-\u003eclasszone_idx be initialised\neach time to pgdat-\u003enr_zones - 1 to avoid re-reads being interpreted as\nwakeups.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReported-by: Pádraig Brady \u003cP@draigBrady.com\u003e\nTested-by: Pádraig Brady \u003cP@draigBrady.com\u003e\nTested-by: Andrew Lutomirski \u003cluto@mit.edu\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "da175d06b437093f93109ba9e5efbe44dfdf9409",
      "tree": "04bbed7c41347e3614690947c66f87e8e38a6051",
      "parents": [
        "d7868dae893c83c50c7824bc2bc75f93d114669f"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Fri Jul 08 15:39:39 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 08 21:14:43 2011 -0700"
      },
      "message": "mm: vmscan: evaluate the watermarks against the correct classzone\n\nWhen deciding if kswapd is sleeping prematurely, the classzone is taken\ninto account but this is different to what balance_pgdat() and the\nallocator are doing.  Specifically, the DMA zone will be checked based on\nthe classzone used when waking kswapd which could be for a GFP_KERNEL or\nGFP_HIGHMEM request.  The lowmem reserve limit kicks in, the watermark is\nnot met and kswapd thinks it\u0027s sleeping prematurely keeping kswapd awake in\nerror.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReported-by: Pádraig Brady \u003cP@draigBrady.com\u003e\nTested-by: Pádraig Brady \u003cP@draigBrady.com\u003e\nTested-by: Andrew Lutomirski \u003cluto@mit.edu\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d7868dae893c83c50c7824bc2bc75f93d114669f",
      "tree": "7c9e56513ecbbf086c81ebff77310f80e0232ecc",
      "parents": [
        "08951e545918c1594434d000d88a7793e2452a9b"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Fri Jul 08 15:39:38 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 08 21:14:43 2011 -0700"
      },
      "message": "mm: vmscan: do not apply pressure to slab if we are not applying pressure to zone\n\nDuring allocator-intensive workloads, kswapd will be woken frequently\ncausing free memory to oscillate between the high and min watermark.  This\nis expected behaviour.\n\nWhen kswapd applies pressure to zones during node balancing, it checks if\nthe zone is above a high+balance_gap threshold.  If it is, it does not\napply pressure but it unconditionally shrinks slab on a global basis which\nis excessive.  In the event kswapd is being kept awake due to a high small\nunreclaimable zone, it skips zone shrinking but still calls shrink_slab().\n\nOnce pressure has been applied, the check for zone being unreclaimable is\nbeing made before the check is made if all_unreclaimable should be set.\nThis miss of unreclaimable can cause has_under_min_watermark_zone to be\nset due to an unreclaimable zone preventing kswapd backing off on\ncongestion_wait().\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReported-by: Pádraig Brady \u003cP@draigBrady.com\u003e\nTested-by: Pádraig Brady \u003cP@draigBrady.com\u003e\nTested-by: Andrew Lutomirski \u003cluto@mit.edu\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "08951e545918c1594434d000d88a7793e2452a9b",
      "tree": "56f91aba454751e2b6bcd67945ed2d4ebbeb2025",
      "parents": [
        "902daf6580cffe04721250fb71b5527a98718b11"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Fri Jul 08 15:39:36 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 08 21:14:42 2011 -0700"
      },
      "message": "mm: vmscan: correct check for kswapd sleeping in sleeping_prematurely\n\nDuring allocator-intensive workloads, kswapd will be woken frequently\ncausing free memory to oscillate between the high and min watermark.  This\nis expected behaviour.  Unfortunately, if the highest zone is small, a\nproblem occurs.\n\nThis seems to happen most with recent sandybridge laptops but it\u0027s\nprobably a co-incidence as some of these laptops just happen to have a\nsmall Normal zone.  The reproduction case is almost always during copying\nlarge files that kswapd pegs at 100% CPU until the file is deleted or\ncache is dropped.\n\nThe problem is mostly down to sleeping_prematurely() keeping kswapd awake\nwhen the highest zone is small and unreclaimable and compounded by the\nfact we shrink slabs even when not shrinking zones causing a lot of time\nto be spent in shrinkers and a lot of memory to be reclaimed.\n\nPatch 1 corrects sleeping_prematurely to check the zones matching\n\tthe classzone_idx instead of all zones.\n\nPatch 2 avoids shrinking slab when we are not shrinking a zone.\n\nPatch 3 notes that sleeping_prematurely is checking lower zones against\n\ta high classzone which is not what allocators or balance_pgdat()\n\tis doing leading to an artifical belief that kswapd should be\n\tstill awake.\n\nPatch 4 notes that when balance_pgdat() gives up on a high zone that the\n\tdecision is not communicated to sleeping_prematurely()\n\nThis problem affects 2.6.38.8 for certain and is expected to affect 2.6.39\nand 3.0-rc4 as well.  If accepted, they need to go to -stable to be picked\nup by distros and this series is against 3.0-rc4.  I\u0027ve cc\u0027d people that\nreported similar problems recently to see if they still suffer from the\nproblem and if this fixes it.\n\nThis patch: correct the check for kswapd sleeping in sleeping_prematurely()\n\nDuring allocator-intensive workloads, kswapd will be woken frequently\ncausing free memory to oscillate between the high and min watermark.  This\nis expected behaviour.\n\nA problem occurs if the highest zone is small.  balance_pgdat() only\nconsiders unreclaimable zones when priority is DEF_PRIORITY but\nsleeping_prematurely considers all zones.  It\u0027s possible for this sequence\nto occur\n\n  1. kswapd wakes up and enters balance_pgdat()\n  2. At DEF_PRIORITY, marks highest zone unreclaimable\n  3. At DEF_PRIORITY-1, ignores highest zone setting end_zone\n  4. At DEF_PRIORITY-1, calls shrink_slab freeing memory from\n        highest zone, clearing all_unreclaimable. Highest zone\n        is still unbalanced\n  5. kswapd returns and calls sleeping_prematurely\n  6. sleeping_prematurely looks at *all* zones, not just the ones\n     being considered by balance_pgdat. The highest small zone\n     has all_unreclaimable cleared but the zone is not\n     balanced. all_zones_ok is false so kswapd stays awake\n\nThis patch corrects the behaviour of sleeping_prematurely to check the\nzones balance_pgdat() checked.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReported-by: Pádraig Brady \u003cP@draigBrady.com\u003e\nTested-by: Pádraig Brady \u003cP@draigBrady.com\u003e\nTested-by: Andrew Lutomirski \u003cluto@mit.edu\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e55d4fa96762fd767a3b6d842c904e994db6bb2e",
      "tree": "c74157e01cb128cb97f106a50cfadc4c8b872c41",
      "parents": [
        "e32c14667e4fe9f16ac9b918d15d29abd2315a55",
        "b0af8dfdd67699e25083478c63eedef2e72ebd85"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Jun 29 13:54:42 2011 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Jun 29 13:54:42 2011 -0700"
      },
      "message": "Merge commit \u0027v3.0-rc5\u0027 into android-3.0\n"
    },
    {
      "commit": "ac34a1a3c39da0a1b9188d12a9ce85506364ed2a",
      "tree": "f74f34047c6bc516e29196685cc8671aff4a02d2",
      "parents": [
        "26c4caea9d697043cc5a458b96411b86d7f6babd"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Jun 27 16:18:12 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:13 2011 -0700"
      },
      "message": "memcg: fix direct softlimit reclaim to be called in limit path\n\nCommit d149e3b25d7c (\"memcg: add the soft_limit reclaim in global direct\nreclaim\") adds a softlimit hook to shrink_zones().  By this, soft limit\nis called as\n\n   try_to_free_pages()\n       do_try_to_free_pages()\n           shrink_zones()\n               mem_cgroup_soft_limit_reclaim()\n\nThen, direct reclaim is memcg softlimit hint aware, now.\n\nBut, the memory cgroup\u0027s \"limit\" path can call softlimit shrinker.\n\n   try_to_free_mem_cgroup_pages()\n       do_try_to_free_pages()\n           shrink_zones()\n               mem_cgroup_soft_limit_reclaim()\n\nThis will cause a global reclaim when a memcg hits limit.\n\nThis is bug. soft_limit_reclaim() should be called when\nscanning_global_lru(sc) \u003d\u003d true.\n\nAnd the commit adds a variable \"total_scanned\" for counting softlimit\nscanned pages....it\u0027s not \"total\".  This patch removes the variable and\nupdate sc-\u003enr_scanned instead of it.  This will affect shrink_slab()\u0027s\nscan condition but, global LRU is scanned by softlimit and I think this\nchange makes sense.\n\nTODO: avoid too much scanning of a zone when softlimit did enough work.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Ying Han \u003cyinghan@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": "08142579b6ca35883c1ed066a2681de6f6917062",
      "tree": "00735ed37753533f3b645714770b4fb036b5f7e0",
      "parents": [
        "9b679320a5fbf46454011e5c62e0b8991b0956d1"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Jun 27 16:18:10 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:13 2011 -0700"
      },
      "message": "mm: fix assertion mapping-\u003enrpages \u003d\u003d 0 in end_writeback()\n\nUnder heavy memory and filesystem load, users observe the assertion\nmapping-\u003enrpages \u003d\u003d 0 in end_writeback() trigger.  This can be caused by\npage reclaim reclaiming the last page from a mapping in the following\nrace:\n\n\tCPU0\t\t\t\tCPU1\n  ...\n  shrink_page_list()\n    __remove_mapping()\n      __delete_from_page_cache()\n        radix_tree_delete()\n\t\t\t\t\tevict_inode()\n\t\t\t\t\t  truncate_inode_pages()\n\t\t\t\t\t    truncate_inode_pages_range()\n\t\t\t\t\t      pagevec_lookup() - finds nothing\n\t\t\t\t\t  end_writeback()\n\t\t\t\t\t    mapping-\u003enrpages !\u003d 0 -\u003e BUG\n        page-\u003emapping \u003d NULL\n        mapping-\u003enrpages--\n\nFix the problem by doing a reliable check of mapping-\u003enrpages under\nmapping-\u003etree_lock in end_writeback().\n\nAnalyzed by Jay \u003cjinshan.xiong@whamcloud.com\u003e, lost in LKML, and dug out\nby Miklos Szeredi \u003cmszeredi@suse.de\u003e.\n\nCc: Jay \u003cjinshan.xiong@whamcloud.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9b679320a5fbf46454011e5c62e0b8991b0956d1",
      "tree": "49ea7be5e8bb669ef99533a18c73555e2882efc5",
      "parents": [
        "aa2c96d6f329e66cc59352b0f12e8f04e6a9593b"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "peterz@infradead.org",
        "time": "Mon Jun 27 16:18:09 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:13 2011 -0700"
      },
      "message": "mm/memory-failure.c: fix spinlock vs mutex order\n\nWe cannot take a mutex while holding a spinlock, so flip the order and\nfix the locking documentation.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d9d90e5eb70e09903dadff42099b6c948f814050",
      "tree": "c3ab73df6dee61f9403bfd819a6b0cb9f3ca6085",
      "parents": [
        "94c1e62df4494b79782cb9c7279f827212d1de70"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jun 27 16:18:04 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:12 2011 -0700"
      },
      "message": "tmpfs: add shmem_read_mapping_page_gfp\n\nAlthough it is used (by i915) on nothing but tmpfs, read_cache_page_gfp()\nis unsuited to tmpfs, because it inserts a page into pagecache before\ncalling the filesystem\u0027s -\u003ereadpage: tmpfs may have pages in swapcache\nwhich only it knows how to locate and switch to filecache.\n\nAt present tmpfs provides a -\u003ereadpage method, and copes with this by\ncopying pages; but soon we can simplify it by removing its -\u003ereadpage.\nProvide shmem_read_mapping_page_gfp() now, ready for that transition,\n\nExport shmem_read_mapping_page_gfp() and add it to list in shmem_fs.h,\nwith shmem_read_mapping_page() inline for the common mapping_gfp case.\n\n(shmem_read_mapping_page_gfp or shmem_read_cache_page_gfp? Generally the\nread_mapping_page functions use the mapping\u0027s -\u003ereadpage, and the\nread_cache_page functions use the supplied filler, so I think\nread_cache_page_gfp was slightly misnamed.)\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "94c1e62df4494b79782cb9c7279f827212d1de70",
      "tree": "43013fb403e592c535e6a7770be105b635ac9b63",
      "parents": [
        "072441e21ddcd1140606b7d4ef6eab579a86b0b3"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jun 27 16:18:03 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:12 2011 -0700"
      },
      "message": "tmpfs: take control of its truncate_range\n\n2.6.35\u0027s new truncate convention gave tmpfs the opportunity to control\nits file truncation, no longer enforced from outside by vmtruncate().\nWe shall want to build upon that, to handle pagecache and swap together.\n\nSlightly redefine the -\u003etruncate_range interface: let it now be called\nbetween the unmap_mapping_range()s, with the filesystem responsible for\ndoing the truncate_inode_pages_range() from it - just as the filesystem\nis nowadays responsible for doing that from its -\u003esetattr.\n\nLet\u0027s rename shmem_notify_change() to shmem_setattr().  Instead of\ncalling the generic truncate_setsize(), bring that code in so we can\ncall shmem_truncate_range() - which will later be updated to perform its\nown variant of truncate_inode_pages_range().\n\nRemove the punch_hole unmap_mapping_range() from shmem_truncate_range():\nnow that the COW\u0027s unmap_mapping_range() comes after -\u003etruncate_range,\nthere is no need to call it a third time.\n\nExport shmem_truncate_range() and add it to the list in shmem_fs.h, so\nthat i915_gem_object_truncate() can call it explicitly in future; get\nthis patch in first, then update drm/i915 once this is available (until\nthen, i915 will just be doing the truncate_inode_pages() twice).\n\nThough introduced five years ago, no other filesystem is implementing\n-\u003etruncate_range, and its only other user is madvise(,,MADV_REMOVE): we\nexpect to convert it to fallocate(,FALLOC_FL_PUNCH_HOLE,,) shortly,\nwhereupon -\u003etruncate_range can be removed from inode_operations -\nshmem_truncate_range() will help i915 across that transition too.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "072441e21ddcd1140606b7d4ef6eab579a86b0b3",
      "tree": "6f059ad83c09dfbeb1def29e805839db3e5bf85f",
      "parents": [
        "5b8ba10198a109f8a02380648c5d29000caa9c55"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jun 27 16:18:02 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:12 2011 -0700"
      },
      "message": "mm: move shmem prototypes to shmem_fs.h\n\nBefore adding any more global entry points into shmem.c, gather such\nprototypes into shmem_fs.h.  Remove mm\u0027s own declarations from swap.h,\nbut for now leave the ones in mm.h: because shmem_file_setup() and\nshmem_zero_setup() are called from various places, and we should not\nforce other subsystems to update immediately.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5b8ba10198a109f8a02380648c5d29000caa9c55",
      "tree": "1e4328d86395baa3d429c0d9911b7d7e1272629d",
      "parents": [
        "4d258b25d947521c8b913154db61ec55198243f8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Jun 27 16:18:01 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jun 27 18:00:12 2011 -0700"
      },
      "message": "mm: move vmtruncate_range to truncate.c\n\nYou would expect to find vmtruncate_range() next to vmtruncate() in\nmm/truncate.c: move it there.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f957db4fcdd8f03e186aa8f041f4049e76ab741c",
      "tree": "34c5868d819fad1b831e72ca600e655a7b9d8872",
      "parents": [
        "7553e8f2d5161a2b7a9b7a9f37be1b77e735552f"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Jun 22 18:13:04 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 22 21:06:48 2011 -0700"
      },
      "message": "mm, hotplug: protect zonelist building with zonelists_mutex\n\nCommit 959ecc48fc75 (\"mm/memory_hotplug.c: fix building of node hotplug\nzonelist\") does not protect the build_all_zonelists() call with\nzonelists_mutex as needed.  This can lead to races in constructing\nzonelist ordering if a concurrent build is underway.  Protecting this\nwith lock_memory_hotplug() is insufficient since zonelists can be\nrebuild though sysfs as well.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7553e8f2d5161a2b7a9b7a9f37be1b77e735552f",
      "tree": "1e5413e5998a523f6f9a8ea647b56a6d91be4ee5",
      "parents": [
        "b1d7dd80aadb9042e83f9778b484a2f92e0b04d4"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Jun 22 18:13:01 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 22 21:06:47 2011 -0700"
      },
      "message": "mm, hotplug: fix error handling in mem_online_node()\n\nThe error handling in mem_online_node() is incorrect: hotadd_new_pgdat()\nreturns NULL if the new pgdat could not have been allocated and a pointer\nto it otherwise.\n\nmem_online_node() should fail if hotadd_new_pgdat() fails, not the\ninverse.  This fixes an issue when memoryless nodes are not onlined and\ntheir sysfs interface is not registered when their first cpu is brought\nup.\n\nThe bug was introduced by commit cf23422b9d76 (\"cpu/mem hotplug: enable\nCPUs online before local memory online\") iow v2.6.35.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5a3fe0122cb4c94f7991a7174fee424407253f58",
      "tree": "d59363da3e8df349d8d79facb34d80d3cb4a3727",
      "parents": [
        "92ab01111003afa1c65d355380e60be606412118"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Jun 22 16:05:47 2011 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Jun 22 16:21:50 2011 -0700"
      },
      "message": "mm: ashmem: Fix arguments to ashmem_shrink\n\nThe arguments to shrink functions have changed, update\nashmem_shrink to match.\n\nChange-Id: Id279d22d761a2a7c4965c957960eef804d06cc07\nSigned-off-by: Colin Cross \u003cccross@android.com\u003e\n"
    },
    {
      "commit": "dd34739c03f2f9a79403d33419c2e61e11b4c403",
      "tree": "74e4e43b78d54994e88aef7df96f0f8f4b080934",
      "parents": [
        "eee2acbae95555006307395d8a6c91452d62851d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 17 19:05:36 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 17 19:24:11 2011 -0700"
      },
      "message": "mm: avoid anon_vma_chain allocation under anon_vma lock\n\nHugh Dickins points out that lockdep (correctly) spots a potential\ndeadlock on the anon_vma lock, because we now do a GFP_KERNEL allocation\nof anon_vma_chain while doing anon_vma_clone().  The problem is that\npage reclaim will want to take the anon_vma lock of any anonymous pages\nthat it will try to reclaim.\n\nSo re-organize the code in anon_vma_clone() slightly: first do just a\nGFP_NOWAIT allocation, which will usually work fine.  But if that fails,\nlet\u0027s just drop the lock and re-do the allocation, now with GFP_KERNEL.\n\nEnd result: not only do we avoid the locking problem, this also ends up\ngetting better concurrency in case the allocation does need to block.\nTim Chen reports that with all these anon_vma locking tweaks, we\u0027re now\nalmost back up to the spinlock performance.\n\nReported-and-tested-by: Hugh Dickins \u003chughd@google.com\u003e\nTested-by: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "eee2acbae95555006307395d8a6c91452d62851d",
      "tree": "85b02243a07a5617ac45fe2d4a714e4f758f0a98",
      "parents": [
        "bb4aa39676f73b4657b3edd893ae83881c430c0c"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "peterz@infradead.org",
        "time": "Fri Jun 17 13:54:23 2011 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 17 19:23:52 2011 -0700"
      },
      "message": "mm: avoid repeated anon_vma lock/unlock sequences in unlink_anon_vmas()\n\nThis matches the anon_vma_clone() case, and uses the same lock helper\nfunctions.  Because of the need to potentially release the anon_vma\u0027s,\nit\u0027s a bit more complex, though.\n\nWe traverse the \u0027vma-\u003eanon_vma_chain\u0027 in two phases: the first loop gets\nthe anon_vma lock (with the helper function that only takes the lock\nonce for the whole loop), and removes any entries that don\u0027t need any\nmore processing.\n\nThe second phase just traverses the remaining list entries (without\nholding the anon_vma lock), and does any actual freeing of the\nanon_vma\u0027s that is required.\n\nSigned-off-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nTested-by: Hugh Dickins \u003chughd@google.com\u003e\nTested-by: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bb4aa39676f73b4657b3edd893ae83881c430c0c",
      "tree": "6b8db9ed4a9e3fb6c232dd8447b0d24e76f5885a",
      "parents": [
        "eb96c925152fc289311e5d7e956b919e9b60ab53"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 16 20:44:51 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 17 19:20:49 2011 -0700"
      },
      "message": "mm: avoid repeated anon_vma lock/unlock sequences in anon_vma_clone()\n\nIn anon_vma_clone() we traverse the vma-\u003eanon_vma_chain of the source\nvma, locking the anon_vma for each entry.\n\nBut they are all going to have the same root entry, which means that\nwe\u0027re locking and unlocking the same lock over and over again.  Which is\nexpensive in locked operations, but can get _really_ expensive when that\nroot entry sees any kind of lock contention.\n\nIn fact, Tim Chen reports a big performance regression due to this: when\nwe switched to use a mutex instead of a spinlock, the contention case\ngets much worse.\n\nSo to alleviate this all, this commit creates a small helper function\n(lock_anon_vma_root()) that can be used to take the lock just once\nrather than taking and releasing it over and over again.\n\nWe still have the same \"take the lock and release\" it behavior in the\nexit path (in unlink_anon_vmas()), but that one is a bit harder to fix\nsince we\u0027re actually freeing the anon_vma entries as we go, and that\nwill touch the lock too.\n\nReported-and-tested-by: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nTested-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "99a15e21d96f6857dafab1e5167e5e8183215c9c",
      "tree": "eb6224c0bf11fc243de298c3fa665e418f849d16",
      "parents": [
        "7cc2ed05891f424c2e323bc1a368ddb5c78b90f2"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jun 16 12:56:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 16 15:01:24 2011 -0700"
      },
      "message": "migrate: don\u0027t account swapcache as shmem\n\nswapcache will reach the below code path in migrate_page_move_mapping,\nand swapcache is accounted as NR_FILE_PAGES but it\u0027s not accounted as\nNR_SHMEM.\n\nHugh pointed out we must use PageSwapCache instead of comparing\nmapping to \u0026swapper_space, to avoid build failure with CONFIG_SWAP\u003dn.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9be34c9d526c305efb332ad53460b57d5f8edb3e",
      "tree": "43db860557f3080b254291dac1035be1468dfdff",
      "parents": [
        "19a1166fa2352f9c07a5ab34a3c2aab462cff35d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 16 00:35:09 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 16 00:35:09 2011 -0700"
      },
      "message": "mm: get rid of the most spurious find_vma_prev() users\n\nWe have some users of this function that date back to before the vma\nlist was doubly linked, and just are silly.  These days, you can find\nthe previous vma by just following the vma-\u003evm_prev pointer.\n\nIn some cases you don\u0027t need any find_vma() lookup at all, and in other\ncases you\u0027re better off with the regular \"find_vma()\" that uses the vma\ncache front-end lookup.\n\nSome \"find_vma_prev()\" users are still valid, though.  For example, in\nthe case of a stack that grows up, it can be the case that we don\u0027t find\nany \u0027vma\u0027 at all (because we\u0027re looking up an address that is past the\nlast vma), and that the stack that we want to grow is the \u0027prev\u0027 vma.\n\nBut that kind of special case aside, we generally should prefer to use\n\u0027find_vma()\u0027.\n\nNoticed due to a totally unrelated POWER memory corruption bug that just\nhappened to hit in \u0027find_vma_prev()\u0027 and made me go \"Hmm - why are we\nusing that function here?\".\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2b472611a32a72f4a118c069c2d62a1a3f087afd",
      "tree": "166ec2dea398e7760c30077fb329cf7f2ab08c2b",
      "parents": [
        "c7cbb02222eccb82bfd42696b01abceddae663f2"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Jun 15 15:08:58 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:02 2011 -0700"
      },
      "message": "ksm: fix NULL pointer dereference in scan_get_next_rmap_item()\n\nAndrea Righi reported a case where an exiting task can race against\nksmd::scan_get_next_rmap_item (http://lkml.org/lkml/2011/6/1/742) easily\ntriggering a NULL pointer dereference in ksmd.\n\nksm_scan.mm_slot \u003d\u003d \u0026ksm_mm_head with only one registered mm\n\nCPU 1 (__ksm_exit)\t\tCPU 2 (scan_get_next_rmap_item)\n \t\t\t\tlist_empty() is false\nlock\t\t\t\tslot \u003d\u003d \u0026ksm_mm_head\nlist_del(slot-\u003emm_list)\n(list now empty)\nunlock\n\t\t\t\tlock\n\t\t\t\tslot \u003d list_entry(slot-\u003emm_list.next)\n\t\t\t\t(list is empty, so slot is still ksm_mm_head)\n\t\t\t\tunlock\n\t\t\t\tslot-\u003emm \u003d\u003d NULL ... Oops\n\nClose this race by revalidating that the new slot is not simply the list\nhead again.\n\nAndrea\u0027s test case:\n\n#include \u003cstdio.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003csys/mman.h\u003e\n\n#define BUFSIZE getpagesize()\n\nint main(int argc, char **argv)\n{\n\tvoid *ptr;\n\n\tif (posix_memalign(\u0026ptr, getpagesize(), BUFSIZE) \u003c 0) {\n\t\tperror(\"posix_memalign\");\n\t\texit(1);\n\t}\n\tif (madvise(ptr, BUFSIZE, MADV_MERGEABLE) \u003c 0) {\n\t\tperror(\"madvise\");\n\t\texit(1);\n\t}\n\t*(char *)NULL \u003d 0;\n\n\treturn 0;\n}\n\nReported-by: Andrea Righi \u003candrea@betterlinux.com\u003e\nTested-by: Andrea Righi \u003candrea@betterlinux.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Chris Wright \u003cchrisw@sous-sol.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f9e35b3b41f47c4e17d8132edbcab305a6aaa4b0",
      "tree": "d489fff3885bb7c4df0eebd2f074a398420740e6",
      "parents": [
        "d179e84ba5da1d0024087d1759a2938817a00f3f"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Wed Jun 15 15:08:52 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:02 2011 -0700"
      },
      "message": "mm: compaction: abort compaction if too many pages are isolated and caller is asynchronous V2\n\nAsynchronous compaction is used when promoting to huge pages.  This is all\nvery nice but if there are a number of processes in compacting memory, a\nlarge number of pages can be isolated.  An \"asynchronous\" process can\nstall for long periods of time as a result with a user reporting that\nfirefox can stall for 10s of seconds.  This patch aborts asynchronous\ncompaction if too many pages are isolated as it\u0027s better to fail a\nhugepage promotion than stall a process.\n\n[minchan.kim@gmail.com: return COMPACT_PARTIAL for abort]\nReported-and-tested-by: Ury Stankevich \u003curykhy@gmail.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.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": "d179e84ba5da1d0024087d1759a2938817a00f3f",
      "tree": "169c9cc4030a793df1bc29613eff85ee3acef9a9",
      "parents": [
        "7454f4ba40b419eb999a3c61a99da662bf1a2bb8"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Wed Jun 15 15:08:51 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:02 2011 -0700"
      },
      "message": "mm: vmscan: do not use page_count without a page pin\n\nIt 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\n[mgorman@suse.de: split out patch]\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\n\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7454f4ba40b419eb999a3c61a99da662bf1a2bb8",
      "tree": "e0c12088e544378554bc371d99f497d93470c4c4",
      "parents": [
        "a582a738c763e106f47eab24b8146c698a9c700b"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Wed Jun 15 15:08:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:02 2011 -0700"
      },
      "message": "mm: compaction: ensure that the compaction free scanner does not move to the next zone\n\nCompaction works with two scanners, a migration and a free scanner.  When\nthe scanners crossover, migration within the zone is complete.  The\nlocation of the scanner is recorded on each cycle to avoid excesive\nscanning.\n\nWhen a zone is small and mostly reserved, it\u0027s very easy for the migration\nscanner to be close to the end of the zone.  Then the following situation\ncan occurs\n\n  o migration scanner isolates some pages near the end of the zone\n  o free scanner starts at the end of the zone but finds that the\n    migration scanner is already there\n  o free scanner gets reinitialised for the next cycle as\n    cc-\u003emigrate_pfn + pageblock_nr_pages\n    moving the free scanner into the next zone\n  o migration scanner moves into the next zone\n\nWhen this happens, NR_ISOLATED accounting goes haywire because some of the\naccounting happens against the wrong zone.  One zones counter remains\npositive while the other goes negative even though the overall global\ncount is accurate.  This was reported on X86-32 with !SMP because !SMP\nallows the negative counters to be visible.  The fact that it is the bug\nshould theoritically be possible there.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.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": "a582a738c763e106f47eab24b8146c698a9c700b",
      "tree": "aaa5eda6bae7adc04dc5cbd513f5c25ac684af97",
      "parents": [
        "5db8a73a8d7cc6a66afbf25ed7fda338caa8f5f9"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Wed Jun 15 15:08:49 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:02 2011 -0700"
      },
      "message": "compaction: checks correct fragmentation index\n\nfragmentation_index() returns -1000 when the allocation might succeed\nThis doesn\u0027t match the comment and code in compaction_suitable(). I\nthought compaction_suitable should return COMPACT_PARTIAL in -1000\ncase, because in this case allocation could succeed depending on\nwatermarks.\n\nThe impact of this is that compaction starts and compact_finished() is\ncalled which rechecks the watermarks and the free lists.  It should have\nthe same result in that compaction should not start but is more expensive.\n\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5db8a73a8d7cc6a66afbf25ed7fda338caa8f5f9",
      "tree": "ef9de80dcee654053f3725570b0e053d2812d66a",
      "parents": [
        "d2c32258798f813dc2be6cbc32f78aa5ac5cb205"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Wed Jun 15 15:08:48 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "mm/memory-failure.c: fix page isolated count mismatch\n\nPages isolated for migration are accounted with the vmstat counters\nNR_ISOLATE_[ANON|FILE].  Callers of migrate_pages() are expected to\nincrement these counters when pages are isolated from the LRU.  Once the\npages have been migrated, they are put back on the LRU or freed and the\nisolated count is decremented.\n\nMemory failure is not properly accounting for pages it isolates causing\nthe NR_ISOLATED counters to be negative.  On SMP builds, this goes\nunnoticed as negative counters are treated as 0 due to expected per-cpu\ndrift.  On UP builds, the counter is treated by too_many_isolated() as a\nlarge value causing processes to enter D state during page reclaim or\ncompaction.  This patch accounts for pages isolated by memory failure\ncorrectly.\n\n[mel@csn.ul.ie: rewrote changelog]\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fbc29a25e484be073e7d762c9f7f1d4bf8aecc48",
      "tree": "276a9e1e0c3d8f653dd821c049ec4b6940a06c1d",
      "parents": [
        "26fe616844491a41a1abc02e29f7a9d1ec2f8ddb"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:46 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "memcg: avoid percpu cached charge draining at softlimit\n\nBased on Michal Hocko\u0027s comment.\n\nWe are not draining per cpu cached charges during soft limit reclaim\nbecause background reclaim doesn\u0027t care about charges.  It tries to free\nsome memory and charges will not give any.\n\nCached charges might influence only selection of the biggest soft limit\noffender but as the call is done only after the selection has been already\ndone it makes no change.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\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": "26fe616844491a41a1abc02e29f7a9d1ec2f8ddb",
      "tree": "cd8747ad8e96d6ebda771db41b96db11a4b09f26",
      "parents": [
        "7ae534d074e01e54d5cfbc9734b73fdfc855501f"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:45 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "memcg: fix percpu cached charge draining frequency\n\nFor performance, memory cgroup caches some \"charge\" from res_counter into\nper cpu cache.  This works well but because it\u0027s cache, it needs to be\nflushed in some cases.  Typical cases are\n\n   1. when someone hit limit.\n\n   2. when rmdir() is called and need to charges to be 0.\n\nBut \"1\" has problem.\n\nRecently, with large SMP machines, we see many kworker runs because of\nflushing memcg\u0027s cache.  Bad things in implementation are that even if a\ncpu contains a cache for memcg not related to a memcg which hits limit,\ndrain code is called.\n\nThis patch does\n        A) check percpu cache contains a useful data or not.\n        B) check other asynchronous percpu draining doesn\u0027t run.\n        C) don\u0027t call local cpu callback.\n\n(*)This patch avoid changing the calling condition with hard-limit.\n\nWhen I run \"cat 1Gfile \u003e /dev/null\" under 300M limit memcg,\n\n[Before]\n13767 kamezawa  20   0 98.6m  424  416 D 10.0  0.0   0:00.61 cat\n   58 root      20   0     0    0    0 S  0.6  0.0   0:00.09 kworker/2:1\n   60 root      20   0     0    0    0 S  0.6  0.0   0:00.08 kworker/4:1\n    4 root      20   0     0    0    0 S  0.3  0.0   0:00.02 kworker/0:0\n   57 root      20   0     0    0    0 S  0.3  0.0   0:00.05 kworker/1:1\n   61 root      20   0     0    0    0 S  0.3  0.0   0:00.05 kworker/5:1\n   62 root      20   0     0    0    0 S  0.3  0.0   0:00.05 kworker/6:1\n   63 root      20   0     0    0    0 S  0.3  0.0   0:00.05 kworker/7:1\n\n[After]\n 2676 root      20   0 98.6m  416  416 D  9.3  0.0   0:00.87 cat\n 2626 kamezawa  20   0 15192 1312  920 R  0.3  0.0   0:00.28 top\n    1 root      20   0 19384 1496 1204 S  0.0  0.0   0:00.66 init\n    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd\n    3 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0\n    4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kworker/0:0\n\n[akpm@linux-foundation.org: make percpu_charge_mutex static, tweak comments]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nTested-by: 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": "7ae534d074e01e54d5cfbc9734b73fdfc855501f",
      "tree": "8c815762779fd79cc83db788aa29e6239212c3f4",
      "parents": [
        "733eda7ac316cd4e550fa096e4ed42356dc546e7"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:44 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "memcg: fix wrong check of noswap with softlimit\n\nHierarchical reclaim doesn\u0027t swap out if memsw and resource limits are\nthye same (memsw_is_minimum \u003d\u003d true) because we would hit mem+swap limit\nanyway (during hard limit reclaim).\n\nIf it comes to the soft limit we shouldn\u0027t consider memsw_is_minimum at\nall because it doesn\u0027t make much sense.  Either the soft limit is bellow\nthe hard limit and then we cannot hit mem+swap limit or the direct reclaim\ntakes a precedence.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "37573e8c718277103f61f03741bdc5606d31b07e",
      "tree": "7142211508420a8ea90b8ae01bfa5ee93ffa1a44",
      "parents": [
        "8957712710e045044e3c44375c6a87d7ffa17d51"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "memcg: fix init_page_cgroup nid with sparsemem\n\nCommit 21a3c9646873 (\"memcg: allocate memory cgroup structures in local\nnodes\") makes page_cgroup allocation as NUMA aware.  But that caused a\nproblem https://bugzilla.kernel.org/show_bug.cgi?id\u003d36192.\n\nThe problem was getting a NID from invalid struct pages, which was not\ninitialized because it was out-of-node, out of [node_start_pfn,\nnode_end_pfn)\n\nNow, with sparsemem, page_cgroup_init scans pfn from 0 to max_pfn.  But\nthis may scan a pfn which is not on any node and can access memmap which\nis not initialized.\n\nThis makes page_cgroup_init() for SPARSEMEM node aware and remove a code\nto get nid from page-\u003eflags.  (Then, we\u0027ll use valid NID always.)\n\n[akpm@linux-foundation.org: try to fix up comments]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8957712710e045044e3c44375c6a87d7ffa17d51",
      "tree": "94d801709cb1a57d12695ba9b2f8da42996e178e",
      "parents": [
        "45d16f09ddd66597e561876f5652c05bf986360a"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:41 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "mm: memory.numa_stat: fix file permission\n\nCommit 406eb0c9ba76 (\"memcg: add memory.numastat api for numa\nstatistics\") adds memory.numa_stat file for memory cgroup.  But the file\npermissions are wrong.\n\n  [kamezawa@bluextal linux-2.6]$ ls -l /cgroup/memory/A/memory.numa_stat\n  ---------- 1 root root 0 Jun  9 18:36 /cgroup/memory/A/memory.numa_stat\n\nThis patch fixes the permission as\n\n  [root@bluextal kamezawa]# ls -l /cgroup/memory/A/memory.numa_stat\n  -r--r--r-- 1 root root 0 Jun 10 16:49 /cgroup/memory/A/memory.numa_stat\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: 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": "b0320c7b7d1ac1bd5c2d9dff3258524ab39bad32",
      "tree": "bdac09caec787a28b1b31fea3c2911808e9cb6d1",
      "parents": [
        "959ecc48fc7506b9d7825ea70e40d92d9b308033"
      ],
      "author": {
        "name": "Rafael Aquini",
        "email": "aquini@linux.com",
        "time": "Wed Jun 15 15:08:39 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "mm: fix negative commitlimit when gigantic hugepages are allocated\n\nWhen 1GB hugepages are allocated on a system, free(1) reports less\navailable memory than what really is installed in the box.  Also, if the\ntotal size of hugepages allocated on a system is over half of the total\nmemory size, CommitLimit becomes a negative number.\n\nThe problem is that gigantic hugepages (order \u003e MAX_ORDER) can only be\nallocated at boot with bootmem, thus its frames are not accounted to\n\u0027totalram_pages\u0027.  However, they are accounted to hugetlb_total_pages()\n\nWhat happens to turn CommitLimit into a negative number is this\ncalculation, in fs/proc/meminfo.c:\n\n        allowed \u003d ((totalram_pages - hugetlb_total_pages())\n                * sysctl_overcommit_ratio / 100) + total_swap_pages;\n\nA similar calculation occurs in __vm_enough_memory() in mm/mmap.c.\n\nAlso, every vm statistic which depends on \u0027totalram_pages\u0027 will render\nconfusing values, as if system were \u0027missing\u0027 some part of its memory.\n\nImpact of this bug:\n\nWhen gigantic hugepages are allocated and sysctl_overcommit_memory \u003d\u003d\nOVERCOMMIT_NEVER.  In a such situation, __vm_enough_memory() goes through\nthe mentioned \u0027allowed\u0027 calculation and might end up mistakenly returning\n-ENOMEM, thus forcing the system to start reclaiming pages earlier than it\nwould be ususal, and this could cause detrimental impact to overall\nsystem\u0027s performance, depending on the workload.\n\nBesides the aforementioned scenario, I can only think of this causing\nannoyances with memory reports from /proc/meminfo and free(1).\n\n[akpm@linux-foundation.org: standardize comment layout]\nReported-by: Russ Anderson \u003crja@sgi.com\u003e\nSigned-off-by: Rafael Aquini \u003caquini@linux.com\u003e\nAcked-by: Russ Anderson \u003crja@sgi.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "959ecc48fc7506b9d7825ea70e40d92d9b308033"
}
