)]}'
{
  "log": [
    {
      "commit": "8aa043d74559556a661cb2eb6e64497eec86ec77",
      "tree": "73559e8b70d2f2d139ca3c404687873d34ff7b36",
      "parents": [
        "9ae49fab239fb49de92a657c7426271e0793c4e1"
      ],
      "author": {
        "name": "Jan Beulich",
        "email": "JBeulich@novell.com",
        "time": "Mon Dec 14 17:59:46 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "mm/bootmem.c: properly __init-annotate helper functions\n\nSigned-off-by: Jan Beulich \u003cjbeulich@novell.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": "9ae49fab239fb49de92a657c7426271e0793c4e1",
      "tree": "156f78df3db4dbc408f6839febe7adba148c2c9f",
      "parents": [
        "caed0f486e582eeeb6e3546417fd758230fe4ad9"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Dec 14 17:59:46 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "mm: slab-allocate memory section nodemask for large systems\n\nNodemasks should not be allocated on the stack for large systems (when it\nis larger than 256 bytes) since there is a threat of overflow.\n\nThis patch causes the unregister_mem_sect_under_nodes() nodemask to be\nallocated on the stack for smaller systems and be allocated by slab for\nlarger systems.\n\nGFP_KERNEL is used since remove_memory_block() can block.\n\nCc: Gary Hade \u003cgaryhade@us.ibm.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Alex Chiang \u003cachiang@hp.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "caed0f486e582eeeb6e3546417fd758230fe4ad9",
      "tree": "203d4724dcfaae3ad4b349e1971bb3efc0da7db2",
      "parents": [
        "23ce932a5e3ec3b9f06e92c8797d834d43abfb0f"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:45 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "mm: simplify try_to_unmap_one()\n\nSWAP_MLOCK mean \"We marked the page as PG_MLOCK, please move it to\nunevictable-lru\". So, following code is easy confusable.\n\n        if (vma-\u003evm_flags \u0026 VM_LOCKED) {\n                ret \u003d SWAP_MLOCK;\n                goto out_unmap;\n        }\n\nPlus, if the VMA doesn\u0027t have VM_LOCKED, We don\u0027t need to check\nthe needed of calling mlock_vma_page().\n\nAlso, add some commentary to try_to_unmap_one().\n\nAcked-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "23ce932a5e3ec3b9f06e92c8797d834d43abfb0f",
      "tree": "a966c72393e3f6111e383528055518e251eeda9c",
      "parents": [
        "b76c8cfbff94263fdf2f408e94b78b049c24a9dc"
      ],
      "author": {
        "name": "Rakib Mullick",
        "email": "rakib.mullick@gmail.com",
        "time": "Mon Dec 14 17:59:44 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "mm: fix section mismatch in memory_hotplug.c\n\n__free_pages_bootmem() is a __meminit function - which has been called\nfrom put_pages_bootmem thus causes a section mismatch warning.\n\n We were warned by the following warning:\n\n  LD      mm/built-in.o\nWARNING: mm/built-in.o(.text+0x26b22): Section mismatch in reference\nfrom the function put_page_bootmem() to the function\n.meminit.text:__free_pages_bootmem()\nThe function put_page_bootmem() references\nthe function __meminit __free_pages_bootmem().\nThis is often because put_page_bootmem lacks a __meminit\nannotation or the annotation of __free_pages_bootmem is wrong.\n\nSigned-off-by: Rakib Mullick \u003crakib.mullick@gmail.com\u003e\nCc: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.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": "b76c8cfbff94263fdf2f408e94b78b049c24a9dc",
      "tree": "2252a29e2cfaddf08060174afd635e5f8ab66c1f",
      "parents": [
        "b4e655a4aaa327810110457cef92681447dd13e4"
      ],
      "author": {
        "name": "Larry Woodman",
        "email": "lwoodman@redhat.com",
        "time": "Mon Dec 14 17:59:37 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "hugetlb: prevent deadlock in __unmap_hugepage_range() when alloc_huge_page() fails\n\nhugetlb_fault() takes the mm-\u003epage_table_lock spinlock then calls\nhugetlb_cow().  If the alloc_huge_page() in hugetlb_cow() fails due to an\ninsufficient huge page pool it calls unmap_ref_private() with the\nmm-\u003epage_table_lock held.  unmap_ref_private() then calls\nunmap_hugepage_range() which tries to acquire the mm-\u003epage_table_lock.\n\n[\u003cffffffff810928c3\u003e] print_circular_bug_tail+0x80/0x9f\n [\u003cffffffff8109280b\u003e] ? check_noncircular+0xb0/0xe8\n [\u003cffffffff810935e0\u003e] __lock_acquire+0x956/0xc0e\n [\u003cffffffff81093986\u003e] lock_acquire+0xee/0x12e\n [\u003cffffffff8111a7a6\u003e] ? unmap_hugepage_range+0x3e/0x84\n [\u003cffffffff8111a7a6\u003e] ? unmap_hugepage_range+0x3e/0x84\n [\u003cffffffff814c348d\u003e] _spin_lock+0x40/0x89\n [\u003cffffffff8111a7a6\u003e] ? unmap_hugepage_range+0x3e/0x84\n [\u003cffffffff8111afee\u003e] ? alloc_huge_page+0x218/0x318\n [\u003cffffffff8111a7a6\u003e] unmap_hugepage_range+0x3e/0x84\n [\u003cffffffff8111b2d0\u003e] hugetlb_cow+0x1e2/0x3f4\n [\u003cffffffff8111b935\u003e] ? hugetlb_fault+0x453/0x4f6\n [\u003cffffffff8111b962\u003e] hugetlb_fault+0x480/0x4f6\n [\u003cffffffff8111baee\u003e] follow_hugetlb_page+0x116/0x2d9\n [\u003cffffffff814c31a7\u003e] ? _spin_unlock_irq+0x3a/0x5c\n [\u003cffffffff81107b4d\u003e] __get_user_pages+0x2a3/0x427\n [\u003cffffffff81107d0f\u003e] get_user_pages+0x3e/0x54\n [\u003cffffffff81040b8b\u003e] get_user_pages_fast+0x170/0x1b5\n [\u003cffffffff81160352\u003e] dio_get_page+0x64/0x14a\n [\u003cffffffff8116112a\u003e] __blockdev_direct_IO+0x4b7/0xb31\n [\u003cffffffff8115ef91\u003e] blkdev_direct_IO+0x58/0x6e\n [\u003cffffffff8115e0a4\u003e] ? blkdev_get_blocks+0x0/0xb8\n [\u003cffffffff810ed2c5\u003e] generic_file_aio_read+0xdd/0x528\n [\u003cffffffff81219da3\u003e] ? avc_has_perm+0x66/0x8c\n [\u003cffffffff81132842\u003e] do_sync_read+0xf5/0x146\n [\u003cffffffff8107da00\u003e] ? autoremove_wake_function+0x0/0x5a\n [\u003cffffffff81211857\u003e] ? security_file_permission+0x24/0x3a\n [\u003cffffffff81132fd8\u003e] vfs_read+0xb5/0x126\n [\u003cffffffff81133f6b\u003e] ? fget_light+0x5e/0xf8\n [\u003cffffffff81133131\u003e] sys_read+0x54/0x8c\n [\u003cffffffff81011e42\u003e] system_call_fastpath+0x16/0x1b\n\nThis can be fixed by dropping the mm-\u003epage_table_lock around the call to\nunmap_ref_private() if alloc_huge_page() fails, its dropped right below in\nthe normal path anyway.  However, earlier in the that function, it\u0027s also\npossible to call into the page allocator with the same spinlock held.\n\nWhat this patch does is drop the spinlock before the page allocator is\npotentially entered.  The check for page allocation failure can be made\nwithout the page_table_lock as well as the copy of the huge page.  Even if\nthe PTE changed while the spinlock was held, the consequence is that a\nhuge page is copied unnecessarily.  This resolves both the double taking\nof the lock and sleeping with the spinlock held.\n\n[mel@csn.ul.ie: Cover also the case where process can sleep with spinlock]\nSigned-off-by: Larry Woodman \u003clwooman@redhat.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: David Gibson \u003cdavid@gibson.dropbear.id.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b4e655a4aaa327810110457cef92681447dd13e4",
      "tree": "86f32571acdf688874967c5e597319a4c05ee888",
      "parents": [
        "d0f209f68f80f9a152799760c230019e7f270b2a"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Mon Dec 14 17:59:35 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "mm: memory_hotplug: make offline_pages() static\n\nIt has no references outside memory_hotplug.c.\n\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Gerald Schaefer \u003cgerald.schaefer@de.ibm.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Yasunori Goto \u003cy-goto@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": "d0f209f68f80f9a152799760c230019e7f270b2a",
      "tree": "83e4a6b2e15f50738572b31cfadb5fc0db17d2b7",
      "parents": [
        "62b61f611eb5e20f7e9f8619bfd03bdfe8af6348"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:34 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "ksm: remove unswappable max_kernel_pages\n\nNow that ksm pages are swappable, and the known holes plugged, remove\nmention of unswappable kernel pages from KSM documentation and comments.\n\nRemove the totalram_pages/4 initialization of max_kernel_pages.  In fact,\nremove max_kernel_pages altogether - we can reinstate it if removal turns\nout to break someone\u0027s script; but if we later want to limit KSM\u0027s memory\nusage, limiting the stable nodes would not be an effective approach.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@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": "62b61f611eb5e20f7e9f8619bfd03bdfe8af6348",
      "tree": "9f06fff7eb6530fbe90b4d998b91071133f6af25",
      "parents": [
        "e9995ef978a7d5296fe04a9a2c5ca6e66d8bb4e5"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:33 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "ksm: memory hotremove migration only\n\nThe previous patch enables page migration of ksm pages, but that soon gets\ninto trouble: not surprising, since we\u0027re using the ksm page lock to lock\noperations on its stable_node, but page migration switches the page whose\nlock is to be used for that.  Another layer of locking would fix it, but\ndo we need that yet?\n\nDo we actually need page migration of ksm pages?  Yes, memory hotremove\nneeds to offline sections of memory: and since we stopped allocating ksm\npages with GFP_HIGHUSER, they will tend to be GFP_HIGHUSER_MOVABLE\ncandidates for migration.\n\nBut KSM is currently unconscious of NUMA issues, happily merging pages\nfrom different NUMA nodes: at present the rule must be, not to use\nMADV_MERGEABLE where you care about NUMA.  So no, NUMA page migration of\nksm pages does not make sense yet.\n\nSo, to complete support for ksm swapping we need to make hotremove safe.\nksm_memory_callback() take ksm_thread_mutex when MEM_GOING_OFFLINE and\nrelease it when MEM_OFFLINE or MEM_CANCEL_OFFLINE.  But if mapped pages\nare freed before migration reaches them, stable_nodes may be left still\npointing to struct pages which have been removed from the system: the\nstable_node needs to identify a page by pfn rather than page pointer, then\nit can safely prune them when MEM_OFFLINE.\n\nAnd make NUMA migration skip PageKsm pages where it skips PageReserved.\nBut it\u0027s only when we reach unmap_and_move() that the page lock is taken\nand we can be sure that raised pagecount has prevented a PageAnon from\nbeing upgraded: so add offlining arg to migrate_pages(), to migrate ksm\npage when offlining (has sufficient locking) but reject it otherwise.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@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": "e9995ef978a7d5296fe04a9a2c5ca6e66d8bb4e5",
      "tree": "df4324273856e06b8277b7e4a0fa9289eb8e6385",
      "parents": [
        "407f9c8b0889ced1dbe2f9157e4e60c61329d5c9"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:31 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "ksm: rmap_walk to remove_migation_ptes\n\nA side-effect of making ksm pages swappable is that they have to be placed\non the LRUs: which then exposes them to isolate_lru_page() and hence to\npage migration.\n\nAdd rmap_walk() for remove_migration_ptes() to use: rmap_walk_anon() and\nrmap_walk_file() in rmap.c, but rmap_walk_ksm() in ksm.c.  Perhaps some\nconsolidation with existing code is possible, but don\u0027t attempt that yet\n(try_to_unmap needs to handle nonlinears, but migration pte removal does\nnot).\n\nrmap_walk() is sadly less general than it appears: rmap_walk_anon(), like\nremove_anon_migration_ptes() which it replaces, avoids calling\npage_lock_anon_vma(), because that includes a page_mapped() test which\nfails when all migration ptes are in place.  That was valid when NUMA page\nmigration was introduced (holding mmap_sem provided the missing guarantee\nthat anon_vma\u0027s slab had not already been destroyed), but I believe not\nvalid in the memory hotremove case added since.\n\nFor now do the same as before, and consider the best way to fix that\nunlikely race later on.  When fixed, we can probably use rmap_walk() on\nhwpoisoned ksm pages too: for now, they remain among hwpoison\u0027s various\nexceptions (its PageKsm test comes before the page is locked, but its\npage_lock_anon_vma fails safely if an anon gets upgraded).\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@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": "407f9c8b0889ced1dbe2f9157e4e60c61329d5c9",
      "tree": "30c0c9ad224a73de621bc23909cd89cd81eda1aa",
      "parents": [
        "80e148226028257ec0a1909d99b2c40d0ffe17f2"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:30 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: mem cgroup charge swapin copy\n\nBut ksm swapping does require one small change in mem cgroup handling.\nWhen do_swap_page()\u0027s call to ksm_might_need_to_copy() does indeed\nsubstitute a duplicate page to accommodate a different anon_vma (or a the\n!PageSwapCache check in mem_cgroup_try_charge_swapin().\n\nThat was returning success without charging, on the assumption that\npte_same() would fail after, which is not the case here.  Originally I\nproposed that success, so that an unshrinkable mem cgroup at its limit\nwould not fail unnecessarily; but that\u0027s a minor point, and there are\nplenty of other places where we may fail an overallocation which might\nlater prove unnecessary.  So just go ahead and do what all the other\nexceptions do: proceed to charge current mm.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@redhat.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "80e148226028257ec0a1909d99b2c40d0ffe17f2",
      "tree": "1e3cae42144f5c80e215ba254e01bd6847ba1b36",
      "parents": [
        "4035c07a895974d0ac06a56fe870ad293fc451a7"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:29 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: share anon page without allocating\n\nWhen ksm pages were unswappable, it made no sense to include them in mem\ncgroup accounting; but now that they are swappable (although I see no\nstrict logical connection) the principle of least surprise implies that\nthey should be accounted (with the usual dissatisfaction, that a shared\npage is accounted to only one of the cgroups using it).\n\nThis patch was intended to add mem cgroup accounting where necessary; but\nturned inside out, it now avoids allocating a ksm page, instead upgrading\nan anon page to ksm - which brings its existing mem cgroup accounting with\nit.  Thus mem cgroups don\u0027t appear in the patch at all.\n\nThis upgrade from PageAnon to PageKsm takes place under page lock (via a\nsomewhat hacky NULL kpage interface), and audit showed only one place\nwhich needed to cope with the race - page_referenced() is sometimes used\nwithout page lock, so page_lock_anon_vma() needs an ACCESS_ONCE() to be\nsure of getting anon_vma and flags together (no problem if the page goes\nksm an instant after, the integrity of that anon_vma list is unaffected).\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@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": "4035c07a895974d0ac06a56fe870ad293fc451a7",
      "tree": "b0cc7cabeb0b23d97d5bd5080836d57bc5ee4689",
      "parents": [
        "db114b83ab6064d9b1d6ec5650e096c89bd95e25"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:27 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: take keyhole reference to page\n\nThere\u0027s a lamentable flaw in KSM swapping: the stable_node holds a\nreference to the ksm page, so the page to be freed cannot actually be\nfreed until ksmd works its way around to removing the last rmap_item from\nits stable_node.  Which in some configurations may take minutes: not quite\nresponsive enough for memory reclaim.  And we don\u0027t want to twist KSM and\nits locking more tightly into the rest of mm.  What a pity.\n\nBut although the stable_node needs to hold a pointer to the ksm page, does\nit actually need to raise the reference count of that page?\n\nNo.  It would need to do so if struct pages were ordinary kmalloc\u0027ed\nobjects; but they are more stable than that, and reused in particular ways\naccording to particular rules.\n\nAccess to stable_node from its pointer in struct page is no problem, so\nlong as we never free a stable_node before the ksm page itself has been\nfreed.  Access to struct page from its pointer in stable_node: reintroduce\nget_ksm_page(), and let that peep out through its keyhole (the stable_node\npointer to ksm page), to see if that struct page still holds the right key\nto open it (the ksm page mapping pointer back to this stable_node).\n\nThis relies upon the established way in which free_hot_cold_page() sets an\nanon (including ksm) page-\u003emapping to NULL; and relies upon no other user\nof a struct page to put something which looks like the original\nstable_node pointer (with two low bits also set) into page-\u003emapping.  It\nalso needs get_page_unless_zero() technique pioneered by speculative\npagecache; and uses rcu_read_lock() to keep the guarantees that gives.\n\nThere are several drivers which put pointers of their own into page-\u003e\nmapping; but none of those could coincide with our stable_node pointers,\nsince KSM won\u0027t free a stable_node until it sees that the page has gone.\n\nThe only problem case found is the pagetable spinlock USE_SPLIT_PTLOCKS\nplaces in struct page (my own abuse): to accommodate GENERIC_LOCKBREAK\u0027s\nbreak_lock on 32-bit, that spans both page-\u003eprivate and page-\u003emapping.\nSince break_lock is only 0 or 1, again no confusion for get_ksm_page().\n\nBut what of DEBUG_SPINLOCK on 64-bit bigendian?  When owner_cpu is 3\n(matching PageKsm low bits), it might see 0xdead4ead00000003 in page-\u003e\nmapping, which might coincide?  We could get around that by...  but a\nbetter answer is to suppress USE_SPLIT_PTLOCKS when DEBUG_SPINLOCK or\nDEBUG_LOCK_ALLOC, to stop bloating sizeof(struct page) in their case -\nalready proposed in an earlier mm/Kconfig patch.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@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": "db114b83ab6064d9b1d6ec5650e096c89bd95e25",
      "tree": "15e289b25fec011238f6838c6aafa1ff5e293224",
      "parents": [
        "5ad6468801d28c4d4ac9f48ec19297817c915f6a"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:25 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: hold anon_vma in rmap_item\n\nFor full functionality, page_referenced_one() and try_to_unmap_one() need\nto know the vma: to pass vma down to arch-dependent flushes, or to observe\nVM_LOCKED or VM_EXEC.  But KSM keeps no record of vma: nor can it, since\nvmas get split and merged without its knowledge.\n\nInstead, note page\u0027s anon_vma in its rmap_item when adding to stable tree:\nall the vmas which might map that page are listed by its anon_vma.\n\npage_referenced_ksm() and try_to_unmap_ksm() then traverse the anon_vma,\nfirst to find the probable vma, that which matches rmap_item\u0027s mm; but if\nthat is not enough to locate all instances, traverse again to try the\nothers.  This catches those occasions when fork has duplicated a pte of a\nksm page, but ksmd has not yet come around to assign it an rmap_item.\n\nBut each rmap_item in the stable tree which refers to an anon_vma needs to\ntake a reference to it.  Andrea\u0027s anon_vma design cleverly avoided a\nreference count (an anon_vma was free when its list of vmas was empty),\nbut KSM now needs to add that.  Is a 32-bit count sufficient?  I believe\nso - the anon_vma is only free when both count is 0 and list is empty.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@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": "5ad6468801d28c4d4ac9f48ec19297817c915f6a",
      "tree": "edd8dc48693f43278d6fe1614aca2bf660d4dc10",
      "parents": [
        "73848b4684e84a84cfd1555af78d41158f31e16b"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:24 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: let shared pages be swappable\n\nInitial implementation for swapping out KSM\u0027s shared pages: add\npage_referenced_ksm() and try_to_unmap_ksm(), which rmap.c calls when\nfaced with a PageKsm page.\n\nMost of what\u0027s needed can be got from the rmap_items listed from the\nstable_node of the ksm page, without discovering the actual vma: so in\nthis patch just fake up a struct vma for page_referenced_one() or\ntry_to_unmap_one(), then refine that in the next patch.\n\nAdd VM_NONLINEAR to ksm_madvise()\u0027s list of exclusions: it has always been\nimplicit there (being only set with VM_SHARED, already excluded), but\nlet\u0027s make it explicit, to help justify the lack of nonlinear unmap.\n\nRely on the page lock to protect against concurrent modifications to that\npage\u0027s node of the stable tree.\n\nThe awkward part is not swapout but swapin: do_swap_page() and\npage_add_anon_rmap() now have to allow for new possibilities - perhaps a\nksm page still in swapcache, perhaps a swapcache page associated with one\nlocation in one anon_vma now needed for another location or anon_vma.\n(And the vma might even be no longer VM_MERGEABLE when that happens.)\n\nksm_might_need_to_copy() checks for that case, and supplies a duplicate\npage when necessary, simply leaving it to a subsequent pass of ksmd to\nrediscover the identity and merge them back into one ksm page.\nDisappointingly primitive: but the alternative would have to accumulate\nunswappable info about the swapped out ksm pages, limiting swappability.\n\nRemove page_add_ksm_rmap(): page_add_anon_rmap() now has to allow for the\nparticular case it was handling, so just use it instead.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@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": "73848b4684e84a84cfd1555af78d41158f31e16b",
      "tree": "b71ba30e2b20cbc45740a38e9b5aa51b8c2ea60e",
      "parents": [
        "08beca44dfb0ab008e365163df70dbd302ae1508"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:22 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: fix mlockfreed to munlocked\n\nWhen KSM merges an mlocked page, it has been forgetting to munlock it:\nthat\u0027s been left to free_page_mlock(), which reports it in /proc/vmstat as\nunevictable_pgs_mlockfreed instead of unevictable_pgs_munlocked (and\nwhinges \"Page flag mlocked set for process\" in mmotm, whereas mainline is\nsilently forgiving).  Call munlock_vma_page() to fix that.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "08beca44dfb0ab008e365163df70dbd302ae1508",
      "tree": "33f3ddf5460e139bd7fd37e8c08026a7d852c3da",
      "parents": [
        "7b6ba2c7d3baf8cd9f888e05563dcc32e368baab"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:21 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: stable_node point to page and back\n\nAdd a pointer to the ksm page into struct stable_node, holding a reference\nto the page while the node exists.  Put a pointer to the stable_node into\nthe ksm page\u0027s -\u003emapping.\n\nThen we don\u0027t need get_ksm_page() while traversing the stable tree: the\npage to compare against is sure to be present and correct, even if it\u0027s no\nlonger visible through any of its existing rmap_items.\n\nAnd we can handle the forked ksm page case more efficiently: no need to\nmemcmp our way through the tree to find its match.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@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": "7b6ba2c7d3baf8cd9f888e05563dcc32e368baab",
      "tree": "89e62613a37d803e4a83b96559acca29526f9638",
      "parents": [
        "6514d511dbe5a77b4bdc0a7e26fd679585112e1e"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:20 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: separate stable_node\n\nThough we still do well to keep rmap_items in the unstable tree without a\nseparate tree_item at the node, for several reasons it becomes awkward to\nkeep rmap_items in the stable tree without a separate stable_node: lack of\nspace in the nicely-sized rmap_item, the need for an anchor as rmap_items\nare removed, the need for a node even when temporarily no rmap_items are\nattached to it.\n\nSo declare struct stable_node (rb_node to place it in the tree and\nhlist_head for the rmap_items hanging off it), and convert stable tree\nhandling to use it: without yet taking advantage of it.  Note how one\nstable_tree_insert() of a node now has _two_ stable_tree_append()s of the\ntwo rmap_items being merged.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@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": "6514d511dbe5a77b4bdc0a7e26fd679585112e1e",
      "tree": "a3fcf75191b7900043172d147fc7ed8ea97f3b4a",
      "parents": [
        "8dd3557a52f0bc8c960307721da307370ccad6fd"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:19 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: singly-linked rmap_list\n\nFree up a pointer in struct rmap_item, by making the mm_slot\u0027s rmap_list a\nsingly-linked list: we always traverse that list sequentially, and we\ndon\u0027t even lose any prefetches (but should consider adding a few later).\nName it rmap_list throughout.\n\nDo we need to free up that pointer?  Not immediately, and in the end, we\ncould continue to avoid it with a union; but having done the conversion,\nlet\u0027s keep it this way, since there\u0027s no downside, and maybe we\u0027ll want\nmore in future (struct rmap_item is a cache-friendly 32 bytes on 32-bit\nand 64 bytes on 64-bit, so we shall want to avoid expanding it).\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@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": "8dd3557a52f0bc8c960307721da307370ccad6fd",
      "tree": "711a15d188b6679026ae818bd0635d271820ea7e",
      "parents": [
        "31e855ea7173bdb0520f9684580423a9560f66e0"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:18 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:19 2009 -0800"
      },
      "message": "ksm: cleanup some function arguments\n\nCleanup: make argument names more consistent from cmp_and_merge_page()\ndown to replace_page(), so that it\u0027s easier to follow the rmap_item\u0027s page\nand the matching tree_page and the merged kpage through that code.\n\nIn some places, e.g.  break_cow(), pass rmap_item instead of separate mm\nand address.\n\ncmp_and_merge_page() initialize tree_page to NULL, to avoid a \"may be used\nuninitialized\" warning seen in one config by Anil SB.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@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": "31e855ea7173bdb0520f9684580423a9560f66e0",
      "tree": "20ff327e2a58929696946971a8201da559785338",
      "parents": [
        "93d17715a5b960d34220f2edba3e6cee9b5b1c58"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:17 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "ksm: remove redundancies when merging page\n\nThere is no need for replace_page() to calculate a write-protected prot\nvm_page_prot must already be write-protected for an anonymous page (see\nmm/memory.c do_anonymous_page() for similar reliance on vm_page_prot).\n\nThere is no need for try_to_merge_one_page() to get_page and put_page on\nnewpage and oldpage: in every case we already hold a reference to each of\nthem.\n\nBut some instinct makes me move try_to_merge_one_page()\u0027s unlock_page of\noldpage down after replace_page(): that doesn\u0027t increase contention on the\nksm page, and makes thinking about the transition easier.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@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": "93d17715a5b960d34220f2edba3e6cee9b5b1c58",
      "tree": "9ab08ff4169464bf5b8d86c8082296fd6e3d069b",
      "parents": [
        "338fde90930eaa02f6f394daa23d35a410af5852"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:16 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "ksm: three remove_rmap_item_from_tree cleanups\n\n1. remove_rmap_item_from_tree() is called as a precaution from\n   various places: don\u0027t dirty the rmap_item cacheline unnecessarily,\n   just mask the flags out of the address when they have been set.\n\n2. First get_next_rmap_item() removes an unstable rmap_item from its tree,\n   then shortly afterwards cmp_and_merge_page() removes a stable rmap_item\n   from its tree: it\u0027s easier just to do both at once (but definitely keep\n   the BUG_ON(age \u003e 1) which guards against a future omission).\n\n3. When cmp_and_merge_page() moves an rmap_item from unstable to stable\n   tree, it does its own rb_erase() and accounting: that\u0027s better\n   expressed by remove_rmap_item_from_tree().\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@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": "338fde90930eaa02f6f394daa23d35a410af5852",
      "tree": "6a230b458d12e33b4b3d531f977636d1a4813102",
      "parents": [
        "ece74b2e7acfb71453f3f39948cc667434550dbb"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:15 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "vmscan: make consistent of reclaim bale out between do_try_to_free_page and shrink_zone\n\nFix small inconsistent of \"\u003e\" and \"\u003e\u003d\".\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ece74b2e7acfb71453f3f39948cc667434550dbb",
      "tree": "08749bc2d0a6169d1c1525c502a2faf13e84b244",
      "parents": [
        "4f0ddfdffc8bef3a5eb9154734d68a6053194948"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:14 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "vmscan: kill sc.swap_cluster_max\n\nNow, All caller of reclaim use swap_cluster_max as SWAP_CLUSTER_MAX.\nThen, we can remove it perfectly.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4f0ddfdffc8bef3a5eb9154734d68a6053194948",
      "tree": "ae86c67cbb9290b8f090a13022736c2b862f3630",
      "parents": [
        "7b51755c3b38483b574d363d5ee587283c3f7999"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:13 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "vmscan: zone_reclaim() don\u0027t use insane swap_cluster_max\n\nIn old days, we didn\u0027t have sc.nr_to_reclaim and it brought\nsc.swap_cluster_max misuse.\n\nhuge sc.swap_cluster_max might makes unnecessary OOM risk and no\nperformance benefit.\n\nNow, we can stop its insane thing.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7b51755c3b38483b574d363d5ee587283c3f7999",
      "tree": "29ac6d3b73f0a28488dabff03a7df948c0333906",
      "parents": [
        "22fba33545b731408deab6e96b6e231ee05fd10b"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:12 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "vmscan: kill hibernation specific reclaim logic and unify it\n\nshrink_all_zone() was introduced by commit d6277db4ab (swsusp: rework\nmemory shrinker) for hibernate performance improvement.  and\nsc.swap_cluster_max was introduced by commit a06fe4d307 (Speed freeing\nmemory for suspend).\n\ncommit a06fe4d307 said\n\n   Without the patch:\n   Freed  14600 pages in  1749 jiffies \u003d 32.61 MB/s (Anomolous!)\n   Freed  88563 pages in 14719 jiffies \u003d 23.50 MB/s\n   Freed 205734 pages in 32389 jiffies \u003d 24.81 MB/s\n\n   With the patch:\n   Freed  68252 pages in   496 jiffies \u003d 537.52 MB/s\n   Freed 116464 pages in   569 jiffies \u003d 798.54 MB/s\n   Freed 209699 pages in   705 jiffies \u003d 1161.89 MB/s\n\nAt that time, their patch was pretty worth.  However, Modern Hardware\ntrend and recent VM improvement broke its worth.  From several reason, I\nthink we should remove shrink_all_zones() at all.\n\ndetail:\n\n1) Old days, shrink_zone()\u0027s slowness was mainly caused by stupid io-throttle\n  at no i/o congestion.\n  but current shrink_zone() is sane, not slow.\n\n2) shrink_all_zone() try to shrink all pages at a time. but it doesn\u0027t works\n  fine on numa system.\n  example)\n    System has 4GB memory and each node have 2GB. and hibernate need 1GB.\n\n    optimal)\n       steal 500MB from each node.\n    shrink_all_zones)\n       steal 1GB from node-0.\n\n  Oh, Cache balancing logic was broken. ;)\n  Unfortunately, Desktop system moved ahead NUMA at nowadays.\n  (Side note, if hibernate require 2GB, shrink_all_zones() never success\n   on above machine)\n\n3) if the node has several I/O flighting pages, shrink_all_zones() makes\n  pretty bad result.\n\n  schenario) hibernate need 1GB\n\n  1) shrink_all_zones() try to reclaim 1GB from Node-0\n  2) but it only reclaimed 990MB\n  3) stupidly, shrink_all_zones() try to reclaim 1GB from Node-1\n  4) it reclaimed 990MB\n\n  Oh, well. it reclaimed twice much than required.\n  In the other hand, current shrink_zone() has sane baling out logic.\n  then, it doesn\u0027t make overkill reclaim. then, we lost shrink_zones()\u0027s risk.\n\n4) SplitLRU VM always keep active/inactive ratio very carefully. inactive list only\n  shrinking break its assumption. it makes unnecessary OOM risk. it obviously suboptimal.\n\nNow, shrink_all_memory() is only the wrapper function of do_try_to_free_pages().\nit bring good reviewability and debuggability, and solve above problems.\n\nside note: Reclaim logic unificication makes two good side effect.\n - Fix recursive reclaim bug on shrink_all_memory().\n   it did forgot to use PF_MEMALLOC. it mean the system be able to stuck into deadlock.\n - Now, shrink_all_memory() got lockdep awareness. it bring good debuggability.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Rafael J. Wysocki \u003crjw@sisk.pl\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": "22fba33545b731408deab6e96b6e231ee05fd10b",
      "tree": "a522c19e19c2ce82f53ab781ec7901e3bdb8b200",
      "parents": [
        "cba5dd7fa535b7684cba68e17ac8be5b0083dc3d"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:59:10 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "vmscan: separate sc.swap_cluster_max and sc.nr_max_reclaim\n\nCurrently, sc.scap_cluster_max has double meanings.\n\n 1) reclaim batch size as isolate_lru_pages()\u0027s argument\n 2) reclaim baling out thresolds\n\nThe two meanings pretty unrelated. Thus, Let\u0027s separate it.\nthis patch doesn\u0027t change any behavior.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cba5dd7fa535b7684cba68e17ac8be5b0083dc3d",
      "tree": "33d9db04ab06bcdaf6e71003ae29220fe1df7ed4",
      "parents": [
        "1830794ae6392ce12d36dbcc5ff52f11298ddab6"
      ],
      "author": {
        "name": "Alex Chiang",
        "email": "achiang@hp.com",
        "time": "Mon Dec 14 17:59:09 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "Documentation: ABI: /sys/devices/system/cpu/cpu#/node\n\nDescribe NUMA node symlink created for CPUs when CONFIG_NUMA is set.\n\nSigned-off-by: Alex Chiang \u003cachiang@hp.com\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Gary Hade \u003cgaryhade@us.ibm.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1830794ae6392ce12d36dbcc5ff52f11298ddab6",
      "tree": "b1ebda5a62d2b8d904840f041fc334fecc274b18",
      "parents": [
        "b9d52dad9447d0db4b52d67d5e9e9d339b5e8302"
      ],
      "author": {
        "name": "Alex Chiang",
        "email": "achiang@hp.com",
        "time": "Mon Dec 14 17:59:08 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:18 2009 -0800"
      },
      "message": "mm: add numa node symlink for cpu devices in sysfs\n\nYou can discover which CPUs belong to a NUMA node by examining\n/sys/devices/system/node/node#/\n\nHowever, it\u0027s not convenient to go in the other direction, when looking at\n/sys/devices/system/cpu/cpu#/\n\nYes, you can muck about in sysfs, but adding these symlinks makes life a\nlot more convenient.\n\nSigned-off-by: Alex Chiang \u003cachiang@hp.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Gary Hade \u003cgaryhade@us.ibm.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b9d52dad9447d0db4b52d67d5e9e9d339b5e8302",
      "tree": "a3b58ae9c722e21567429b71dfc9b7abeee409c6",
      "parents": [
        "f8246f3159dfdf97b8b40f9e03e715bafedd22fc"
      ],
      "author": {
        "name": "Alex Chiang",
        "email": "achiang@hp.com",
        "time": "Mon Dec 14 17:59:07 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:17 2009 -0800"
      },
      "message": "mm: refactor unregister_cpu_under_node()\n\nBy returning early if the node is not online, we can unindent the\ninteresting code by two levels.\n\nNo functional change.\n\nSigned-off-by: Alex Chiang \u003cachiang@hp.com\u003e\nCc: Gary Hade \u003cgaryhade@us.ibm.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f8246f3159dfdf97b8b40f9e03e715bafedd22fc",
      "tree": "1e0b87b800a6efbba7c963665c1f129e208a6293",
      "parents": [
        "dee5d0d518defd0337a41f1a504428c9acc87be5"
      ],
      "author": {
        "name": "Alex Chiang",
        "email": "achiang@hp.com",
        "time": "Mon Dec 14 17:59:06 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:17 2009 -0800"
      },
      "message": "mm: refactor register_cpu_under_node()\n\nBy returning early if the node is not online, we can unindent the\ninteresting code by one level.\n\nNo functional change.\n\nSigned-off-by: Alex Chiang \u003cachiang@hp.com\u003e\nCc: Gary Hade \u003cgaryhade@us.ibm.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dee5d0d518defd0337a41f1a504428c9acc87be5",
      "tree": "deb540b5ccc58f0e83114509e17dacb281fc12e5",
      "parents": [
        "d99be1a8ecf377c2c9b3372d36411ad6547bbd4c"
      ],
      "author": {
        "name": "Alex Chiang",
        "email": "achiang@hp.com",
        "time": "Mon Dec 14 17:59:05 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:17 2009 -0800"
      },
      "message": "mm: add numa node symlink for memory section in sysfs\n\nCommit c04fc586c (mm: show node to memory section relationship with\nsymlinks in sysfs) created symlinks from nodes to memory sections, e.g.\n\n/sys/devices/system/node/node1/memory135 -\u003e ../../memory/memory135\n\nIf you\u0027re examining the memory section though and are wondering what node\nit might belong to, you can find it by grovelling around in sysfs, but\nit\u0027s a little cumbersome.\n\nAdd a reverse symlink for each memory section that points back to the\nnode to which it belongs.\n\nSigned-off-by: Alex Chiang \u003cachiang@hp.com\u003e\nCc: Gary Hade \u003cgaryhade@us.ibm.com\u003e\nCc: Badari Pulavarty \u003cpbadari@us.ibm.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d99be1a8ecf377c2c9b3372d36411ad6547bbd4c",
      "tree": "844a156da951783a46f9cfd0e66858eae12e5f54",
      "parents": [
        "a70caa8ba48f21f46d3b4e71b6b8d14080bbd57a"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:04 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:17 2009 -0800"
      },
      "message": "mm: sigbus instead of abusing oom\n\nWhen do_nonlinear_fault() realizes that the page table must have been\ncorrupted for it to have been called, it does print_bad_pte() and returns\n...  VM_FAULT_OOM, which is hard to understand.\n\nIt made some sense when I did it for 2.6.15, when do_page_fault() just\nkilled the current process; but nowadays it lets the OOM killer decide who\nto kill - so page table corruption in one process would be liable to kill\nanother.\n\nChange it to return VM_FAULT_SIGBUS instead: that doesn\u0027t guarantee that\nthe process will be killed, but is good enough for such a rare\nabnormality, accompanied as it is by the \"BUG: Bad page map\" message.\n\nAnd recent HWPOISON work has copied that code into do_swap_page(), when it\nfinds an impossible swap entry: fix that to VM_FAULT_SIGBUS too.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nReviewed-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": "a70caa8ba48f21f46d3b4e71b6b8d14080bbd57a",
      "tree": "2f6ab917400f82b9d16f1e945ba101a25f5d6281",
      "parents": [
        "1cb1729b1385884648170d9d1d3aa0c66780d64b"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:02 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:17 2009 -0800"
      },
      "message": "mm: stop ptlock enlarging struct page\n\nCONFIG_DEBUG_SPINLOCK adds 12 or 16 bytes to a 32- or 64-bit spinlock_t,\nand CONFIG_DEBUG_LOCK_ALLOC adds another 12 or 24 bytes to it: lockdep\nenables both of those, and CONFIG_LOCK_STAT adds 8 or 16 bytes to that.\n\nWhen 2.6.15 placed the split page table lock inside struct page (usually\nsized 32 or 56 bytes), only CONFIG_DEBUG_SPINLOCK was a possibility, and\nwe ignored the enlargement (but fitted in CONFIG_GENERIC_LOCKBREAK\u0027s 4 by\nletting the spinlock_t occupy both page-\u003eprivate and page-\u003emapping).\n\nShould these debugging options be allowed to double the size of a struct\npage, when only one minority use of the page (as a page table) needs to\nfit a spinlock in there?  Perhaps not.\n\nTake the easy way out: switch off SPLIT_PTLOCK_CPUS when DEBUG_SPINLOCK or\nDEBUG_LOCK_ALLOC is in force.  I\u0027ve sometimes tried to be cleverer,\nkmallocing a cacheline for the spinlock when it doesn\u0027t fit, but given up\neach time.  Falling back to mm-\u003epage_table_lock (as we do when ptlock is\nnot split) lets lockdep check out the strictest path anyway.\n\nAnd now that some arches allow 8192 cpus, use 999999 for infinity.\n\n(What has this got to do with KSM swapping?  It doesn\u0027t care about the\nsize of struct page, but may care about random junk in page-\u003emapping - to\nbe explained separately later.)\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1cb1729b1385884648170d9d1d3aa0c66780d64b",
      "tree": "57b9e58d70f791f2737997bf56a2dad98378d54d",
      "parents": [
        "af8e3354b4bbd1ee5a3a55d11a5e1fe37e77f0ba"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:01 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:17 2009 -0800"
      },
      "message": "mm: pass address down to rmap ones\n\nKSM swapping will know where page_referenced_one() and try_to_unmap_one()\nshould look.  It could hack page-\u003eindex to get them to do what it wants,\nbut it seems cleaner now to pass the address down to them.\n\nMake the same change to page_mkclean_one(), since it follows the same\npattern; but there\u0027s no real need in its case.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "af8e3354b4bbd1ee5a3a55d11a5e1fe37e77f0ba",
      "tree": "8dc0ece80878d00409d4662c5fd1e28cd7fbbdd8",
      "parents": [
        "53f79acb6ecb648afd63e0f13deba167f1a934df"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:59 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:17 2009 -0800"
      },
      "message": "mm: CONFIG_MMU for PG_mlocked\n\nRemove three degrees of obfuscation, left over from when we had\nCONFIG_UNEVICTABLE_LRU.  MLOCK_PAGES is CONFIG_HAVE_MLOCKED_PAGE_BIT is\nCONFIG_HAVE_MLOCK is CONFIG_MMU.  rmap.o (and memory-failure.o) are only\nbuilt when CONFIG_MMU, so don\u0027t need such conditions at all.\n\nSomehow, I feel no compulsion to remove the CONFIG_HAVE_MLOCK* lines from\n169 defconfigs: leave those to evolve in due course.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "53f79acb6ecb648afd63e0f13deba167f1a934df",
      "tree": "48d9b998fa45c4fe510447d17cdc050f31be5e23",
      "parents": [
        "3ca7b3c5b64d35fe02c35b5d44c2c58b49499fee"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:58 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:17 2009 -0800"
      },
      "message": "mm: mlocking in try_to_unmap_one\n\nThere\u0027s contorted mlock/munlock handling in try_to_unmap_anon() and\ntry_to_unmap_file(), which we\u0027d prefer not to repeat for KSM swapping.\nSimplify it by moving it all down into try_to_unmap_one().\n\nOne thing is then lost, try_to_munlock()\u0027s distinction between when no vma\nholds the page mlocked, and when a vma does mlock it, but we could not get\nmmap_sem to set the page flag.  But its only caller takes no interest in\nthat distinction (and is better testing SWAP_MLOCK anyway), so let\u0027s keep\nthe code simple and return SWAP_AGAIN for both cases.\n\ntry_to_unmap_file()\u0027s TTU_MUNLOCK nonlinear handling was particularly\namusing: once unravelled, it turns out to have been choosing between two\ndifferent ways of doing the same nothing.  Ah, no, one way was actually\nreturning SWAP_FAIL when it meant to return SWAP_SUCCESS.\n\n[kosaki.motohiro@jp.fujitsu.com: comment adding to mlocking in try_to_unmap_one]\n[akpm@linux-foundation.org: remove test of MLOCK_PAGES]\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3ca7b3c5b64d35fe02c35b5d44c2c58b49499fee",
      "tree": "bb6af24d3683788ef658282f8794af19d2232663",
      "parents": [
        "bb3ab596832b920c703d1aea1ce76d69c0f71fb7"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:57 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:17 2009 -0800"
      },
      "message": "mm: define PAGE_MAPPING_FLAGS\n\nAt present we define PageAnon(page) by the low PAGE_MAPPING_ANON bit set\nin page-\u003emapping, with the higher bits a pointer to the anon_vma; and have\ndefined PageKsm(page) as that with NULL anon_vma.\n\nBut KSM swapping will need to store a pointer there: so in preparation for\nthat, now define PAGE_MAPPING_FLAGS as the low two bits, including\nPAGE_MAPPING_KSM (always set along with PAGE_MAPPING_ANON, until some\nother use for the bit emerges).\n\nDeclare page_rmapping(page) to return the pointer part of page-\u003emapping,\nand page_anon_vma(page) to return the anon_vma pointer when that\u0027s what it\nis.  Use these in a few appropriate places: notably, unuse_vma() has been\ntesting page-\u003emapping, but is better to be testing page_anon_vma() (cases\nmay be added in which flag bits are set without any pointer).\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bb3ab596832b920c703d1aea1ce76d69c0f71fb7",
      "tree": "048162bf5081e7bd9802eba012e8b680a4444da8",
      "parents": [
        "f50de2d3811081957156b5d736778799379c29de"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:58:55 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "vmscan: stop kswapd waiting on congestion when the min watermark is not being met\n\nIf reclaim fails to make sufficient progress, the priority is raised.\nOnce the priority is higher, kswapd starts waiting on congestion.\nHowever, if the zone is below the min watermark then kswapd needs to\ncontinue working without delay as there is a danger of an increased rate\nof GFP_ATOMIC allocation failure.\n\nThis patch changes the conditions under which kswapd waits on congestion\nby only going to sleep if the min watermarks are being met.\n\n[mel@csn.ul.ie: add stats to track how relevant the logic is]\n[mel@csn.ul.ie: make kswapd only check its own zones and rename the relevant counters]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f50de2d3811081957156b5d736778799379c29de",
      "tree": "ddc3676bcaa26e2e55e18e57928b5c8331a0f0fa",
      "parents": [
        "273f047e36d83179573dc7e3a8af6aceaa8c599e"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Dec 14 17:58:53 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "vmscan: have kswapd sleep for a short interval and double check it should be asleep\n\nAfter kswapd balances all zones in a pgdat, it goes to sleep.  In the\nevent of no IO congestion, kswapd can go to sleep very shortly after the\nhigh watermark was reached.  If there are a constant stream of allocations\nfrom parallel processes, it can mean that kswapd went to sleep too quickly\nand the high watermark is not being maintained for sufficient length time.\n\nThis patch makes kswapd go to sleep as a two-stage process.  It first\ntries to sleep for HZ/10.  If it is woken up by another process or the\nhigh watermark is no longer met, it\u0027s considered a premature sleep and\nkswapd continues work.  Otherwise it goes fully to sleep.\n\nThis adds more counters to distinguish between fast and slow breaches of\nwatermarks.  A \"fast\" premature sleep is one where the low watermark was\nhit in a very short time after kswapd going to sleep.  A \"slow\" premature\nsleep indicates that the high watermark was breached after a very short\ninterval.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Frans Pop \u003celendil@planet.nl\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "273f047e36d83179573dc7e3a8af6aceaa8c599e",
      "tree": "0202c5e27f163ceb7b33dc6bd7cddcb87a1e6a46",
      "parents": [
        "7b51159405272157123ea8e0ef9b63c731dbfb48"
      ],
      "author": {
        "name": "Huang Shijie",
        "email": "shijie8@gmail.com",
        "time": "Mon Dec 14 17:58:51 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "rmap: move label `out\u0027 to a better place\n\nWhen the code jumps to the `out\u0027, `referenced\u0027 is still zero.  So there is\nno need to check it.\n\nSigned-off-by: Huang Shijie \u003cshijie8@gmail.com\u003e\nAcked-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7b51159405272157123ea8e0ef9b63c731dbfb48",
      "tree": "b483123483f3a3aba8b46db3150a76b5546f42c8",
      "parents": [
        "8051be5e614f3e3feccbe9e06b50e0b889740a93"
      ],
      "author": {
        "name": "Huang Shijie",
        "email": "shijie8@gmail.com",
        "time": "Mon Dec 14 17:58:51 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "rmap: simplify try_to_unmap_file()\n\nJust simplify the code when `mlocked\u0027 is true.\n\nSigned-off-by: Huang Shijie \u003cshijie8@gmail.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8051be5e614f3e3feccbe9e06b50e0b889740a93",
      "tree": "7a8fc30c60b827209aa13581b3a9c1422d7632f3",
      "parents": [
        "6aceb53be44ed55a2374c20a62e3aef9d3919e8d"
      ],
      "author": {
        "name": "Huang Shijie",
        "email": "shijie8@gmail.com",
        "time": "Mon Dec 14 17:58:50 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "rmap: fix the comment for try_to_unmap_anon\n\nFix the comment for try_to_unmap_anon() with the new arguments.\n\nSigned-off-by: Huang Shijie \u003cshijie8@gmail.com\u003e\nAcked-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6aceb53be44ed55a2374c20a62e3aef9d3919e8d",
      "tree": "14092867e419d7c11e5e0202f9041247e0f4824d",
      "parents": [
        "d4906e1aa516cc965292b43b5a26122dd4344e7e"
      ],
      "author": {
        "name": "Vincent Li",
        "email": "macli@brc.ubc.ca",
        "time": "Mon Dec 14 17:58:49 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "mm/vmscan: change comment generic_file_write to __generic_file_aio_write\n\nCommit 543ade1fc9 (\"Streamline generic_file_* interfaces and filemap\ncleanups\") removed generic_file_write() in filemap.  Change the comment in\nvmscan pageout() to __generic_file_aio_write().\n\nSigned-off-by: Vincent Li \u003cmacli@brc.ubc.ca\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d4906e1aa516cc965292b43b5a26122dd4344e7e",
      "tree": "78c19149282e93200d90f380a40f1e1192354936",
      "parents": [
        "7509765a29cfb1a4c506c09b304aaf3b4111c653"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "Lee.Schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:49 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "swap: rework map_swap_page() again\n\nSeems that page_io.c doesn\u0027t really need to know that page_private(page)\nis the swp_entry \u0027val\u0027.  Rework map_swap_page() to do what its name says\nand map a page to a page offset in the swap space.\n\nThe only other caller of map_swap_page() is internal to mm/swapfile.c and\nit does want to map a swap entry to the \u0027sector\u0027.  So rename\nmap_swap_page() to map_swap_entry(), make it \u0027static\u0027 and and implement\nmap_swap_page() as a wrapper around that.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7509765a29cfb1a4c506c09b304aaf3b4111c653",
      "tree": "1f2de5381e044b452653a3af0f32e403ffe51931",
      "parents": [
        "aaa468653b4a0d11c603c48d716f765177a5a9e4"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:48 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "swap_info: reorder its fields\n\nReorder (and comment) the fields of swap_info_struct, to make better\nuse of its cachelines: it\u0027s good for swap_duplicate() in particular\nif unsigned int max and swap_map are near the start.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aaa468653b4a0d11c603c48d716f765177a5a9e4",
      "tree": "3cb8c9232dd405001fa38d5519937c5e6c6f32ab",
      "parents": [
        "570a335b8e22579e2a51a68136d2b1f907a20eec"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:47 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:16 2009 -0800"
      },
      "message": "swap_info: note SWAP_MAP_SHMEM\n\nWhile we\u0027re fiddling with the swap_map values, let\u0027s assign a particular\nvalue to shmem/tmpfs swap pages: their swap counts are never incremented,\nand it helps swapoff\u0027s try_to_unuse() a little if it can immediately\ndistinguish those pages from process pages.\n\nSince we\u0027ve no use for SWAP_MAP_BAD | COUNT_CONTINUED,\nwe might as well use that 0xbf value for SWAP_MAP_SHMEM.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "570a335b8e22579e2a51a68136d2b1f907a20eec",
      "tree": "c5312383e948d2e7ac60c2fa410fee98e8b38a70",
      "parents": [
        "8d69aaee80c123b460918816cbfa2e83224c3646"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:46 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: swap count continuations\n\nSwap is duplicated (reference count incremented by one) whenever the same\nswap page is inserted into another mm (when forking finds a swap entry in\nplace of a pte, or when reclaim unmaps a pte to insert the swap entry).\n\nswap_info_struct\u0027s vmalloc\u0027ed swap_map is the array of these reference\ncounts: but what happens when the unsigned short (or unsigned char since\nthe preceding patch) is full? (and its high bit is kept for a cache flag)\n\nWe then lose track of it, never freeing, leaving it in use until swapoff:\nat which point we _hope_ that a single pass will have found all instances,\nassume there are no more, and will lose user data if we\u0027re wrong.\n\nSwapping of KSM pages has not yet been enabled; but it is implemented,\nand makes it very easy for a user to overflow the maximum swap count:\npossible with ordinary process pages, but unlikely, even when pid_max\nhas been raised from PID_MAX_DEFAULT.\n\nThis patch implements swap count continuations: when the count overflows,\na continuation page is allocated and linked to the original vmalloc\u0027ed\nmap page, and this used to hold the continuation counts for that entry\nand its neighbours.  These continuation pages are seldom referenced:\nthe common paths all work on the original swap_map, only referring to\na continuation page when the low \"digit\" of a count is incremented or\ndecremented through SWAP_MAP_MAX.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8d69aaee80c123b460918816cbfa2e83224c3646",
      "tree": "899a69417dbd81f9b53926d7076629cc9b394ae5",
      "parents": [
        "253d553ba75ab26b3e9e2f70cbf6fbf0813f7e86"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:45 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: swap_map of chars not shorts\n\nHalve the vmalloc\u0027ed swap_map array from unsigned shorts to unsigned\nchars: it\u0027s still very unusual to reach a swap count of 126, and the\nnext patch allows it to be extended indefinitely.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "253d553ba75ab26b3e9e2f70cbf6fbf0813f7e86",
      "tree": "57c448fad45820c0eb984297fbef120b689381a0",
      "parents": [
        "73c34b6accc8427584f5d7db4d5acb230ed8c912"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:44 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: SWAP_HAS_CACHE cleanups\n\nThough swap_count() is useful, I\u0027m finding that swap_has_cache() and\nencode_swapmap() obscure what happens in the swap_map entry, just at\nthose points where I need to understand it.  Remove them, and pass\nmore usable \"usage\" values to scan_swap_map(), swap_entry_free() and\n__swap_duplicate(), instead of the SWAP_MAP and SWAP_CACHE enum.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "73c34b6accc8427584f5d7db4d5acb230ed8c912",
      "tree": "6f7c445c9547b6ee78130c176cce32fc13f7efdd",
      "parents": [
        "9625a5f289f7c3c100b59c317e2bcc3c7e2e51fb"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:43 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: miscellaneous minor cleanups\n\nMove CONFIG_HIBERNATION\u0027s swapdev_block() into the main CONFIG_HIBERNATION\nblock, remove extraneous whitespace and return, fix typo in a comment.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9625a5f289f7c3c100b59c317e2bcc3c7e2e51fb",
      "tree": "88fecfbed0eaf627e8e08a9e196d1d2849737f0a",
      "parents": [
        "efa90a981bbc891efad96db2a75b5487e00852ca"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:42 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: include first_swap_extent\n\nMake better use of the space by folding first swap_extent into its\nswap_info_struct, instead of just the list_head: swap partitions need\nonly that one, and for others it\u0027s used as a circular list anyway.\n\n[jirislaby@gmail.com: fix crash on double swapon]\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Jiri Slaby \u003cjirislaby@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "efa90a981bbc891efad96db2a75b5487e00852ca",
      "tree": "fc64a5d5b71e84eb1eec2810fb0568a79a361827",
      "parents": [
        "f29ad6a99b596b8169744d107bf088e8be9e8d0d"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:41 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:15 2009 -0800"
      },
      "message": "swap_info: change to array of pointers\n\nThe swap_info_struct is only 76 or 104 bytes, but it does seem wrong\nto reserve an array of about 30 of them in bss, when most people will\nwant only one.  Change swap_info[] to an array of pointers.\n\nThat does need a \"type\" field in the structure: pack it as a char with\nnext type and short prio (aha, char is unsigned by default on PowerPC).\nUse the (admittedly peculiar) name \"type\" throughout for this index.\n\n/proc/swaps does not take swap_lock: I wouldn\u0027t want it to, but do take\ncare with barriers when adding a new item to the array (never removed).\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f29ad6a99b596b8169744d107bf088e8be9e8d0d",
      "tree": "e138bf9eeb751defd358eb5aca8113e2645ded3d",
      "parents": [
        "976d6dfbb0175d136fc098854bbce0c028a3924b"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:58:40 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "swap_info: private to swapfile.c\n\nThe swap_info_struct is mostly private to mm/swapfile.c, with only\none other in-tree user: get_swap_bio().  Adjust its interface to\nmap_swap_page(), so that we can then remove get_swap_info_struct().\n\nBut there is a popular user out-of-tree, TuxOnIce: so leave the\ndeclaration of swap_info_struct in linux/swap.h.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Nigel Cunningham \u003cncunningham@crca.org.au\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "976d6dfbb0175d136fc098854bbce0c028a3924b",
      "tree": "1ae6511b70d1272fffa1124d8ba69fc6a2d90422",
      "parents": [
        "bad44b5be84cf3bb1ff900bec02ee61e1993328c"
      ],
      "author": {
        "name": "Jan Beulich",
        "email": "JBeulich@novell.com",
        "time": "Mon Dec 14 17:58:39 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "vmalloc(): adjust gfp mask passed on nested vmalloc() invocation\n\n- avoid wasting more precious resources (DMA or DMA32 pools), when\n  being called through vmalloc_32{,_user}()\n- explicitly allow using high memory here even if the outer allocation\n  request doesn\u0027t allow it\n\nSigned-off-by: Jan Beulich \u003cjbeulich@novell.com\u003e\nAcked-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bad44b5be84cf3bb1ff900bec02ee61e1993328c",
      "tree": "edd9a9cc2f482ca8684c9e64abe4b977a5525615",
      "parents": [
        "39da08cb074cf19cb249832a2a955dfb28837e65"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Dec 14 17:58:38 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "mm: add gfp flags for NODEMASK_ALLOC slab allocations\n\nObjects passed to NODEMASK_ALLOC() are relatively small in size and are\nbacked by slab caches that are not of large order, traditionally never\ngreater than PAGE_ALLOC_COSTLY_ORDER.\n\nThus, using GFP_KERNEL for these allocations on large machines when\nCONFIG_NODES_SHIFT \u003e 8 will cause the page allocator to loop endlessly in\nthe allocation attempt, each time invoking both direct reclaim or the oom\nkiller.\n\nThis is of particular interest when using NODEMASK_ALLOC() from a\nmempolicy context (either directly in mm/mempolicy.c or the mempolicy\nconstrained hugetlb allocations) since the oom killer always kills current\nwhen allocations are constrained by mempolicies.  So for all present use\ncases in the kernel, current would end up being oom killed when direct\nreclaim fails.  That would allow the NODEMASK_ALLOC() to succeed but\ncurrent would have sacrificed itself upon returning.\n\nThis patch adds gfp flags to NODEMASK_ALLOC() to pass to kmalloc() on\nCONFIG_NODES_SHIFT \u003e 8; this parameter is a nop on other configurations.\nAll current use cases either directly from hugetlb code or indirectly via\nNODEMASK_SCRATCH() union __GFP_NORETRY to avoid direct reclaim and the oom\nkiller when the slab allocator needs to allocate additional pages.\n\nThe side-effect of this change is that all current use cases of either\nNODEMASK_ALLOC() or NODEMASK_SCRATCH() need appropriate -ENOMEM handling\nwhen the allocation fails (never for CONFIG_NODES_SHIFT \u003c\u003d 8).  All\ncurrent use cases were audited and do have appropriate error handling at\nthis time.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "39da08cb074cf19cb249832a2a955dfb28837e65",
      "tree": "fded7c1757adb29aa682f86251addc66549b6907",
      "parents": [
        "4faf8d950ec438c49ae4526b897c30f8a2cad741"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:36 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "hugetlb: offload per node attribute registrations\n\nOffload the registration and unregistration of per node hstate sysfs\nattributes to a worker thread rather than attempt the\nallocation/attachment or detachment/freeing of the attributes in the\ncontext of the memory hotplug handler.\n\nI don\u0027t know that this is absolutely required, but the registration can\nsleep in allocations and other mem hot plug handlers do it this way.  If\nit turns out this is NOT required, we can drop this patch.\n\nN.B.,  Only tested build, boot, libhugetlbfs regression.\n       i.e., no memory hotplug testing.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4faf8d950ec438c49ae4526b897c30f8a2cad741",
      "tree": "2764787c538868e73958e176d46c542008f345c2",
      "parents": [
        "8fe23e057172223fe2048768a4d87ab7de7477bc"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:35 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "hugetlb: handle memory hot-plug events\n\nRegister per node hstate attributes only for nodes with memory.  As\nsuggested by David Rientjes.\n\nWith Memory Hotplug, memory can be added to a memoryless node and a node\nwith memory can become memoryless.  Therefore, add a memory on/off-line\nnotifier callback to [un]register a node\u0027s attributes on transition\nto/from memoryless state.\n\nN.B.,  Only tested build, boot, libhugetlbfs regression.\n       i.e., no memory hotplug testing.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8fe23e057172223fe2048768a4d87ab7de7477bc",
      "tree": "d176d8e588fca088adfcb110e7c1bc53a839dc84",
      "parents": [
        "9b5e5d0fdc91b73bba8cf5e0fbe3521a953e4e4d"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Dec 14 17:58:33 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "mm: clear node in N_HIGH_MEMORY and stop kswapd when all memory is offlined\n\nWhen memory is hot-removed, its node must be cleared in N_HIGH_MEMORY if\nthere are no present pages left.\n\nIn such a situation, kswapd must also be stopped since it has nothing left\nto do.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9b5e5d0fdc91b73bba8cf5e0fbe3521a953e4e4d",
      "tree": "58b7ca4a13b71de2132ae669fc138eb85c5ab3c8",
      "parents": [
        "267b4c281b4a43c8f3d965c791d3a7fd62448733"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:32 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "hugetlb: use only nodes with memory for huge pages\n\nRegister per node hstate sysfs attributes only for nodes with memory.\nGlobal replacement of \u0027all online nodes\" with \"all nodes with memory\" in\nmm/hugetlb.c.  Suggested by David Rientjes.\n\nA subsequent patch will handle adding/removing of per node hstate sysfs\nattributes when nodes transition to/from memoryless state via memory\nhotplug.\n\nNOTE: this patch has not been tested with memoryless nodes.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "267b4c281b4a43c8f3d965c791d3a7fd62448733",
      "tree": "ec81f6fdfb9819f42fddb53a5c34f99aa18deb5e",
      "parents": [
        "9a30523066cde73c1442b76224bb540de9f9b0b0"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:30 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: update hugetlb documentation for NUMA controls\n\nUpdate the kernel huge tlb documentation to describe the numa memory\npolicy based huge page management.  Additionaly, the patch includes a fair\namount of rework to improve consistency, eliminate duplication and set the\ncontext for documenting the memory policy interaction.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9a30523066cde73c1442b76224bb540de9f9b0b0",
      "tree": "57165f74e16def0b74bb6e6e05ec9a6b7bd42403",
      "parents": [
        "4e25b2576efda24c02e2d6b9bcb5965a3f865f33"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:25 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: add per node hstate attributes\n\nAdd the per huge page size control/query attributes to the per node\nsysdevs:\n\n/sys/devices/system/node/node\u003cID\u003e/hugepages/hugepages-\u003csize\u003e/\n\tnr_hugepages       - r/w\n\tfree_huge_pages    - r/o\n\tsurplus_huge_pages - r/o\n\nThe patch attempts to re-use/share as much of the existing global hstate\nattribute initialization and handling, and the \"nodes_allowed\" constraint\nprocessing as possible.\n\nCalling set_max_huge_pages() with no node indicates a change to global\nhstate parameters.  In this case, any non-default task mempolicy will be\nused to generate the nodes_allowed mask.  A valid node id indicates an\nupdate to that node\u0027s hstate parameters, and the count argument specifies\nthe target count for the specified node.  From this info, we compute the\ntarget global count for the hstate and construct a nodes_allowed node mask\ncontain only the specified node.\n\nSetting the node specific nr_hugepages via the per node attribute\neffectively ignores any task mempolicy or cpuset constraints.\n\nWith this patch:\n\n(me):ls /sys/devices/system/node/node0/hugepages/hugepages-2048kB\n./  ../  free_hugepages  nr_hugepages  surplus_hugepages\n\nStarting from:\nNode 0 HugePages_Total:     0\nNode 0 HugePages_Free:      0\nNode 0 HugePages_Surp:      0\nNode 1 HugePages_Total:     0\nNode 1 HugePages_Free:      0\nNode 1 HugePages_Surp:      0\nNode 2 HugePages_Total:     0\nNode 2 HugePages_Free:      0\nNode 2 HugePages_Surp:      0\nNode 3 HugePages_Total:     0\nNode 3 HugePages_Free:      0\nNode 3 HugePages_Surp:      0\nvm.nr_hugepages \u003d 0\n\nAllocate 16 persistent huge pages on node 2:\n(me):echo 16 \u003e/sys/devices/system/node/node2/hugepages/hugepages-2048kB/nr_hugepages\n\n[Note that this is equivalent to:\n\tnumactl -m 2 hugeadmin --pool-pages-min 2M:+16\n]\n\nYields:\nNode 0 HugePages_Total:     0\nNode 0 HugePages_Free:      0\nNode 0 HugePages_Surp:      0\nNode 1 HugePages_Total:     0\nNode 1 HugePages_Free:      0\nNode 1 HugePages_Surp:      0\nNode 2 HugePages_Total:    16\nNode 2 HugePages_Free:     16\nNode 2 HugePages_Surp:      0\nNode 3 HugePages_Total:     0\nNode 3 HugePages_Free:      0\nNode 3 HugePages_Surp:      0\nvm.nr_hugepages \u003d 16\n\nGlobal controls work as expected--reduce pool to 8 persistent huge pages:\n(me):echo 8 \u003e/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages\n\nNode 0 HugePages_Total:     0\nNode 0 HugePages_Free:      0\nNode 0 HugePages_Surp:      0\nNode 1 HugePages_Total:     0\nNode 1 HugePages_Free:      0\nNode 1 HugePages_Surp:      0\nNode 2 HugePages_Total:     8\nNode 2 HugePages_Free:      8\nNode 2 HugePages_Surp:      0\nNode 3 HugePages_Total:     0\nNode 3 HugePages_Free:      0\nNode 3 HugePages_Surp:      0\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e25b2576efda24c02e2d6b9bcb5965a3f865f33",
      "tree": "0eba160959ca396d8722fd835d72ae127396c82c",
      "parents": [
        "06808b0827e1cd14eedc96bac2655d5b37ac246c"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:23 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: add generic definition of NUMA_NO_NODE\n\nMove definition of NUMA_NO_NODE from ia64 and x86_64 arch specific headers\nto generic header \u0027linux/numa.h\u0027 for use in generic code.  NUMA_NO_NODE\nreplaces bare \u0027-1\u0027 where it\u0027s used in this series to indicate \"no node id\nspecified\".  Ultimately, it can be used to replace the -1 elsewhere where\nit is used similarly.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "06808b0827e1cd14eedc96bac2655d5b37ac246c",
      "tree": "8f7b52a4af1532ed414631f68b99a059e299d83f",
      "parents": [
        "c1e6c8d074ea3621106548654cc244d2edc12ead"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:21 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: derive huge pages nodes allowed from task mempolicy\n\nThis patch derives a \"nodes_allowed\" node mask from the numa mempolicy of\nthe task modifying the number of persistent huge pages to control the\nallocation, freeing and adjusting of surplus huge pages when the pool page\ncount is modified via the new sysctl or sysfs attribute\n\"nr_hugepages_mempolicy\".  The nodes_allowed mask is derived as follows:\n\n* For \"default\" [NULL] task mempolicy, a NULL nodemask_t pointer\n  is produced.  This will cause the hugetlb subsystem to use\n  node_online_map as the \"nodes_allowed\".  This preserves the\n  behavior before this patch.\n* For \"preferred\" mempolicy, including explicit local allocation,\n  a nodemask with the single preferred node will be produced.\n  \"local\" policy will NOT track any internode migrations of the\n  task adjusting nr_hugepages.\n* For \"bind\" and \"interleave\" policy, the mempolicy\u0027s nodemask\n  will be used.\n* Other than to inform the construction of the nodes_allowed node\n  mask, the actual mempolicy mode is ignored.  That is, all modes\n  behave like interleave over the resulting nodes_allowed mask\n  with no \"fallback\".\n\nSee the updated documentation [next patch] for more information\nabout the implications of this patch.\n\nExamples:\n\nStarting with:\n\n\tNode 0 HugePages_Total:     0\n\tNode 1 HugePages_Total:     0\n\tNode 2 HugePages_Total:     0\n\tNode 3 HugePages_Total:     0\n\nDefault behavior [with or without this patch] balances persistent\nhugepage allocation across nodes [with sufficient contiguous memory]:\n\n\tsysctl vm.nr_hugepages[_mempolicy]\u003d32\n\nyields:\n\n\tNode 0 HugePages_Total:     8\n\tNode 1 HugePages_Total:     8\n\tNode 2 HugePages_Total:     8\n\tNode 3 HugePages_Total:     8\n\nOf course, we only have nr_hugepages_mempolicy with the patch,\nbut with default mempolicy, nr_hugepages_mempolicy behaves the\nsame as nr_hugepages.\n\nApplying mempolicy--e.g., with numactl [using \u0027-m\u0027 a.k.a.\n\u0027--membind\u0027 because it allows multiple nodes to be specified\nand it\u0027s easy to type]--we can allocate huge pages on\nindividual nodes or sets of nodes.  So, starting from the\ncondition above, with 8 huge pages per node, add 8 more to\nnode 2 using:\n\n\tnumactl -m 2 sysctl vm.nr_hugepages_mempolicy\u003d40\n\nThis yields:\n\n\tNode 0 HugePages_Total:     8\n\tNode 1 HugePages_Total:     8\n\tNode 2 HugePages_Total:    16\n\tNode 3 HugePages_Total:     8\n\nThe incremental 8 huge pages were restricted to node 2 by the\nspecified mempolicy.\n\nSimilarly, we can use mempolicy to free persistent huge pages\nfrom specified nodes:\n\n\tnumactl -m 0,1 sysctl vm.nr_hugepages_mempolicy\u003d32\n\nyields:\n\n\tNode 0 HugePages_Total:     4\n\tNode 1 HugePages_Total:     4\n\tNode 2 HugePages_Total:    16\n\tNode 3 HugePages_Total:     8\n\nThe 8 huge pages freed were balanced over nodes 0 and 1.\n\n[rientjes@google.com: accomodate reworked NODEMASK_ALLOC]\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c1e6c8d074ea3621106548654cc244d2edc12ead",
      "tree": "0b16357dc7d15ba8f1c4d9d295873b9528b5d397",
      "parents": [
        "6ae11b278bca1cd41651bae49a8c69de2f6a6262"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:17 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: factor init_nodemask_of_node()\n\nFactor init_nodemask_of_node() out of the nodemask_of_node() macro.\n\nThis will be used to populate the huge pages \"nodes_allowed\" nodemask for\na single node when basing nodes_allowed on a preferred/local mempolicy or\nwhen a persistent huge page pool page count is modified via a per node\nsysfs attribute.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6ae11b278bca1cd41651bae49a8c69de2f6a6262",
      "tree": "8bf4203ce676cac4f5ce1d03b35adbca1571d295",
      "parents": [
        "9a76db099709388ae4126c4f441358b97c6ba20c"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:16 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: add nodemask arg to huge page alloc, free and surplus adjust functions\n\nIn preparation for constraining huge page allocation and freeing by the\ncontrolling task\u0027s numa mempolicy, add a \"nodes_allowed\" nodemask pointer\nto the allocate, free and surplus adjustment functions.  For now, pass\nNULL to indicate default behavior--i.e., use node_online_map.  A\nsubsqeuent patch will derive a non-default mask from the controlling\ntask\u0027s numa mempolicy.\n\nNote that this method of updating the global hstate nr_hugepages under the\nconstraint of a nodemask simplifies keeping the global state\nconsistent--especially the number of persistent and surplus pages relative\nto reservations and overcommit limits.  There are undoubtedly other ways\nto do this, but this works for both interfaces: mempolicy and per node\nattributes.\n\n[rientjes@google.com: fix HIGHMEM compile error]\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: 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": "9a76db099709388ae4126c4f441358b97c6ba20c",
      "tree": "16b4a616695d8c54af8da5b731c0d67e2f06bf4e",
      "parents": [
        "4e7b8a6cef64a4c1f1194f9926f794c2b75ebdd7"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:15 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: rework hstate_next_node_* functions\n\nModify the hstate_next_node* functions to allow them to be called to\nobtain the \"start_nid\".  Then, whereas prior to this patch we\nunconditionally called hstate_next_node_to_{alloc|free}(), whether or not\nwe successfully allocated/freed a huge page on the node, now we only call\nthese functions on failure to alloc/free to advance to next allowed node.\n\nFactor out the next_node_allowed() function to handle wrap at end of\nnode_online_map.  In this version, the allowed nodes include all of the\nonline nodes.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e7b8a6cef64a4c1f1194f9926f794c2b75ebdd7",
      "tree": "c95a6e4e34e09f8d622451c85b88fe2961fbb6ac",
      "parents": [
        "6d9c285a632b39ab83c6ae14cbff0e606d4042ee"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Dec 14 17:58:13 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "nodemask: make NODEMASK_ALLOC more general\n\nThis is a series of patches to provide control over the location of the\nallocation and freeing of persistent huge pages on a NUMA platform.\nPlease consider for merging into mmotm.\n\nThis series uses two mechanisms to constrain the nodes from which\npersistent huge pages are allocated: 1) the task NUMA mempolicy of the\ntask modifying a new sysctl \"nr_hugepages_mempolicy\", based on a\nsuggestion by Mel Gorman; and 2) a subset of the hugepages hstate sysfs\nattributes have been added [in V4] to each node system device under:\n\n\t/sys/devices/node/node[0-9]*/hugepages\n\nThe per node attibutes allow direct assignment of a huge page count on a\nspecific node, regardless of the task\u0027s mempolicy or cpuset constraints.\n\nThis patch:\n\nNODEMASK_ALLOC(x, m) assumes x is a type of struct, which is unnecessary.\nIt\u0027s perfectly reasonable to use this macro to allocate a nodemask_t,\nwhich is anonymous, either dynamically or on the stack depending on\nNODES_SHIFT.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6d9c285a632b39ab83c6ae14cbff0e606d4042ee",
      "tree": "e8d334046befcce98abd9ac8bd5350597fe5a59f",
      "parents": [
        "ee32398fda8ab9867cf8d5469d6e83de5f5c1f7c"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:58:11 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "mm: move inc_zone_page_state(NR_ISOLATED) to just isolated place\n\nChristoph pointed out inc_zone_page_state(NR_ISOLATED) should be placed\nin right after isolate_page().\n\nThis patch does it.\n\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ee32398fda8ab9867cf8d5469d6e83de5f5c1f7c",
      "tree": "e9eb30bef01bea2f33d012d0faa8ca293c6113df",
      "parents": [
        "80ad89a0ceb3b16d0f670751ef9875c4569fb4d3"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Dec 14 17:58:10 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "/dev/mem: remove redundant parameter from do_write_kmem()\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Avi Kivity \u003cavi@qumranet.com\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nCc: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "80ad89a0ceb3b16d0f670751ef9875c4569fb4d3",
      "tree": "d8f2b5714161036236b8754805f97960bf5bbe99",
      "parents": [
        "7fabaddd09ab32a7c0c08da80315758a2245189d"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Dec 14 17:58:10 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:11 2009 -0800"
      },
      "message": "/dev/mem: remove the \"written\" variable in write_kmem()\n\nAlso rename \"len\" to \"sz\". No behavior change.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Avi Kivity \u003cavi@qumranet.com\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nCc: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7fabaddd09ab32a7c0c08da80315758a2245189d",
      "tree": "df9d903be524ce4616344887f074ed69c8200b58",
      "parents": [
        "fa29e97bb8c70fd7f564acbed3422403cee10ab7"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Dec 14 17:58:09 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:11 2009 -0800"
      },
      "message": "/dev/mem: make size_inside_page() logic straight\n\nAlso convert more size_inside_page() users.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Avi Kivity \u003cavi@qumranet.com\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nCc: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fa29e97bb8c70fd7f564acbed3422403cee10ab7",
      "tree": "150cd820e3db75b513cc87e4a9061e35ef5346ac",
      "parents": [
        "f222318e9c3a315723e3524fb9d6566b2430db44"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Dec 14 17:58:08 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:11 2009 -0800"
      },
      "message": "/dev/mem: cleanup unxlate_dev_mem_ptr() calls\n\nNo behaviour change.\n\n[akpm@linux-foundation.org: cleanuplets]\n[akpm@linux-foundation.org: remove unused `ret\u0027]\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nCc: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nCc: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nCc: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f222318e9c3a315723e3524fb9d6566b2430db44",
      "tree": "c40913c1e5e32eda037b687be2f835e2754b04b8",
      "parents": [
        "4ea2f43f28e30050bc99fe3134b6b679f3bf5b22"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Dec 14 17:58:07 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:11 2009 -0800"
      },
      "message": "/dev/mem: introduce size_inside_page()\n\nIntroduce size_inside_page() to replace duplicate /dev/mem code.\n\nAlso apply it to /dev/kmem, whose alignment logic was buggy.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nCc: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nCc: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nCc: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4ea2f43f28e30050bc99fe3134b6b679f3bf5b22",
      "tree": "1b0d50312a85a642b66d971406e9d8b0894250e4",
      "parents": [
        "659ace584e7a9fdda872eab4d6d7be1e0afb6cae"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Dec 14 17:57:57 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:11 2009 -0800"
      },
      "message": "/dev/mem: remove redundant test on len\n\nThe len test in write_kmem() is always true, so can be reduced.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nCc: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nCc: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nCc: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "659ace584e7a9fdda872eab4d6d7be1e0afb6cae",
      "tree": "e9d8ca3d7429bfa48e823a6f105d76254e34daf0",
      "parents": [
        "bb86a7338b7a864c03e1736a8d370b10254b0300"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:57:56 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:11 2009 -0800"
      },
      "message": "mmap: don\u0027t return ENOMEM when mapcount is temporarily exceeded in munmap()\n\nOn ia64, the following test program exit abnormally, because glibc thread\nlibrary called abort().\n\n \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n (gdb) bt\n #0  0xa000000000010620 in __kernel_syscall_via_break ()\n #1  0x20000000003208e0 in raise () from /lib/libc.so.6.1\n #2  0x2000000000324090 in abort () from /lib/libc.so.6.1\n #3  0x200000000027c3e0 in __deallocate_stack () from /lib/libpthread.so.0\n #4  0x200000000027f7c0 in start_thread () from /lib/libpthread.so.0\n #5  0x200000000047ef60 in __clone2 () from /lib/libc.so.6.1\n \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe fact is, glibc call munmap() when thread exitng time for freeing\nstack, and it assume munlock() never fail.  However, munmap() often make\nvma splitting and it with many mapcount make -ENOMEM.\n\nOh well, that\u0027s crazy, because stack unmapping never increase mapcount.\nThe maxcount exceeding is only temporary.  internal temporary exceeding\nshouldn\u0027t make ENOMEM.\n\nThis patch does it.\n\n test_max_mapcount.c\n \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  #include\u003cstdio.h\u003e\n  #include\u003cstdlib.h\u003e\n  #include\u003cstring.h\u003e\n  #include\u003cpthread.h\u003e\n  #include\u003cerrno.h\u003e\n  #include\u003cunistd.h\u003e\n\n  #define THREAD_NUM 30000\n  #define MAL_SIZE (8*1024*1024)\n\n void *wait_thread(void *args)\n {\n \tvoid *addr;\n\n \taddr \u003d malloc(MAL_SIZE);\n \tsleep(10);\n\n \treturn NULL;\n }\n\n void *wait_thread2(void *args)\n {\n \tsleep(60);\n\n \treturn NULL;\n }\n\n int main(int argc, char *argv[])\n {\n \tint i;\n \tpthread_t thread[THREAD_NUM], th;\n \tint ret, count \u003d 0;\n \tpthread_attr_t attr;\n\n \tret \u003d pthread_attr_init(\u0026attr);\n \tif(ret) {\n \t\tperror(\"pthread_attr_init\");\n \t}\n\n \tret \u003d pthread_attr_setdetachstate(\u0026attr, PTHREAD_CREATE_DETACHED);\n \tif(ret) {\n \t\tperror(\"pthread_attr_setdetachstate\");\n \t}\n\n \tfor (i \u003d 0; i \u003c THREAD_NUM; i++) {\n \t\tret \u003d pthread_create(\u0026th, \u0026attr, wait_thread, NULL);\n \t\tif(ret) {\n \t\t\tfprintf(stderr, \"[%d] \", count);\n \t\t\tperror(\"pthread_create\");\n \t\t} else {\n \t\t\tprintf(\"[%d] create OK.\\n\", count);\n \t\t}\n \t\tcount++;\n\n \t\tret \u003d pthread_create(\u0026thread[i], \u0026attr, wait_thread2, NULL);\n \t\tif(ret) {\n \t\t\tfprintf(stderr, \"[%d] \", count);\n \t\t\tperror(\"pthread_create\");\n \t\t} else {\n \t\t\tprintf(\"[%d] create OK.\\n\", count);\n \t\t}\n \t\tcount++;\n \t}\n\n \tsleep(3600);\n \treturn 0;\n }\n \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\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": "bb86a7338b7a864c03e1736a8d370b10254b0300",
      "tree": "d671c0725c2332df2a2180b64a7b5957aef7b59b",
      "parents": [
        "9fdcd886ab407dbe3f854579417e6b036222a468"
      ],
      "author": {
        "name": "Alex Chiang",
        "email": "achiang@hp.com",
        "time": "Mon Dec 14 17:57:54 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:11 2009 -0800"
      },
      "message": "page-types: exit early when invoked with -d|--describe\n\nOn a system with large amount of memory (256GB), invoking page-types can\ntake quite a long time, which is unreasonable considering the user only\nwants a description of the flags:\n\n\t# time ./page-types -d 0x10\n\t0x0000000000000010\t____D_____________________________\tdirty\n\n\treal\t0m34.285s\n\tuser\t0m1.966s\n\tsys\t0m32.313s\n\nThis is because we still walk the entire address range.\n\nExiting early seems like a reasonble solution:\n\n# time ./page-types -d 0x10\n\t0x0000000000000010\t____D_____________________________\tdirty\n\n\treal\t0m0.007s\n\tuser\t0m0.001s\n\tsys\t0m0.005s\n\nSigned-off-by: Alex Chiang \u003cachiang@hp.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Haicheng Li \u003chaicheng.li@intel.com\u003e\nAcked-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9fdcd886ab407dbe3f854579417e6b036222a468",
      "tree": "2ac81bd63e37c4d9c972e8d541e7cd4bd22ee35c",
      "parents": [
        "dcfe730c60030fb76e2794a8960c6bd84c6c6163"
      ],
      "author": {
        "name": "Alex Chiang",
        "email": "achiang@hp.com",
        "time": "Mon Dec 14 17:57:53 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:11 2009 -0800"
      },
      "message": "page-types: whitespace alignment\n\nAlign the output when page-type -h is invoked.\n\nSigned-off-by: Alex Chiang \u003cachiang@hp.com\u003e\nAcked-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dcfe730c60030fb76e2794a8960c6bd84c6c6163",
      "tree": "b15402daa7b91950bd514322e6da677704231766",
      "parents": [
        "f1327bf18c8737aeb85226f02f102dfa065fddde"
      ],
      "author": {
        "name": "Alex Chiang",
        "email": "achiang@hp.com",
        "time": "Mon Dec 14 17:57:52 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:11 2009 -0800"
      },
      "message": "page-types: learn to describe flags directly from command line\n\nTeach page-types to describe page flags directly from the command line.\n\nWhy is this useful?  For instance, if you\u0027re using memory hotplug and see\nthis in /var/log/messages:\n\n\tkernel: removing from LRU failed 3836dd0/1/1e00000000000010\n\nIt would be nice to decode those page flags without staring at the source.\n\nExample usage and output:\n\n# Documentation/vm/page-types -d 0x10\n0x0000000000000010\t____D_____________________________\tdirty\n\n# Documentation/vm/page-types -d anon\n0x0000000000001000\t____________a_____________________\tanonymous\n\n# Documentation/vm/page-types -d anon,0x10\n0x0000000000001010\t____D_______a_____________________\tdirty,anonymous\n\n[achiang@hp.com: documentation]\nSigned-off-by: Alex Chiang \u003cachiang@hp.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Haicheng Li \u003chaicheng.li@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f1327bf18c8737aeb85226f02f102dfa065fddde",
      "tree": "441b938316c4de34c34784463836ea52e455c465",
      "parents": [
        "3428838d8e88fb766143c913cf3e777b000f8e07"
      ],
      "author": {
        "name": "Roel Kluin",
        "email": "roel.kluin@gmail.com",
        "time": "Mon Dec 14 17:57:49 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:11 2009 -0800"
      },
      "message": "page-types: unsigned cannot be less than 0 in add_page()\n\nIf not signed, testing of the read() return value in this function\nwill not work.\n\nSigned-off-by: Roel Kluin \u003croel.kluin@gmail.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3428838d8e88fb766143c913cf3e777b000f8e07",
      "tree": "b95482bd87b570f31f409d59c7da8e7817c96e1b",
      "parents": [
        "1b604d75bbb6e28628c5a95a433432973c33d581"
      ],
      "author": {
        "name": "Tommi Rantala",
        "email": "tt.rantala@gmail.com",
        "time": "Mon Dec 14 17:57:48 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:10 2009 -0800"
      },
      "message": "page-types: constify read only arrays\n\nSigned-off-by: Tommi Rantala \u003ctt.rantala@gmail.com\u003e\nCc: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1b604d75bbb6e28628c5a95a433432973c33d581",
      "tree": "f5022972180a0dab66744eb6278ea57b869447e4",
      "parents": [
        "5ce45962b26ae867e98e60177f62f9695b49a936"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Dec 14 17:57:47 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:10 2009 -0800"
      },
      "message": "oom: dump stack and VM state when oom killer panics\n\nThe oom killer header, including information such as the allocation order\nand gfp mask, current\u0027s cpuset and memory controller, call trace, and VM\nstate information is currently only shown when the oom killer has selected\na task to kill.\n\nThis information is omitted, however, when the oom killer panics either\nbecause of panic_on_oom sysctl settings or when no killable task was\nfound.  It is still relevant to know crucial pieces of information such as\nthe allocation order and VM state when diagnosing such issues, especially\nat boot.\n\nThis patch displays the oom killer header whenever it panics so that bug\nreports can include pertinent information to debug the issue, if possible.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5ce45962b26ae867e98e60177f62f9695b49a936",
      "tree": "361af2a9c2ec2670410560f6e11cf2405ccb7a0a",
      "parents": [
        "ec81aecb29668ad71f699f4e7b96ec46691895b6"
      ],
      "author": {
        "name": "Michal Marek",
        "email": "mmarek@suse.cz",
        "time": "Mon Dec 14 17:57:43 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:10 2009 -0800"
      },
      "message": "MAINTAINERS: new kbuild maintainer\n\nSam was fine with handing over kbuild maintainership to me. The git\ntrees are already in linux-next, a merge request will follow shortly.\n\nAcked-by: Sam Ravnborg \u003csam@ravnborg.org\u003e\nSigned-off-by: Michal Marek \u003cmmarek@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": "ec81aecb29668ad71f699f4e7b96ec46691895b6",
      "tree": "0a66a8fb41689955e3400cba7fc7419f4183dec5",
      "parents": [
        "4b731d50ff3df6b9141a6c12b088e8eb0109e83c"
      ],
      "author": {
        "name": "Amerigo Wang",
        "email": "amwang@redhat.com",
        "time": "Mon Dec 14 17:57:37 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:10 2009 -0800"
      },
      "message": "hfs: fix a potential buffer overflow\n\nA specially-crafted Hierarchical File System (HFS) filesystem could cause\na buffer overflow to occur in a process\u0027s kernel stack during a memcpy()\ncall within the hfs_bnode_read() function (at fs/hfs/bnode.c:24).  The\nattacker can provide the source buffer and length, and the destination\nbuffer is a local variable of a fixed length.  This local variable (passed\nas \"\u0026entry\" from fs/hfs/dir.c:112 and allocated on line 60) is stored in\nthe stack frame of hfs_bnode_read()\u0027s caller, which is hfs_readdir().\nBecause the hfs_readdir() function executes upon any attempt to read a\ndirectory on the filesystem, it gets called whenever a user attempts to\ninspect any filesystem contents.\n\n[amwang@redhat.com: modify this patch and fix coding style problems]\nSigned-off-by: WANG Cong \u003camwang@redhat.com\u003e\nCc: Eugene Teo \u003ceteo@redhat.com\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Dave Anderson \u003canderson@redhat.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4b731d50ff3df6b9141a6c12b088e8eb0109e83c",
      "tree": "4c0c5c744383a4f426be6b9a8fb73528379eabdd",
      "parents": [
        "5443040754207f9777f71c892c66e45ba56b0fc1"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon Dec 14 17:57:34 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:10 2009 -0800"
      },
      "message": "bsdacct: fix uid/gid misreporting\n\ncommit d8e180dcd5bbbab9cd3ff2e779efcf70692ef541 \"bsdacct: switch\ncredentials for writing to the accounting file\" introduced credential\nswitching during final acct data collecting.  However, uid/gid pair\ncontinued to be collected from current which became credentials of who\ncreated acct file, not who exits.\n\nAddresses http://bugzilla.kernel.org/show_bug.cgi?id\u003d14676\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nReported-by: Juho K. Juopperi \u003cjkj@kapsi.fi\u003e\nAcked-by: Serge Hallyn \u003cserue@us.ibm.com\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nReviewed-by: Michal Schmidt \u003cmschmidt@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5443040754207f9777f71c892c66e45ba56b0fc1",
      "tree": "b85a0272b5d5cc8c90d49d9e4856b3d694071d96",
      "parents": [
        "3ea6b3d0e6d0ffd91c0f8cadeb69b7133c038b32",
        "54067ee20645a4ee12a9546aeb3b048b4c44cf60"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 14:11:56 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 14:11:56 2009 -0800"
      },
      "message": "Merge branch \u0027i2c-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging\n\n* \u0027i2c-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:\n  i2c-core: i2c bus should support PM entries in struct dev_pm_ops\n  i2c: Get rid of I2C_CLIENT_MODULE_PARM\n  i2c: Drop I2C_CLIENT_INSMOD_2 to 8\n  i2c: Drop I2C_CLIENT_INSMOD_1\n  i2c: Get rid of struct i2c_client_address_data\n  i2c: Drop the kind parameter from detect callbacks\n"
    },
    {
      "commit": "3ea6b3d0e6d0ffd91c0f8cadeb69b7133c038b32",
      "tree": "5d5920258fc8e3bafd16fddf5fb92f9ec0bb3cc1",
      "parents": [
        "75b08038ceb62f3bd8935346679920f97c3cf9f6",
        "2c948b3f86e5f0327e2e57858600af6e6f0ae29a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 12:50:25 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 12:50:25 2009 -0800"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-udf-2.6\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-udf-2.6:\n  udf: Avoid IO in udf_clear_inode\n  udf: Try harder when looking for VAT inode\n  udf: Fix compilation with UDFFS_DEBUG enabled\n"
    },
    {
      "commit": "2c948b3f86e5f0327e2e57858600af6e6f0ae29a",
      "tree": "a40d5fd7a5757d26fc41829e5620b4685bac44e2",
      "parents": [
        "e971b0b9e0dd50d9ceecb67a6a6ab80a80906033"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Dec 03 13:39:28 2009 +0100"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Dec 14 21:40:04 2009 +0100"
      },
      "message": "udf: Avoid IO in udf_clear_inode\n\nIt is not very good to do IO in udf_clear_inode. First, VFS does not really\nexpect inode to become dirty there and thus we have to write it ourselves,\nsecond, memory reclaim gets blocked waiting for IO when it does not really\nexpect it, third, the IO pattern (e.g. on umount) resulting from writes in\nudf_clear_inode is bad and it slows down writing a lot.\n\nThe reason why UDF needed to do IO in udf_clear_inode is that UDF standard\nmandates extent length to exactly match inode size. But when we allocate\nextents to a file or directory, we don\u0027t really know what exactly the final\nfile size will be and thus temporarily set it to block boundary and later\ntruncate it to exact length in udf_clear_inode. Now, this is changed to\ntruncate to final file size in udf_release_file for regular files. For\ndirectories and symlinks, we do the truncation at the moment when learn\nwhat the final file size will be.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "e971b0b9e0dd50d9ceecb67a6a6ab80a80906033",
      "tree": "8071837c072662e8d346e04c095a6dc6a4c91b3a",
      "parents": [
        "1fefd086dfd9b9f6d1657b7800a35a50e6a4d9ad"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Nov 30 19:47:55 2009 +0100"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Dec 14 21:40:04 2009 +0100"
      },
      "message": "udf: Try harder when looking for VAT inode\n\nSome disks do not contain VAT inode in the last recorded block as required\nby the standard but a few blocks earlier (or the number of recorded blocks\nis wrong). So look for the VAT inode a bit before the end of the media.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "1fefd086dfd9b9f6d1657b7800a35a50e6a4d9ad",
      "tree": "773f91fcd788ee61b25edf1b3234f98dc9d4e575",
      "parents": [
        "f40542532e96dda5506eb76badea322f2ae4731c"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Nov 30 19:47:10 2009 +0100"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Dec 14 21:40:04 2009 +0100"
      },
      "message": "udf: Fix compilation with UDFFS_DEBUG enabled\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "75b08038ceb62f3bd8935346679920f97c3cf9f6",
      "tree": "66cbc62bb569996c90877bbf010285828f669c9a",
      "parents": [
        "fb1beb29b5c531b12485d7c32174a77120590481",
        "70fe440718d9f42bf963c2cffe12008eb5556165"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 12:36:46 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 12:36:46 2009 -0800"
      },
      "message": "Merge branch \u0027x86-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027x86-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  x86, mce: Clean up thermal init by introducing intel_thermal_supported()\n  x86, mce: Thermal monitoring depends on APIC being enabled\n  x86: Gart: fix breakage due to IOMMU initialization cleanup\n  x86: Move swiotlb initialization before dma32_free_bootmem\n  x86: Fix build warning in arch/x86/mm/mmio-mod.c\n  x86: Remove usedac in feature-removal-schedule.txt\n  x86: Fix duplicated UV BAU interrupt vector\n  nvram: Fix write beyond end condition; prove to gcc copy is safe\n  mm: Adjust do_pages_stat() so gcc can see copy_from_user() is safe\n  x86: Limit the number of processor bootup messages\n  x86: Remove enabling x2apic message for every CPU\n  doc: Add documentation for bootloader_{type,version}\n  x86, msr: Add support for non-contiguous cpumasks\n  x86: Use find_e820() instead of hard coded trampoline address\n  x86, AMD: Fix stale cpuid4_info shared_map data in shared_cpu_map cpumasks\n\nTrivial percpu-naming-introduced conflicts in arch/x86/kernel/cpu/intel_cacheinfo.c\n"
    },
    {
      "commit": "fb1beb29b5c531b12485d7c32174a77120590481",
      "tree": "cb7d1d9733d351ae0ec7acda4851b27acd10abca",
      "parents": [
        "478e4e9d7a618379676b17e64583ff3622f2fec5",
        "9fea84f46a821aa1ff2d034ffda8ad33bff48015"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 12:33:02 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 12:33:02 2009 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6:\n  pcmcia: CodingStyle fixes\n  pcmcia: remove unused IRQ_FIRST_SHARED\n"
    },
    {
      "commit": "54067ee20645a4ee12a9546aeb3b048b4c44cf60",
      "tree": "2f4047cf492f1880f39dd21dba0c9932f2f8a862",
      "parents": [
        "7f508118b1c1f9856a1c899a2bd4867a962b0225"
      ],
      "author": {
        "name": "sonic zhang",
        "email": "sonic.adi@gmail.com",
        "time": "Mon Dec 14 21:17:30 2009 +0100"
      },
      "committer": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:30 2009 +0100"
      },
      "message": "i2c-core: i2c bus should support PM entries in struct dev_pm_ops\n\nStruct dev_pm_ops is not configured in current i2c bus type. i2c drivers\nonly depends on suspend/resume entries in struct dev_pm_ops are not\ninformed of PM suspend and resume events by i2c framework.\n\nSigned-off-by: Sonic Zhang \u003csonic.zhang@analog.com\u003e\nSigned-off-by: Jean Delvare \u003ckhali@linux-fr.org\u003e\n"
    },
    {
      "commit": "7f508118b1c1f9856a1c899a2bd4867a962b0225",
      "tree": "0282eb52ee69bf50ee90720904674b27dac4dfd0",
      "parents": [
        "e5e9f44c246fbafe723e579e9fe887677beb40e4"
      ],
      "author": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:29 2009 +0100"
      },
      "committer": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:29 2009 +0100"
      },
      "message": "i2c: Get rid of I2C_CLIENT_MODULE_PARM\n\nThere is no user left of I2C_CLIENT_MODULE_PARM, so we can finally\nget rid of this ugly macro.\n\nSigned-off-by: Jean Delvare \u003ckhali@linux-fr.org\u003e\nTested-by: Wolfram Sang \u003cw.sang@pengutronix.de\u003e\n"
    },
    {
      "commit": "e5e9f44c246fbafe723e579e9fe887677beb40e4",
      "tree": "53d65b38b6db7aa250400056091a760cced42cd7",
      "parents": [
        "1f86df49ddfd0067cce941187d57b2fd2f749a9e"
      ],
      "author": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:27 2009 +0100"
      },
      "committer": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:27 2009 +0100"
      },
      "message": "i2c: Drop I2C_CLIENT_INSMOD_2 to 8\n\nThese macros simply declare an enum, so drivers might as well declare\nit themselves. This puts an end to the arbitrary limit of 8 chip types\nper i2c driver.\n\nSigned-off-by: Jean Delvare \u003ckhali@linux-fr.org\u003e\nTested-by: Wolfram Sang \u003cw.sang@pengutronix.de\u003e\n"
    },
    {
      "commit": "1f86df49ddfd0067cce941187d57b2fd2f749a9e",
      "tree": "a8357108c8be9e39d040e71d473df4a8f46550da",
      "parents": [
        "c3813d6af177fab19e322f3114b1f64fbcf08d71"
      ],
      "author": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:26 2009 +0100"
      },
      "committer": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:26 2009 +0100"
      },
      "message": "i2c: Drop I2C_CLIENT_INSMOD_1\n\nThis macro simply declares an enum, so drivers might as well declare\nit themselves.\n\nSigned-off-by: Jean Delvare \u003ckhali@linux-fr.org\u003e\nTested-by: Wolfram Sang \u003cw.sang@pengutronix.de\u003e\n"
    },
    {
      "commit": "c3813d6af177fab19e322f3114b1f64fbcf08d71",
      "tree": "5189e18f95c954461040bc4becbca6acf739c13b",
      "parents": [
        "310ec79210d754afe51e2e4a983e846b60179abd"
      ],
      "author": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:25 2009 +0100"
      },
      "committer": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:25 2009 +0100"
      },
      "message": "i2c: Get rid of struct i2c_client_address_data\n\nStruct i2c_client_address_data only contains one field at this point,\nwhich makes its usefulness questionable. Get rid of it and pass simple\naddress lists around instead.\n\nSigned-off-by: Jean Delvare \u003ckhali@linux-fr.org\u003e\nTested-by: Wolfram Sang \u003cw.sang@pengutronix.de\u003e\n"
    },
    {
      "commit": "310ec79210d754afe51e2e4a983e846b60179abd",
      "tree": "98e592b60162cd55e367dc19ba3553617a45b0be",
      "parents": [
        "f40542532e96dda5506eb76badea322f2ae4731c"
      ],
      "author": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:23 2009 +0100"
      },
      "committer": {
        "name": "Jean Delvare",
        "email": "khali@linux-fr.org",
        "time": "Mon Dec 14 21:17:23 2009 +0100"
      },
      "message": "i2c: Drop the kind parameter from detect callbacks\n\nThe \"kind\" parameter always has value -1, and nobody is using it any\nlonger, so we can remove it.\n\nSigned-off-by: Jean Delvare \u003ckhali@linux-fr.org\u003e\nTested-by: Wolfram Sang \u003cw.sang@pengutronix.de\u003e\n"
    },
    {
      "commit": "478e4e9d7a618379676b17e64583ff3622f2fec5",
      "tree": "1f25c96499abbb0d0b47f75aa92134209fcc4ee8",
      "parents": [
        "2205afa7d13ec716935dfd4b8ff71059ee7aeb0c",
        "965346e3b99e2c5f51bd1325ddd0257227000355"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 10:22:11 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 10:22:11 2009 -0800"
      },
      "message": "Merge branch \u0027next-spi\u0027 of git://git.secretlab.ca/git/linux-2.6\n\n* \u0027next-spi\u0027 of git://git.secretlab.ca/git/linux-2.6: (23 commits)\n  spi: fix probe/remove section markings\n  Add OMAP spi100k driver\n  spi-imx: don\u0027t access struct device directly but use dev_get_platdata\n  spi-imx: Add mx25 support\n  spi-imx: use positive logic to distinguish cpu variants\n  spi-imx: correct check for platform_get_irq failing\n  ARM: NUC900: Add spi driver support for nuc900\n  spi: SuperH MSIOF SPI Master driver V2\n  spi: fix spidev compilation failure when VERBOSE is defined\n  spi/au1550_spi: fix setupxfer not to override cfg with zeros\n  spi/mpc8xxx: don\u0027t use __exit_p to wrap plat_mpc8xxx_spi_remove\n  spi/i.MX: fix broken error handling for gpio_request\n  spi/i.mx: drain MXC SPI transfer buffer when probing device\n  MAINTAINERS: add SPI co-maintainer.\n  spi/xilinx_spi: fix incorrect casting\n  spi/mpc52xx-spi: minor cleanups\n  xilinx_spi: add a platform driver using the xilinx_spi common module.\n  xilinx_spi: add support for the DS570 IP.\n  xilinx_spi: Switch to iomem functions and support little endian.\n  xilinx_spi: Split into of driver and generic part.\n  ...\n"
    },
    {
      "commit": "2205afa7d13ec716935dfd4b8ff71059ee7aeb0c",
      "tree": "19e63ed8040e8a82c3cdd331458d246247466a28",
      "parents": [
        "491424c0f46c282a854b88830212bdb0763e93dc",
        "2cd9046cc53dd2625e2cf5854d6cbb1ba61de914"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 10:13:22 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 10:13:22 2009 -0800"
      },
      "message": "Merge branch \u0027perf-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027perf-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  perf sched: Fix build failure on sparc\n  perf bench: Add \"all\" pseudo subsystem and \"all\" pseudo suite\n  perf tools: Introduce perf_session class\n  perf symbols: Ditch dso-\u003efind_symbol\n  perf symbols: Allow lookups by symbol name too\n  perf symbols: Add missing \"Variables\" entry to map_type__name\n  perf symbols: Add support for \u0027variable\u0027 symtabs\n  perf symbols: Introduce ELF counterparts to symbol_type__is_a\n  perf symbols: Introduce symbol_type__is_a\n  perf symbols: Rename kthreads to kmaps, using another abstraction for it\n  perf tools: Allow building for ARM\n  hw-breakpoints: Handle bad modify_user_hw_breakpoint off-case return value\n  perf tools: Allow cross compiling\n  tracing, slab: Fix no callsite ifndef CONFIG_KMEMTRACE\n  tracing, slab: Define kmem_cache_alloc_notrace ifdef CONFIG_TRACING\n\nTrivial conflict due to different fixes to modify_user_hw_breakpoint()\nin include/linux/hw_breakpoint.h\n"
    },
    {
      "commit": "491424c0f46c282a854b88830212bdb0763e93dc",
      "tree": "54e3272da9bdc638c6efcb43fa94f96454106d0a",
      "parents": [
        "5185fb069972b653dd7177292e7510ff99d9e8aa"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Mon Dec 14 14:13:44 2009 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 14 10:11:34 2009 -0800"
      },
      "message": "PCI: Global variable decls must match the defs in section attributes\n\nGlobal variable declarations must match the definitions in section attributes\nas the compiler is at liberty to vary the method it uses to access a variable,\ndepending on the section it is in.\n\nWhen building the FRV arch, I now see:\n\n  drivers/built-in.o: In function `pci_apply_final_quirks\u0027:\n  drivers/pci/quirks.c:2606: relocation truncated to fit: R_FRV_GPREL12 against symbol `pci_dfl_cache_line_size\u0027 defined in .devinit.data section in drivers/built-in.o\n  drivers/pci/quirks.c:2623: relocation truncated to fit: R_FRV_GPREL12 against symbol `pci_dfl_cache_line_size\u0027 defined in .devinit.data section in drivers/built-in.o\n  drivers/pci/quirks.c:2630: relocation truncated to fit: R_FRV_GPREL12 against symbol `pci_dfl_cache_line_size\u0027 defined in .devinit.data section in drivers/built-in.o\n\nbecause the declaration of pci_dfl_cache_line_size in linux/pci.h does not\nmatch the definition in drivers/pci/pci.c.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "5185fb069972b653dd7177292e7510ff99d9e8aa"
}
