)]}'
{
  "log": [
    {
      "commit": "78ac34ad3199ad0cd9c23d6084c8627daa748a2b",
      "tree": "c79bc7152e766850c282346475ef90c36ff4e041",
      "parents": [
        "696615b7f9872cf81a840cde982775c521f56ea3"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Fri Jun 15 17:55:50 2012 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Fri Jun 22 11:36:55 2012 -0700"
      },
      "message": "swap: fix shmem swapping when more than 8 areas\n\ncommit 9b15b817f3d62409290fd56fe3cbb076a931bb0a upstream.\n\nMinchan Kim reports that when a system has many swap areas, and tmpfs\nswaps out to the ninth or more, shmem_getpage_gfp()\u0027s attempts to read\nback the page cannot locate it, and the read fails with -ENOMEM.\n\nWhoops.  Yes, I blindly followed read_swap_header()\u0027s pte_to_swp_entry(\nswp_entry_to_pte()) technique for determining maximum usable swap\noffset, without stopping to realize that that actually depends upon the\npte swap encoding shifting swap offset to the higher bits and truncating\nit there.  Whereas our radix_tree swap encoding leaves offset in the\nlower bits: it\u0027s swap \"type\" (that is, index of swap area) that was\ntruncated.\n\nFix it by reducing the SWP_TYPE_SHIFT() in swapops.h, and removing the\nbroken radix_to_swp_entry(swp_to_radix_entry()) from read_swap_header().\n\nThis does not reduce the usable size of a swap area any further, it\nleaves it as claimed when making the original commit: no change from 3.0\non x86_64, nor on i386 without PAE; but 3.0\u0027s 512GB is reduced to 128GB\nper swapfile on i386 with PAE.  It\u0027s not a change I would have risked\nfive years ago, but with x86_64 supported for ten years, I believe it\u0027s\nappropriate now.\n\nHmm, and what if some architecture implements its swap pte with offset\nencoded below type? That would equally break the maximum usable swap\noffset check.  Happily, they all follow the same tradition of encoding\noffset above type, but I\u0027ll prepare a check on that for next.\n\nReported-and-Reviewed-and-Tested-by: Minchan Kim \u003cminchan@kernel.org\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "187f1882b5b0748b3c4c22274663fdb372ac0452",
      "tree": "36283f258cf65f03599a045d48bb05d0ec27f3f9",
      "parents": [
        "50af5ead3b44ccf8bd2b4d2a50c1b610f557c480"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Wed Nov 23 20:12:59 2011 -0500"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Sun Mar 04 17:54:34 2012 -0500"
      },
      "message": "BUG: headers with BUG/BUG_ON etc. need linux/bug.h\n\nIf a header file is making use of BUG, BUG_ON, BUILD_BUG_ON, or any\nother BUG variant in a static inline (i.e. not in a #define) then\nthat header really should be including \u003clinux/bug.h\u003e and not just\nexpecting it to be implicitly present.\n\nWe can make this change risk-free, since if the files using these\nheaders didn\u0027t have exposure to linux/bug.h already, they would have\nbeen causing compile failures/warnings.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "a2c16d6cb0e478812829ca84aeabd02e36af35eb",
      "tree": "7803a522da5deee7ce753dc5404dca01f42aa176",
      "parents": [
        "6328650bb4d854a7dc1498d1c0048b838b0d340c"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hughd@google.com",
        "time": "Wed Aug 03 16:21:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 03 14:25:22 2011 -1000"
      },
      "message": "mm: let swap use exceptional entries\n\nIf swap entries are to be stored along with struct page pointers in a\nradix tree, they need to be distinguished as exceptional entries.\n\nMost of the handling of swap entries in radix tree will be contained in\nshmem.c, but a few functions in filemap.c\u0027s common code need to check\nfor their appearance: find_get_page(), find_lock_page(),\nfind_get_pages() and find_get_pages_contig().\n\nSo as not to slow their fast paths, tuck those checks inside the\nexisting checks for unlikely radix_tree_deref_slot(); except for\nfind_lock_page(), where it is an added test.  And make it a BUG in\nfind_get_pages_tag(), which is not applied to tmpfs files.\n\nA part of the reason for eliminating shmem_readpage() earlier, was to\nminimize the places where common code would need to allow for swap\nentries.\n\nThe swp_entry_t known to swapfile.c must be massaged into a slightly\ndifferent form when stored in the radix tree, just as it gets massaged\ninto a pte_t when stored in page tables.\n\nIn an i386 kernel this limits its information (type and page offset) to\n30 bits: given 32 \"types\" of swapfile and 4kB pagesize, that\u0027s a maximum\nswapfile size of 128GB.  Which is less than the 512GB we previously\nallowed with X86_PAE (where the swap entry can occupy the entire upper\n32 bits of a pte_t), but not a new limitation on 32-bit without PAE; and\nthere\u0027s not a new limitation on 64-bit (where swap filesize is already\nlimited to 16TB by a 32-bit page offset).  Thirty areas of 128GB is\nprobably still enough swap for a 64GB 32-bit machine.\n\nProvide swp_to_radix_entry() and radix_to_swp_entry() conversions, and\nenforce filesize limit in read_swap_header(), just as for ptes.\n\nSigned-off-by: Hugh Dickins \u003chughd@google.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": "a7420aa54dbf699a5a05feba3c859b6baaa3938c",
      "tree": "97119d311149c902b3bd3a6157e70fb79c876462",
      "parents": [
        "10be22dfe1e6ad978269dc275147e0ed049187bb"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Wed Sep 16 11:50:05 2009 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Sep 16 11:50:05 2009 +0200"
      },
      "message": "HWPOISON: Add support for poison swap entries v2\n\nMemory migration uses special swap entry types to trigger special actions on\npage faults. Extend this mechanism to also support poisoned swap entries, to\ntrigger poison handling on page faults. This allows follow-on patches to\nprevent processes from faulting in poisoned pages again.\n\nv2: Fix overflow in MAX_SWAPFILES (Fengguang Wu)\nv3: Better overflow fix (Hidehiro Kawai)\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "880cdf3a8122288d37829ce01eadf8822bb386db",
      "tree": "e0fbac42ec81a071f2af2377cdcce0ce37ec152f",
      "parents": [
        "b1d0e4f535e10775cffde922208b49629169aeaa"
      ],
      "author": {
        "name": "Matt Mackall",
        "email": "mpm@selenic.com",
        "time": "Sat Feb 09 00:10:12 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Feb 09 11:08:33 2008 -0800"
      },
      "message": "Fix compile error on nommu for is_swap_pte\n\n  CC      mm/vmscan.o\nIn file included from\n/home/bunk/linux/kernel-2.6/git/linux-2.6/mm/vmscan.c:44:\n/home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/swapops.h: In function \u0027is_swap_pte\u0027:\n/home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/swapops.h:48: error: implicit declaration of function \u0027pte_none\u0027\n/home/bunk/linux/kernel-2.6/git/linux-2.6/include/linux/swapops.h:48: error: implicit declaration of function \u0027pte_present\u0027\n\nDoes it ever make sense to ask \"is this pte a swap entry?\" on a machine\nwith no MMU?  Presumably this also means it has no ptes too, right?  In\nwhich case, it\u0027s better to comment the whole function out.  Then when\nsomeone tries to ask the above meaningless question, they get a compile\nerror rather than a meaningless answer.\n\nSigned-off-by: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Mike Frysinger \u003cvapier@gentoo.org\u003e\nReported-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "698dd4ba6b12e34e1e432c944c01478c0b2cd773",
      "tree": "fe524e3ae12b54968b363314ad45841abbd55d98",
      "parents": [
        "824552574162ac00ae636fa41386b1072379ea4a"
      ],
      "author": {
        "name": "Matt Mackall",
        "email": "mpm@selenic.com",
        "time": "Mon Feb 04 22:29:00 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Feb 05 09:44:16 2008 -0800"
      },
      "message": "maps4: move is_swap_pte\n\nMove is_swap_pte helper function to swapops.h for use by pagemap code\n\nSigned-off-by: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Dave Hansen \u003chaveblue@us.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": "5ec553a90448b3edbd26c1acc72464f877614bfa",
      "tree": "e10d79ac6d68de9b3040b1e6e0451943ee617d89",
      "parents": [
        "8af5e2eb3cc4450ffba9496c875beac41bf4f4f8"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Feb 20 13:57:50 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Feb 20 17:10:13 2007 -0800"
      },
      "message": "[PATCH] mincore warning fix\n\nallnoconfig:\n\nmm/mincore.c: In function \u0027do_mincore\u0027:\nmm/mincore.c:122: warning: unused variable \u0027entry\u0027\n\nYet another entry in the why-macros-are-wrong encyclopedia.\n\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\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": "0697212a411c1dae03c27845f2de2f3adb32c331",
      "tree": "4bedcdb27522f4a42c422e0a8af155501f43a69c",
      "parents": [
        "8351a6e4785218a2b03c142be92926baff95ba5c"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 23 02:03:35 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 23 07:42:50 2006 -0700"
      },
      "message": "[PATCH] Swapless page migration: add R/W migration entries\n\nImplement read/write migration ptes\n\nWe take the upper two swapfiles for the two types of migration ptes and define\na series of macros in swapops.h.\n\nThe VM is modified to handle the migration entries.  migration entries can\nonly be encountered when the page they are pointing to is locked.  This limits\nthe number of places one has to fix.  We also check in copy_pte_range and in\nmprotect_pte_range() for migration ptes.\n\nWe check for migration ptes in do_swap_cache and call a function that will\nthen wait on the page lock.  This allows us to effectively stop all accesses\nto apge.\n\nMigration entries are created by try_to_unmap if called for migration and\nremoved by local functions in migrate.c\n\nFrom: Hugh Dickins \u003chugh@veritas.com\u003e\n\n  Several times while testing swapless page migration (I\u0027ve no NUMA, just\n  hacking it up to migrate recklessly while running load), I\u0027ve hit the\n  BUG_ON(!PageLocked(p)) in migration_entry_to_page.\n\n  This comes from an orphaned migration entry, unrelated to the current\n  correctly locked migration, but hit by remove_anon_migration_ptes as it\n  checks an address in each vma of the anon_vma list.\n\n  Such an orphan may be left behind if an earlier migration raced with fork:\n  copy_one_pte can duplicate a migration entry from parent to child, after\n  remove_anon_migration_ptes has checked the child vma, but before it has\n  removed it from the parent vma.  (If the process were later to fault on this\n  orphaned entry, it would hit the same BUG from migration_entry_wait.)\n\n  This could be fixed by locking anon_vma in copy_one_pte, but we\u0027d rather\n  not.  There\u0027s no such problem with file pages, because vma_prio_tree_add\n  adds child vma after parent vma, and the page table locking at each end is\n  enough to serialize.  Follow that example with anon_vma: add new vmas to the\n  tail instead of the head.\n\n  (There\u0027s no corresponding problem when inserting migration entries,\n  because a missed pte will leave the page count and mapcount high, which is\n  allowed for.  And there\u0027s no corresponding problem when migrating via swap,\n  because a leftover swap entry will be correctly faulted.  But the swapless\n  method has no refcounting of its entries.)\n\nFrom: Ingo Molnar \u003cmingo@elte.hu\u003e\n\n  pte_unmap_unlock() takes the pte pointer as an argument.\n\nFrom: Hugh Dickins \u003chugh@veritas.com\u003e\n\n  Several times while testing swapless page migration, gcc has tried to exec\n  a pointer instead of a string: smells like COW mappings are not being\n  properly write-protected on fork.\n\n  The protection in copy_one_pte looks very convincing, until at last you\n  realize that the second arg to make_migration_entry is a boolean \"write\",\n  and SWP_MIGRATION_READ is 30.\n\n  Anyway, it\u0027s better done like in change_pte_range, using\n  is_write_migration_entry and make_migration_entry_read.\n\nFrom: Hugh Dickins \u003chugh@veritas.com\u003e\n\n  Remove unnecessary obfuscation from sys_swapon\u0027s range check on swap type,\n  which blew up causing memory corruption once swapless migration made\n  MAX_SWAPFILES no longer 2 ^ MAX_SWAPFILES_SHIFT.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nAcked-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nFrom: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e83a9596712eb784e7e6604f43a2c140eb912743",
      "tree": "21beadfab0d038684fae7534bc379e517061a81b",
      "parents": [
        "836d5ffd34550901ea024347693e689273ded8aa"
      ],
      "author": {
        "name": "Paolo \u0027Blaisorblade\u0027 Giarrusso",
        "email": "blaisorblade@yahoo.it",
        "time": "Sat Sep 03 15:54:53 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@evo.osdl.org",
        "time": "Mon Sep 05 00:05:45 2005 -0700"
      },
      "message": "[PATCH] comment typo fix\n\nsmp_entry_t -\u003e swap_entry_t\n\nSigned-off-by: Paolo \u0027Blaisorblade\u0027 Giarrusso \u003cblaisorblade@yahoo.it\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
