)]}'
{
  "log": [
    {
      "commit": "aab008db8063364dc3c8ccf4981c21124866b395",
      "tree": "72914203f4decb023efdaabd0301a62d742dfa8c",
      "parents": [
        "4f5b1affdda3e0c48cac674182f52004137b0ffc",
        "16c0cfa425b8e1488f7a1873bd112a7a099325f0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 19:52:47 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 19:52:47 2012 -0700"
      },
      "message": "Merge tag \u0027stable/for-linus-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/mm\n\nPull cleancache changes from Konrad Rzeszutek Wilk:\n \"This has some patches for the cleancache API that should have been\n  submitted a _long_ time ago.  They are basically cleanups:\n\n   - rename of flush to invalidate\n\n   - moving reporting of statistics into debugfs\n\n   - use __read_mostly as necessary.\n\n  Oh, and also the MAINTAINERS file change.  The files (except the\n  MAINTAINERS file) have been in #linux-next for months now.  The late\n  addition of MAINTAINERS file is a brain-fart on my side - didn\u0027t\n  realize I needed that just until I was typing this up - and I based\n  that patch on v3.3 - so the tree is on top of v3.3.\"\n\n* tag \u0027stable/for-linus-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/mm:\n  MAINTAINERS: Adding cleancache API to the list.\n  mm: cleancache: Use __read_mostly as appropiate.\n  mm: cleancache: report statistics via debugfs instead of sysfs.\n  mm: zcache/tmem/cleancache: s/flush/invalidate/\n  mm: cleancache: s/flush/invalidate/\n"
    },
    {
      "commit": "754b9800779402924fffe456b49d557e15260cbf",
      "tree": "0e0441eca766616fccd8fc37a3885397efc6063a",
      "parents": [
        "35cb8d9e18c0bb33b90d7e574abadbe23b65427d",
        "ea281a9ebaba3287130dbe15bb0aad6f798bb06b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 09:42:04 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 09:42:04 2012 -0700"
      },
      "message": "Merge branch \u0027x86-mce-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull MCE changes from Ingo Molnar.\n\n* \u0027x86-mce-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:\n  x86/mce: Fix return value of mce_chrdev_read() when erst is disabled\n  x86/mce: Convert static array of pointers to per-cpu variables\n  x86/mce: Replace hard coded hex constants with symbolic defines\n  x86/mce: Recognise machine check bank signature for data path error\n  x86/mce: Handle \"action required\" errors\n  x86/mce: Add mechanism to safely save information in MCE handler\n  x86/mce: Create helper function to save addr/misc when needed\n  HWPOISON: Add code to handle \"action required\" errors.\n  HWPOISON: Clean up memory_failure() vs. __memory_failure()\n"
    },
    {
      "commit": "95211279c5ad00a317c98221d7e4365e02f20836",
      "tree": "2ddc8625378d2915b8c96392f3cf6663b705ed55",
      "parents": [
        "5375871d432ae9fc581014ac117b96aaee3cd0c7",
        "12724850e8064f64b6223d26d78c0597c742c65a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 09:04:48 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 22 09:04:48 2012 -0700"
      },
      "message": "Merge branch \u0027akpm\u0027 (Andrew\u0027s patch-bomb)\n\nMerge first batch of patches from Andrew Morton:\n \"A few misc things and all the MM queue\"\n\n* emailed from Andrew Morton \u003cakpm@linux-foundation.org\u003e: (92 commits)\n  memcg: avoid THP split in task migration\n  thp: add HPAGE_PMD_* definitions for !CONFIG_TRANSPARENT_HUGEPAGE\n  memcg: clean up existing move charge code\n  mm/memcontrol.c: remove unnecessary \u0027break\u0027 in mem_cgroup_read()\n  mm/memcontrol.c: remove redundant BUG_ON() in mem_cgroup_usage_unregister_event()\n  mm/memcontrol.c: s/stealed/stolen/\n  memcg: fix performance of mem_cgroup_begin_update_page_stat()\n  memcg: remove PCG_FILE_MAPPED\n  memcg: use new logic for page stat accounting\n  memcg: remove PCG_MOVE_LOCK flag from page_cgroup\n  memcg: simplify move_account() check\n  memcg: remove EXPORT_SYMBOL(mem_cgroup_update_page_stat)\n  memcg: kill dead prev_priority stubs\n  memcg: remove PCG_CACHE page_cgroup flag\n  memcg: let css_get_next() rely upon rcu_read_lock()\n  cgroup: revert ss_id_lock to spinlock\n  idr: make idr_get_next() good for rcu_read_lock()\n  memcg: remove unnecessary thp check in page stat accounting\n  memcg: remove redundant returns\n  memcg: enum lru_list lru\n  ...\n"
    },
    {
      "commit": "12724850e8064f64b6223d26d78c0597c742c65a",
      "tree": "f0b91eeae069fe92906db7ad9d0d8a8003f05db4",
      "parents": [
        "d8c37c480678ebe09bc570f33e085e28049db035"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Mar 21 16:34:28 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "memcg: avoid THP split in task migration\n\nCurrently we can\u0027t do task migration among memory cgroups without THP\nsplit, which means processes heavily using THP experience large overhead\nin task migration.  This patch introduces the code for moving charge of\nTHP and makes THP more valuable.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nAcked-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d8c37c480678ebe09bc570f33e085e28049db035",
      "tree": "c8c53fde803f1a9655f44193c97db76dc4a90fe1",
      "parents": [
        "8d32ff84401f1addb961c7af2c8d9baceb0ab9ba"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Mar 21 16:34:27 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "thp: add HPAGE_PMD_* definitions for !CONFIG_TRANSPARENT_HUGEPAGE\n\nThese macros will be used in a later patch, where all usages are expected\nto be optimized away without #ifdef CONFIG_TRANSPARENT_HUGEPAGE.  But to\ndetect unexpected usages, we convert the existing BUG() to BUILD_BUG().\n\n[akpm@linux-foundation.org: fix build in mm/pgtable-generic.c]\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nAcked-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8d32ff84401f1addb961c7af2c8d9baceb0ab9ba",
      "tree": "bf62513b239dce072f0105c0b06ed694634a77d4",
      "parents": [
        "a488428871265979bcf2c46298a04c1d5826e6cb"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Mar 21 16:34:27 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "memcg: clean up existing move charge code\n\n- Replace lengthy function name is_target_pte_for_mc() with a shorter\n  one in order to avoid ugly line breaks.\n\n- explicitly use MC_TARGET_* instead of simply using integers.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Hillf Danton \u003cdhillf@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": "a488428871265979bcf2c46298a04c1d5826e6cb",
      "tree": "87126bade942bcff8f36e538c8f45605fd080fd0",
      "parents": [
        "45f3e385b7a639c633d7a4b1e863c2d52b918258"
      ],
      "author": {
        "name": "Jeff Liu",
        "email": "jeff.liu@oracle.com",
        "time": "Wed Mar 21 16:34:27 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "mm/memcontrol.c: remove unnecessary \u0027break\u0027 in mem_cgroup_read()\n\nSigned-off-by: Jie Liu \u003cjeff.liu@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "45f3e385b7a639c633d7a4b1e863c2d52b918258",
      "tree": "8f0c068aff36cc4f915899ed68d2e8686d75b069",
      "parents": [
        "13fd1dd9db345f6b2babd1e80a1c929092eb4896"
      ],
      "author": {
        "name": "Anton Vorontsov",
        "email": "anton.vorontsov@linaro.org",
        "time": "Wed Mar 21 16:34:26 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "mm/memcontrol.c: remove redundant BUG_ON() in mem_cgroup_usage_unregister_event()\n\nIn the following code:\n\n\tif (type \u003d\u003d _MEM)\n\t\tthresholds \u003d \u0026memcg-\u003ethresholds;\n\telse if (type \u003d\u003d _MEMSWAP)\n\t\tthresholds \u003d \u0026memcg-\u003ememsw_thresholds;\n\telse\n\t\tBUG();\n\n\tBUG_ON(!thresholds);\n\nThe BUG_ON() seems redundant.\n\nSigned-off-by: Anton Vorontsov \u003canton.vorontsov@linaro.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "13fd1dd9db345f6b2babd1e80a1c929092eb4896",
      "tree": "03d5fd77f06780bd5c164b82c6ba04b56a259b06",
      "parents": [
        "4331f7d339ee0b54603344b9d13662a9c022540c"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Wed Mar 21 16:34:26 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "mm/memcontrol.c: s/stealed/stolen/\n\nA grammatical fix.\n\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4331f7d339ee0b54603344b9d13662a9c022540c",
      "tree": "ea67ad19a4dff0f8bf7d335bb7ab148ecfb4d329",
      "parents": [
        "2ff76f1193f8481f7e6c29304eea4006e8e51569"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:26 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:02 2012 -0700"
      },
      "message": "memcg: fix performance of mem_cgroup_begin_update_page_stat()\n\nmem_cgroup_begin_update_page_stat() should be very fast because it\u0027s\ncalled very frequently.  Now, it needs to look up page_cgroup and its\nmemcg....this is slow.\n\nThis patch adds a global variable to check \"any memcg is moving or not\".\nWith this, the caller doesn\u0027t need to visit page_cgroup and memcg.\n\nHere is a test result.  A test program makes page faults onto a file,\nMAP_SHARED and makes each page\u0027s page_mapcount(page) \u003e 1, and free the\nrange by madvise() and page fault again.  This program causes 26214400\ntimes of page fault onto a file(size was 1G.) and shows shows the cost of\nmem_cgroup_begin_update_page_stat().\n\nBefore this patch for mem_cgroup_begin_update_page_stat()\n\n    [kamezawa@bluextal test]$ time ./mmap 1G\n\n    real    0m21.765s\n    user    0m5.999s\n    sys     0m15.434s\n\n    27.46%     mmap  mmap               [.] reader\n    21.15%     mmap  [kernel.kallsyms]  [k] page_fault\n     9.17%     mmap  [kernel.kallsyms]  [k] filemap_fault\n     2.96%     mmap  [kernel.kallsyms]  [k] __do_fault\n     2.83%     mmap  [kernel.kallsyms]  [k] __mem_cgroup_begin_update_page_stat\n\nAfter this patch\n\n    [root@bluextal test]# time ./mmap 1G\n\n    real    0m21.373s\n    user    0m6.113s\n    sys     0m15.016s\n\nIn usual path, calls to __mem_cgroup_begin_update_page_stat() goes away.\n\nNote: we may be able to remove this optimization in future if\n      we can get pointer to memcg directly from struct page.\n\n[akpm@linux-foundation.org: don\u0027t return a void]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2ff76f1193f8481f7e6c29304eea4006e8e51569",
      "tree": "a263678dc298e29a0c54bb2e6f98bb1d5ee19751",
      "parents": [
        "89c06bd52fb9ffceddf84f7309d2e8c9f1666216"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:25 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: remove PCG_FILE_MAPPED\n\nWith the new lock scheme for updating memcg\u0027s page stat, we don\u0027t need a\nflag PCG_FILE_MAPPED which was duplicated information of page_mapped().\n\n[hughd@google.com: cosmetic fix]\n[hughd@google.com: add comment to MEM_CGROUP_CHARGE_TYPE_MAPPED case in __mem_cgroup_uncharge_common()]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "89c06bd52fb9ffceddf84f7309d2e8c9f1666216",
      "tree": "43ec3d97a89988bc143bed5796bcd7bef64212dc",
      "parents": [
        "312734c04e2fecc58429aec98194e4ff12d8f7d6"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:25 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: use new logic for page stat accounting\n\nNow, page-stat-per-memcg is recorded into per page_cgroup flag by\nduplicating page\u0027s status into the flag.  The reason is that memcg has a\nfeature to move a page from a group to another group and we have race\nbetween \"move\" and \"page stat accounting\",\n\nUnder current logic, assume CPU-A and CPU-B.  CPU-A does \"move\" and CPU-B\ndoes \"page stat accounting\".\n\nWhen CPU-A goes 1st,\n\n            CPU-A                           CPU-B\n                                    update \"struct page\" info.\n    move_lock_mem_cgroup(memcg)\n    see pc-\u003eflags\n    copy page stat to new group\n    overwrite pc-\u003emem_cgroup.\n    move_unlock_mem_cgroup(memcg)\n                                    move_lock_mem_cgroup(mem)\n                                    set pc-\u003eflags\n                                    update page stat accounting\n                                    move_unlock_mem_cgroup(mem)\n\nstat accounting is guarded by move_lock_mem_cgroup() and \"move\" logic\n(CPU-A) doesn\u0027t see changes in \"struct page\" information.\n\nBut it\u0027s costly to have the same information both in \u0027struct page\u0027 and\n\u0027struct page_cgroup\u0027.  And, there is a potential problem.\n\nFor example, assume we have PG_dirty accounting in memcg.\nPG_..is a flag for struct page.\nPCG_ is a flag for struct page_cgroup.\n(This is just an example. The same problem can be found in any\n kind of page stat accounting.)\n\n\t  CPU-A                               CPU-B\n      TestSet PG_dirty\n      (delay)                        TestClear PG_dirty\n                                     if (TestClear(PCG_dirty))\n                                          memcg-\u003enr_dirty--\n      if (TestSet(PCG_dirty))\n          memcg-\u003enr_dirty++\n\nHere, memcg-\u003enr_dirty \u003d +1, this is wrong.  This race was reported by Greg\nThelen \u003cgthelen@google.com\u003e.  Now, only FILE_MAPPED is supported but\nfortunately, it\u0027s serialized by page table lock and this is not real bug,\n_now_,\n\nIf this potential problem is caused by having duplicated information in\nstruct page and struct page_cgroup, we may be able to fix this by using\noriginal \u0027struct page\u0027 information.  But we\u0027ll have a problem in \"move\naccount\"\n\nAssume we use only PG_dirty.\n\n         CPU-A                   CPU-B\n    TestSet PG_dirty\n    (delay)                    move_lock_mem_cgroup()\n                               if (PageDirty(page))\n                                      new_memcg-\u003enr_dirty++\n                               pc-\u003emem_cgroup \u003d new_memcg;\n                               move_unlock_mem_cgroup()\n    move_lock_mem_cgroup()\n    memcg \u003d pc-\u003emem_cgroup\n    new_memcg-\u003enr_dirty++\n\naccounting information may be double-counted.  This was original reason to\nhave PCG_xxx flags but it seems PCG_xxx has another problem.\n\nI think we need a bigger lock as\n\n     move_lock_mem_cgroup(page)\n     TestSetPageDirty(page)\n     update page stats (without any checks)\n     move_unlock_mem_cgroup(page)\n\nThis fixes both of problems and we don\u0027t have to duplicate page flag into\npage_cgroup.  Please note: move_lock_mem_cgroup() is held only when there\nare possibility of \"account move\" under the system.  So, in most path,\nstatus update will go without atomic locks.\n\nThis patch introduces mem_cgroup_begin_update_page_stat() and\nmem_cgroup_end_update_page_stat() both should be called at modifying\n\u0027struct page\u0027 information if memcg takes care of it.  as\n\n     mem_cgroup_begin_update_page_stat()\n     modify page information\n     mem_cgroup_update_page_stat()\n     \u003d\u003e never check any \u0027struct page\u0027 info, just update counters.\n     mem_cgroup_end_update_page_stat().\n\nThis patch is slow because we need to call begin_update_page_stat()/\nend_update_page_stat() regardless of accounted will be changed or not.  A\nfollowing patch adds an easy optimization and reduces the cost.\n\n[akpm@linux-foundation.org: s/lock/locked/]\n[hughd@google.com: fix deadlock by avoiding stat lock when anon]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "312734c04e2fecc58429aec98194e4ff12d8f7d6",
      "tree": "c1195cd46733b6a3909c11b2b5abcdee4412b99b",
      "parents": [
        "619d094b5872a5af153f1af77a8b7f7326faf0d0"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:24 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: remove PCG_MOVE_LOCK flag from page_cgroup\n\nPCG_MOVE_LOCK is used for bit spinlock to avoid race between overwriting\npc-\u003emem_cgroup and page statistics accounting per memcg.  This lock helps\nto avoid the race but the race is very rare because moving tasks between\ncgroup is not a usual job.  So, it seems using 1bit per page is too\ncostly.\n\nThis patch changes this lock as per-memcg spinlock and removes\nPCG_MOVE_LOCK.\n\nIf smaller lock is required, we\u0027ll be able to add some hashes but I\u0027d like\nto start from this.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "619d094b5872a5af153f1af77a8b7f7326faf0d0",
      "tree": "4de9ff8640d8cee092800cd722e621ea2db63640",
      "parents": [
        "9e3357907c84517d9e07bc0b19265807f0264b43"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:23 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: simplify move_account() check\n\nIn memcg, for avoiding take-lock-irq-off at accessing page_cgroup, a\nlogic, flag + rcu_read_lock(), is used.  This works as following\n\n     CPU-A                     CPU-B\n                             rcu_read_lock()\n    set flag\n                             if(flag is set)\n                                   take heavy lock\n                             do job.\n    synchronize_rcu()        rcu_read_unlock()\n    take heavy lock.\n\nIn recent discussion, it\u0027s argued that using per-cpu value for this flag\njust complicates the code because \u0027set flag\u0027 is very rare.\n\nThis patch changes \u0027flag\u0027 implementation from percpu to atomic_t.  This\nwill be much simpler.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@us.ibm.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9e3357907c84517d9e07bc0b19265807f0264b43",
      "tree": "3ce1602eefd0c1f006c23170da16545478dc5404",
      "parents": [
        "a710920caedfcf56543136bfea300a6c593f9838"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:23 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: remove EXPORT_SYMBOL(mem_cgroup_update_page_stat)\n\nAs described in the log, I guess EXPORT was for preparing dirty\naccounting.  But _now_, we don\u0027t need to export this.  Remove this for\nnow.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b24028572fb69e9dd6de8c359eba2b2c66baa889",
      "tree": "563594eba40e5fd0b61c36c09705f128a8dfbe40",
      "parents": [
        "ca464d69b19120a826aa2534de2511a6f542edf5"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:22 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: remove PCG_CACHE page_cgroup flag\n\nWe record \u0027the page is cache\u0027 with the PCG_CACHE bit in page_cgroup.\nHere, \"CACHE\" means anonymous user pages (and SwapCache).  This doesn\u0027t\ninclude shmem.\n\nConsidering callers, at charge/uncharge, the caller should know what the\npage is and we don\u0027t need to record it by using one bit per page.\n\nThis patch removes PCG_CACHE bit and make callers of\nmem_cgroup_charge_statistics() to specify what the page is.\n\nAbout page migration: Mapping of the used page is not touched during migra\ntion (see page_remove_rmap) so we can rely on it and push the correct\ncharge type down to __mem_cgroup_uncharge_common from end_migration for\nunused page.  The force flag was misleading was abused for skipping the\nneedless page_mapped() / PageCgroupMigration() check, as we know the\nunused page is no longer mapped and cleared the migration flag just a few\nlines up.  But doing the checks is no biggie and it\u0027s not worth adding\nanother flag just to skip them.\n\n[akpm@linux-foundation.org: checkpatch fixes]\n[hughd@google.com: fix PageAnon uncharging]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0e79dedde951e981612ed4e6d74873d61d2a113b",
      "tree": "eb759b4516068a39bc30a2e1758f0743a9c68762",
      "parents": [
        "1f2b71f41ee81735c25ef326da9a0610d640abc2"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Mar 21 16:34:20 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:01 2012 -0700"
      },
      "message": "memcg: remove unnecessary thp check in page stat accounting\n\nCommit e94c8a9cbce1 (\"memcg: make mem_cgroup_split_huge_fixup() more\nefficient\") removed move_lock_page_cgroup().  So we do not have to check\nPageTransHuge in mem_cgroup_update_page_stat() and fallback into the\nlocked accounting because both move_account() and thp split are done\nwith compound_lock so they cannot race.\n\nThe race between update vs.  move is protected by mem_cgroup_stealed.\n\nPageTransHuge pages shouldn\u0027t appear in this code path currently because\nwe are tracking only file pages at the moment but later we are planning\nto track also other pages (e.g.  mlocked ones).\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Acked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: David Rientjes \u003crientjes@google.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": "1f2b71f41ee81735c25ef326da9a0610d640abc2",
      "tree": "07d2c696698da7bf6446b11158e0291c73bbae6b",
      "parents": [
        "f156ab9333c7810f8c4b1a0413142f52534b2df1"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 21 16:34:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "memcg: remove redundant returns\n\nRemove redundant returns from ends of functions, and one blank line.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f156ab9333c7810f8c4b1a0413142f52534b2df1",
      "tree": "c456db15734c575223be69c57328e140cc4b489f",
      "parents": [
        "1eb4927251a4e5ab152e64afb29453547365fde8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 21 16:34:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "memcg: enum lru_list lru\n\nMostly we use \"enum lru_list lru\": change those few \"l\"s to \"lru\"s.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1eb4927251a4e5ab152e64afb29453547365fde8",
      "tree": "e2b51066c91c8a704251dfdfab6b94471206a00f",
      "parents": [
        "d79154bb5223edad407db61f59b9b15b0080ed80"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 21 16:34:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "memcg: lru_size instead of MEM_CGROUP_ZSTAT\n\nI never understood why we need a MEM_CGROUP_ZSTAT(mz, idx) macro to\nobscure the LRU counts.  For easier searching? So call it lru_size\nrather than bare count (lru_length sounds better, but would be wrong,\nsince each huge page raises lru_size hugely).\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d79154bb5223edad407db61f59b9b15b0080ed80",
      "tree": "28c7c706c5a78763fb75f9ff6e6d2b3a4d7fa82d",
      "parents": [
        "31a79235fc75b506e282e43723107a40f3bc5c07"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 21 16:34:18 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "memcg: replace mem and mem_cont stragglers\n\nReplace mem and mem_cont stragglers in memcontrol.c by memcg.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "052b1987faca3606109d88d96bce124851f7c4c2",
      "tree": "879df883edb01ea6e0da880e391b06bb69058129",
      "parents": [
        "1480de0340a8d5f094b74d7c4b902456c9a06903"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Wed Mar 21 16:34:17 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "swap: don\u0027t do discard if no discard option added\n\nWhen swapon() was not passed the SWAP_FLAG_DISCARD option, sys_swapon()\nwill still perform a discard operation.  This can cause problems if\ndiscard is slow or buggy.\n\nReverse the order of the check so that a discard operation is performed\nonly if the sys_swapon() caller is attempting to enable discard.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nReported-by: Holger Kiehl \u003cHolger.Kiehl@dwd.de\u003e\nTested-by: Holger Kiehl \u003cHolger.Kiehl@dwd.de\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1480de0340a8d5f094b74d7c4b902456c9a06903",
      "tree": "6a4c4d776b6475d8a35cb4632340227e8ab311c2",
      "parents": [
        "88f6b4c32e531dc5b06bd05144f790847a1fdaeb"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Wed Mar 21 16:34:17 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "mm: forbid lumpy-reclaim in shrink_active_list()\n\nReset the reclaim mode in shrink_active_list() to RECLAIM_MODE_SINGLE |\nRECLAIM_MODE_ASYNC.  (sync/async sign is used only in shrink_page_list\nand does not affect shrink_active_list)\n\nCurrenly shrink_active_list() sometimes works in lumpy-reclaim mode, if\nRECLAIM_MODE_LUMPYRECLAIM is left over from an earlier\nshrink_inactive_list().  Meanwhile, in age_active_anon()\nsc-\u003ereclaim_mode is totally zero.  So the current behavior is too\ncomplex and confusing, and this looks like bug.\n\nIn general, shrink_active_list() populates the inactive list for the\nnext shrink_inactive_list().  Lumpy shring_inactive_list() isolates\npages around the chosen one from both the active and inactive lists.\nSo, there is no reason for lumpy isolation in shrink_active_list().\n\nSee also: https://lkml.org/lkml/2012/3/15/583\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nProposed-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan@kernel.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "88f6b4c32e531dc5b06bd05144f790847a1fdaeb",
      "tree": "751d07060432fe32200d7849e7901082968b3e51",
      "parents": [
        "d71b5a73fe9af42752c4329b087f7911b35f8f79"
      ],
      "author": {
        "name": "Kautuk Consul",
        "email": "consul.kautuk@gmail.com",
        "time": "Wed Mar 21 16:34:16 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "mmap.c: fix comment for __insert_vm_struct()\n\nThe comment above __insert_vm_struct seems to suggest that this function\nis also going to link the VMA with the anon_vma, but this is not true.\nThis function only links the VMA to the mm-\u003emm_rb tree and the mm-\u003emmap\nlinked list.\n\n[akpm@linux-foundation.org: improve comment layout and text]\nSigned-off-by: Kautuk Consul \u003cconsul.kautuk@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b224ef856b1a5b949daff5937a9e187fe622b8f5",
      "tree": "7d119425e8734eba198f83dec781d8b9c6859923",
      "parents": [
        "8d13bddd11c10db40e2c81b4b224c11126691fc0"
      ],
      "author": {
        "name": "Kautuk Consul",
        "email": "consul.kautuk@gmail.com",
        "time": "Wed Mar 21 16:34:15 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "page_alloc: remove unused find_zone_movable_pfns_for_nodes() argument\n\nfind_zone_movable_pfns_for_nodes() does not use its argument.\n\nSigned-off-by: Kautuk Consul \u003cconsul.kautuk@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8d13bddd11c10db40e2c81b4b224c11126691fc0",
      "tree": "bec31e54cbc43bf6b49c391d81893203b903b5ec",
      "parents": [
        "d1d5e05ffdc110021ae7937802e88ae0d223dcdc"
      ],
      "author": {
        "name": "Kautuk Consul",
        "email": "consul.kautuk@gmail.com",
        "time": "Wed Mar 21 16:34:15 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:55:00 2012 -0700"
      },
      "message": "page_alloc.c: remove add_from_early_node_map()\n\nadd_from_early_node_map() is unused.\n\nSigned-off-by: Kautuk Consul \u003cconsul.kautuk@gmail.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "40716e29243de46720e5773797791466c28904ec",
      "tree": "19616ad05cbead73d0643b002a7ced8baa292ee2",
      "parents": [
        "21a3c273f88c9cbbaf7e14505df0131d95c8f262"
      ],
      "author": {
        "name": "Steven Truelove",
        "email": "steven.truelove@utoronto.ca",
        "time": "Wed Mar 21 16:34:14 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:59 2012 -0700"
      },
      "message": "hugetlbfs: fix alignment of huge page requests\n\nWhen calling shmget() with SHM_HUGETLB, shmget aligns the request size to\nPAGE_SIZE, but this is not sufficient.\n\nModify hugetlb_file_setup() to align requests to the huge page size, and\nto accept an address argument so that all alignment checks can be\nperformed in hugetlb_file_setup(), rather than in its callers.  Change\nnewseg() and mmap_pgoff() to match the new prototype and eliminate a now\nredundant alignment check.\n\n[akpm@linux-foundation.org: fix build]\nSigned-off-by: Steven Truelove \u003csteven.truelove@utoronto.ca\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ea48cf7863c789579b170ef28e7fc62728365d6e",
      "tree": "3602d07d69e1b1b6d8a26f2b221705bb2862ee3c",
      "parents": [
        "05af2e104a0c282dcd9303431e1360750ba76de6"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Mar 21 16:34:13 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:59 2012 -0700"
      },
      "message": "mm, counters: fold __sync_task_rss_stat() into sync_mm_rss()\n\nThere\u0027s no difference between sync_mm_rss() and __sync_task_rss_stat(),\nso fold the latter into the former.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "05af2e104a0c282dcd9303431e1360750ba76de6",
      "tree": "cdd5876f2d17b26cc3ded7ef85d04d0e853e9b7e",
      "parents": [
        "90481622d75715bfcb68501280a917dbfe516029"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Mar 21 16:34:13 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:59 2012 -0700"
      },
      "message": "mm, counters: remove task argument to sync_mm_rss() and __sync_task_rss_stat()\n\nsync_mm_rss() can only be used for current to avoid race conditions in\niterating and clearing its per-task counters.  Remove the task argument\nfor it and its helper function, __sync_task_rss_stat(), to avoid thinking\nit can be used safely for anything other than current.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "90481622d75715bfcb68501280a917dbfe516029",
      "tree": "63f7d9e4455366ab326ee74e6b39acf76b618fcf",
      "parents": [
        "a1d776ee3147cec2a54a645e92eb2e3e2f65a137"
      ],
      "author": {
        "name": "David Gibson",
        "email": "david@gibson.dropbear.id.au",
        "time": "Wed Mar 21 16:34:12 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:59 2012 -0700"
      },
      "message": "hugepages: fix use after free bug in \"quota\" handling\n\nhugetlbfs_{get,put}_quota() are badly named.  They don\u0027t interact with the\ngeneral quota handling code, and they don\u0027t much resemble its behaviour.\nRather than being about maintaining limits on on-disk block usage by\nparticular users, they are instead about maintaining limits on in-memory\npage usage (including anonymous MAP_PRIVATE copied-on-write pages)\nassociated with a particular hugetlbfs filesystem instance.\n\nWorse, they work by having callbacks to the hugetlbfs filesystem code from\nthe low-level page handling code, in particular from free_huge_page().\nThis is a layering violation of itself, but more importantly, if the\nkernel does a get_user_pages() on hugepages (which can happen from KVM\namongst others), then the free_huge_page() can be delayed until after the\nassociated inode has already been freed.  If an unmount occurs at the\nwrong time, even the hugetlbfs superblock where the \"quota\" limits are\nstored may have been freed.\n\nAndrew Barry proposed a patch to fix this by having hugepages, instead of\nstoring a pointer to their address_space and reaching the superblock from\nthere, had the hugepages store pointers directly to the superblock,\nbumping the reference count as appropriate to avoid it being freed.\nAndrew Morton rejected that version, however, on the grounds that it made\nthe existing layering violation worse.\n\nThis is a reworked version of Andrew\u0027s patch, which removes the extra, and\nsome of the existing, layering violation.  It works by introducing the\nconcept of a hugepage \"subpool\" at the lower hugepage mm layer - that is a\nfinite logical pool of hugepages to allocate from.  hugetlbfs now creates\na subpool for each filesystem instance with a page limit set, and a\npointer to the subpool gets added to each allocated hugepage, instead of\nthe address_space pointer used now.  The subpool has its own lifetime and\nis only freed once all pages in it _and_ all other references to it (i.e.\nsuperblocks) are gone.\n\nsubpools are optional - a NULL subpool pointer is taken by the code to\nmean that no subpool limits are in effect.\n\nPrevious discussion of this bug found in:  \"Fix refcounting in hugetlbfs\nquota handling.\". See:  https://lkml.org/lkml/2011/8/11/28 or\nhttp://marc.info/?l\u003dlinux-mm\u0026m\u003d126928970510627\u0026w\u003d1\n\nv2: Fixed a bug spotted by Hillf Danton, and removed the extra parameter to\nalloc_huge_page() - since it already takes the vma, it is not necessary.\n\nSigned-off-by: Andrew Barry \u003cabarry@cray.com\u003e\nSigned-off-by: David Gibson \u003cdavid@gibson.dropbear.id.au\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ef6942224a185c9e434f6cfe69fe434e732f5b38",
      "tree": "e26664dbfd6077129d75f555757d36b5fbec43c2",
      "parents": [
        "cc9a6c8776615f9c194ccf0b63a0aa5628235545"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Wed Mar 21 16:34:11 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:59 2012 -0700"
      },
      "message": "ksm: cleanup: introduce find_mergeable_vma()\n\nThere are multiple places which perform the same check.  Add a new\nfind_mergeable_vma() to handle this.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-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\n"
    },
    {
      "commit": "cc9a6c8776615f9c194ccf0b63a0aa5628235545",
      "tree": "0cbbf118e86541f8eb2fc7b717a0e08eaced986d",
      "parents": [
        "e845e199362cc5712ba0e7eedc14eed70e144258"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Wed Mar 21 16:34:11 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:59 2012 -0700"
      },
      "message": "cpuset: mm: reduce large amounts of memory barrier related damage v3\n\nCommit c0ff7453bb5c (\"cpuset,mm: fix no node to alloc memory when\nchanging cpuset\u0027s mems\") wins a super prize for the largest number of\nmemory barriers entered into fast paths for one commit.\n\n[get|put]_mems_allowed is incredibly heavy with pairs of full memory\nbarriers inserted into a number of hot paths.  This was detected while\ninvestigating at large page allocator slowdown introduced some time\nafter 2.6.32.  The largest portion of this overhead was shown by\noprofile to be at an mfence introduced by this commit into the page\nallocator hot path.\n\nFor extra style points, the commit introduced the use of yield() in an\nimplementation of what looks like a spinning mutex.\n\nThis patch replaces the full memory barriers on both read and write\nsides with a sequence counter with just read barriers on the fast path\nside.  This is much cheaper on some architectures, including x86.  The\nmain bulk of the patch is the retry logic if the nodemask changes in a\nmanner that can cause a false failure.\n\nWhile updating the nodemask, a check is made to see if a false failure\nis a risk.  If it is, the sequence number gets bumped and parallel\nallocators will briefly stall while the nodemask update takes place.\n\nIn a page fault test microbenchmark, oprofile samples from\n__alloc_pages_nodemask went from 4.53% of all samples to 1.15%.  The\nactual results were\n\n                             3.3.0-rc3          3.3.0-rc3\n                             rc3-vanilla        nobarrier-v2r1\n    Clients   1 UserTime       0.07 (  0.00%)   0.08 (-14.19%)\n    Clients   2 UserTime       0.07 (  0.00%)   0.07 (  2.72%)\n    Clients   4 UserTime       0.08 (  0.00%)   0.07 (  3.29%)\n    Clients   1 SysTime        0.70 (  0.00%)   0.65 (  6.65%)\n    Clients   2 SysTime        0.85 (  0.00%)   0.82 (  3.65%)\n    Clients   4 SysTime        1.41 (  0.00%)   1.41 (  0.32%)\n    Clients   1 WallTime       0.77 (  0.00%)   0.74 (  4.19%)\n    Clients   2 WallTime       0.47 (  0.00%)   0.45 (  3.73%)\n    Clients   4 WallTime       0.38 (  0.00%)   0.37 (  1.58%)\n    Clients   1 Flt/sec/cpu  497620.28 (  0.00%) 520294.53 (  4.56%)\n    Clients   2 Flt/sec/cpu  414639.05 (  0.00%) 429882.01 (  3.68%)\n    Clients   4 Flt/sec/cpu  257959.16 (  0.00%) 258761.48 (  0.31%)\n    Clients   1 Flt/sec      495161.39 (  0.00%) 517292.87 (  4.47%)\n    Clients   2 Flt/sec      820325.95 (  0.00%) 850289.77 (  3.65%)\n    Clients   4 Flt/sec      1020068.93 (  0.00%) 1022674.06 (  0.26%)\n    MMTests Statistics: duration\n    Sys Time Running Test (seconds)             135.68    132.17\n    User+Sys Time Running Test (seconds)         164.2    160.13\n    Total Elapsed Time (seconds)                123.46    120.87\n\nThe overall improvement is small but the System CPU time is much\nimproved and roughly in correlation to what oprofile reported (these\nperformance figures are without profiling so skew is expected).  The\nactual number of page faults is noticeably improved.\n\nFor benchmarks like kernel builds, the overall benefit is marginal but\nthe system CPU time is slightly reduced.\n\nTo test the actual bug the commit fixed I opened two terminals.  The\nfirst ran within a cpuset and continually ran a small program that\nfaulted 100M of anonymous data.  In a second window, the nodemask of the\ncpuset was continually randomised in a loop.\n\nWithout the commit, the program would fail every so often (usually\nwithin 10 seconds) and obviously with the commit everything worked fine.\nWith this patch applied, it also worked fine so the fix should be\nfunctionally equivalent.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e845e199362cc5712ba0e7eedc14eed70e144258",
      "tree": "3968125d82e512c3aee44ed96694fdd58b863506",
      "parents": [
        "c7cfa37b7324a190fc36ff116d79d0f899e8d273"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Mar 21 16:34:10 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:59 2012 -0700"
      },
      "message": "mm, memcg: pass charge order to oom killer\n\nThe oom killer typically displays the allocation order at the time of oom\nas a part of its diangostic messages (for global, cpuset, and mempolicy\nooms).\n\nThe memory controller may also pass the charge order to the oom killer so\nit can emit the same information.  This is useful in determining how large\nthe memory allocation is that triggered the oom killer.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbsingharora@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c7cfa37b7324a190fc36ff116d79d0f899e8d273",
      "tree": "391cf185d299ee0aa892fa59be8910d6f3531356",
      "parents": [
        "9a3c531df9462df6cc2b060f749651723ffc180c"
      ],
      "author": {
        "name": "Copot Alexandru",
        "email": "alex.mihai.c@gmail.com",
        "time": "Wed Mar 21 16:34:10 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:59 2012 -0700"
      },
      "message": "mm/vmscan.c: fix spelling error\n\ns/noticable/noticeable/\n\nSigned-off-by: Copot Alexandru \u003calex.mihai.c@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": "9a3c531df9462df6cc2b060f749651723ffc180c",
      "tree": "448ad57ef6ea3b462849ea1bdd4732e0296e1f4f",
      "parents": [
        "47a133339c332f9f8e155c70f5da401aded69948"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Mar 21 16:34:09 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "mm: update stale lock ordering comment for memory-failure.c\n\nWhen i_mmap_lock changed to a mutex the locking order in memory failure\nwas changed to take the sleeping lock first.  But the big fat mm lock\nordering comment (BFMLO) wasn\u0027t updated.  Do this here.\n\nPointed out by Andrew.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: 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": "47a133339c332f9f8e155c70f5da401aded69948",
      "tree": "94f8fb512ebe8e29d0a3f11a04b04004afd4ab59",
      "parents": [
        "1010bb1b80edb0713415dfe1f97114d320f58c4f"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Mar 21 16:34:09 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "mm: use global_dirty_limit in throttle_vm_writeout()\n\nWhen starting a memory hog task, a desktop box w/o swap is found to go\nunresponsive for a long time.  It\u0027s solely caused by lots of congestion\nwaits in throttle_vm_writeout():\n\n gnome-system-mo-4201 553.073384: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1\n gnome-system-mo-4201 553.073386: writeback_congestion_wait: usec_timeout\u003d100000 usec_delayed\u003d100000\n           gtali-4237 553.080377: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1\n           gtali-4237 553.080378: writeback_congestion_wait: usec_timeout\u003d100000 usec_delayed\u003d100000\n            Xorg-3483 553.103375: congestion_wait: throttle_vm_writeout+0x70/0x7f shrink_mem_cgroup_zone+0x48f/0x4a1\n            Xorg-3483 553.103377: writeback_congestion_wait: usec_timeout\u003d100000 usec_delayed\u003d100000\n\nThe root cause is, the dirty threshold is knocked down a lot by the memory\nhog task.  Fixed by using global_dirty_limit which decreases gradually on\nsuch events and can guarantee we stay above (the also decreasing) nr_dirty\nin the progress of following down to the new dirty threshold.\n\nSigned-off-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\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": "1010bb1b80edb0713415dfe1f97114d320f58c4f",
      "tree": "70aeaba13b61aa442e0c48c99a1035e204910982",
      "parents": [
        "a05b0855fd15504972dba2358e5faa172a1e50ba"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Mar 21 16:34:08 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "mm: don\u0027t set __GFP_WRITE on ramfs/sysfs writes\n\nThere is not much point in skipping zones during allocation based on the\ndirty usage which they\u0027ll never contribute to.  And we\u0027d like to avoid\npage reclaim waits when writing to ramfs/sysfs etc.\n\nSigned-off-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Greg Thelen \u003cgthelen@google.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f5bf18fa22f8c41a13eb8762c7373eb3a93a7333",
      "tree": "3da24eb0edae3563c1937088b72a413e7026fdec",
      "parents": [
        "f0cb3c76ae1ced85f9034480b1b24cd96530ec78"
      ],
      "author": {
        "name": "Nishanth Aravamudan",
        "email": "nacc@linux.vnet.ibm.com",
        "time": "Wed Mar 21 16:34:07 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "bootmem/sparsemem: remove limit constraint in alloc_bootmem_section\n\nWhile testing AMS (Active Memory Sharing) / CMO (Cooperative Memory\nOvercommit) on powerpc, we tripped the following:\n\n  kernel BUG at mm/bootmem.c:483!\n  cpu 0x0: Vector: 700 (Program Check) at [c000000000c03940]\n      pc: c000000000a62bd8: .alloc_bootmem_core+0x90/0x39c\n      lr: c000000000a64bcc: .sparse_early_usemaps_alloc_node+0x84/0x29c\n      sp: c000000000c03bc0\n     msr: 8000000000021032\n    current \u003d 0xc000000000b0cce0\n    paca    \u003d 0xc000000001d80000\n      pid   \u003d 0, comm \u003d swapper\n  kernel BUG at mm/bootmem.c:483!\n  enter ? for help\n  [c000000000c03c80] c000000000a64bcc\n  .sparse_early_usemaps_alloc_node+0x84/0x29c\n  [c000000000c03d50] c000000000a64f10 .sparse_init+0x12c/0x28c\n  [c000000000c03e20] c000000000a474f4 .setup_arch+0x20c/0x294\n  [c000000000c03ee0] c000000000a4079c .start_kernel+0xb4/0x460\n  [c000000000c03f90] c000000000009670 .start_here_common+0x1c/0x2c\n\nThis is\n\n        BUG_ON(limit \u0026\u0026 goal + size \u003e limit);\n\nand after some debugging, it seems that\n\n\tgoal \u003d 0x7ffff000000\n\tlimit \u003d 0x80000000000\n\nand sparse_early_usemaps_alloc_node -\u003e\nsparse_early_usemaps_alloc_pgdat_section calls\n\n\treturn alloc_bootmem_section(usemap_size() * count, section_nr);\n\nThis is on a system with 8TB available via the AMS pool, and as a quirk\nof AMS in firmware, all of that memory shows up in node 0.  So, we end\nup with an allocation that will fail the goal/limit constraints.\n\nIn theory, we could \"fall-back\" to alloc_bootmem_node() in\nsparse_early_usemaps_alloc_node(), but since we actually have HOTREMOVE\ndefined, we\u0027ll BUG_ON() instead.  A simple solution appears to be to\nunconditionally remove the limit condition in alloc_bootmem_section,\nmeaning allocations are allowed to cross section boundaries (necessary\nfor systems of this size).\n\nJohannes Weiner pointed out that if alloc_bootmem_section() no longer\nguarantees section-locality, we need check_usemap_section_nr() to print\npossible cross-dependencies between node descriptors and the usemaps\nallocated through it.  That makes the two loops in\nsparse_early_usemaps_alloc_node() identical, so re-factor the code a\nbit.\n\n[akpm@linux-foundation.org: code simplification]\nSigned-off-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Anton Blanchard \u003canton@au1.ibm.com\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Ben Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Robert Jennings \u003crcj@linux.vnet.ibm.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: \u003cstable@vger.kernel.org\u003e\t[3.3.1]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f0cb3c76ae1ced85f9034480b1b24cd96530ec78",
      "tree": "997ae67621f76b3b6bf588604f85738a8c97cbef",
      "parents": [
        "3268c63eded4612a3d07b56d1e02ce7731e6608e"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Wed Mar 21 16:34:06 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "mm: drain percpu lru add/rotate page-vectors on cpu hot-unplug\n\nThis cpu hotplug hook was accidentally removed in commit 00a62ce91e55\n(\"mm: fix Committed_AS underflow on large NR_CPUS environment\")\n\nThe visible effect of this accident: some pages are borrowed in per-cpu\npage-vectors.  Truncate can deal with it, but these pages cannot be\nreused while this cpu is offline.  So this is like a temporary memory\nleak.\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Eric B Munson \u003cebmunson@us.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3268c63eded4612a3d07b56d1e02ce7731e6608e",
      "tree": "c8a07eb4cdf2697d610bb86d23eb46b0a5f892c2",
      "parents": [
        "385de35722c9a22917e7bc5e63cd83a8cffa5ecd"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux.com",
        "time": "Wed Mar 21 16:34:06 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "mm: fix move/migrate_pages() race on task struct\n\nMigration functions perform the rcu_read_unlock too early.  As a result\nthe task pointed to may change from under us.  This can result in an oops,\nas reported by Dave Hansen in https://lkml.org/lkml/2012/2/23/302.\n\nThe following patch extend the period of the rcu_read_lock until after the\npermissions checks are done.  We also take a refcount so that the task\nreference is stable when calling security check functions and performing\ncpuset node validation (which takes a mutex).\n\nThe refcount is dropped before actual page migration occurs so there is no\nchange to the refcounts held during page migration.\n\nAlso move the determination of the mm of the task struct to immediately\nbefore the do_migrate*() calls so that it is clear that we switch from\nhandling the task during permission checks to the mm for the actual\nmigration.  Since the determination is only done once and we then no\nlonger use the task_struct we can be sure that we operate on a specific\naddress space that will not change from under us.\n\n[akpm@linux-foundation.org: checkpatch fixes]\nSigned-off-by: Christoph Lameter \u003ccl@linux.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nReported-by: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "385de35722c9a22917e7bc5e63cd83a8cffa5ecd",
      "tree": "41ae2e23e096d189cdf614cf1eaf0c8f9ddeeb3b",
      "parents": [
        "6d9d88d07e132259c35f9493b15429e19198489c"
      ],
      "author": {
        "name": "Dean Nelson",
        "email": "dnelson@redhat.com",
        "time": "Wed Mar 21 16:34:05 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "thp: allow a hwpoisoned head page to be put back to LRU\n\nAndrea Arcangeli pointed out to me that a check in __memory_failure()\nwhich was intended to prevent THP tail pages from being checked for the\nabsence of the PG_lru flag (something that is always the case), was also\npreventing THP head pages from being checked.\n\nA THP head page could actually benefit from the call to shake_page() by\nending up being put back to a LRU, provided it had been waiting in a\npagevec array.\n\nAndrea suggested that the \"!PageTransCompound(p)\" in the if-statement\nshould be replaced by a \"!PageTransTail(p)\", thus allowing THP head pages\nto be checked and possibly shaken.\n\nSigned-off-by: Dean Nelson \u003cdnelson@redhat.com\u003e\nCc: Jin Dongming \u003cjin.dongming@np.css.fujitsu.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Hidetoshi Seto \u003cseto.hidetoshi@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": "6d9d88d07e132259c35f9493b15429e19198489c",
      "tree": "96f880fd4f2a07de312f0db576c2484ab5d09457",
      "parents": [
        "08ab9b10d43aca091fdff58b69fc1ec89c5b8a83"
      ],
      "author": {
        "name": "Jarkko Sakkinen",
        "email": "jarkko.sakkinen@intel.com",
        "time": "Wed Mar 21 16:34:05 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "tmpfs: security xattr setting on inode creation\n\nAdds to generic xattr support introduced in Linux 3.0 by implementing\ninitxattrs callback.  This enables consulting of security attributes from\nLSM and EVM when inode is created.\n\n[hughd@google.com: moved under CONFIG_TMPFS_XATTR, with memcpy in shmem_xattr_alloc]\nSigned-off-by: Jarkko Sakkinen \u003cjarkko.sakkinen@intel.com\u003e\nReviewed-by: James Morris \u003cjames.l.morris@oracle.com\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "08ab9b10d43aca091fdff58b69fc1ec89c5b8a83",
      "tree": "73abfd3a257f3feadc0fa28c3117aaa9d95af596",
      "parents": [
        "b76437579d1344b612cf1851ae610c636cec7db0"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Mar 21 16:34:04 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "mm, oom: force oom kill on sysrq+f\n\nThe oom killer chooses not to kill a thread if:\n\n - an eligible thread has already been oom killed and has yet to exit,\n   and\n\n - an eligible thread is exiting but has yet to free all its memory and\n   is not the thread attempting to currently allocate memory.\n\nSysRq+F manually invokes the global oom killer to kill a memory-hogging\ntask.  This is normally done as a last resort to free memory when no\nprogress is being made or to test the oom killer itself.\n\nFor both uses, we always want to kill a thread and never defer.  This\npatch causes SysRq+F to always kill an eligible thread and can be used to\nforce a kill even if another oom killed thread has failed to exit.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b76437579d1344b612cf1851ae610c636cec7db0",
      "tree": "37c31c957f1159635258168e27e49b90347e37aa",
      "parents": [
        "9e81130b7ce23050335b1197bb51743517b5b9d0"
      ],
      "author": {
        "name": "Siddhesh Poyarekar",
        "email": "siddhesh.poyarekar@gmail.com",
        "time": "Wed Mar 21 16:34:04 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "procfs: mark thread stack correctly in proc/\u003cpid\u003e/maps\n\nStack for a new thread is mapped by userspace code and passed via\nsys_clone.  This memory is currently seen as anonymous in\n/proc/\u003cpid\u003e/maps, which makes it difficult to ascertain which mappings\nare being used for thread stacks.  This patch uses the individual task\nstack pointers to determine which vmas are actually thread stacks.\n\nFor a multithreaded program like the following:\n\n\t#include \u003cpthread.h\u003e\n\n\tvoid *thread_main(void *foo)\n\t{\n\t\twhile(1);\n\t}\n\n\tint main()\n\t{\n\t\tpthread_t t;\n\t\tpthread_create(\u0026t, NULL, thread_main, NULL);\n\t\tpthread_join(t, NULL);\n\t}\n\nproc/PID/maps looks like the following:\n\n    00400000-00401000 r-xp 00000000 fd:0a 3671804                            /home/siddhesh/a.out\n    00600000-00601000 rw-p 00000000 fd:0a 3671804                            /home/siddhesh/a.out\n    019ef000-01a10000 rw-p 00000000 00:00 0                                  [heap]\n    7f8a44491000-7f8a44492000 ---p 00000000 00:00 0\n    7f8a44492000-7f8a44c92000 rw-p 00000000 00:00 0\n    7f8a44c92000-7f8a44e3d000 r-xp 00000000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a44e3d000-7f8a4503d000 ---p 001ab000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a4503d000-7f8a45041000 r--p 001ab000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a45041000-7f8a45043000 rw-p 001af000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a45043000-7f8a45048000 rw-p 00000000 00:00 0\n    7f8a45048000-7f8a4505f000 r-xp 00000000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a4505f000-7f8a4525e000 ---p 00017000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a4525e000-7f8a4525f000 r--p 00016000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a4525f000-7f8a45260000 rw-p 00017000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a45260000-7f8a45264000 rw-p 00000000 00:00 0\n    7f8a45264000-7f8a45286000 r-xp 00000000 fd:00 2097348                    /lib64/ld-2.14.90.so\n    7f8a45457000-7f8a4545a000 rw-p 00000000 00:00 0\n    7f8a45484000-7f8a45485000 rw-p 00000000 00:00 0\n    7f8a45485000-7f8a45486000 r--p 00021000 fd:00 2097348                    /lib64/ld-2.14.90.so\n    7f8a45486000-7f8a45487000 rw-p 00022000 fd:00 2097348                    /lib64/ld-2.14.90.so\n    7f8a45487000-7f8a45488000 rw-p 00000000 00:00 0\n    7fff6273b000-7fff6275c000 rw-p 00000000 00:00 0                          [stack]\n    7fff627ff000-7fff62800000 r-xp 00000000 00:00 0                          [vdso]\n    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]\n\nHere, one could guess that 7f8a44492000-7f8a44c92000 is a stack since\nthe earlier vma that has no permissions (7f8a44e3d000-7f8a4503d000) but\nthat is not always a reliable way to find out which vma is a thread\nstack.  Also, /proc/PID/maps and /proc/PID/task/TID/maps has the same\ncontent.\n\nWith this patch in place, /proc/PID/task/TID/maps are treated as \u0027maps\nas the task would see it\u0027 and hence, only the vma that that task uses as\nstack is marked as [stack].  All other \u0027stack\u0027 vmas are marked as\nanonymous memory.  /proc/PID/maps acts as a thread group level view,\nwhere all thread stack vmas are marked as [stack:TID] where TID is the\nprocess ID of the task that uses that vma as stack, while the process\nstack is marked as [stack].\n\nSo /proc/PID/maps will look like this:\n\n    00400000-00401000 r-xp 00000000 fd:0a 3671804                            /home/siddhesh/a.out\n    00600000-00601000 rw-p 00000000 fd:0a 3671804                            /home/siddhesh/a.out\n    019ef000-01a10000 rw-p 00000000 00:00 0                                  [heap]\n    7f8a44491000-7f8a44492000 ---p 00000000 00:00 0\n    7f8a44492000-7f8a44c92000 rw-p 00000000 00:00 0                          [stack:1442]\n    7f8a44c92000-7f8a44e3d000 r-xp 00000000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a44e3d000-7f8a4503d000 ---p 001ab000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a4503d000-7f8a45041000 r--p 001ab000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a45041000-7f8a45043000 rw-p 001af000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a45043000-7f8a45048000 rw-p 00000000 00:00 0\n    7f8a45048000-7f8a4505f000 r-xp 00000000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a4505f000-7f8a4525e000 ---p 00017000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a4525e000-7f8a4525f000 r--p 00016000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a4525f000-7f8a45260000 rw-p 00017000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a45260000-7f8a45264000 rw-p 00000000 00:00 0\n    7f8a45264000-7f8a45286000 r-xp 00000000 fd:00 2097348                    /lib64/ld-2.14.90.so\n    7f8a45457000-7f8a4545a000 rw-p 00000000 00:00 0\n    7f8a45484000-7f8a45485000 rw-p 00000000 00:00 0\n    7f8a45485000-7f8a45486000 r--p 00021000 fd:00 2097348                    /lib64/ld-2.14.90.so\n    7f8a45486000-7f8a45487000 rw-p 00022000 fd:00 2097348                    /lib64/ld-2.14.90.so\n    7f8a45487000-7f8a45488000 rw-p 00000000 00:00 0\n    7fff6273b000-7fff6275c000 rw-p 00000000 00:00 0                          [stack]\n    7fff627ff000-7fff62800000 r-xp 00000000 00:00 0                          [vdso]\n    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]\n\nThus marking all vmas that are used as stacks by the threads in the\nthread group along with the process stack.  The task level maps will\nhowever like this:\n\n    00400000-00401000 r-xp 00000000 fd:0a 3671804                            /home/siddhesh/a.out\n    00600000-00601000 rw-p 00000000 fd:0a 3671804                            /home/siddhesh/a.out\n    019ef000-01a10000 rw-p 00000000 00:00 0                                  [heap]\n    7f8a44491000-7f8a44492000 ---p 00000000 00:00 0\n    7f8a44492000-7f8a44c92000 rw-p 00000000 00:00 0                          [stack]\n    7f8a44c92000-7f8a44e3d000 r-xp 00000000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a44e3d000-7f8a4503d000 ---p 001ab000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a4503d000-7f8a45041000 r--p 001ab000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a45041000-7f8a45043000 rw-p 001af000 fd:00 2097482                    /lib64/libc-2.14.90.so\n    7f8a45043000-7f8a45048000 rw-p 00000000 00:00 0\n    7f8a45048000-7f8a4505f000 r-xp 00000000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a4505f000-7f8a4525e000 ---p 00017000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a4525e000-7f8a4525f000 r--p 00016000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a4525f000-7f8a45260000 rw-p 00017000 fd:00 2099938                    /lib64/libpthread-2.14.90.so\n    7f8a45260000-7f8a45264000 rw-p 00000000 00:00 0\n    7f8a45264000-7f8a45286000 r-xp 00000000 fd:00 2097348                    /lib64/ld-2.14.90.so\n    7f8a45457000-7f8a4545a000 rw-p 00000000 00:00 0\n    7f8a45484000-7f8a45485000 rw-p 00000000 00:00 0\n    7f8a45485000-7f8a45486000 r--p 00021000 fd:00 2097348                    /lib64/ld-2.14.90.so\n    7f8a45486000-7f8a45487000 rw-p 00022000 fd:00 2097348                    /lib64/ld-2.14.90.so\n    7f8a45487000-7f8a45488000 rw-p 00000000 00:00 0\n    7fff6273b000-7fff6275c000 rw-p 00000000 00:00 0\n    7fff627ff000-7fff62800000 r-xp 00000000 00:00 0                          [vdso]\n    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]\n\nwhere only the vma that is being used as a stack by *that* task is\nmarked as [stack].\n\nAnalogous changes have been made to /proc/PID/smaps,\n/proc/PID/numa_maps, /proc/PID/task/TID/smaps and\n/proc/PID/task/TID/numa_maps. Relevant snippets from smaps and\nnuma_maps:\n\n    [siddhesh@localhost ~ ]$ pgrep a.out\n    1441\n    [siddhesh@localhost ~ ]$ cat /proc/1441/smaps | grep \"\\[stack\"\n    7f8a44492000-7f8a44c92000 rw-p 00000000 00:00 0                          [stack:1442]\n    7fff6273b000-7fff6275c000 rw-p 00000000 00:00 0                          [stack]\n    [siddhesh@localhost ~ ]$ cat /proc/1441/task/1442/smaps | grep \"\\[stack\"\n    7f8a44492000-7f8a44c92000 rw-p 00000000 00:00 0                          [stack]\n    [siddhesh@localhost ~ ]$ cat /proc/1441/task/1441/smaps | grep \"\\[stack\"\n    7fff6273b000-7fff6275c000 rw-p 00000000 00:00 0                          [stack]\n    [siddhesh@localhost ~ ]$ cat /proc/1441/numa_maps | grep \"stack\"\n    7f8a44492000 default stack:1442 anon\u003d2 dirty\u003d2 N0\u003d2\n    7fff6273a000 default stack anon\u003d3 dirty\u003d3 N0\u003d3\n    [siddhesh@localhost ~ ]$ cat /proc/1441/task/1442/numa_maps | grep \"stack\"\n    7f8a44492000 default stack anon\u003d2 dirty\u003d2 N0\u003d2\n    [siddhesh@localhost ~ ]$ cat /proc/1441/task/1441/numa_maps | grep \"stack\"\n    7fff6273a000 default stack anon\u003d3 dirty\u003d3 N0\u003d3\n\n[akpm@linux-foundation.org: checkpatch fixes]\n[akpm@linux-foundation.org: fix build]\nSigned-off-by: Siddhesh Poyarekar \u003csiddhesh.poyarekar@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@gmail.com\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Jamie Lokier \u003cjamie@shareable.org\u003e\nCc: Mike Frysinger \u003cvapier@gentoo.org\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9e81130b7ce23050335b1197bb51743517b5b9d0",
      "tree": "6a359131ad2c36ca9e50f0c96a17ef755ad7e168",
      "parents": [
        "fcf4d8212a8f38334679e82ff14532b908b4b451"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Wed Mar 21 16:34:03 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:57 2012 -0700"
      },
      "message": "mm: hugetlb: bail out unmapping after serving reference page\n\nWhen unmapping a given VM range, we could bail out if a reference page is\nsupplied and is unmapped, which is a minor optimization.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d563c0501bf8702b9b683206c09b9defb37d8a8a",
      "tree": "ac3c870c1885337e340d807cd8b5dc0ad8eb0315",
      "parents": [
        "978ea78b65794ef07eb66b9946064dea66b52554"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Wed Mar 21 16:34:02 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:57 2012 -0700"
      },
      "message": "vmscan: handle isolated pages with lru lock released\n\nWhen shrinking inactive lru list, isolated pages are queued on locally\nprivate list, so the lock-hold time could be reduced if pages are counted\nwithout lock protection.\n\nTo achieve that, firstly updating reclaim stat is delayed until the\nputback stage, after reacquiring the lru lock.\n\nSecondly, operations related to vm and zone stats are now proteced with\npreemption disabled as they are per-cpu operations.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6583a84304e5a6cb27ec2aace79ef9c4ba888d12",
      "tree": "48fbc25bafeeffb9527404b8a114aed8390aa5a6",
      "parents": [
        "28073b02bfaaed1e3278acfb8e6e7c9f76d9f2b6"
      ],
      "author": {
        "name": "Kautuk Consul",
        "email": "consul.kautuk@gmail.com",
        "time": "Wed Mar 21 16:34:01 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:57 2012 -0700"
      },
      "message": "rmap: anon_vma_prepare: Reduce code duplication by calling anon_vma_chain_link\n\nReduce code duplication by calling anon_vma_chain_link() from\nanon_vma_prepare().\n\nAlso move anon_vmal_chain_link() to a more suitable location in the file.\n\nSigned-off-by: Kautuk Consul \u003cconsul.kautuk@gmail.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KAMEZWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "28073b02bfaaed1e3278acfb8e6e7c9f76d9f2b6",
      "tree": "54ab2952e2bee85780438a011cf5c1f198ff3dd9",
      "parents": [
        "cc715d99e529d470dde2f33a6614f255adea71f3"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Wed Mar 21 16:34:00 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:57 2012 -0700"
      },
      "message": "mm: hugetlb: defer freeing pages when gathering surplus pages\n\nWhen gathering surplus pages, the number of needed pages is recomputed\nafter reacquiring hugetlb lock to catch changes in resv_huge_pages and\nfree_huge_pages.  Plus it is recomputed with the number of newly allocated\npages involved.\n\nThus freeing pages can be deferred a bit to see if the final page request\nis satisfied, though pages could be allocated less than needed.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cc715d99e529d470dde2f33a6614f255adea71f3",
      "tree": "f8e8aefb8416aed6747e9b5c071e9575484aa912",
      "parents": [
        "ce1744f4ed20ca873360e54502f8a71564ef7cc6"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Wed Mar 21 16:34:00 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:57 2012 -0700"
      },
      "message": "mm: vmscan: forcibly scan highmem if there are too many buffer_heads pinning highmem\n\nStuart Foster reported on bugzilla that copying large amounts of data\nfrom NTFS caused an OOM kill on 32-bit X86 with 16G of memory.  Andrew\nMorton correctly identified that the problem was NTFS was using 512\nblocks meaning each page had 8 buffer_heads in low memory pinning it.\n\nIn the past, direct reclaim used to scan highmem even if the allocating\nprocess did not specify __GFP_HIGHMEM but not any more.  kswapd no longer\nwill reclaim from zones that are above the high watermark.  The intention\nin both cases was to minimise unnecessary reclaim.  The downside is on\nmachines with large amounts of highmem that lowmem can be fully consumed\nby buffer_heads with nothing trying to free them.\n\nThe following patch is based on a suggestion by Andrew Morton to extend\nthe buffer_heads_over_limit case to force kswapd and direct reclaim to\nscan the highmem zone regardless of the allocation request or watermarks.\n\nAddresses https://bugzilla.kernel.org/show_bug.cgi?id\u003d42578\n\n[hughd@google.com: move buffer_heads_over_limit check up]\n[akpm@linux-foundation.org: buffer_heads_over_limit is unlikely]\nReported-by: Stuart Foster \u003csmf.linux@ntlworld.com\u003e\nTested-by: Stuart Foster \u003csmf.linux@ntlworld.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nCc: stable \u003cstable@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ce1744f4ed20ca873360e54502f8a71564ef7cc6",
      "tree": "ec26dbc6a5417c75a8fa65ab093374d3e0045032",
      "parents": [
        "092b50bacd1cdbffef2643b7a46f2a215407919c"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Wed Mar 21 16:33:59 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:57 2012 -0700"
      },
      "message": "mm: replace PAGE_MIGRATION with IS_ENABLED(CONFIG_MIGRATION)\n\nSince commit 2a11c8ea20bf (\"kconfig: Introduce IS_ENABLED(),\nIS_BUILTIN() and IS_MODULE()\") there is a generic grep-friendly method\nfor checking config options in C expressions.\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "025c5b2451e42c9e8dfdecd6dc84956ce8f321b5",
      "tree": "423b4ef1a0ce021360304a80f6e0ba902581a3ad",
      "parents": [
        "5aaabe831eb527e0d9284f0745d830a755f70393"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Mar 21 16:33:57 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:57 2012 -0700"
      },
      "message": "thp: optimize away unnecessary page table locking\n\nCurrently when we check if we can handle thp as it is or we need to split\nit into regular sized pages, we hold page table lock prior to check\nwhether a given pmd is mapping thp or not.  Because of this, when it\u0027s not\n\"huge pmd\" we suffer from unnecessary lock/unlock overhead.  To remove it,\nthis patch introduces a optimized check function and replace several\nsimilar logics with it.\n\n[akpm@linux-foundation.org: checkpatch fixes]\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Jiri Slaby \u003cjslaby@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": "b716ad953a2bc4a543143c1d9836b7007a4b182f",
      "tree": "99791c6c857b1ff7b922eaa0163ec3c912549009",
      "parents": [
        "f44d21985eb6af7361d3785e26923355172147bd"
      ],
      "author": {
        "name": "Xiao Guangrong",
        "email": "xiaoguangrong@linux.vnet.ibm.com",
        "time": "Wed Mar 21 16:33:56 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:56 2012 -0700"
      },
      "message": "mm: search from free_area_cache for the bigger size\n\nIf the required size is bigger than cached_hole_size it is better to\nsearch from free_area_cache - it is easier to get a free region,\nspecifically for the 64 bit process whose address space is large enough\n\nDo it just as hugetlb_get_unmapped_area_topdown() in arch/x86/mm/hugetlbpage.c\n\nSigned-off-by: Xiao Guangrong \u003cxiaoguangrong@linux.vnet.ibm.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f44d21985eb6af7361d3785e26923355172147bd",
      "tree": "1ced398274730cee6cd9173696e6fe08e52c6e91",
      "parents": [
        "cbde83e21c4fd50bfc4240408355c1e5d393063d"
      ],
      "author": {
        "name": "Xiao Guangrong",
        "email": "xiaoguangrong@linux.vnet.ibm.com",
        "time": "Wed Mar 21 16:33:56 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:56 2012 -0700"
      },
      "message": "mm: do not reset cached_hole_size when vma is unmapped\n\nIn the current code, cached_hole_size is set to the maximum value if the\nunmapped vma is less that free_area_cache so the next search will search\nfrom the base address.\n\nActually, we can keep cached_hole_size so that if the next required size\nis more than cached_hole_size, it can search from free_area_cache.\n\nSigned-off-by: Xiao Guangrong \u003cxiaoguangrong@linux.vnet.ibm.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aad6ec3777bf4930d4f7293745cc4c17a2d87947",
      "tree": "9a2d141e3361e621d5d6f624d4f1b1e075dc9e7d",
      "parents": [
        "8575ec29f61da83a2bf382c8c490499dc022101e"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@oracle.com",
        "time": "Wed Mar 21 16:33:54 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:56 2012 -0700"
      },
      "message": "mm: compaction: make compact_control order signed\n\n\"order\" is -1 when compacting via /proc/sys/vm/compact_memory.  Making\nit unsigned causes a bug in __compact_pgdat() when we test:\n\n\tif (cc-\u003eorder \u003c 0 || !compaction_deferred(zone, cc-\u003eorder))\n\t\tcompact_zone(zone, cc);\n\n[akpm@linux-foundation.org: make __compact_pgdat()\u0027s comparison match other code sites]\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Minchan Kim \u003cminchan@kernel.org\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8575ec29f61da83a2bf382c8c490499dc022101e",
      "tree": "bba641ceec47b52ce2a91bdf117aed01d476ea9f",
      "parents": [
        "aff622495c9a0b56148192e53bdec539f5e147f2"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Mar 21 16:33:53 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:56 2012 -0700"
      },
      "message": "compact_pgdat: workaround lockdep warning in kswapd\n\nI get this lockdep warning from swapping load on linux-next, due to\n\"vmscan: kswapd carefully call compaction\".\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\n[ INFO: inconsistent lock state ]\n3.3.0-rc2-next-20120201 #5 Not tainted\n---------------------------------\ninconsistent {RECLAIM_FS-ON-W} -\u003e {IN-RECLAIM_FS-W} usage.\nkswapd0/28 [HC0[0]:SC0[0]:HE1:SE1] takes:\n (pcpu_alloc_mutex){+.+.?.}, at: [\u003cffffffff810d6684\u003e] pcpu_alloc+0x67/0x325\n{RECLAIM_FS-ON-W} state was registered at:\n  [\u003cffffffff81099b75\u003e] mark_held_locks+0xd7/0x103\n  [\u003cffffffff8109a13c\u003e] lockdep_trace_alloc+0x85/0x9e\n  [\u003cffffffff810f6bdc\u003e] __kmalloc+0x6c/0x14b\n  [\u003cffffffff810d57fd\u003e] pcpu_mem_zalloc+0x59/0x62\n  [\u003cffffffff810d5d16\u003e] pcpu_extend_area_map+0x26/0xb1\n  [\u003cffffffff810d679f\u003e] pcpu_alloc+0x182/0x325\n  [\u003cffffffff810d694d\u003e] __alloc_percpu+0xb/0xd\n  [\u003cffffffff8142ebfd\u003e] snmp_mib_init+0x1e/0x2e\n  [\u003cffffffff8185cd8d\u003e] ipv4_mib_init_net+0x7a/0x184\n  [\u003cffffffff813dc963\u003e] ops_init.clone.0+0x6b/0x73\n  [\u003cffffffff813dc9cc\u003e] register_pernet_operations+0x61/0xa0\n  [\u003cffffffff813dca8e\u003e] register_pernet_subsys+0x29/0x42\n  [\u003cffffffff8185d044\u003e] inet_init+0x1ad/0x252\n  [\u003cffffffff810002e3\u003e] do_one_initcall+0x7a/0x12f\n  [\u003cffffffff81832bc5\u003e] kernel_init+0x9d/0x11e\n  [\u003cffffffff814e51e4\u003e] kernel_thread_helper+0x4/0x10\nirq event stamp: 656613\nhardirqs last  enabled at (656613): [\u003cffffffff814e0ddc\u003e] __mutex_unlock_slowpath+0x104/0x128\nhardirqs last disabled at (656612): [\u003cffffffff814e0d34\u003e] __mutex_unlock_slowpath+0x5c/0x128\nsoftirqs last  enabled at (655568): [\u003cffffffff8105b4a5\u003e] __do_softirq+0x120/0x136\nsoftirqs last disabled at (654757): [\u003cffffffff814e52dc\u003e] call_softirq+0x1c/0x30\n\nother info that might help us debug this:\n Possible unsafe locking scenario:\n\n       CPU0\n       ----\n  lock(pcpu_alloc_mutex);\n  \u003cInterrupt\u003e\n    lock(pcpu_alloc_mutex);\n\n *** DEADLOCK ***\n\nno locks held by kswapd0/28.\n\nstack backtrace:\nPid: 28, comm: kswapd0 Not tainted 3.3.0-rc2-next-20120201 #5\nCall Trace:\n [\u003cffffffff810981f4\u003e] print_usage_bug+0x1bf/0x1d0\n [\u003cffffffff81096c3e\u003e] ? print_irq_inversion_bug+0x1d9/0x1d9\n [\u003cffffffff810982c0\u003e] mark_lock_irq+0xbb/0x22e\n [\u003cffffffff810c5399\u003e] ? free_hot_cold_page+0x13d/0x14f\n [\u003cffffffff81098684\u003e] mark_lock+0x251/0x331\n [\u003cffffffff81098893\u003e] mark_irqflags+0x12f/0x141\n [\u003cffffffff81098e32\u003e] __lock_acquire+0x58d/0x753\n [\u003cffffffff810d6684\u003e] ? pcpu_alloc+0x67/0x325\n [\u003cffffffff81099433\u003e] lock_acquire+0x54/0x6a\n [\u003cffffffff810d6684\u003e] ? pcpu_alloc+0x67/0x325\n [\u003cffffffff8107a5b8\u003e] ? add_preempt_count+0xa9/0xae\n [\u003cffffffff814e0a21\u003e] mutex_lock_nested+0x5e/0x315\n [\u003cffffffff810d6684\u003e] ? pcpu_alloc+0x67/0x325\n [\u003cffffffff81098f81\u003e] ? __lock_acquire+0x6dc/0x753\n [\u003cffffffff810c9fb0\u003e] ? __pagevec_release+0x2c/0x2c\n [\u003cffffffff810d6684\u003e] pcpu_alloc+0x67/0x325\n [\u003cffffffff810c9fb0\u003e] ? __pagevec_release+0x2c/0x2c\n [\u003cffffffff810d694d\u003e] __alloc_percpu+0xb/0xd\n [\u003cffffffff8106c35e\u003e] schedule_on_each_cpu+0x23/0x110\n [\u003cffffffff810c9fcb\u003e] lru_add_drain_all+0x10/0x12\n [\u003cffffffff810f126f\u003e] __compact_pgdat+0x20/0x182\n [\u003cffffffff810f15c2\u003e] compact_pgdat+0x27/0x29\n [\u003cffffffff810c306b\u003e] ? zone_watermark_ok+0x1a/0x1c\n [\u003cffffffff810cdf6f\u003e] balance_pgdat+0x732/0x751\n [\u003cffffffff810ce0ed\u003e] kswapd+0x15f/0x178\n [\u003cffffffff810cdf8e\u003e] ? balance_pgdat+0x751/0x751\n [\u003cffffffff8106fd11\u003e] kthread+0x84/0x8c\n [\u003cffffffff814e51e4\u003e] kernel_thread_helper+0x4/0x10\n [\u003cffffffff810787ed\u003e] ? finish_task_switch+0x85/0xea\n [\u003cffffffff814e3861\u003e] ? retint_restore_args+0xe/0xe\n [\u003cffffffff8106fc8d\u003e] ? __init_kthread_worker+0x56/0x56\n [\u003cffffffff814e51e0\u003e] ? gs_change+0xb/0xb\n\nThe RECLAIM_FS notations indicate that it\u0027s doing the GFP_FS checking that\nNick hacked into lockdep a while back: I think we\u0027re intended to read that\n\"\u003cInterrupt\u003e\" in the DEADLOCK scenario as \"\u003cDirect reclaim\u003e\".\n\nI\u0027m hazy, I have not reached any conclusion as to whether it\u0027s right to\ncomplain or not; but I believe it\u0027s uneasy about kswapd now doing the\nmutex_lock(\u0026pcpu_alloc_mutex) which lru_add_drain_all() entails.  Nor have\nI reached any conclusion as to whether it\u0027s important for kswapd to do\nthat draining or not.\n\nBut so as not to get blocked on this, with lockdep disabled from giving\nfurther reports, here\u0027s a patch which removes the lru_add_drain_all() from\nkswapd\u0027s callpath (and calls it only once from compact_nodes(), instead of\nonce per node).\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aff622495c9a0b56148192e53bdec539f5e147f2",
      "tree": "78f6400d8b6bec3279483006a0e9543e47aa833e",
      "parents": [
        "7be62de99adcab4449d416977b4274985c5fe023"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Wed Mar 21 16:33:52 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:56 2012 -0700"
      },
      "message": "vmscan: only defer compaction for failed order and higher\n\nCurrently a failed order-9 (transparent hugepage) compaction can lead to\nmemory compaction being temporarily disabled for a memory zone.  Even if\nwe only need compaction for an order 2 allocation, eg.  for jumbo frames\nnetworking.\n\nThe fix is relatively straightforward: keep track of the highest order at\nwhich compaction is succeeding, and only defer compaction for orders at\nwhich compaction is failing.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hillf Danton \u003cdhillf@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": "7be62de99adcab4449d416977b4274985c5fe023",
      "tree": "20ae021ec9811ad730e6a17a3530d3aa6b5027d0",
      "parents": [
        "fe2c2a106663130a5ab45cb0e3414b52df2fff0c"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Wed Mar 21 16:33:52 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:56 2012 -0700"
      },
      "message": "vmscan: kswapd carefully call compaction\n\nWith CONFIG_COMPACTION enabled, kswapd does not try to free contiguous\nfree pages, even when it is woken for a higher order request.\n\nThis could be bad for eg.  jumbo frame network allocations, which are done\nfrom interrupt context and cannot compact memory themselves.  Higher than\nbefore allocation failure rates in the network receive path have been\nobserved in kernels with compaction enabled.\n\nTeach kswapd to defragment the memory zones in a node, but only if\nrequired and compaction is not deferred in a zone.\n\n[akpm@linux-foundation.org: reduce scope of zones_need_compaction]\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hillf Danton \u003cdhillf@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": "fe2c2a106663130a5ab45cb0e3414b52df2fff0c",
      "tree": "4c2651ee4e33c73069bc41fa936b5227c9d9f2a9",
      "parents": [
        "67f96aa252e606cdf6c3cf1032952ec207ec0cf0"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Wed Mar 21 16:33:51 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:56 2012 -0700"
      },
      "message": "vmscan: reclaim at order 0 when compaction is enabled\n\nWhen built with CONFIG_COMPACTION, kswapd should not try to free\ncontiguous pages, because it is not trying hard enough to have a real\nchance at being successful, but still disrupts the LRU enough to break\nother things.\n\nDo not do higher order page isolation unless we really are in lumpy\nreclaim mode.\n\nStop reclaiming pages once we have enough free pages that compaction can\ndeal with things, and we hit the normal order 0 watermarks used by kswapd.\n\nAlso remove a line of code that increments balanced right before exiting\nthe function.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hillf Danton \u003cdhillf@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": "67f96aa252e606cdf6c3cf1032952ec207ec0cf0",
      "tree": "a5a4299dd32789831eda558b51c0120272846664",
      "parents": [
        "c38446cc65e1f2b3eb8630c53943b94c4f65f670"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Wed Mar 21 16:33:50 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:56 2012 -0700"
      },
      "message": "mm: make swapin readahead skip over holes\n\nEver since abandoning the virtual scan of processes, for scalability\nreasons, swap space has been a little more fragmented than before.  This\ncan lead to the situation where a large memory user is killed, swap space\nends up full of \"holes\" and swapin readahead is totally ineffective.\n\nOn my home system, after killing a leaky firefox it took over an hour to\npage just under 2GB of memory back in, slowing the virtual machines down\nto a crawl.\n\nThis patch makes swapin readahead simply skip over holes, instead of\nstopping at them.  This allows the system to swap things back in at rates\nof several MB/second, instead of a few hundred kB/second.\n\nThe checks done in valid_swaphandles are already done in\nread_swap_cache_async as well, allowing us to remove a fair amount of\ncode.\n\n[akpm@linux-foundation.org: fix it for page_cluster \u003e\u003d 32]\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@gmail.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Adrian Drzewiecki \u003cz@drze.net\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c38446cc65e1f2b3eb8630c53943b94c4f65f670",
      "tree": "0eb0e73d2bef37bc1ce8212bf5dd43abdc2b5328",
      "parents": [
        "69c978232aaa99476f9bd002c2a29a84fa3779b5"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Wed Mar 21 16:33:50 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:56 2012 -0700"
      },
      "message": "mm: vmscan: fix misused nr_reclaimed in shrink_mem_cgroup_zone()\n\nThe value of nr_reclaimed is the number of pages reclaimed in the current\nround of the loop, whereas nr_to_reclaim should be compared with the\nnumber of pages reclaimed in all rounds.\n\nIn each round of the loop, reclaimed pages are cut off from the reclaim\ngoal, and the loop stops once the goal achieved.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "69c978232aaa99476f9bd002c2a29a84fa3779b5",
      "tree": "7edb0da034b8824040f4f7327dd31ad260532167",
      "parents": [
        "6131728914810a6c02e08750e13e45870101e862"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Wed Mar 21 16:33:49 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:55 2012 -0700"
      },
      "message": "mm: make get_mm_counter static-inline\n\nMake get_mm_counter() always static inline, it is simple enough for that.\nAnd remove unused set_mm_counter()\n\nbloat-o-meter:\n\nadd/remove: 0/1 grow/shrink: 4/12 up/down: 99/-341 (-242)\nfunction                                     old     new   delta\ntry_to_unmap_one                             886     952     +66\nsys_remap_file_pages                        1214    1230     +16\ndup_mm                                      1684    1700     +16\ndo_exit                                     2277    2278      +1\nzap_page_range                               208     205      -3\nunmap_region                                 304     296      -8\nstatic.oom_kill_process                      554     546      -8\ntry_to_unmap_file                           1716    1700     -16\ngetrusage                                    925     909     -16\nflush_old_exec                              1704    1688     -16\nstatic.dump_header                           416     390     -26\nacct_update_integrals                        218     187     -31\ndo_task_stat                                2986    2954     -32\nget_mm_counter                                34       -     -34\nxacct_add_tsk                                371     334     -37\ntask_statm                                   172     118     -54\ntask_mem                                     383     323     -60\n\ntry_to_unmap_one() grows because update_hiwater_rss() now completely inline.\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6131728914810a6c02e08750e13e45870101e862",
      "tree": "d96768dccd30bc5c84cfd39594167efd6405782d",
      "parents": [
        "c3f0327f8e9d7a503f0d64573c311eddd61f197d"
      ],
      "author": {
        "name": "Hillf Danton",
        "email": "dhillf@gmail.com",
        "time": "Wed Mar 21 16:33:48 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:55 2012 -0700"
      },
      "message": "mm/vmscan.c: cleanup with s/reclaim_mode/isolate_mode/\n\nWith tons of reclaim_mode (defined as one field of struct scan_control)\nalready in the file, it is clearer to rename the local reclaim_mode when\nsetting up the isolation mode.\n\nSigned-off-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@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\n"
    },
    {
      "commit": "dc3f21eadeea6d9898271ff32d35d5e00c6872ea",
      "tree": "be56e2d8b5bf7ce4a140d020b5e248dff6a06795",
      "parents": [
        "8447d950e7445cae71ad66d0e33784f8388aaf9d"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Mar 21 16:33:47 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:55 2012 -0700"
      },
      "message": "mm, oom: introduce independent oom killer ratelimit state\n\nprintk_ratelimit() uses the global ratelimit state for all printks.  The\noom killer should not be subjected to this state just because another\nsubsystem or driver may be flooding the kernel log.\n\nThis patch introduces printk ratelimiting specifically for the oom killer.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8447d950e7445cae71ad66d0e33784f8388aaf9d",
      "tree": "b7f7cfba3d2264b87ca168131e0a65d89faa51a8",
      "parents": [
        "647f2bdf4a00dbcaa8964286501d68e7d2e6da93"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Mar 21 16:33:47 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:55 2012 -0700"
      },
      "message": "mm, oom: do not emit oom killer warning if chosen thread is already exiting\n\nIf a thread is chosen for oom kill and is already PF_EXITING, then the oom\nkiller simply sets TIF_MEMDIE and returns.  This allows the thread to have\naccess to memory reserves so that it may quickly exit.  This logic is\npreceeded with a comment saying there\u0027s no need to alarm the sysadmin.\nThis patch adds truth to that statement.\n\nThere\u0027s no need to emit any warning about the oom condition if the thread\nis already exiting since it will not be killed.  In this condition, just\nsilently return the oom killer since its only giving access to memory\nreserves and is otherwise a no-op.\n\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "647f2bdf4a00dbcaa8964286501d68e7d2e6da93",
      "tree": "a9efa94d4add977b4629b137de7f4d002eec56dd",
      "parents": [
        "2a1c9b1fc0a0ea2e30cdeb69062647c5c5ae661f"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Mar 21 16:33:46 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:55 2012 -0700"
      },
      "message": "mm, oom: fold oom_kill_task() into oom_kill_process()\n\noom_kill_task() has a single caller, so fold it into its parent function,\noom_kill_process().  Slightly reduces the number of lines in the oom\nkiller.\n\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2a1c9b1fc0a0ea2e30cdeb69062647c5c5ae661f",
      "tree": "a123d061a5d95984e0446a350189f4a310d06b53",
      "parents": [
        "ce24d8a14207c2036df86d2bd3d14b4393eb51e3"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Wed Mar 21 16:33:46 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:55 2012 -0700"
      },
      "message": "mm, oom: avoid looping when chosen thread detaches its mm\n\noom_kill_task() returns non-zero iff the chosen process does not have any\nthreads with an attached -\u003emm.\n\nIn such a case, it\u0027s better to just return to the page allocator and retry\nthe allocation because memory could have been freed in the interim and the\noom condition may no longer exist.  It\u0027s unnecessary to loop in the oom\nkiller and find another thread to kill.\n\nThis allows both oom_kill_task() and oom_kill_process() to be converted to\nvoid functions.  If the oom condition persists, the oom killer will be\nrecalled.\n\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1a5a9906d4e8d1976b701f889d8f35d54b928f25",
      "tree": "e51912e725f224663a738045a4d0528d08da4572",
      "parents": [
        "31f6765266417c0d99f0e922fe82848a7c9c2ae9"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Wed Mar 21 16:33:42 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:54 2012 -0700"
      },
      "message": "mm: thp: fix pmd_bad() triggering in code paths holding mmap_sem read mode\n\nIn some cases it may happen that pmd_none_or_clear_bad() is called with\nthe mmap_sem hold in read mode.  In those cases the huge page faults can\nallocate hugepmds under pmd_none_or_clear_bad() and that can trigger a\nfalse positive from pmd_bad() that will not like to see a pmd\nmaterializing as trans huge.\n\nIt\u0027s not khugepaged causing the problem, khugepaged holds the mmap_sem\nin write mode (and all those sites must hold the mmap_sem in read mode\nto prevent pagetables to go away from under them, during code review it\nseems vm86 mode on 32bit kernels requires that too unless it\u0027s\nrestricted to 1 thread per process or UP builds).  The race is only with\nthe huge pagefaults that can convert a pmd_none() into a\npmd_trans_huge().\n\nEffectively all these pmd_none_or_clear_bad() sites running with\nmmap_sem in read mode are somewhat speculative with the page faults, and\nthe result is always undefined when they run simultaneously.  This is\nprobably why it wasn\u0027t common to run into this.  For example if the\nmadvise(MADV_DONTNEED) runs zap_page_range() shortly before the page\nfault, the hugepage will not be zapped, if the page fault runs first it\nwill be zapped.\n\nAltering pmd_bad() not to error out if it finds hugepmds won\u0027t be enough\nto fix this, because zap_pmd_range would then proceed to call\nzap_pte_range (which would be incorrect if the pmd become a\npmd_trans_huge()).\n\nThe simplest way to fix this is to read the pmd in the local stack\n(regardless of what we read, no need of actual CPU barriers, only\ncompiler barrier needed), and be sure it is not changing under the code\nthat computes its value.  Even if the real pmd is changing under the\nvalue we hold on the stack, we don\u0027t care.  If we actually end up in\nzap_pte_range it means the pmd was not none already and it was not huge,\nand it can\u0027t become huge from under us (khugepaged locking explained\nabove).\n\nAll we need is to enforce that there is no way anymore that in a code\npath like below, pmd_trans_huge can be false, but pmd_none_or_clear_bad\ncan run into a hugepmd.  The overhead of a barrier() is just a compiler\ntweak and should not be measurable (I only added it for THP builds).  I\ndon\u0027t exclude different compiler versions may have prevented the race\ntoo by caching the value of *pmd on the stack (that hasn\u0027t been\nverified, but it wouldn\u0027t be impossible considering\npmd_none_or_clear_bad, pmd_bad, pmd_trans_huge, pmd_none are all inlines\nand there\u0027s no external function called in between pmd_trans_huge and\npmd_none_or_clear_bad).\n\n\t\tif (pmd_trans_huge(*pmd)) {\n\t\t\tif (next-addr !\u003d HPAGE_PMD_SIZE) {\n\t\t\t\tVM_BUG_ON(!rwsem_is_locked(\u0026tlb-\u003emm-\u003emmap_sem));\n\t\t\t\tsplit_huge_page_pmd(vma-\u003evm_mm, pmd);\n\t\t\t} else if (zap_huge_pmd(tlb, vma, pmd, addr))\n\t\t\t\tcontinue;\n\t\t\t/* fall through */\n\t\t}\n\t\tif (pmd_none_or_clear_bad(pmd))\n\nBecause this race condition could be exercised without special\nprivileges this was reported in CVE-2012-1179.\n\nThe race was identified and fully explained by Ulrich who debugged it.\nI\u0027m quoting his accurate explanation below, for reference.\n\n\u003d\u003d\u003d\u003d\u003d\u003d start quote \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n      mapcount 0 page_mapcount 1\n      kernel BUG at mm/huge_memory.c:1384!\n\n    At some point prior to the panic, a \"bad pmd ...\" message similar to the\n    following is logged on the console:\n\n      mm/memory.c:145: bad pmd ffff8800376e1f98(80000000314000e7).\n\n    The \"bad pmd ...\" message is logged by pmd_clear_bad() before it clears\n    the page\u0027s PMD table entry.\n\n        143 void pmd_clear_bad(pmd_t *pmd)\n        144 {\n    -\u003e  145         pmd_ERROR(*pmd);\n        146         pmd_clear(pmd);\n        147 }\n\n    After the PMD table entry has been cleared, there is an inconsistency\n    between the actual number of PMD table entries that are mapping the page\n    and the page\u0027s map count (_mapcount field in struct page). When the page\n    is subsequently reclaimed, __split_huge_page() detects this inconsistency.\n\n       1381         if (mapcount !\u003d page_mapcount(page))\n       1382                 printk(KERN_ERR \"mapcount %d page_mapcount %d\\n\",\n       1383                        mapcount, page_mapcount(page));\n    -\u003e 1384         BUG_ON(mapcount !\u003d page_mapcount(page));\n\n    The root cause of the problem is a race of two threads in a multithreaded\n    process. Thread B incurs a page fault on a virtual address that has never\n    been accessed (PMD entry is zero) while Thread A is executing an madvise()\n    system call on a virtual address within the same 2 MB (huge page) range.\n\n               virtual address space\n              .---------------------.\n              |                     |\n              |                     |\n            .-|---------------------|\n            | |                     |\n            | |                     |\u003c-- B(fault)\n            | |                     |\n      2 MB  | |/////////////////////|-.\n      huge \u003c  |/////////////////////|  \u003e A(range)\n      page  | |/////////////////////|-\u0027\n            | |                     |\n            | |                     |\n            \u0027-|---------------------|\n              |                     |\n              |                     |\n              \u0027---------------------\u0027\n\n    - Thread A is executing an madvise(..., MADV_DONTNEED) system call\n      on the virtual address range \"A(range)\" shown in the picture.\n\n    sys_madvise\n      // Acquire the semaphore in shared mode.\n      down_read(\u0026current-\u003emm-\u003emmap_sem)\n      ...\n      madvise_vma\n        switch (behavior)\n        case MADV_DONTNEED:\n             madvise_dontneed\n               zap_page_range\n                 unmap_vmas\n                   unmap_page_range\n                     zap_pud_range\n                       zap_pmd_range\n                         //\n                         // Assume that this huge page has never been accessed.\n                         // I.e. content of the PMD entry is zero (not mapped).\n                         //\n                         if (pmd_trans_huge(*pmd)) {\n                             // We don\u0027t get here due to the above assumption.\n                         }\n                         //\n                         // Assume that Thread B incurred a page fault and\n             .---------\u003e // sneaks in here as shown below.\n             |           //\n             |           if (pmd_none_or_clear_bad(pmd))\n             |               {\n             |                 if (unlikely(pmd_bad(*pmd)))\n             |                     pmd_clear_bad\n             |                     {\n             |                       pmd_ERROR\n             |                         // Log \"bad pmd ...\" message here.\n             |                       pmd_clear\n             |                         // Clear the page\u0027s PMD entry.\n             |                         // Thread B incremented the map count\n             |                         // in page_add_new_anon_rmap(), but\n             |                         // now the page is no longer mapped\n             |                         // by a PMD entry (-\u003e inconsistency).\n             |                     }\n             |               }\n             |\n             v\n    - Thread B is handling a page fault on virtual address \"B(fault)\" shown\n      in the picture.\n\n    ...\n    do_page_fault\n      __do_page_fault\n        // Acquire the semaphore in shared mode.\n        down_read_trylock(\u0026mm-\u003emmap_sem)\n        ...\n        handle_mm_fault\n          if (pmd_none(*pmd) \u0026\u0026 transparent_hugepage_enabled(vma))\n              // We get here due to the above assumption (PMD entry is zero).\n              do_huge_pmd_anonymous_page\n                alloc_hugepage_vma\n                  // Allocate a new transparent huge page here.\n                ...\n                __do_huge_pmd_anonymous_page\n                  ...\n                  spin_lock(\u0026mm-\u003epage_table_lock)\n                  ...\n                  page_add_new_anon_rmap\n                    // Here we increment the page\u0027s map count (starts at -1).\n                    atomic_set(\u0026page-\u003e_mapcount, 0)\n                  set_pmd_at\n                    // Here we set the page\u0027s PMD entry which will be cleared\n                    // when Thread A calls pmd_clear_bad().\n                  ...\n                  spin_unlock(\u0026mm-\u003epage_table_lock)\n\n    The mmap_sem does not prevent the race because both threads are acquiring\n    it in shared mode (down_read).  Thread B holds the page_table_lock while\n    the page\u0027s map count and PMD table entry are updated.  However, Thread A\n    does not synchronize on that lock.\n\n\u003d\u003d\u003d\u003d\u003d\u003d end quote \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n[akpm@linux-foundation.org: checkpatch fixes]\nReported-by: Ulrich Obergfell \u003cuobergfe@redhat.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nAcked-by: Larry Woodman \u003clwoodman@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\t\t[2.6.38+]\nCc: Mark Salter \u003cmsalter@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e2a0883e4071237d09b604a342c28b96b44a04b3",
      "tree": "aa56f4d376b5eb1c32358c19c2669c2a94e0e1fd",
      "parents": [
        "3a990a52f9f25f45469e272017a31e7a3fda60ed",
        "07c0c5d8b8c122b2f2df9ee574ac3083daefc981"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:36:41 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:36:41 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\nPull vfs pile 1 from Al Viro:\n \"This is _not_ all; in particular, Miklos\u0027 and Jan\u0027s stuff is not there\n  yet.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (64 commits)\n  ext4: initialization of ext4_li_mtx needs to be done earlier\n  debugfs-related mode_t whack-a-mole\n  hfsplus: add an ioctl to bless files\n  hfsplus: change finder_info to u32\n  hfsplus: initialise userflags\n  qnx4: new helper - try_extent()\n  qnx4: get rid of qnx4_bread/qnx4_getblk\n  take removal of PF_FORKNOEXEC to flush_old_exec()\n  trim includes in inode.c\n  um: uml_dup_mmap() relies on -\u003emmap_sem being held, but activate_mm() doesn\u0027t hold it\n  um: embed -\u003estub_pages[] into mmu_context\n  gadgetfs: list_for_each_safe() misuse\n  ocfs2: fix leaks on failure exits in module_init\n  ecryptfs: make register_filesystem() the last potential failure exit\n  ntfs: forgets to unregister sysctls on register_filesystem() failure\n  logfs: missing cleanup on register_filesystem() failure\n  jfs: mising cleanup on register_filesystem() failure\n  make configfs_pin_fs() return root dentry on success\n  configfs: configfs_create_dir() has parent dentry in dentry-\u003ed_parent\n  configfs: sanitize configfs_create()\n  ...\n"
    },
    {
      "commit": "3a990a52f9f25f45469e272017a31e7a3fda60ed",
      "tree": "366f639d9ce1e907b65caa72bc098df6c4b5a240",
      "parents": [
        "3556485f1595e3964ba539e39ea682acbb835cee",
        "f5cc4eef9987d0b517364d01e290d6438e47ee5d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:32:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:32:19 2012 -0700"
      },
      "message": "Merge branch \u0027vm\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs\n\nPull munmap/truncate race fixes from Al Viro:\n \"Fixes for racy use of unmap_vmas() on truncate-related codepaths\"\n\n* \u0027vm\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:\n  VM: make zap_page_range() callers that act on a single VMA use separate helper\n  VM: make unmap_vmas() return void\n  VM: don\u0027t bother with feeding upper limit to tlb_finish_mmu() in exit_mmap()\n  VM: make zap_page_range() return void\n  VM: can\u0027t go through the inner loop in unmap_vmas() more than once...\n  VM: unmap_page_range() can return void\n"
    },
    {
      "commit": "3556485f1595e3964ba539e39ea682acbb835cee",
      "tree": "7f5ee254f425b1427ac0059b5f347a307f8538a1",
      "parents": [
        "b8716614a7cc2fc15ea2a518edd04755fb08d922",
        "09f61cdbb32a9d812c618d3922db533542736bb0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:25:04 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 13:25:04 2012 -0700"
      },
      "message": "Merge branch \u0027next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security\n\nPull security subsystem updates for 3.4 from James Morris:\n \"The main addition here is the new Yama security module from Kees Cook,\n  which was discussed at the Linux Security Summit last year.  Its\n  purpose is to collect miscellaneous DAC security enhancements in one\n  place.  This also marks a departure in policy for LSM modules, which\n  were previously limited to being standalone access control systems.\n  Chromium OS is using Yama, and I believe there are plans for Ubuntu,\n  at least.\n\n  This patchset also includes maintenance updates for AppArmor, TOMOYO\n  and others.\"\n\nFix trivial conflict in \u003cnet/sock.h\u003e due to the jumo_label-\u003estatic_key\nrename.\n\n* \u0027next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (38 commits)\n  AppArmor: Fix location of const qualifier on generated string tables\n  TOMOYO: Return error if fails to delete a domain\n  AppArmor: add const qualifiers to string arrays\n  AppArmor: Add ability to load extended policy\n  TOMOYO: Return appropriate value to poll().\n  AppArmor: Move path failure information into aa_get_name and rename\n  AppArmor: Update dfa matching routines.\n  AppArmor: Minor cleanup of d_namespace_path to consolidate error handling\n  AppArmor: Retrieve the dentry_path for error reporting when path lookup fails\n  AppArmor: Add const qualifiers to generated string tables\n  AppArmor: Fix oops in policy unpack auditing\n  AppArmor: Fix error returned when a path lookup is disconnected\n  KEYS: testing wrong bit for KEY_FLAG_REVOKED\n  TOMOYO: Fix mount flags checking order.\n  security: fix ima kconfig warning\n  AppArmor: Fix the error case for chroot relative path name lookup\n  AppArmor: fix mapping of META_READ to audit and quiet flags\n  AppArmor: Fix underflow in xindex calculation\n  AppArmor: Fix dropping of allowed operations that are force audited\n  AppArmor: Add mising end of structure test to caps unpacking\n  ...\n"
    },
    {
      "commit": "9f3938346a5c1fa504647670edb5fea5756cfb00",
      "tree": "7cf6d24d6b076c8db8571494984924cac03703a2",
      "parents": [
        "69a7aebcf019ab3ff5764525ad6858fbe23bb86d",
        "317b6e128247f75976b0fc2b9fd8d2c20ef13b3a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 09:40:26 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 09:40:26 2012 -0700"
      },
      "message": "Merge branch \u0027kmap_atomic\u0027 of git://github.com/congwang/linux\n\nPull kmap_atomic cleanup from Cong Wang.\n\nIt\u0027s been in -next for a long time, and it gets rid of the (no longer\nused) second argument to k[un]map_atomic().\n\nFix up a few trivial conflicts in various drivers, and do an \"evil\nmerge\" to catch some new uses that have come in since Cong\u0027s tree.\n\n* \u0027kmap_atomic\u0027 of git://github.com/congwang/linux: (59 commits)\n  feature-removal-schedule.txt: schedule the deprecated form of kmap_atomic() for removal\n  highmem: kill all __kmap_atomic() [swarren@nvidia.com: highmem: Fix ARM build break due to __kmap_atomic rename]\n  drbd: remove the second argument of k[un]map_atomic()\n  zcache: remove the second argument of k[un]map_atomic()\n  gma500: remove the second argument of k[un]map_atomic()\n  dm: remove the second argument of k[un]map_atomic()\n  tomoyo: remove the second argument of k[un]map_atomic()\n  sunrpc: remove the second argument of k[un]map_atomic()\n  rds: remove the second argument of k[un]map_atomic()\n  net: remove the second argument of k[un]map_atomic()\n  mm: remove the second argument of k[un]map_atomic()\n  lib: remove the second argument of k[un]map_atomic()\n  power: remove the second argument of k[un]map_atomic()\n  kdb: remove the second argument of k[un]map_atomic()\n  udf: remove the second argument of k[un]map_atomic()\n  ubifs: remove the second argument of k[un]map_atomic()\n  squashfs: remove the second argument of k[un]map_atomic()\n  reiserfs: remove the second argument of k[un]map_atomic()\n  ocfs2: remove the second argument of k[un]map_atomic()\n  ntfs: remove the second argument of k[un]map_atomic()\n  ...\n"
    },
    {
      "commit": "69a7aebcf019ab3ff5764525ad6858fbe23bb86d",
      "tree": "7211df5704b743a7667159748c670a9744164482",
      "parents": [
        "d464c92b5234227c1698862a1906827e2e398ae0",
        "f1f996b66cc3908a8f5ffccc2ff41840e92f3b10"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 21:12:50 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 21:12:50 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\nPull trivial tree from Jiri Kosina:\n \"It\u0027s indeed trivial -- mostly documentation updates and a bunch of\n  typo fixes from Masanari.\n\n  There are also several linux/version.h include removals from Jesper.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (101 commits)\n  kcore: fix spelling in read_kcore() comment\n  constify struct pci_dev * in obvious cases\n  Revert \"char: Fix typo in viotape.c\"\n  init: fix wording error in mm_init comment\n  usb: gadget: Kconfig: fix typo for \u0027different\u0027\n  Revert \"power, max8998: Include linux/module.h just once in drivers/power/max8998_charger.c\"\n  writeback: fix fn name in writeback_inodes_sb_nr_if_idle() comment header\n  writeback: fix typo in the writeback_control comment\n  Documentation: Fix multiple typo in Documentation\n  tpm_tis: fix tis_lock with respect to RCU\n  Revert \"media: Fix typo in mixer_drv.c and hdmi_drv.c\"\n  Doc: Update numastat.txt\n  qla4xxx: Add missing spaces to error messages\n  compiler.h: Fix typo\n  security: struct security_operations kerneldoc fix\n  Documentation: broken URL in libata.tmpl\n  Documentation: broken URL in filesystems.tmpl\n  mtd: simplify return logic in do_map_probe()\n  mm: fix comment typo of truncate_inode_pages_range\n  power: bq27x00: Fix typos in comment\n  ...\n"
    },
    {
      "commit": "f5cc4eef9987d0b517364d01e290d6438e47ee5d",
      "tree": "1c6a5ec2abf40450b89134564c35c0beafded436",
      "parents": [
        "6e8bb0193af3f308ef22817a5560422d33e58b90"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 05 14:14:20 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:39:51 2012 -0400"
      },
      "message": "VM: make zap_page_range() callers that act on a single VMA use separate helper\n\n... and not rely on -\u003evm_next being there for them...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6e8bb0193af3f308ef22817a5560422d33e58b90",
      "tree": "6001421c8d389bd00b18e0510e3f6c9130f9f80b",
      "parents": [
        "853f5e264018113b1f96f05551b07a74b836c7fc"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 05 13:41:15 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:39:51 2012 -0400"
      },
      "message": "VM: make unmap_vmas() return void\n\nsame story - nobody uses it and it\u0027s been pointless since\n\"mm: Remove i_mmap_lock lockbreak\" went in.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "853f5e264018113b1f96f05551b07a74b836c7fc",
      "tree": "4fda70658e3315e293260278036e92921594e72f",
      "parents": [
        "14f5ff5df37a8fabe2d25b1e64df7e010cc87db9"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 05 14:03:47 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:39:51 2012 -0400"
      },
      "message": "VM: don\u0027t bother with feeding upper limit to tlb_finish_mmu() in exit_mmap()\n\nno point, really - the only instance that cares about those arguments of\ntlb_finish_mmu() is itanic and there we explicitly check if that\u0027s called\nfrom exit_mmap() (i.e. that -\u003efullmm is set), in which case we ignore those\narguments completely.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "14f5ff5df37a8fabe2d25b1e64df7e010cc87db9",
      "tree": "10f46ad8429790de35ebad33631d435f74aaff0e",
      "parents": [
        "8b2a12382ccc9df31b27dac37fe04dffe088b57c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 05 13:38:09 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:39:50 2012 -0400"
      },
      "message": "VM: make zap_page_range() return void\n\n... since all callers ignore its return value and it\u0027s been\nuseless since commit 97a894136f29802da19a15541de3c019e1ca147e\n(mm: Remove i_mmap_lock lockbreak) anyway.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8b2a12382ccc9df31b27dac37fe04dffe088b57c",
      "tree": "77e79b540a288b3c2bce78bfd7aff4c58511ecd1",
      "parents": [
        "038c7aa16a38059ac23dfe9caa6954226ea20728"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 05 13:35:49 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:39:50 2012 -0400"
      },
      "message": "VM: can\u0027t go through the inner loop in unmap_vmas() more than once...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "038c7aa16a38059ac23dfe9caa6954226ea20728",
      "tree": "b851af73694ff7e0cd69ce90c7506c82122215c1",
      "parents": [
        "c16fa4f2ad19908a47c63d8fa436a1178438c7e7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 05 13:25:09 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:39:50 2012 -0400"
      },
      "message": "VM: unmap_page_range() can return void\n\nreturn value is always the 4th (\u0027end\u0027) argument.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "318ceed088497d1ca839b1172518ac4cc7096b82",
      "tree": "7dfd07bfb5e8c5d5dbb0ba4ea523f334c98c66bb",
      "parents": [
        "ca85c07809ca19de3391cb79ee1198f3dd91fa8d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Feb 12 22:08:01 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:29:37 2012 -0400"
      },
      "message": "tidy up after d_make_root() conversion\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "48fde701aff662559b38d9a609574068f22d00fe",
      "tree": "aa6b203dc671b51d58575b65eb08310ff8309b60",
      "parents": [
        "6b4231e2f92adbcf96fb2a3fa751d7ca0a61b21f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 08 22:15:13 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:29:35 2012 -0400"
      },
      "message": "switch open-coded instances of d_make_root() to new helper\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0d9cabdccedb79ee5f27b77ff51f29a9e7d23275",
      "tree": "8bfb64c3672d058eb90aec3c3a9c4f61cef9097c",
      "parents": [
        "701085b219016d38f105b031381b9cee6200253a",
        "3ce3230a0cff484e5130153f244d4fb8a56b3a8b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 18:11:21 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 18:11:21 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup changes from Tejun Heo:\n \"Out of the 8 commits, one fixes a long-standing locking issue around\n  tasklist walking and others are cleanups.\"\n\n* \u0027for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cgroup: Walk task list under tasklist_lock in cgroup_enable_task_cg_list\n  cgroup: Remove wrong comment on cgroup_enable_task_cg_list()\n  cgroup: remove cgroup_subsys argument from callbacks\n  cgroup: remove extra calls to find_existing_css_set\n  cgroup: replace tasklist_lock with rcu_read_lock\n  cgroup: simplify double-check locking in cgroup_attach_proc\n  cgroup: move struct cgroup_pidlist out from the header file\n  cgroup: remove cgroup_attach_task_current_cg()\n"
    },
    {
      "commit": "9b04c5fec43c0da610a2c37f70c5b013101a6ad7",
      "tree": "f04767281b7067fba91cf0d37440bf454c492e38",
      "parents": [
        "c3eede8e0a1292d95c051cf947738687b9c42322"
      ],
      "author": {
        "name": "Cong Wang",
        "email": "amwang@redhat.com",
        "time": "Fri Nov 25 23:14:39 2011 +0800"
      },
      "committer": {
        "name": "Cong Wang",
        "email": "xiyou.wangcong@gmail.com",
        "time": "Tue Mar 20 21:48:27 2012 +0800"
      },
      "message": "mm: remove the second argument of k[un]map_atomic()\n\nSigned-off-by: Cong Wang \u003camwang@redhat.com\u003e\n"
    },
    {
      "commit": "16c0cfa425b8e1488f7a1873bd112a7a099325f0",
      "tree": "eeba5728a8072096279c55ffc10a5ca7ac0ddf05",
      "parents": [
        "94574d9a4c236e8bd19721b4adb0ea30ef446901",
        "072611ed1f291053a74b28b813d683a09495eba7"
      ],
      "author": {
        "name": "Konrad Rzeszutek Wilk",
        "email": "konrad.wilk@oracle.com",
        "time": "Mon Mar 19 12:12:19 2012 -0400"
      },
      "committer": {
        "name": "Konrad Rzeszutek Wilk",
        "email": "konrad.wilk@oracle.com",
        "time": "Mon Mar 19 12:12:19 2012 -0400"
      },
      "message": "Merge branch \u0027stable/cleancache.v13\u0027 into linux-next\n\n* stable/cleancache.v13:\n  mm: cleancache: Use __read_mostly as appropiate.\n  mm: cleancache: report statistics via debugfs instead of sysfs.\n  mm: zcache/tmem/cleancache: s/flush/invalidate/\n  mm: cleancache: s/flush/invalidate/\n"
    },
    {
      "commit": "59927fb984de1703c67bc640c3e522d8b5276c73",
      "tree": "bbb2f9d93cebcd04e97f0f0b7d26c12e56ce831e",
      "parents": [
        "f1cbd03f5eabb75ea8ace23b47d2209f10871c16"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Thu Mar 15 15:17:07 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 15 17:03:03 2012 -0700"
      },
      "message": "memcg: free mem_cgroup by RCU to fix oops\n\nAfter fixing the GPF in mem_cgroup_lru_del_list(), three times one\nmachine running a similar load (moving and removing memcgs while\nswapping) has oopsed in mem_cgroup_zone_nr_lru_pages(), when retrieving\nmemcg zone numbers for get_scan_count() for shrink_mem_cgroup_zone():\nthis is where a struct mem_cgroup is first accessed after being chosen\nby mem_cgroup_iter().\n\nJust what protects a struct mem_cgroup from being freed, in between\nmem_cgroup_iter()\u0027s css_get_next() and its css_tryget()? css_tryget()\nfails once css-\u003erefcnt is zero with CSS_REMOVED set in flags, yes: but\nwhat if that memory is freed and reused for something else, which sets\n\"refcnt\" non-zero? Hmm, and scope for an indefinite freeze if refcnt is\nleft at zero but flags are cleared.\n\nIt\u0027s tempting to move the css_tryget() into css_get_next(), to make it\nreally \"get\" the css, but I don\u0027t think that actually solves anything:\nthe same difficulty in moving from css_id found to stable css remains.\n\nBut we already have rcu_read_lock() around the two, so it\u0027s easily fixed\nif __mem_cgroup_free() just uses kfree_rcu() to free mem_cgroup.\n\nHowever, a big struct mem_cgroup is allocated with vzalloc() instead of\nkzalloc(), and we\u0027re not allowed to vfree() at interrupt time: there\ndoesn\u0027t appear to be a general vfree_rcu() to help with this, so roll\nour own using schedule_work().  The compiler decently removes\nvfree_work() and vfree_rcu() when the config doesn\u0027t need them.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cd593accdcc27ccbe6498d9ad1c2b6cc8e1d830d",
      "tree": "9424d3ac86e753706cc6c3d7e6072d2a73711e29",
      "parents": [
        "11b91d6fe7272452c999573bab33c15c2f03dc31",
        "fde7d9049e55ab85a390be7f415d74c9f62dd0f9"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Mar 14 07:44:11 2012 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Mar 14 07:44:11 2012 +0100"
      },
      "message": "Merge tag \u0027v3.3-rc7\u0027 into x86/mce\n\nMerge reason: Update from an ancient -rc1 base to an almost-final stable kernel.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "be22aece684f5a700e6247b9861c3759d5798a3c",
      "tree": "07d423a2cdb16140e8704a69788f8b9bd5ddbe13",
      "parents": [
        "a7f4255f906f60f72e00aad2fb000939449ff32e"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Fri Mar 09 13:37:32 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 09 15:32:20 2012 -0800"
      },
      "message": "memcg: revert fix to mapcount check for this release\n\nRespectfully revert commit e6ca7b89dc76 \"memcg: fix mapcount check\nin move charge code for anonymous page\" for the 3.3 release, so that\nit behaves exactly like releases 2.6.35 through 3.2 in this respect.\n\nHoriguchi-san\u0027s commit is correct in itself, 1 makes much more sense\nthan 2 in that check; but it does not go far enough - swapcount\nshould be considered too - if we really want such a check at all.\n\nWe appear to have reached agreement now, and expect that 3.4 will\nremove the mapcount check, but had better not make 3.3 different.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "097d59106a8e4b42d07c9892fdd7790f1659c6ff",
      "tree": "babf61a0287b0f09f80580847274877831ed6869",
      "parents": [
        "71fece9511717750d86691e0f517ad04f3c8a801"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 06 18:23:36 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 06 18:23:36 2012 -0800"
      },
      "message": "vm: avoid using find_vma_prev() unnecessarily\n\nSeveral users of \"find_vma_prev()\" were not in fact interested in the\nprevious vma if there was no primary vma to be found either.  And in\nthose cases, we\u0027re much better off just using the regular \"find_vma()\",\nand then \"prev\" can be looked up by just checking vma-\u003evm_prev.\n\nThe find_vma_prev() semantics are fairly subtle (see Mikulas\u0027 recent\ncommit 83cd904d271b: \"mm: fix find_vma_prev\"), and the whole \"return\nprev by reference\" means that it generates worse code too.\n\nThus this \"let\u0027s avoid using this inconvenient and clearly too subtle\ninterface when we don\u0027t really have to\" patch.\n\nCc: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "83cd904d271ba960c53f3adbb037f3486518f1e6",
      "tree": "839698abe73bfbba298c9ee71b680492e285a1e2",
      "parents": [
        "52abb700e16a9aa4cbc03f3d7f80206cbbc80680"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Sun Mar 04 19:52:03 2012 -0500"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 06 16:48:03 2012 -0800"
      },
      "message": "mm: fix find_vma_prev\n\nCommit 6bd4837de96e (\"mm: simplify find_vma_prev()\") broke memory\nmanagement on PA-RISC.\n\nAfter application of the patch, programs that allocate big arrays on the\nstack crash with segfault, for example, this will crash if compiled\nwithout optimization:\n\n  int main()\n  {\n\tchar array[200000];\n\tarray[199999] \u003d 0;\n\treturn 0;\n  }\n\nThe reason is that PA-RISC has up-growing stack and the stack is usually\nthe last memory area.  In the above example, a page fault happens above\nthe stack.\n\nPreviously, if we passed too high address to find_vma_prev, it returned\nNULL and stored the last VMA in *pprev.  After \"simplify find_vma_prev\"\nchange, it stores NULL in *pprev.  Consequently, the stack area is not\nfound and it is not expanded, as it used to be before the change.\n\nThis patch restores the old behavior and makes it return the last VMA in\n*pprev if the requested address is higher than address of any other VMA.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ce8fea7aa4ad9e3b40999a08622ef27c77159659",
      "tree": "7d8696e506db022aa03f5927c9593db4df1ac2b8",
      "parents": [
        "917ec63b61720b177271450399bca2f8c5168c0d"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Tue Mar 06 12:28:52 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 06 13:49:08 2012 -0800"
      },
      "message": "mmap: EINVAL not ENOMEM when rejecting VM_GROWS\n\nCurrently error is -ENOMEM when rejecting VM_GROWSDOWN|VM_GROWSUP\nfrom shared anonymous: hoist the file case\u0027s -EINVAL up for both.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c09ff089aa62380ad904ea785bd713c56720270e",
      "tree": "6ddc11131cd557d0d3a32ddeb829bfefe542101b",
      "parents": [
        "f3969bf78f140f437f51787dfc2751943ba454d1"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Mar 05 20:52:55 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 06 08:18:23 2012 -0800"
      },
      "message": "page_cgroup: fix horrid swap accounting regression\n\nWhy is memcg\u0027s swap accounting so broken? Insane counts, wrong\nownership, unfreeable structures, which later get freed and then\naccessed after free.\n\nTurns out to be a tiny a little 3.3-rc1 regression in 9fb4b7cc0724\n\"page_cgroup: add helper function to get swap_cgroup\": the helper\nfunction (actually named lookup_swap_cgroup()) returns an address using\nvoid* arithmetic, but the structure in question is a short.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: Bob Liu \u003clliubbo@gmail.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3e85fb9cd4f711d70c5d26baa86e438390731eab",
      "tree": "85f0abea7e932a7e7c75cef2773fb648b35db1f4",
      "parents": [
        "055bf38d3d6069707e2d555cffdde629b8404ff2",
        "b24823e61bfd93d0e72088e4f5245287582ed289"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 15:50:25 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 15:50:25 2012 -0800"
      },
      "message": "Merge branch \u0027akpm\u0027 (Andrew\u0027s patch bomb)\n\nMerge the emailed seties of 19 patches from Andrew Morton\n\n* akpm:\n  rapidio/tsi721: fix queue wrapping bug in inbound doorbell handler\n  memcg: fix mapcount check in move charge code for anonymous page\n  mm: thp: fix BUG on mm-\u003enr_ptes\n  alpha: fix 32/64-bit bug in futex support\n  memcg: fix GPF when cgroup removal races with last exit\n  debugobjects: Fix selftest for static warnings\n  floppy/scsi: fix setting of BIO flags\n  memcg: fix deadlock by inverting lrucare nesting\n  drivers/rtc/rtc-r9701.c: fix crash in r9701_remove()\n  c2port: class_create() returns an ERR_PTR\n  pps: class_create() returns an ERR_PTR, not NULL\n  hung_task: fix the broken rcu_lock_break() logic\n  vfork: kill PF_STARTING\n  coredump_wait: don\u0027t call complete_vfork_done()\n  vfork: make it killable\n  vfork: introduce complete_vfork_done()\n  aio: wake up waiters when freeing unused kiocbs\n  kprobes: return proper error code from register_kprobe()\n  kmsg_dump: don\u0027t run on non-error paths by default\n"
    },
    {
      "commit": "e6ca7b89dc76abf77c80887fed54e0a60c87c0a8",
      "tree": "edfd8cce78c61cbf6cd9e738662ad25baa2b2bc0",
      "parents": [
        "1c641e84719429bbfe62a95ed3545ee7fe24408f"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Mon Mar 05 14:59:20 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 15:49:43 2012 -0800"
      },
      "message": "memcg: fix mapcount check in move charge code for anonymous page\n\nCurrently the charge on shared anonyous pages is supposed not to moved in\ntask migration.  To implement this, we need to check that mapcount \u003e 1,\ninstread of \u003e 2.  So this patch fixes it.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nReviewed-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1c641e84719429bbfe62a95ed3545ee7fe24408f",
      "tree": "054160f0bcb9845538278116facc759ff7a345e1",
      "parents": [
        "62aca403657fe30e5235c5331e9871e676d9ea0a"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Mon Mar 05 14:59:20 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 15:49:43 2012 -0800"
      },
      "message": "mm: thp: fix BUG on mm-\u003enr_ptes\n\nDave Jones reports a few Fedora users hitting the BUG_ON(mm-\u003enr_ptes...)\nin exit_mmap() recently.\n\nQuoting Hugh\u0027s discovery and explanation of the SMP race condition:\n\n  \"mm-\u003enr_ptes had unusual locking: down_read mmap_sem plus\n   page_table_lock when incrementing, down_write mmap_sem (or mm_users\n   0) when decrementing; whereas THP is careful to increment and\n   decrement it under page_table_lock.\n\n   Now most of those paths in THP also hold mmap_sem for read or write\n   (with appropriate checks on mm_users), but two do not: when\n   split_huge_page() is called by hwpoison_user_mappings(), and when\n   called by add_to_swap().\n\n   It\u0027s conceivable that the latter case is responsible for the\n   exit_mmap() BUG_ON mm-\u003enr_ptes that has been reported on Fedora.\"\n\nThe simplest way to fix it without having to alter the locking is to make\nsplit_huge_page() a noop in nr_ptes terms, so by counting the preallocated\npagetables that exists for every mapped hugepage.  It was an arbitrary\nchoice not to count them and either way is not wrong or right, because\nthey are not used but they\u0027re still allocated.\n\nReported-by: Dave Jones \u003cdavej@redhat.com\u003e\nReported-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Josh Boyer \u003cjwboyer@redhat.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\t[3.0.x, 3.1.x, 3.2.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7512102cf64d36e3c7444480273623c7aab3563f",
      "tree": "4c5b589455ed0d343384d7eeaedfab5057648a0d",
      "parents": [
        "9f78ff005a6b6313728247113948450b2adddde8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Mar 05 14:59:18 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 15:49:43 2012 -0800"
      },
      "message": "memcg: fix GPF when cgroup removal races with last exit\n\nWhen moving tasks from old memcg (with move_charge_at_immigrate on new\nmemcg), followed by removal of old memcg, hit General Protection Fault in\nmem_cgroup_lru_del_list() (called from release_pages called from\nfree_pages_and_swap_cache from tlb_flush_mmu from tlb_finish_mmu from\nexit_mmap from mmput from exit_mm from do_exit).\n\nSomewhat reproducible, takes a few hours: the old struct mem_cgroup has\nbeen freed and poisoned by SLAB_DEBUG, but mem_cgroup_lru_del_list() is\nstill trying to update its stats, and take page off lru before freeing.\n\nA task, or a charge, or a page on lru: each secures a memcg against\nremoval.  In this case, the last task has been moved out of the old memcg,\nand it is exiting: anonymous pages are uncharged one by one from the\nmemcg, as they are zapped from its pagetables, so the charge gets down to\n0; but the pages themselves are queued in an mmu_gather for freeing.\n\nMost of those pages will be on lru (and force_empty is careful to\nlru_add_drain_all, to add pages from pagevec to lru first), but not\nnecessarily all: perhaps some have been isolated for page reclaim, perhaps\nsome isolated for other reasons.  So, force_empty may find no task, no\ncharge and no page on lru, and let the removal proceed.\n\nThere would still be no problem if these pages were immediately freed; but\ntypically (and the put_page_testzero protocol demands it) they have to be\nadded back to lru before they are found freeable, then removed from lru\nand freed.  We don\u0027t see the issue when adding, because the\nmem_cgroup_iter() loops keep their own reference to the memcg being\nscanned; but when it comes to mem_cgroup_lru_del_list().\n\nI believe this was not an issue in v3.2: there, PageCgroupAcctLRU and\nPageCgroupUsed flags were used (like a trick with mirrors) to deflect view\nof pc-\u003emem_cgroup to the stable root_mem_cgroup when neither set.\n38c5d72f3ebe (\"memcg: simplify LRU handling by new rule\") mercifully\nremoved those convolutions, but left this General Protection Fault.\n\nBut it\u0027s surprisingly easy to restore the old behaviour: just check\nPageCgroupUsed in mem_cgroup_lru_add_list() (which decides on which lruvec\nto add), and reset pc to root_mem_cgroup if page is uncharged.  A risky\nchange?  just going back to how it worked before; testing, and an audit of\nuses of pc-\u003emem_cgroup, show no problem.\n\nAnd there\u0027s a nice bonus: with mem_cgroup_lru_add_list() itself making\nsure that an uncharged page goes to root lru, mem_cgroup_reset_owner() no\nlonger has any purpose, and we can safely revert 4e5f01c2b9b9 (\"memcg:\nclear pc-\u003emem_cgroup if necessary\").\n\nCalling update_page_reclaim_stat() after add_page_to_lru_list() in swap.c\nis not strictly necessary: the lru_lock there, with RCU before memcg\nstructures are freed, makes mem_cgroup_get_reclaim_stat_from_page safe\nwithout that; but it seems cleaner to rely on one dependency less.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9ce70c0240d01309b34712f87eda4fbfba3c3764",
      "tree": "be59ba1d702631aab6e5f5c12b0ec5ebe15b10b2",
      "parents": [
        "73737b878767ef441d7cc34ebeeba01dd0a68dd6"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Mon Mar 05 14:59:16 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 15:49:43 2012 -0800"
      },
      "message": "memcg: fix deadlock by inverting lrucare nesting\n\nWe have forgotten the rules of lock nesting: the irq-safe ones must be\ntaken inside the non-irq-safe ones, otherwise we are open to deadlock:\n\nCPU0                          CPU1\n----                          ----\nlock(\u0026(\u0026pc-\u003elock)-\u003erlock);\n                              local_irq_disable();\n                              lock(\u0026(\u0026zone-\u003elru_lock)-\u003erlock);\n                              lock(\u0026(\u0026pc-\u003elock)-\u003erlock);\n\u003cInterrupt\u003e\nlock(\u0026(\u0026zone-\u003elru_lock)-\u003erlock);\n\nTo check a different locking issue, I happened to add a spin_lock to\nmemcg\u0027s bit_spin_lock in lock_page_cgroup(), and lockdep very quickly\ncomplained about __mem_cgroup_commit_charge_lrucare() (on CPU1 above).\n\nSo delete __mem_cgroup_commit_charge_lrucare(), passing a bool lrucare to\n__mem_cgroup_commit_charge() instead, taking zone-\u003elru_lock under\nlock_page_cgroup() in the lrucare case.\n\nThe original was using spin_lock_irqsave, but we\u0027d be in more trouble if\nit were ever called at interrupt time: unconditional _irq is enough.  And\nClearPageLRU before del from lru, SetPageLRU before add to lru: no strong\nreason, but that is the ordering used consistently elsewhere.\n\nFixes 36b62ad539498d00c2d280a151a (\"memcg: simplify corner case handling\nof LRU\").\n\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "789ce9b9c24058dfd7a3e7396e0e34fb61068d43",
      "tree": "b440fc89c7490dd346fa49ccb5aea8cdc179b530",
      "parents": [
        "3a81a6e7802947b4e8b259353767f7b0d2701b1d",
        "adb795062f89b8d67d295ee25e04034bccce6779"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 14:28:36 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 14:28:36 2012 -0800"
      },
      "message": "Merge branch \u0027for-3.3-fixes\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu\n\nPull per-cpu patches from Tejun Heo:\n \"This pull request contains four patches.  One replaces manual clearing\n  with bitmap_clear(), two fix generic definition of __this_cpu ops so\n  that they don\u0027t choose unnecessarily strict arch version.  One makes\n  _this_cpu definition use raw_local_irq_*() so that it doesn\u0027t end up\n  wrecking irq on/off state tracking when used from inside lockdep.\n\n  Of the four patches, the raw_local_irq_*() update is the most\n  important, so please feel free to cherry pick only that one patch and\n  ignore the rest if you want to - commit e920d5971d \u0027percpu: use\n  raw_local_irq_* in _this_cpu op\u0027.\"\n\n* \u0027for-3.3-fixes\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu:\n  percpu: fix __this_cpu_{sub,inc,dec}_return() definition\n  percpu: use raw_local_irq_* in _this_cpu op\n  percpu: fix generic definition of __this_cpu_add_and_return()\n  percpu: use bitmap_clear\n"
    },
    {
      "commit": "cd2934a3b3057eb048f8b4fb82e941d24a043207",
      "tree": "80bb0630c6f4b21fa47114a6226f9ef8aa448bc3",
      "parents": [
        "835ee7978cb47de94cf70232a694f19295d2993f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ZenIV.linux.org.uk",
        "time": "Mon Mar 05 06:40:29 2012 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 13:51:32 2012 -0800"
      },
      "message": "flush_tlb_range() needs -\u003epage_table_lock when -\u003emmap_sem is not held\n\nAll other callers already hold either -\u003emmap_sem (exclusive) or\n-\u003epage_table_lock.  And we need it because some page table flushing\ninstanced do work explicitly with ge tables.\n\nSee e.g.  arch/powerpc/mm/tlb_hash32.c, flush_tlb_range() and\nflush_range() in there.  The same goes for uml, with a lot more\nextensive playing with page tables.\n\nAlmost all callers are actually fine - flush_tlb_range() may have no\nneed to bother playing with page tables, but it can do so safely; again,\nthis caller is the sole exception - everything else either has exclusive\n-\u003emmap_sem on the mm in question, or mm-\u003epage_table_lock is held.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "835ee7978cb47de94cf70232a694f19295d2993f",
      "tree": "0befe356dba1efbe02bf7ced7285f7dea94936fd",
      "parents": [
        "6414fa6a150111750011f477899d370244da4171"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ZenIV.linux.org.uk",
        "time": "Mon Mar 05 06:39:47 2012 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 05 13:51:32 2012 -0800"
      },
      "message": "VM_GROWS{UP,DOWN} shouldn\u0027t be set on shmem VMAs\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "847854f5988a04fe7e02d2fdd4fa0df9f96360fe",
      "tree": "c1c1e4de2f0221b63d359961e54d2977d90b9536",
      "parents": [
        "88ebdda6159ffc15699f204c33feb3e431bf9bdc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 29 05:56:21 2012 +0900"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Mar 01 10:53:18 2012 +0100"
      },
      "message": "memblock: Fix size aligning of memblock_alloc_base_nid()\n\nmemblock allocator aligns @size to @align to reduce the amount\nof fragmentation.  Commit:\n\n 7bd0b0f0da (\"memblock: Reimplement memblock allocation using reverse free area iterator\")\n\nBroke it by incorrectly relocating @size aligning to\nmemblock_find_in_range_node().  As the aligned size is not\npropagated back to memblock_alloc_base_nid(), the actually\nreserved size isn\u0027t aligned.\n\nWhile this increases memory use for memblock reserved array,\nthis shouldn\u0027t cause any critical failure; however, it seems\nthat the size aligning was hiding a use-beyond-allocation bug in\nsparc64 and losing the aligning causes boot failure.\n\nThe underlying problem is currently being debugged but this is a\nproper fix in itself, it\u0027s already pretty late in -rc cycle for\nboot failures and reverting the change for debugging isn\u0027t\ndifficult. Restore the size aligning moving it to\nmemblock_alloc_base_nid().\n\nReported-by: Meelis Roos \u003cmroos@linux.ee\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Grant Likely \u003cgrant.likely@secretlab.ca\u003e\nCc: Rob Herring \u003crob.herring@calxeda.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nLink: http://lkml.kernel.org/r/20120228205621.GC3252@dhcp-172-17-108-109.mtv.corp.google.com\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nLKML-Reference: \u003calpine.SOC.1.00.1202130942030.1488@math.ut.ee\u003e\n"
    },
    {
      "commit": "b94cfaf6685d691dc3fab023cf32f65e9b7be09c",
      "tree": "89770f0bfa2bc81f928627648afa2a8bd0283afe",
      "parents": [
        "918e556ec214ed2f584e4cac56d7b29e4bb6bf27"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Thu Feb 23 13:51:00 2012 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 24 08:59:04 2012 -0800"
      },
      "message": "NOMMU: Don\u0027t need to clear vm_mm when deleting a VMA\n\nDon\u0027t clear vm_mm in a deleted VMA as it\u0027s unnecessary and might\nconceivably break the filesystem or driver VMA close routine.\n\nReported-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\ncc: stable@vger.kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "918e556ec214ed2f584e4cac56d7b29e4bb6bf27"
}
