)]}'
{
  "log": [
    {
      "commit": "b377fd3982ad957c796758a90e2988401a884241",
      "tree": "3d7449ccdf7038bffffa9323873f4095cc1ac6ce",
      "parents": [
        "8e92f21ba3ea3f54e4be062b87ef9fc4af2d33e2"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Wed Aug 22 14:02:05 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:47 2007 -0700"
      },
      "message": "Apply memory policies to top two highest zones when highest zone is ZONE_MOVABLE\n\nThe NUMA layer only supports NUMA policies for the highest zone.  When\nZONE_MOVABLE is configured with kernelcore\u003d, the the highest zone becomes\nZONE_MOVABLE.  The result is that policies are only applied to allocations\nlike anonymous pages and page cache allocated from ZONE_MOVABLE when the\nzone is used.\n\nThis patch applies policies to the two highest zones when the highest zone\nis ZONE_MOVABLE.  As ZONE_MOVABLE consists of pages from the highest \"real\"\nzone, it\u0027s always functionally equivalent.\n\nThe patch has been tested on a variety of machines both NUMA and non-NUMA\ncovering x86, x86_64 and ppc64.  No abnormal results were seen in\nkernbench, tbench, dbench or hackbench.  It passes regression tests from\nthe numactl package with and without kernelcore\u003d once numactl tests are\npatched to wait for vmstat counters to update.\n\nakpm: this is the nasty hack to fix NUMA mempolicies in the presence of\nZONE_MOVABLE and kernelcore\u003d in 2.6.23.  Christoph says \"For .24 either merge\nthe mobility or get the other solution that Mel is working on.  That solution\nwould only use a single zonelist per node and filter on the fly.  That may\nhelp performance and also help to make memory policies work better.\"\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by:  Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nTested-by:  Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a2f92ee7e704440995cf5474f4cc7b268bf380e0",
      "tree": "8c51ce70ddf96f0a16eccb85f7883c33e143f34e",
      "parents": [
        "9e86943b6c74f214ce0516d56e55636d52252e19"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed Aug 22 14:01:57 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:47 2007 -0700"
      },
      "message": "SLUB: do not fail on broken memory configurations\n\nPrint a big fat warning and do what is necessary to continue if a node is\nmarked as up (meaning either node is online (upstream) or node has memory\n(Andrew\u0027s tree)) but allocations from the node do not succeed.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9e86943b6c74f214ce0516d56e55636d52252e19",
      "tree": "f5ba2d57e7a5d5a031f1e6a418e7d5e2c5a838b8",
      "parents": [
        "fe58103a56f05613cb1f0ef228354d4d5f6c2b08"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed Aug 22 14:01:56 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:47 2007 -0700"
      },
      "message": "SLUB: use atomic_long_read for atomic_long variables\n\nSLUB is using atomic_read() for variables declared atomic_long_t.\nSwitch to atomic_long_read().\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a89182c76e54134081cfec6409df06731c5cb98f",
      "tree": "270616c2f6a1ce63a0bbd196a00e267b27e08250",
      "parents": [
        "d4c63b7c74507c424afcc9c80ba77a55bfb0d07e"
      ],
      "author": {
        "name": "Adam Litke",
        "email": "agl@us.ibm.com",
        "time": "Wed Aug 22 14:01:51 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:46 2007 -0700"
      },
      "message": "Fix VM_FAULT flags conversion for hugetlb\n\nIt seems a simple mistake was made when converting follow_hugetlb_page()\nover to the VM_FAULT flags bitmasks (in \"mm: fault feedback #2\", commit\n83c54070ee1a2d05c89793884bea1a03f2851ed4).\n\nBy using the wrong bitmask, hugetlb_fault() failures are not being\nrecognized.  This results in an infinite loop whenever follow_hugetlb_page\nis involved in a failed fault.\n\nSigned-off-by: Adam Litke \u003cagl@us.ibm.com\u003e\nAcked-by: Nick Piggin \u003cnpiggin@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": "1807a1aaf5f2a35ea6d4b527b28bc8889d255a2f",
      "tree": "8b07b08bedebc9bc09648fa3443041a03121733f",
      "parents": [
        "32d219854d31daba3407389ada1d454a4cd86fda"
      ],
      "author": {
        "name": "Siddha, Suresh B",
        "email": "suresh.b.siddha@intel.com",
        "time": "Wed Aug 22 14:01:49 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:46 2007 -0700"
      },
      "message": "slab: skip calling cache_free_alien() when the platform is not numa capable\n\nSkip calling cache_free_alien() when the platform is not numa capable.\nThis will avoid cache misses that happen while accessing slabp (which is\nper page memory reference) to get nodeid.  Instead use a global variable to\nskip the call, which is mostly likely to be present in the cache.\n\nThis gives a 0.8% performance boost with the database oltp workload on a\nquad-core SMP platform and by any means the number is not small :)\n\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "34b4e4aa3c470ce8fa2bd78abb1741b4b58baad7",
      "tree": "91d620288f1aaf63c12dc84ca1015465818601f2",
      "parents": [
        "afe1ab4d577892822de2c8e803fbfaed6ec44ba3"
      ],
      "author": {
        "name": "Alan Cox",
        "email": "alan@lxorguk.ukuu.org.uk",
        "time": "Wed Aug 22 14:01:28 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:45 2007 -0700"
      },
      "message": "fix NULL pointer dereference in __vm_enough_memory()\n\nThe new exec code inserts an accounted vma into an mm struct which is not\ncurrent-\u003emm.  The existing memory check code has a hard coded assumption\nthat this does not happen as does the security code.\n\nAs the correct mm is known we pass the mm to the security method and the\nhelper function.  A new security test is added for the case where we need\nto pass the mm and the existing one is modified to pass current-\u003emm to\navoid the need to change large amounts of code.\n\n(Thanks to Tobias for fixing rejects and testing)\n\nSigned-off-by: Alan Cox \u003calan@redhat.com\u003e\nCc: WU Fengguang \u003cwfg@mail.ustc.edu.cn\u003e\nCc: James Morris \u003cjmorris@redhat.com\u003e\nCc: Tobias Diedrich \u003cranma+kernel@tdiedrich.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c661b078fd62abe06fd11fab4ac5e4eeafe26b6d",
      "tree": "f21ffeed682900b783563e7d8a8dde906706cc88",
      "parents": [
        "e9187bdcbbc06090757d565a3077e1b0ecab23d2"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Wed Aug 22 14:01:26 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:45 2007 -0700"
      },
      "message": "synchronous lumpy reclaim: wait for page writeback when directly reclaiming contiguous areas\n\nLumpy reclaim works by selecting a lead page from the LRU list and then\nselecting pages for reclaim from the order-aligned area of pages.  In the\nsituation were all pages in that region are inactive and not referenced by any\nprocess over time, it works well.\n\nIn the situation where there is even light load on the system, the pages may\nnot free quickly.  Out of a area of 1024 pages, maybe only 950 of them are\nfreed when the allocation attempt occurs because lumpy reclaim returned early.\n This patch alters the behaviour of direct reclaim for large contiguous\nblocks.\n\nThe first attempt to call shrink_page_list() is asynchronous but if it fails,\nthe pages are submitted a second time and the calling process waits for the IO\nto complete.  This may stall allocators waiting for contiguous memory but that\nshould be expected behaviour for high-order users.  It is preferable behaviour\nto potentially queueing unnecessary areas for IO.  Note that kswapd will not\nstall in this fashion.\n\n[apw@shadowen.org: update to version 2]\n[apw@shadowen.org: update to version 3]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e9187bdcbbc06090757d565a3077e1b0ecab23d2",
      "tree": "5393cb22c5aef33ec27fa23d633ea088a6066c13",
      "parents": [
        "0cd82ef1fb8909d6d414f36f291c2f67ca70e2be"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Wed Aug 22 14:01:25 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:45 2007 -0700"
      },
      "message": "synchronous lumpy reclaim: ensure we count pages transitioning inactive via clear_active_flags\n\nAs pointed out by Mel when reclaim is applied at higher orders a significant\namount of IO may be started.  As this takes finite time to drain reclaim will\nconsider more areas than ultimatly needed to satisfy the request.  This leads\nto more reclaim than strictly required and reduced success rates.\n\nI was able to confirm Mel\u0027s test results on systems locally.  These show that\neven under light load the success rates drop off far more than expected.\nTesting with a modified version of his patch (which follows) I was able to\nallocate almost all of ZONE_MOVABLE with a near idle system.  I ran 5 test\npasses sequentially following system boot (the system has 29 hugepages in\nZONE_MOVABLE):\n\n  2.6.23-rc1              11  8  6  7  7\n  sync_lumpy              28 28 29 29 26\n\nThese show that although hugely better than the near 0% success normally\nexpected we can only allocate about a 1/4 of the zone.  Using synchronous\nreclaim for these allocations we get close to 100% as expected.\n\nI have also run our standard high order tests and these show no regressions in\nallocation success rates at rest, and some significant improvements under\nload.\n\nThis patch:\n\nWe are transitioning pages from active to inactive in clear_active_flags,\nthose need counting as PGDEACTIVATE vm events.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\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": "85770ffe4f0cdd4396b17f14762adc25a571a348",
      "tree": "23f69f720e53cee67632b04c1754c3a7a64dab72",
      "parents": [
        "df068464169a84a6a66c05d140f43a46d5eb6176"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Wed Aug 22 14:01:03 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:44 2007 -0700"
      },
      "message": "sparsemem: ensure we initialise the node mapping for SPARSEMEM_STATIC\n\nBooting SPARSEMEM on NUMA systems trips a BUG in page_alloc.c:\n\n\tInitializing HighMem for node 0 (00038000:00100000)\n\tInitializing HighMem for node 1 (00100000:001ffe00)\n\t------------[ cut here ]------------\n\tkernel BUG at /home/apw/git/linux-2.6/mm/page_alloc.c:456!\n\t[...]\n\nThis occurs because the section to node id mapping is not being\nsetup correctly during init under SPARSEMEM_STATIC, leading to an\nattempt to free pages from all nodes into the zones on node 0.\n\nWhen the zone_table[] was removed in the following commit, a new\nsection to node mapping table was introduced:\n\n    commit 89689ae7f95995723fbcd5c116c47933a3bb8b13\n    [PATCH] Get rid of zone_table[]\n\nThat conversion inadvertantly only initialised the node mapping in\nSPARSEMEM_EXTREME.  Ensure we initialise the node mapping in\nSPARSEMEM_STATIC.\n\n[akpm@linux-foundation.org: make the stubs static inline]\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dc8a7b11aa68d6795a46e0a42ce92220d1a6f0cd",
      "tree": "7b353684090d23b1e2e3f85bf83df491f04dcc8a",
      "parents": [
        "d291676ce8bc1d8ef93488023d04027010596de3",
        "02a5e0acb3cb85d80d0fe834e366d38a92bbaa22"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Aug 11 16:01:06 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Aug 11 16:01:06 2007 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  BLOCK: Hide the contents of linux/bio.h if CONFIG_BLOCK\u003dn\n  sysace: HDIO_GETGEO has it\u0027s own method for ages\n  drivers/block/cpqarray.c: better error handling and kmalloc + memset conversion to k[cz]alloc\n  drivers/block/cciss.c: kmalloc + memset conversion to kzalloc\n  Clean up duplicate includes in drivers/block/\n  Fix remap handling by blktrace\n  [PATCH] remove mm/filemap.c:file_send_actor()\n"
    },
    {
      "commit": "f0b85c0cfdad8977d82fed88e846fc2245585d0e",
      "tree": "df85c3195dd46095a40be69647ee5c93911f2e03",
      "parents": [
        "f6901e639800e745457b1dcd99c52647981438d7"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@linux-foundation.org",
        "time": "Fri Aug 10 13:01:16 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Aug 11 15:47:42 2007 -0700"
      },
      "message": "readahead: docbook fix\n\nMinor docbook error since argument name in comment doesn\u0027t match function\n\nSigned-off-by: Stephen Hemminger \u003cshemminger@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": "ec05b297f91a443aa26b74059b573bfad49c9ebb",
      "tree": "4890ea53de4373e51688e72576781909588515a3",
      "parents": [
        "ac07860264bd2b18834d3fa3be47032115524cea"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Mon Jul 30 08:24:27 2007 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sat Aug 11 22:34:47 2007 +0200"
      },
      "message": "[PATCH] remove mm/filemap.c:file_send_actor()\n\nThis patch removes the no longer used file_send_actor().\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1ceef40249f21eceabf8633934d94962e7d8e1d7",
      "tree": "2b9201a2f7b102d0db7f2790df6f6456fae89e21",
      "parents": [
        "fcda3d89bf1366f6801447eab2d8a75ac5b9c4ce"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Aug 07 15:11:48 2007 -0700"
      },
      "committer": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Thu Aug 09 21:57:16 2007 -0700"
      },
      "message": "SLUB: Fix dynamic dma kmalloc cache creation\n\nThe dynamic dma kmalloc creation can run into trouble if a\nGFP_ATOMIC allocation is the first one performed for a certain size\nof dma kmalloc slab.\n\n- Move the adding of the slab to sysfs into a workqueue\n  (sysfs does GFP_KERNEL allocations)\n- Do not call kmem_cache_destroy() (uses slub_lock)\n- Only acquire the slub_lock once and--if we cannot wait--do a trylock.\n\n  This introduces a slight risk of the first kmalloc(x, GFP_DMA|GFP_ATOMIC)\n  for a range of sizes failing due to another process holding the slub_lock.\n  However, we only need to acquire the spinlock once in order to establish\n  each power of two DMA kmalloc cache. The possible conflict is with the\n  slub_lock taken during slab management actions (create / remove slab cache).\n\n  It is rather typical that a driver will first fill its buffers using\n  GFP_KERNEL allocations which will wait until the slub_lock can be acquired.\n  Drivers will also create its slab caches first outside of an atomic\n  context before starting to use atomic kmalloc from an interrupt context.\n\n  If there are any failures then they will occur early after boot or when\n  loading of multiple drivers concurrently. Drivers can already accomodate\n  failures of GFP_ATOMIC for other reasons. Retries will then create the slab.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\n"
    },
    {
      "commit": "fcda3d89bf1366f6801447eab2d8a75ac5b9c4ce",
      "tree": "47382ad57b48a1a0e46a6190991f88a9e6973e45",
      "parents": [
        "6adb31c90c47262c8a25bf5097de9b3426caf3ae"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Jul 30 13:06:46 2007 -0700"
      },
      "committer": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Thu Aug 09 21:57:15 2007 -0700"
      },
      "message": "SLUB: Remove checks for MAX_PARTIAL from kmem_cache_shrink\n\nThe MAX_PARTIAL checks were supposed to be an optimization. However, slab\nshrinking is a manually triggered process either through running slabinfo\nor by the kernel calling kmem_cache_shrink.\n\nIf one really wants to shrink a slab then all operations should be done\nregardless of the size of the partial list. This also fixes an issue that\ncould surface if the number of partial slabs was initially above MAX_PARTIAL\nin kmem_cache_shrink and later drops below MAX_PARTIAL through the\nelimination of empty slabs on the partial list (rare). In that case a few\nslabs may be left off the partial list (and only be put back when they\nare empty).\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\n"
    },
    {
      "commit": "bfe0d6867e36f46836d2c3755fa8b9ef8cf143ba",
      "tree": "0632dc1fd135324b6e9baf9568ee2cf46cb5765b",
      "parents": [
        "64d158bc3db121fd2bec29057a44843930b044fa"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Tue Jul 31 00:37:56 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 31 15:39:38 2007 -0700"
      },
      "message": "fix filemap.c kernel-doc\n\nFix kernel-doc warning:\nWarning(linux-2.6.23-rc1-mm1//mm/filemap.c:864): No description found for parameter \u0027ra\u0027\n\nSigned-off-by: 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": "a5e58a61420e99dd08685f622d4dc666bf07e9a5",
      "tree": "e9dfbeac7648a954c927d2461016e8d0d98cca74",
      "parents": [
        "c8ed39ebe0cf490abd7bf7c77b728dd6fefb2cf8"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jul 31 00:37:32 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 31 15:39:36 2007 -0700"
      },
      "message": "oom: print points as unsigned long\n\nIn badness(), the automatic variable \u0027points\u0027 is unsigned long.  Print it\nas such.\n\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": "a8bbf72ab9b3072ece630d97689145b1a2f01221",
      "tree": "4d55318fff1aecd3c5d2c1e877847bcb2347dd2e",
      "parents": [
        "252e48389ed30d7c77385fb92fca765a680de408"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jul 31 00:37:30 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 31 15:39:36 2007 -0700"
      },
      "message": "Do not trigger OOM-killer for high-order allocation failures\n\nout_of_memory() may be called when an allocation is failing and the direct\nreclaim is not making any progress.  This does not take into account the\nrequested order of the allocation.  If the request if for an order larger\nthan PAGE_ALLOC_COSTLY_ORDER, it is reasonable to fail the allocation\nbecause the kernel makes no guarantees about those allocations succeeding.\n\nThis false OOM situation can occur if a user is trying to grow the hugepage\npool in a script like;\n\n#!/bin/bash\nREQUIRED\u003d$1\necho 1 \u003e /proc/sys/vm/hugepages_treat_as_movable\necho $REQUIRED \u003e /proc/sys/vm/nr_hugepages\nACTUAL\u003d`cat /proc/sys/vm/nr_hugepages`\nwhile [ $REQUIRED -ne $ACTUAL ]; do\n\techo Huge page pool at $ACTUAL growing to $REQUIRED\n\techo $REQUIRED \u003e /proc/sys/vm/nr_hugepages\n\tACTUAL\u003d`cat /proc/sys/vm/nr_hugepages`\n\tsleep 1\ndone\n\nThis is a reasonable scenario when ZONE_MOVABLE is in use but triggers OOM\neasily on 2.6.23-rc1. This patch will fail an allocation for an order above\nPAGE_ALLOC_COSTLY_ORDER instead of killing processes and retrying.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2208b764c14d0f1ad63da64b1a42db6077b6fe42",
      "tree": "eb936f9fce478ffd6252e5dd2e6a88540b78a641",
      "parents": [
        "02febdf7f62f2fbfa89ca9dc5d929beea89c96b1"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Thu Jul 26 20:54:34 2007 +0200"
      },
      "committer": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Jul 30 12:15:15 2007 -0700"
      },
      "message": "slub: fix bug in slub debug support\n\nWe ClearSlabDebug() before the last SlabDebug() check. Clear it later.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\n"
    },
    {
      "commit": "02febdf7f62f2fbfa89ca9dc5d929beea89c96b1",
      "tree": "8138189066b52f8a4cc4b2ad7b82ce800def8bb9",
      "parents": [
        "9c837fb692b005203765d8a569a2fe43fdff9df1"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "peterz@infradead.org",
        "time": "Thu Jul 26 20:01:38 2007 +0200"
      },
      "committer": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Jul 30 12:12:39 2007 -0700"
      },
      "message": "slub: add lock debugging check\n\nIngo noticed that the SLUB code does include the lock debugging free\ncheck.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\n"
    },
    {
      "commit": "4e950f6f0189f65f8bf069cf2272649ef418f5e4",
      "tree": "95710bedf2a5aa3b61002f3399e0950192fdd504",
      "parents": [
        "673d5b43daa00b42759cecc6b0760b8bf6be80d2"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon Jul 30 02:36:13 2007 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Jul 29 17:09:29 2007 -0700"
      },
      "message": "Remove fs.h from mm.h\n\nRemove fs.h from mm.h. For this,\n 1) Uninline vma_wants_writenotify(). It\u0027s pretty huge anyway.\n 2) Add back fs.h or less bloated headers (err.h) to files that need it.\n\nAs result, on x86_64 allyesconfig, fs.h dependencies cut down from 3929 files\nrebuilt down to 3444 (-12.3%).\n\nCross-compile tested without regressions on my two usual configs and (sigh):\n\nalpha              arm-mx1ads        mips-bigsur          powerpc-ebony\nalpha-allnoconfig  arm-neponset      mips-capcella        powerpc-g5\nalpha-defconfig    arm-netwinder     mips-cobalt          powerpc-holly\nalpha-up           arm-netx          mips-db1000          powerpc-iseries\narm                arm-ns9xxx        mips-db1100          powerpc-linkstation\narm-assabet        arm-omap_h2_1610  mips-db1200          powerpc-lite5200\narm-at91rm9200dk   arm-onearm        mips-db1500          powerpc-maple\narm-at91rm9200ek   arm-picotux200    mips-db1550          powerpc-mpc7448_hpc2\narm-at91sam9260ek  arm-pleb          mips-ddb5477         powerpc-mpc8272_ads\narm-at91sam9261ek  arm-pnx4008       mips-decstation      powerpc-mpc8313_rdb\narm-at91sam9263ek  arm-pxa255-idp    mips-e55             powerpc-mpc832x_mds\narm-at91sam9rlek   arm-realview      mips-emma2rh         powerpc-mpc832x_rdb\narm-ateb9200       arm-realview-smp  mips-excite          powerpc-mpc834x_itx\narm-badge4         arm-rpc           mips-fulong          powerpc-mpc834x_itxgp\narm-carmeva        arm-s3c2410       mips-ip22            powerpc-mpc834x_mds\narm-cerfcube       arm-shannon       mips-ip27            powerpc-mpc836x_mds\narm-clps7500       arm-shark         mips-ip32            powerpc-mpc8540_ads\narm-collie         arm-simpad        mips-jazz            powerpc-mpc8544_ds\narm-corgi          arm-spitz         mips-jmr3927         powerpc-mpc8560_ads\narm-csb337         arm-trizeps4      mips-malta           powerpc-mpc8568mds\narm-csb637         arm-versatile     mips-mipssim         powerpc-mpc85xx_cds\narm-ebsa110        i386              mips-mpc30x          powerpc-mpc8641_hpcn\narm-edb7211        i386-allnoconfig  mips-msp71xx         powerpc-mpc866_ads\narm-em_x270        i386-defconfig    mips-ocelot          powerpc-mpc885_ads\narm-ep93xx         i386-up           mips-pb1100          powerpc-pasemi\narm-footbridge     ia64              mips-pb1500          powerpc-pmac32\narm-fortunet       ia64-allnoconfig  mips-pb1550          powerpc-ppc64\narm-h3600          ia64-bigsur       mips-pnx8550-jbs     powerpc-prpmc2800\narm-h7201          ia64-defconfig    mips-pnx8550-stb810  powerpc-ps3\narm-h7202          ia64-gensparse    mips-qemu            powerpc-pseries\narm-hackkit        ia64-sim          mips-rbhma4200       powerpc-up\narm-integrator     ia64-sn2          mips-rbhma4500       s390\narm-iop13xx        ia64-tiger        mips-rm200           s390-allnoconfig\narm-iop32x         ia64-up           mips-sb1250-swarm    s390-defconfig\narm-iop33x         ia64-zx1          mips-sead            s390-up\narm-ixp2000        m68k              mips-tb0219          sparc\narm-ixp23xx        m68k-amiga        mips-tb0226          sparc-allnoconfig\narm-ixp4xx         m68k-apollo       mips-tb0287          sparc-defconfig\narm-jornada720     m68k-atari        mips-workpad         sparc-up\narm-kafa           m68k-bvme6000     mips-wrppmc          sparc64\narm-kb9202         m68k-hp300        mips-yosemite        sparc64-allnoconfig\narm-ks8695         m68k-mac          parisc               sparc64-defconfig\narm-lart           m68k-mvme147      parisc-allnoconfig   sparc64-up\narm-lpd270         m68k-mvme16x      parisc-defconfig     um-x86_64\narm-lpd7a400       m68k-q40          parisc-up            x86_64\narm-lpd7a404       m68k-sun3         powerpc              x86_64-allnoconfig\narm-lubbock        m68k-sun3x        powerpc-cell         x86_64-defconfig\narm-lusl7200       mips              powerpc-celleb       x86_64-up\narm-mainstone      mips-atlas        powerpc-chrp32\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "296699de6bdc717189a331ab6bbe90e05c94db06",
      "tree": "53c847ecc8cce11952502921844052e44ca60d5e",
      "parents": [
        "b0cb1a19d05b8ea8611a9ef48a17fe417f1832e6"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Sun Jul 29 23:27:18 2007 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Jul 29 16:45:38 2007 -0700"
      },
      "message": "Introduce CONFIG_SUSPEND for suspend-to-Ram and standby\n\nIntroduce CONFIG_SUSPEND representing the ability to enter system sleep\nstates, such as the ACPI S3 state, and allow the user to choose SUSPEND\nand HIBERNATION independently of each other.\n\nMake HOTPLUG_CPU be selected automatically if SUSPEND or HIBERNATION has\nbeen chosen and the kernel is intended for SMP systems.\n\nAlso, introduce CONFIG_PM_SLEEP which is automatically selected if\nCONFIG_SUSPEND or CONFIG_HIBERNATION is set and use it to select the\ncode needed for both suspend and hibernation.\n\nThe top-level power management headers and the ACPI code related to\nsuspend and hibernation are modified to use the new definitions (the\nchanges in drivers/acpi/sleep/main.c are, mostly, moving code to reduce\nthe number of ifdefs).\n\nThere are many other files in which CONFIG_PM can be replaced with\nCONFIG_PM_SLEEP or even with CONFIG_SUSPEND, but they can be updated in\nthe future.\n\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b0cb1a19d05b8ea8611a9ef48a17fe417f1832e6",
      "tree": "895fe53e8dc4fc59d05b963ac079f6ff759ad0fb",
      "parents": [
        "6c8dca5d53f95009d4fff00195bf38f277dc4366"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Sun Jul 29 23:24:36 2007 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Jul 29 16:45:38 2007 -0700"
      },
      "message": "Replace CONFIG_SOFTWARE_SUSPEND with CONFIG_HIBERNATION\n\nReplace CONFIG_SOFTWARE_SUSPEND with CONFIG_HIBERNATION to avoid\nconfusion (among other things, with CONFIG_SUSPEND introduced in the\nnext patch).\n\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b5445f956ec3c8c19b760775e9ff92a160e3a167",
      "tree": "034d62678f1e402e6d71b07ba0bf96544554a2ba",
      "parents": [
        "ee2077d97b2f392cfc0b884775ac58aa9b9b8c8f"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Thu Jul 26 10:41:18 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 26 11:35:19 2007 -0700"
      },
      "message": "Allow nodes to exist that only contain ZONE_MOVABLE\n\nWith the introduction of kernelcore\u003d, a configurable zone is created on\nrequest.  In some cases, this value will be small enough that some nodes\ncontain only ZONE_MOVABLE.  On some NUMA configurations when this occurs,\narch-independent zone-sizing will get the size of the memory holes within\nthe node incorrect.  The value of present_pages goes negative and the boot\nfails.\n\nThis patch fixes the bug in the calculation of the size of the hole.  The\ntest case is to boot test a NUMA machine with a low value of kernelcore\u003d\nbefore and after the patch is applied.  While this bug exists in early\nkernel it cannot be triggered in practice.\n\nThis patch has been boot-tested on a variety machines with and without\nkernelcore\u003d set.\n\nSigned-off-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": "3dd9fe8c397df68086e6a1b2160573abbe944813",
      "tree": "86dda41ade146e2a403151c7ba2f7e32a930bc63",
      "parents": [
        "dc386d4d1e98bb39fb967ee156cd456c802fc692"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jul 26 10:41:08 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 26 11:35:17 2007 -0700"
      },
      "message": "memory unplug: isolate_lru_page fix\n\nrelease_pages() in mm/swap.c changes page_count() to be 0 without removing\nPageLRU flag...\n\nThis means isolate_lru_page() can see a page, PageLRU() \u0026\u0026\npage_count(page)\u003d\u003d0..  This is BUG.  (get_page() will be called against\ncount\u003d0 page.)\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dc386d4d1e98bb39fb967ee156cd456c802fc692",
      "tree": "ddd26eb0f08611a84157e4f8e1537a5127b96ea0",
      "parents": [
        "098284020c47c1212d211e39ae2b41c21182e056"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jul 26 10:41:07 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 26 11:35:17 2007 -0700"
      },
      "message": "memory unplug: migration by kernel\n\nIn usual, migrate_pages(page,,) is called with holding mm-\u003esem by system call.\n(mm here is a mm_struct which maps the migration target page.)\nThis semaphore helps avoiding some race conditions.\n\nBut, if we want to migrate a page by some kernel codes, we have to avoid\nsome races. This patch adds check code for following race condition.\n\n1. A page which page-\u003emapping\u003d\u003dNULL can be target of migration. Then, we have\n   to check page-\u003emapping before calling try_to_unmap().\n\n2. anon_vma can be freed while page is unmapped, but page-\u003emapping remains as\n   it was. We drop page-\u003emapcount to be 0. Then we cannot trust page-\u003emapping.\n   So, use rcu_read_lock() to prevent anon_vma pointed by page-\u003emapping from\n   being freed during migration.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b2e961eb2e7a54ffaae82f8e0198b26b54ade98e",
      "tree": "33e5192a4c84e717d8c2f8235f268216b01053f7",
      "parents": [
        "b8c1c5da1520977cb55a358f20fc09567d40cad9",
        "71f65e6bd7651610d2d6aeb3c12aab63667ace30"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 24 12:26:44 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 24 12:26:44 2007 -0700"
      },
      "message": "Merge branch \u0027request-queue-t\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027request-queue-t\u0027 of git://git.kernel.dk/linux-2.6-block:\n  [BLOCK] Add request_queue_t and mark it deprecated\n  [BLOCK] Get rid of request_queue_t typedef\n"
    },
    {
      "commit": "b8c1c5da1520977cb55a358f20fc09567d40cad9",
      "tree": "c762e6ad77297beed0978337ce2f5b0c50add739",
      "parents": [
        "01e457cfcd5b6b6f18d0bb8cec0c5d43df56557e"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Jul 24 12:02:40 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 24 12:24:59 2007 -0700"
      },
      "message": "slab: correctly handle __GFP_ZERO\n\nUse the correct local variable when calling into the page allocator.  Local\n`flags\u0027 can have __GFP_ZERO set, which causes us to pass __GFP_ZERO into the\npage allocator, possibly from illegal contexts.  The page allocator will later\ndo prep_zero_page()-\u003ekmap_atomic(..., KM_USER0) from irq contexts and will\nthen go BUG.\n\nCc: Mike Galbraith \u003cefault@gmx.de\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5ab3ee7b1cd5c91eb2272764f9d7d1fe4749681e",
      "tree": "82c1fbc5e3a41651d4c0d45cf13d85760708c184",
      "parents": [
        "be1ff386e768ee4fc19bb7da48cee4fc4cb4e75b"
      ],
      "author": {
        "name": "Ken Chen",
        "email": "kenchen@google.com",
        "time": "Mon Jul 23 18:44:00 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 24 12:24:59 2007 -0700"
      },
      "message": "fix hugetlb page allocation leak\n\ndequeue_huge_page() has a serious memory leak upon hugetlb page\nallocation.  The for loop continues on allocating hugetlb pages out of\nall allowable zone, where this function is supposedly only dequeue one\nand only one pages.\n\nFixed it by breaking out of the for loop once a hugetlb page is found.\n\nSigned-off-by: Ken Chen \u003ckenchen@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": "165125e1e480f9510a5ffcfbfee4e3ee38c05f23",
      "tree": "8009c8a5ff09e26dc2418d42f66ecafb055c52a2",
      "parents": [
        "f695baf2df9e0413d3521661070103711545207a"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jul 24 09:28:11 2007 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jul 24 09:28:11 2007 +0200"
      },
      "message": "[BLOCK] Get rid of request_queue_t typedef\n\nSome of the code has been gradually transitioned to using the proper\nstruct request_queue, but there\u0027s lots left. So do a full sweet of\nthe kernel and get rid of this typedef and replace its uses with\nthe proper type.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "dec2e6b7aa5d45bc3508e19907a7716b0c5307e5",
      "tree": "6214a1061268c805aded57413e98544456f175ab",
      "parents": [
        "7aa6ec56b9e9e95eb6c83516ddbb6159fd11c224"
      ],
      "author": {
        "name": "Sam Ravnborg",
        "email": "sam@ravnborg.org",
        "time": "Sun Jul 22 11:12:44 2007 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Jul 22 11:03:38 2007 -0700"
      },
      "message": "x86_64: fix section mismatch warning in init.c\n\nFix following warning:\nWARNING: vmlinux.o(.text+0x188ea): Section mismatch: reference to .init.text:__alloc_bootmem_core (between \u0027alloc_bootmem_high_node\u0027 and \u0027get_gate_vma\u0027)\n\nalloc_bootmem_high_node() is only used from __init scope so declare it __init.\nAnd in addition declare the weak variant __init too.\n\nSigned-off-by: Sam Ravnborg \u003csam@ravnborg.org\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d6269543ef24aa012aa228c27af3adb074f7b36b",
      "tree": "5e0c24ce1dd5ed3947ea00b7863782e24848b8d3",
      "parents": [
        "41f9dc5c871600f53c8912b2975971d2a11c1c25"
      ],
      "author": {
        "name": "Matt Mackall",
        "email": "mpm@selenic.com",
        "time": "Sat Jul 21 04:37:40 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Jul 21 17:49:16 2007 -0700"
      },
      "message": "slob: reduce list scanning\n\nThe version of SLOB in -mm always scans its free list from the beginning,\nwhich results in small allocations and free segments clustering at the\nbeginning of the list over time.  This causes the average search to scan\nover a large stretch at the beginning on each allocation.\n\nBy starting each page search where the last one left off, we evenly\ndistribute the allocations and greatly shorten the average search.\n\nWithout this patch, kernel compiles on a 1.5G machine take a large amount\nof system time for list scanning.  With this patch, compiles are within a\nfew seconds of performance of a SLAB kernel with no notable change in\nsystem time.\n\nSigned-off-by: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "41f9dc5c871600f53c8912b2975971d2a11c1c25",
      "tree": "c87833f1e6ffd73bc99ad7c83fffbd3cd47a64ca",
      "parents": [
        "61d488da9bad8d1511d18291006bd2dd728f173d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jul 21 04:37:40 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Jul 21 17:49:16 2007 -0700"
      },
      "message": "remove handle_mm_fault export\n\nNow that arch/powerpc/platforms/cell/spufs/fault.c is always built in\nthe kernel there is no need to export handle_mm_fault anymore.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\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": "b50731732f926d6c49fd0724616a7344c31cd5cf",
      "tree": "2bc72fc6bf200b3696666ff1ef21f7e60a379d35",
      "parents": [
        "df336d1c7b6fd510fa6d3a028f999e7586c7026e"
      ],
      "author": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Sat Jul 21 04:37:25 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Jul 21 17:49:14 2007 -0700"
      },
      "message": "nommu: vmalloc_32_user()/vm_insert_page() and symbol exports.\n\nTrying to survive an allmodconfig on a nommu platform results in many\nscreen lengths of module unhappiness.  Many of the mmap related things that\nbinfmt_flat hooks in to are never exported despite being global, and there\nare also missing definitions for vmalloc_32_user() and vm_insert_page().\n\nI\u0027ve implemented vmalloc_32_user() trying to stick as close to the\nmm/vmalloc.c implementation as possible, though we don\u0027t have any need for\nVM_USERMAP, so groveling for the VMA can be skipped.  vm_insert_page() has\nbeen stubbed for now in order to keep the build happy.\n\nSigned-off-by: Paul Mundt \u003clethal@linux-sh.org\u003e\nCc: David Howells \u003cdhowells@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": "e228929bc257b963523ed75aa60d2ad77ece2189",
      "tree": "d72cf8e6d8a126792565549527efc2c9a6fcdcbe",
      "parents": [
        "8d1b87530e7df5c9541a69910ef7f786f034eca0"
      ],
      "author": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Fri Jul 20 00:31:44 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Jul 20 08:44:19 2007 -0700"
      },
      "message": "mm: fix memory hotplug oops from ZONE_MOVABLE changes.\n\nzone_movable_pfn is presently marked as __initdata and referenced from\nadjust_zone_range_for_zone_movable(), which in turn is referenced by\nzone_spanned_pages_in_node().  Both of these are __meminit annotated.  When\nmemory hotplug is enabled, this will oops on a hot-add, due to\nzone_movable_pfn having been freed.\n\n__meminitdata annotation gives the desired behaviour.\n\nThis will only impact platforms that enable both memory hotplug\nand ARCH_POPULATES_NODE_MAP.\n\nSigned-off-by: Paul Mundt \u003clethal@linux-sh.org\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "20c2df83d25c6a95affe6157a4c9cac4cf5ffaac",
      "tree": "415c4453d2b17a50abe7a3e515177e1fa337bd67",
      "parents": [
        "64fb98fc40738ae1a98bcea9ca3145b89fb71524"
      ],
      "author": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Fri Jul 20 10:11:58 2007 +0900"
      },
      "committer": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Fri Jul 20 10:11:58 2007 +0900"
      },
      "message": "mm: Remove slab destructors from kmem_cache_create().\n\nSlab destructors were no longer supported after Christoph\u0027s\nc59def9f222d44bb7e2f0a559f2906191a0862d7 change. They\u0027ve been\nBUGs for both slab and slub, and slob never supported them\neither.\n\nThis rips out support for the dtor pointer from kmem_cache_create()\ncompletely and fixes up every single callsite in the kernel (there were\nabout 224, not including the slab allocator definitions themselves,\nor the documentation references).\n\nSigned-off-by: Paul Mundt \u003clethal@linux-sh.org\u003e\n"
    },
    {
      "commit": "9550b105b8646f916862aee3ab7b25020ca14159",
      "tree": "d5e57db2bfd773611e2b77b4bbe6d89ba8449b45",
      "parents": [
        "a5c96d8a1c67f31ef48935a78da2d2076513842b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 13:21:34 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 13:21:34 2007 -0700"
      },
      "message": "slub: fix ksize() for zero-sized pointers\n\nThe slab and slob allocators already did this right, but slub would call\n\"get_object_page()\" on the magic ZERO_SIZE_PTR, with all kinds of nasty\nend results.\n\nNoted by Ingo Molnar.\n\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a5c96d8a1c67f31ef48935a78da2d2076513842b",
      "tree": "d164c6b33a1de9ea157b99bb353f84e41774164e",
      "parents": [
        "ce8c2293be47999584908069e78bf6d94beadc53"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 13:17:15 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 13:17:15 2007 -0700"
      },
      "message": "Fix up non-NUMA SLAB configuration for zero-sized allocations\n\nI suspect Christoph tested his code only in the NUMA configuration, for\nthe combination of SLAB+non-NUMA the zero-sized kmalloc\u0027s would not work.\n\nOf course, this would only trigger in configurations where those zero-\nsized allocations happen (not very common), so that may explain why it\nwasn\u0027t more widely noticed.\n\nSeen by by Andi Kleen under qemu, and there seems to be a report by\nMichael Tsirkin on it too.\n\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Roland Dreier \u003crdreier@cisco.com\u003e\nCc: Michael S. Tsirkin \u003cmst@dev.mellanox.co.il\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5992b6dac0d23a2b51a1ccbaf8f1a2e62097b12b",
      "tree": "47b059a9f22d6d0111c669d808617aa73a709259",
      "parents": [
        "57deb52622f3700d154e32662f36cd5f4053f6ed"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Jul 19 01:49:21 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:52 2007 -0700"
      },
      "message": "lguest: export symbols for lguest as a module\n\nlguest does some fairly lowlevel things to support a host, which\nnormal modules don\u0027t need:\n\nmath_state_restore:\n\tWhen the guest triggers a Device Not Available fault, we need\n\tto be able to restore the FPU\n\n__put_task_struct:\n\tWe need to hold a reference to another task for inter-guest\n\tI/O, and put_task_struct() is an inline function which calls\n\t__put_task_struct.\n\naccess_process_vm:\n\tWe need to access another task for inter-guest I/O.\n\nmap_vm_area \u0026 __get_vm_area:\n\tWe need to map the switcher shim (ie. monitor) at 0xFFC01000.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.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": "d688abf50bd5a30d2c44dea2a72dd59052cd3cce",
      "tree": "2f572d18af05969b2c882970cda4860be345bdfc",
      "parents": [
        "6819457d2cb7fe4fdb0fc3655b6b6dc71a86bee9"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Thu Jul 19 01:49:17 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:52 2007 -0700"
      },
      "message": "move page writeback acounting out of macros\n\npage-writeback accounting is presently performed in the page-flags macros.\nThis is inconsistent and a bit ugly and makes it awkward to implement\nper-backing_dev under-writeback page accounting.\n\nSo move this accounting down to the callsite(s).\n\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f8af0bb890d6cdcb09ec042c128e217a7c500355",
      "tree": "c74f53e64b74162488b7ca3f5199acf7f5b6e501",
      "parents": [
        "7ed5cb2b73d0c4165c0504c95454fade0c0bf3d9"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Thu Jul 19 01:49:12 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:50 2007 -0700"
      },
      "message": "hugetlb: use set_compound_page_dtor\n\nUse appropriate accessor function to set compound page destructor\nfunction.\n\nCc:  William Irwin \u003cwli@holomorphy.com\u003e\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nAcked-by: Adam Litke \u003cagl@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": "7ed5cb2b73d0c4165c0504c95454fade0c0bf3d9",
      "tree": "37b15b57986466531c5a0debb6b52660ca47e86a",
      "parents": [
        "e3aded3cc289113c7bc729ef4cb75e56d9aa71be"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Thu Jul 19 01:49:11 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:50 2007 -0700"
      },
      "message": "Remove nid_lock from alloc_fresh_huge_page\n\nThe fix to that race in alloc_fresh_huge_page() which could give an illegal\nnode ID did not need nid_lock at all: the fix was to replace static int nid\nby static int prev_nid and do the work on local int nid.  nid_lock did make\nsure that racers strictly roundrobin the nodes, but that\u0027s not something we\nneed to enforce strictly.  Kill nid_lock.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7ac674f52778b95450509357435320be1d795248",
      "tree": "93657e44d8d7ba7f8857ba038074e2ec4a9c2d38",
      "parents": [
        "ea02e3dde3509ffa7fda7f8de9c8a366e03f7bbd"
      ],
      "author": {
        "name": "Benjamin Herrenschmidt",
        "email": "benh@kernel.crashing.org",
        "time": "Thu Jul 19 01:49:10 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:50 2007 -0700"
      },
      "message": "vmalloc_32 should use GFP_KERNEL\n\nI\u0027ve noticed lots of failures of vmalloc_32 on machines where it\nshouldn\u0027t have failed unless it was doing an atomic operation.\n\nLooking closely, I noticed that:\n\n#if defined(CONFIG_64BIT) \u0026\u0026 defined(CONFIG_ZONE_DMA32)\n#define GFP_VMALLOC32 GFP_DMA32\n#elif defined(CONFIG_64BIT) \u0026\u0026 defined(CONFIG_ZONE_DMA)\n#define GFP_VMALLOC32 GFP_DMA\n#else\n#define GFP_VMALLOC32 GFP_KERNEL\n#endif\n\nWhich seems to be incorrect, it should always -or- in the DMA flags\non top of GFP_KERNEL, thus this patch.\n\nThis fixes frequent errors launchin X with the nouveau DRM for example.\n\nSigned-off-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Dave Airlie \u003cairlied@linux.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ea02e3dde3509ffa7fda7f8de9c8a366e03f7bbd",
      "tree": "0c48aa948de8549a2b183c2ed3e5b338fa9730b7",
      "parents": [
        "3abf7afd406866a84276d3ed04f4edf6070c9cb5"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Thu Jul 19 01:49:09 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:50 2007 -0700"
      },
      "message": "FRV: work around a possible compiler bug\n\nWork around a possible bug in the FRV compiler.\n\nWhat appears to be happening is that gcc resolves the\n__builtin_constant_p() in kmalloc() to true, but then fails to reduce the\ntherefore constant conditions in the if-statements it guards to constant\nresults.\n\nWhen compiling with -O2 or -Os, one single spurious error crops up in\ncpuup_callback() in mm/slab.c.  This can be avoided by making the memsize\nvariable const.\n\nSigned-off-by: David Howells \u003cdhowells@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": "3abf7afd406866a84276d3ed04f4edf6070c9cb5",
      "tree": "4ee66f7d1a12261cbc7139b99b4fa94a8ecab122",
      "parents": [
        "dd00cc486ab1c17049a535413d1751ef3482141c"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Jul 19 01:49:08 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:50 2007 -0700"
      },
      "message": "dequeue_huge_page() warning fix\n\nmm/hugetlb.c: In function `dequeue_huge_page\u0027:\nmm/hugetlb.c:72: warning: \u0027nid\u0027 might be used uninitialized in this function\n\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: David Gibson \u003chermes@gibson.dropbear.id.au\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b6a2fea39318e43fee84fa7b0b90d68bed92d2ba",
      "tree": "c9c3619cb2730b5c10c7427b837146bce3d69156",
      "parents": [
        "bdf4c48af20a3b0f01671799ace345e3d49576da"
      ],
      "author": {
        "name": "Ollie Wild",
        "email": "aaw@google.com",
        "time": "Thu Jul 19 01:48:16 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:45 2007 -0700"
      },
      "message": "mm: variable length argument support\n\nRemove the arg+env limit of MAX_ARG_PAGES by copying the strings directly from\nthe old mm into the new mm.\n\nWe create the new mm before the binfmt code runs, and place the new stack at\nthe very top of the address space.  Once the binfmt code runs and figures out\nwhere the stack should be, we move it downwards.\n\nIt is a bit peculiar in that we have one task with two mm\u0027s, one of which is\ninactive.\n\n[a.p.zijlstra@chello.nl: limit stack size]\nSigned-off-by: Ollie Wild \u003caaw@google.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\n[bunk@stusta.de: unexport bprm_mm_init]\nSigned-off-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": "f9acc8c7b35a100f3a9e0e6977f7807b0169f9a5",
      "tree": "6a4dcd227bb698a217a1d42d37e3f0135a444ea4",
      "parents": [
        "cf914a7d656e62b9dd3e0dffe4f62b953ae6048d"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Thu Jul 19 01:48:08 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:44 2007 -0700"
      },
      "message": "readahead: sanify file_ra_state names\n\nRename some file_ra_state variables and remove some accessors.\n\nIt results in much simpler code.\nKudos to Rusty!\n\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Rusty Russell \u003crusty@rustcorp.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": "cf914a7d656e62b9dd3e0dffe4f62b953ae6048d",
      "tree": "baf7e79de006ca80eac426d2d1be4c52f5f19624",
      "parents": [
        "fe3cba17c49471e99d3421e675fc8b3deaaf0b70"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Jul 19 01:48:08 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:44 2007 -0700"
      },
      "message": "readahead: split ondemand readahead interface into two functions\n\nSplit ondemand readahead interface into two functions.  I think this makes it\na little clearer for non-readahead experts (like Rusty).\n\nInternally they both call ondemand_readahead(), but the page argument is\nchanged to an obvious boolean flag.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fe3cba17c49471e99d3421e675fc8b3deaaf0b70",
      "tree": "df696c4584c6db2e439f068d2474fcb946ca587d",
      "parents": [
        "d8983910a4045fa21022cfccf76ed13eb40fd7f5"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Thu Jul 19 01:48:07 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:44 2007 -0700"
      },
      "message": "mm: share PG_readahead and PG_reclaim\n\nShare the same page flag bit for PG_readahead and PG_reclaim.\n\nOne is used only on file reads, another is only for emergency writes.  One\nis used mostly for fresh/young pages, another is for old pages.\n\nCombinations of possible interactions are:\n\na) clear PG_reclaim \u003d\u003e implicit clear of PG_readahead\n\tit will delay an asynchronous readahead into a synchronous one\n\tit actually does _good_ for readahead:\n\t\tthe pages will be reclaimed soon, it\u0027s readahead thrashing!\n\t\tin this case, synchronous readahead makes more sense.\n\nb) clear PG_readahead \u003d\u003e implicit clear of PG_reclaim\n\tone(and only one) page will not be reclaimed in time\n\tit can be avoided by checking PageWriteback(page) in readahead first\n\nc) set PG_reclaim \u003d\u003e implicit set of PG_readahead\n\twill confuse readahead and make it restart the size rampup process\n\tit\u0027s a trivial problem, and can mostly be avoided by checking\n\tPageWriteback(page) first in readahead\n\nd) set PG_readahead \u003d\u003e implicit set of PG_reclaim\n\tPG_readahead will never be set on already cached pages.\n\tPG_reclaim will always be cleared on dirtying a page.\n\tso not a problem.\n\nIn summary,\n\ta)   we get better behavior\n\tb,d) possible interactions can be avoided\n\tc)   racy condition exists that might affect readahead, but the chance\n\t     is _really_ low, and the hurt on readahead is trivial.\n\nCompound pages also use PG_reclaim, but for now they do not interact with\nreclaim/readahead code.\n\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Rusty Russell \u003crusty@rustcorp.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": "c743d96b6d2ff55a94df7b5ac7c74987bb9c343b",
      "tree": "391e5dad21e62590e343c63e5ba05322d0fc76ad",
      "parents": [
        "dc7868fcb9a73990e6f30371c1be465c436a7a7f"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Thu Jul 19 01:48:04 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:44 2007 -0700"
      },
      "message": "readahead: remove the old algorithm\n\nRemove the old readahead algorithm.\n\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Steven Pratt \u003cslpratt@austin.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.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": "3ea89ee86a82e9fbde37018d9b9e92a552e5fd13",
      "tree": "5fef7216ef39d66684754e4aadf368ce9adfd72e",
      "parents": [
        "122a21d11cbfda6d1e33cbc8ae9e4c4ee2f1886e"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Thu Jul 19 01:48:02 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:44 2007 -0700"
      },
      "message": "readahead: convert filemap invocations\n\nConvert filemap reads to use on-demand readahead.\n\nThe new call scheme is to\n- call readahead on non-cached page\n- call readahead on look-ahead page\n- update prev_index when finished with the read request\n\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Steven Pratt \u003cslpratt@austin.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.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": "122a21d11cbfda6d1e33cbc8ae9e4c4ee2f1886e",
      "tree": "e13f4e2dd0f838f5f922ed047e5ee56bf3546f21",
      "parents": [
        "5ce1110b92b31d079aa443e967f43a2294e01194"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Thu Jul 19 01:48:01 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:44 2007 -0700"
      },
      "message": "readahead: on-demand readahead logic\n\nThis is a minimal readahead algorithm that aims to replace the current one.\nIt is more flexible and reliable, while maintaining almost the same behavior\nand performance.  Also it is full integrated with adaptive readahead.\n\nIt is designed to be called on demand:\n\t- on a missing page, to do synchronous readahead\n\t- on a lookahead page, to do asynchronous readahead\n\nIn this way it eliminated the awkward workarounds for cache hit/miss,\nreadahead thrashing, retried read, and unaligned read.  It also adopts the\ndata structure introduced by adaptive readahead, parameterizes readahead\npipelining with `lookahead_index\u0027, and reduces the current/ahead windows to\none single window.\n\nHEURISTICS\n\nThe logic deals with four cases:\n\n\t- sequential-next\n\t\tfound a consistent readahead window, so push it forward\n\n\t- random\n\t\tstandalone small read, so read as is\n\n\t- sequential-first\n\t\tcreate a new readahead window for a sequential/oversize request\n\n\t- lookahead-clueless\n\t\thit a lookahead page not associated with the readahead window,\n\t\tso create a new readahead window and ramp it up\n\nIn each case, three parameters are determined:\n\n\t- readahead index: where the next readahead begins\n\t- readahead size:  how much to readahead\n\t- lookahead size:  when to do the next readahead (for pipelining)\n\nBEHAVIORS\n\nThe old behaviors are maximally preserved for trivial sequential/random reads.\nNotable changes are:\n\n\t- It no longer imposes strict sequential checks.\n\t  It might help some interleaved cases, and clustered random reads.\n\t  It does introduce risks of a random lookahead hit triggering an\n\t  unexpected readahead. But in general it is more likely to do good\n\t  than to do evil.\n\n\t- Interleaved reads are supported in a minimal way.\n\t  Their chances of being detected and proper handled are still low.\n\n\t- Readahead thrashings are better handled.\n\t  The current readahead leads to tiny average I/O sizes, because it\n\t  never turn back for the thrashed pages.  They have to be fault in\n\t  by do_generic_mapping_read() one by one.  Whereas the on-demand\n\t  readahead will redo readahead for them.\n\nOVERHEADS\n\nThe new code reduced the overheads of\n\n\t- excessively calling the readahead routine on small sized reads\n\t  (the current readahead code insists on seeing all requests)\n\n\t- doing a lot of pointless page-cache lookups for small cached files\n\t  (the current readahead only turns itself off after 256 cache hits,\n\t  unfortunately most files are \u003c 1MB, so never see that chance)\n\nThat accounts for speedup of\n\t- 0.3% on 1-page sequential reads on sparse file\n\t- 1.2% on 1-page cache hot sequential reads\n\t- 3.2% on 256-page cache hot sequential reads\n\t- 1.3% on cache hot `tar /lib`\n\nHowever, it does introduce one extra page-cache lookup per cache miss, which\nimpacts random reads slightly. That\u0027s 1% overheads for 1-page random reads on\nsparse file.\n\nPERFORMANCE\n\nThe basic benchmark setup is\n\t- 2.6.20 kernel with on-demand readahead\n\t- 1MB max readahead size\n\t- 2.9GHz Intel Core 2 CPU\n\t- 2GB memory\n\t- 160G/8M Hitachi SATA II 7200 RPM disk\n\nThe benchmarks show that\n\t- it maintains the same performance for trivial sequential/random reads\n\t- sysbench/OLTP performance on MySQL gains up to 8%\n\t- performance on readahead thrashing gains up to 3 times\n\niozone throughput (KB/s): roughly the same\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\niozone -c -t1 -s 4096m -r 64k\n\n\t\t\t       2.6.20          on-demand      gain\nfirst run\n\t  \"  Initial write \"   61437.27        64521.53      +5.0%\n\t  \"        Rewrite \"   47893.02        48335.20      +0.9%\n\t  \"           Read \"   62111.84        62141.49      +0.0%\n\t  \"        Re-read \"   62242.66        62193.17      -0.1%\n\t  \"   Reverse Read \"   50031.46        49989.79      -0.1%\n\t  \"    Stride read \"    8657.61         8652.81      -0.1%\n\t  \"    Random read \"   13914.28        13898.23      -0.1%\n\t  \" Mixed workload \"   19069.27        19033.32      -0.2%\n\t  \"   Random write \"   14849.80        14104.38      -5.0%\n\t  \"         Pwrite \"   62955.30        65701.57      +4.4%\n\t  \"          Pread \"   62209.99        62256.26      +0.1%\n\nsecond run\n\t  \"  Initial write \"   60810.31        66258.69      +9.0%\n\t  \"        Rewrite \"   49373.89        57833.66     +17.1%\n\t  \"           Read \"   62059.39        62251.28      +0.3%\n\t  \"        Re-read \"   62264.32        62256.82      -0.0%\n\t  \"   Reverse Read \"   49970.96        50565.72      +1.2%\n\t  \"    Stride read \"    8654.81         8638.45      -0.2%\n\t  \"    Random read \"   13901.44        13949.91      +0.3%\n\t  \" Mixed workload \"   19041.32        19092.04      +0.3%\n\t  \"   Random write \"   14019.99        14161.72      +1.0%\n\t  \"         Pwrite \"   64121.67        68224.17      +6.4%\n\t  \"          Pread \"   62225.08        62274.28      +0.1%\n\nIn summary, writes are unstable, reads are pretty close on average:\n\n\t\t\t  access pattern  2.6.20  on-demand   gain\n\t\t\t\t   Read  62085.61  62196.38  +0.2%\n\t\t\t\tRe-read  62253.49  62224.99  -0.0%\n\t\t\t   Reverse Read  50001.21  50277.75  +0.6%\n\t\t\t    Stride read   8656.21   8645.63  -0.1%\n\t\t\t    Random read  13907.86  13924.07  +0.1%\n\t \t\t Mixed workload  19055.29  19062.68  +0.0%\n\t\t\t\t  Pread  62217.53  62265.27  +0.1%\n\naio-stress: roughly the same\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\naio-stress -l -s4096 -r128 -t1 -o1 knoppix511-dvd-cn.iso\naio-stress -l -s4096 -r128 -t1 -o3 knoppix511-dvd-cn.iso\n\n\t\t\t\t\t2.6.20      on-demand  delta\n\t\t\tsequential\t 92.57s      92.54s    -0.0%\n\t\t\trandom\t\t311.87s     312.15s    +0.1%\n\nsysbench fileio: roughly the same\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\nsysbench --test\u003dfileio --file-io-mode\u003dasync --file-test-mode\u003drndrw \\\n\t --file-total-size\u003d4G --file-block-size\u003d64K \\\n\t --num-threads\u003d001 --max-requests\u003d10000 --max-time\u003d900 run\n\n\t\t\t\tthreads    2.6.20   on-demand    delta\n\t\tfirst run\n\t\t\t\t      1   59.1974s    59.2262s  +0.0%\n\t\t\t\t      2   58.0575s    58.2269s  +0.3%\n\t\t\t\t      4   48.0545s    47.1164s  -2.0%\n\t\t\t\t      8   41.0684s    41.2229s  +0.4%\n\t\t\t\t     16   35.8817s    36.4448s  +1.6%\n\t\t\t\t     32   32.6614s    32.8240s  +0.5%\n\t\t\t\t     64   23.7601s    24.1481s  +1.6%\n\t\t\t\t    128   24.3719s    23.8225s  -2.3%\n\t\t\t\t    256   23.2366s    22.0488s  -5.1%\n\n\t\tsecond run\n\t\t\t\t      1   59.6720s    59.5671s  -0.2%\n\t\t\t\t      8   41.5158s    41.9541s  +1.1%\n\t\t\t\t     64   25.0200s    23.9634s  -4.2%\n\t\t\t\t    256   22.5491s    20.9486s  -7.1%\n\nNote that the numbers are not very stable because of the writes.\nThe overall performance is close when we sum all seconds up:\n\n                sum all up               495.046s    491.514s   -0.7%\n\nsysbench oltp (trans/sec): up to 8% gain\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\nsysbench --test\u003doltp --oltp-table-size\u003d10000000 --oltp-read-only \\\n\t --mysql-socket\u003d/var/run/mysqld/mysqld.sock \\\n\t --mysql-user\u003droot --mysql-password\u003dreadahead \\\n\t --num-threads\u003d064 --max-requests\u003d10000 --max-time\u003d900 run\n\n\t10000-transactions run\n\t\t\t\tthreads    2.6.20   on-demand    gain\n\t\t\t\t      1     62.81       64.56   +2.8%\n\t\t\t\t      2     67.97       70.93   +4.4%\n\t\t\t\t      4     81.81       85.87   +5.0%\n\t\t\t\t      8     94.60       97.89   +3.5%\n\t\t\t\t     16     99.07      104.68   +5.7%\n\t\t\t\t     32     95.93      104.28   +8.7%\n\t\t\t\t     64     96.48      103.68   +7.5%\n\t5000-transactions run\n\t\t\t\t      1     48.21       48.65   +0.9%\n\t\t\t\t      8     68.60       70.19   +2.3%\n\t\t\t\t     64     70.57       74.72   +5.9%\n\t2000-transactions run\n\t\t\t\t      1     37.57       38.04   +1.3%\n\t\t\t\t      2     38.43       38.99   +1.5%\n\t\t\t\t      4     45.39       46.45   +2.3%\n\t\t\t\t      8     51.64       52.36   +1.4%\n\t\t\t\t     16     54.39       55.18   +1.5%\n\t\t\t\t     32     52.13       54.49   +4.5%\n\t\t\t\t     64     54.13       54.61   +0.9%\n\nThat\u0027s interesting results. Some investigations show that\n\t- MySQL is accessing the db file non-uniformly: some parts are\n\t  more hot than others\n\t- It is mostly doing 4-page random reads, and sometimes doing two\n\t  reads in a row, the latter one triggers a 16-page readahead.\n\t- The on-demand readahead leaves many lookahead pages (flagged\n\t  PG_readahead) there. Many of them will be hit, and trigger\n\t  more readahead pages. Which might save more seeks.\n\t- Naturally, the readahead windows tend to lie in hot areas,\n\t  and the lookahead pages in hot areas is more likely to be hit.\n\t- The more overall read density, the more possible gain.\n\nThat also explains the adaptive readahead tricks for clustered random reads.\n\nreadahead thrashing: 3 times better\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\nWe boot kernel with \"mem\u003d128m single\", and start a 100KB/s stream on every\nsecond, until reaching 200 streams.\n\n\t\t\t      max throughput     min avg I/O size\n\t\t2.6.20:            5MB/s               16KB\n\t\ton-demand:        15MB/s              140KB\n\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Steven Pratt \u003cslpratt@austin.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.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": "5ce1110b92b31d079aa443e967f43a2294e01194",
      "tree": "eff95b4c8ede07d0777ca68a30d686d1acbb5c73",
      "parents": [
        "f615bfca468c9b80ed2d09be5fdbaf470a32c045"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Thu Jul 19 01:47:59 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:44 2007 -0700"
      },
      "message": "readahead: data structure and routines\n\nExtend struct file_ra_state to support the on-demand readahead logic.  Also\ndefine some helpers for it.\n\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Steven Pratt \u003cslpratt@austin.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.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": "f615bfca468c9b80ed2d09be5fdbaf470a32c045",
      "tree": "4771fd91ae020efaafbe653ad78ba5e32d56e8a3",
      "parents": [
        "46fc3e7b4e7233a0ac981ac9084b55217318d04d"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Thu Jul 19 01:47:58 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:43 2007 -0700"
      },
      "message": "readahead: MIN_RA_PAGES/MAX_RA_PAGES macros\n\nDefine two convenient macros for read-ahead:\n\t- MAX_RA_PAGES: rounded down counterpart of VM_MAX_READAHEAD\n\t- MIN_RA_PAGES: rounded _up_ counterpart of VM_MIN_READAHEAD\n\nNote that the rounded up MIN_RA_PAGES will work flawlessly with _large_\npage sizes like 64k.\n\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Steven Pratt \u003cslpratt@austin.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\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": "46fc3e7b4e7233a0ac981ac9084b55217318d04d",
      "tree": "555bededb43671605fa085d3b4d330d31aa4af5c",
      "parents": [
        "d77c2d7cc5126639a47d73300b40d461f2811a0f"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Thu Jul 19 01:47:57 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:43 2007 -0700"
      },
      "message": "readahead: add look-ahead support to __do_page_cache_readahead()\n\nAdd look-ahead support to __do_page_cache_readahead().\n\nIt works by\n\t- mark the Nth backwards page with PG_readahead,\n\t(which instructs the page\u0027s first reader to invoke readahead)\n\t- and only do the marking for newly allocated pages.\n\t(to prevent blindly doing readahead on already cached pages)\n\nLook-ahead is a technique to achieve I/O pipelining:\n\nWhile the application is working through a chunk of cached pages, the kernel\nreads-ahead the next chunk of pages _before_ time of need.  It effectively\nhides low level I/O latencies to high level applications.\n\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Steven Pratt \u003cslpratt@austin.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.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": "d77c2d7cc5126639a47d73300b40d461f2811a0f",
      "tree": "d02b32ca92fde9a04be9bee0f0b7c8961479448c",
      "parents": [
        "2ba2d00363975242dee9bb22cf798b487e3cd61e"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Thu Jul 19 01:47:55 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:43 2007 -0700"
      },
      "message": "readahead: introduce PG_readahead\n\nIntroduce a new page flag: PG_readahead.\n\nIt acts as a look-ahead mark, which tells the page reader: Hey, it\u0027s time to\ninvoke the read-ahead logic.  For the sake of I/O pipelining, don\u0027t wait until\nit runs out of cached pages!\n\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Steven Pratt \u003cslpratt@austin.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.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": "3ee6dafc677a68e461a7ddafc94a580ebab80735",
      "tree": "6a92c9f5bd24ff80c52c944327c3b065234f7ad2",
      "parents": [
        "bb2d5ce16409efcdf94017a6b6fecd468226e29c"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Thu Jul 19 01:47:24 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:41 2007 -0700"
      },
      "message": "only allow nonlinear vmas for ram backed filesystems\n\npage_mkclean() doesn\u0027t re-protect ptes for non-linear mappings, so a later\nre-dirty through such a mapping will not generate a fault, PG_dirty will\nnot reflect the dirty state and the dirty count will be skewed.  This\nimplies that msync() is also currently broken for nonlinear mappings.\n\nThe easiest solution is to emulate remap_file_pages on non-linear mappings\nwith simple mmap() for non ram-backed filesystems.  Applications continue\nto work (albeit slower), as long as the number of remappings remain below\nthe maximum vma count.\n\nHowever all currently known real uses of non-linear mappings are for ram\nbacked filesystems, which this patch doesn\u0027t affect.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "79352894b28550ee0eee919149f57626ec1b3572",
      "tree": "849e6aa148c69b9df3920199255ca14792eeffa2",
      "parents": [
        "83c54070ee1a2d05c89793884bea1a03f2851ed4"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Thu Jul 19 01:47:22 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:41 2007 -0700"
      },
      "message": "mm: fix clear_page_dirty_for_io vs fault race\n\nFix msync data loss and (less importantly) dirty page accounting\ninaccuracies due to the race remaining in clear_page_dirty_for_io().\n\nThe deleted comment explains what the race was, and the added comments\nexplain how it is fixed.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nAcked-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "83c54070ee1a2d05c89793884bea1a03f2851ed4",
      "tree": "dc732f5a9b93fb7004ed23f551bd98b77cc580e0",
      "parents": [
        "d0217ac04ca6591841e5665f518e38064f4e65bd"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Thu Jul 19 01:47:05 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:41 2007 -0700"
      },
      "message": "mm: fault feedback #2\n\nThis patch completes Linus\u0027s wish that the fault return codes be made into\nbit flags, which I agree makes everything nicer.  This requires requires\nall handle_mm_fault callers to be modified (possibly the modifications\nshould go further and do things like fault accounting in handle_mm_fault --\nhowever that would be for another patch).\n\n[akpm@linux-foundation.org: fix alpha build]\n[akpm@linux-foundation.org: fix s390 build]\n[akpm@linux-foundation.org: fix sparc build]\n[akpm@linux-foundation.org: fix sparc64 build]\n[akpm@linux-foundation.org: fix ia64 build]\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Richard Henderson \u003crth@twiddle.net\u003e\nCc: Ivan Kokshaysky \u003cink@jurassic.park.msu.ru\u003e\nCc: Russell King \u003crmk@arm.linux.org.uk\u003e\nCc: Ian Molton \u003cspyro@f2s.com\u003e\nCc: Bryan Wu \u003cbryan.wu@analog.com\u003e\nCc: Mikael Starvik \u003cstarvik@axis.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Yoshinori Sato \u003cysato@users.sourceforge.jp\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nCc: Hirokazu Takata \u003ctakata@linux-m32r.org\u003e\nCc: Geert Uytterhoeven \u003cgeert@linux-m68k.org\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Greg Ungerer \u003cgerg@uclinux.org\u003e\nCc: Matthew Wilcox \u003cwilly@debian.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nCc: Kazumoto Kojima \u003ckkojima@rr.iij4u.or.jp\u003e\nCc: Richard Curnow \u003crc@rc0.org.uk\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Jeff Dike \u003cjdike@addtoit.com\u003e\nCc: Paolo \u0027Blaisorblade\u0027 Giarrusso \u003cblaisorblade@yahoo.it\u003e\nCc: Miles Bader \u003cuclinux-v850@lsi.nec.co.jp\u003e\nCc: Chris Zankel \u003cchris@zankel.net\u003e\nAcked-by: Kyle McMartin \u003ckyle@mcmartin.ca\u003e\nAcked-by: Haavard Skinnemoen \u003chskinnemoen@atmel.com\u003e\nAcked-by: Ralf Baechle \u003cralf@linux-mips.org\u003e\nAcked-by: Andi Kleen \u003cak@muc.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\n[ Still apparently needs some ARM and PPC loving - Linus ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d0217ac04ca6591841e5665f518e38064f4e65bd",
      "tree": "d3309094bb734d34773f97d642593e298a5cfcfc",
      "parents": [
        "ed2f2f9b3ff8debdf512f7687b232c3c1d7d60d7"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Thu Jul 19 01:47:03 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:41 2007 -0700"
      },
      "message": "mm: fault feedback #1\n\nChange -\u003efault prototype.  We now return an int, which contains\nVM_FAULT_xxx code in the low byte, and FAULT_RET_xxx code in the next byte.\n FAULT_RET_ code tells the VM whether a page was found, whether it has been\nlocked, and potentially other things.  This is not quite the way he wanted\nit yet, but that\u0027s changed in the next patch (which requires changes to\narch code).\n\nThis means we no longer set VM_CAN_INVALIDATE in the vma in order to say\nthat a page is locked which requires filemap_nopage to go away (because we\ncan no longer remain backward compatible without that flag), but we were\ngoing to do that anyway.\n\nstruct fault_data is renamed to struct vm_fault as Linus asked. address\nis now a void __user * that we should firmly encourage drivers not to use\nwithout really good reason.\n\nThe page is now returned via a page pointer in the vm_fault struct.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@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": "6967614761fd305b3414d9485d89dc2e0a407410",
      "tree": "498bd41e9cf8795535f597696dd2c834d79ffb44",
      "parents": [
        "54cb8821de07f2ffcd28c380ce9b93d5784b40d7"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Jul 19 01:47:00 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:41 2007 -0700"
      },
      "message": "ocfs2: release page lock before calling -\u003epage_mkwrite\n\n__do_fault() was calling -\u003epage_mkwrite() with the page lock held, which\nviolates the locking rules for that callback.  Release and retake the page\nlock around the callback to avoid deadlocking file systems which manually\ntake it.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.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": "54cb8821de07f2ffcd28c380ce9b93d5784b40d7",
      "tree": "1de676534963d96af42863b20191bc9f80060dea",
      "parents": [
        "d00806b183152af6d24f46f0c33f14162ca1262a"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Thu Jul 19 01:46:59 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:41 2007 -0700"
      },
      "message": "mm: merge populate and nopage into fault (fixes nonlinear)\n\nNonlinear mappings are (AFAIKS) simply a virtual memory concept that encodes\nthe virtual address -\u003e file offset differently from linear mappings.\n\n-\u003epopulate is a layering violation because the filesystem/pagecache code\nshould need to know anything about the virtual memory mapping.  The hitch here\nis that the -\u003enopage handler didn\u0027t pass down enough information (ie.  pgoff).\n But it is more logical to pass pgoff rather than have the -\u003enopage function\ncalculate it itself anyway (because that\u0027s a similar layering violation).\n\nHaving the populate handler install the pte itself is likewise a nasty thing\nto be doing.\n\nThis patch introduces a new fault handler that replaces -\u003enopage and\n-\u003epopulate and (later) -\u003enopfn.  Most of the old mechanism is still in place\nso there is a lot of duplication and nice cleanups that can be removed if\neveryone switches over.\n\nThe rationale for doing this in the first place is that nonlinear mappings are\nsubject to the pagefault vs invalidate/truncate race too, and it seemed stupid\nto duplicate the synchronisation logic rather than just consolidate the two.\n\nAfter this patch, MAP_NONBLOCK no longer sets up ptes for pages present in\npagecache.  Seems like a fringe functionality anyway.\n\nNOPAGE_REFAULT is removed.  This should be implemented with -\u003efault, and no\nusers have hit mainline yet.\n\n[akpm@linux-foundation.org: cleanup]\n[randy.dunlap@oracle.com: doc. fixes for readahead]\n[akpm@linux-foundation.org: build fix]\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Mark Fasheh \u003cmark.fasheh@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": "d00806b183152af6d24f46f0c33f14162ca1262a",
      "tree": "36f829cf13d5410374a3f00b56ec0b1f8dc3ce3c",
      "parents": [
        "589f1e81bde732dd0b1bc5d01b6bddd4bcb4527b"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Thu Jul 19 01:46:57 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:41 2007 -0700"
      },
      "message": "mm: fix fault vs invalidate race for linear mappings\n\nFix the race between invalidate_inode_pages and do_no_page.\n\nAndrea Arcangeli identified a subtle race between invalidation of pages from\npagecache with userspace mappings, and do_no_page.\n\nThe issue is that invalidation has to shoot down all mappings to the page,\nbefore it can be discarded from the pagecache.  Between shooting down ptes to\na particular page, and actually dropping the struct page from the pagecache,\ndo_no_page from any process might fault on that page and establish a new\nmapping to the page just before it gets discarded from the pagecache.\n\nThe most common case where such invalidation is used is in file truncation.\nThis case was catered for by doing a sort of open-coded seqlock between the\nfile\u0027s i_size, and its truncate_count.\n\nTruncation will decrease i_size, then increment truncate_count before\nunmapping userspace pages; do_no_page will read truncate_count, then find the\npage if it is within i_size, and then check truncate_count under the page\ntable lock and back out and retry if it had subsequently been changed (ptl\nwill serialise against unmapping, and ensure a potentially updated\ntruncate_count is actually visible).\n\nComplexity and documentation issues aside, the locking protocol fails in the\ncase where we would like to invalidate pagecache inside i_size.  do_no_page\ncan come in anytime and filemap_nopage is not aware of the invalidation in\nprogress (as it is when it is outside i_size).  The end result is that\ndangling (-\u003emapping \u003d\u003d NULL) pages that appear to be from a particular file\nmay be mapped into userspace with nonsense data.  Valid mappings to the same\nplace will see a different page.\n\nAndrea implemented two working fixes, one using a real seqlock, another using\na page-\u003eflags bit.  He also proposed using the page lock in do_no_page, but\nthat was initially considered too heavyweight.  However, it is not a global or\nper-file lock, and the page cacheline is modified in do_no_page to increment\n_count and _mapcount anyway, so a further modification should not be a large\nperformance hit.  Scalability is not an issue.\n\nThis patch implements this latter approach.  -\u003enopage implementations return\nwith the page locked if it is possible for their underlying file to be\ninvalidated (in that case, they must set a special vm_flags bit to indicate\nso).  do_no_page only unlocks the page after setting up the mapping\ncompletely.  invalidation is excluded because it holds the page lock during\ninvalidation of each page (and ensures that the page is not mapped while\nholding the lock).\n\nThis also allows significant simplifications in do_no_page, because we have\nthe page locked in the right place in the pagecache from the start.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@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": "5f4352fbffd6c45123dbce9e195efd54df4e177e",
      "tree": "e2a0316e2f2d22c266e7cae3015ddc0f2f77f64f",
      "parents": [
        "bdef40a6af64a0140a65df49bf504124d57094a9"
      ],
      "author": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy@xensource.com",
        "time": "Tue Jul 17 18:37:04 2007 -0700"
      },
      "committer": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy@goop.org",
        "time": "Wed Jul 18 08:47:41 2007 -0700"
      },
      "message": "Allocate and free vmalloc areas\n\nAllocate/release a chunk of vmalloc address space:\n alloc_vm_area reserves a chunk of address space, and makes sure all\n the pagetables are constructed for that address range - but no pages.\n\n free_vm_area releases the address space range.\n\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nSigned-off-by: Ian Pratt \u003cian.pratt@xensource.com\u003e\nSigned-off-by: Christian Limpach \u003cChristian.Limpach@cl.cam.ac.uk\u003e\nSigned-off-by: Chris Wright \u003cchrisw@sous-sol.org\u003e\nCc: \"Jan Beulich\" \u003cJBeulich@novell.com\u003e\nCc: \"Andi Kleen\" \u003cak@muc.de\u003e\n"
    },
    {
      "commit": "1e66df3ee301209f4a38df097d7cc5cb9b367a3f",
      "tree": "55beb2a342dbe08c0404f749e02808e3f09023ac",
      "parents": [
        "8b4a40809e5330c9da5d20107d693d92d73b31dc"
      ],
      "author": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy@xensource.com",
        "time": "Tue Jul 17 18:37:02 2007 -0700"
      },
      "committer": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy@goop.org",
        "time": "Wed Jul 18 08:47:39 2007 -0700"
      },
      "message": "add kstrndup\n\nAdd a kstrndup function, modelled on strndup.  Like strndup this\nreturns a string copied into its own allocated memory, but it copies\nno more than the specified number of bytes from the source.\n\nRemove private strndup() from irda code.\n\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nSigned-off-by: Chris Wright \u003cchrisw@sous-sol.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\nCc: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@mandriva.com\u003e\nCc: Al Viro \u003cviro@ftp.linux.org.uk\u003e\nCc: Panagiotis Issaris \u003ctakis@issaris.org\u003e\nCc: Rene Scharfe \u003crene.scharfe@lsrfire.ath.cx\u003e\n"
    },
    {
      "commit": "c2f1a551dea8b37c2e0cb886885c250fb703e9d8",
      "tree": "11a5f256703d856017ceb2268bd02b7b510dee30",
      "parents": [
        "1e5140279f31e47d58ed6036ee61ba7a65710e63"
      ],
      "author": {
        "name": "Meelap Shah",
        "email": "meelap@umich.edu",
        "time": "Tue Jul 17 04:04:39 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:07 2007 -0700"
      },
      "message": "knfsd: nfsd4: vary maximum delegation limit based on RAM size\n\nOur original NFSv4 delegation policy was to give out a read delegation on any\nopen when it was possible to.\n\nSince the lifetime of a delegation isn\u0027t limited to that of an open, a client\nmay quite reasonably hang on to a delegation as long as it has the inode\ncached.  This becomes an obvious problem the first time a client\u0027s inode cache\napproaches the size of the server\u0027s total memory.\n\nOur first quick solution was to add a hard-coded limit.  This patch makes a\nmild incremental improvement by varying that limit according to the server\u0027s\ntotal memory size, allowing at most 4 delegations per megabyte of RAM.\n\nMy quick back-of-the-envelope calculation finds that in the worst case (where\nevery delegation is for a different inode), a delegation could take about\n1.5K, which would make the worst case usage about 6% of memory.  The new limit\nworks out to be about the same as the old on a 1-gig server.\n\n[akpm@linux-foundation.org: Don\u0027t needlessly bloat vmlinux]\n[akpm@linux-foundation.org: Make it right for highmem machines]\nSigned-off-by: \"J. Bruce Fields\" \u003cbfields@citi.umich.edu\u003e\nSigned-off-by: Neil Brown \u003cneilb@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": "a569425512253992cc64ebf8b6d00a62f986db3e",
      "tree": "7ea72c75c54697bddbad807af89cc549d7426a69",
      "parents": [
        "6dd4ac3b30b81b5bd0d628af1c89b7da689a38ea"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Tue Jul 17 04:04:28 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:06 2007 -0700"
      },
      "message": "knfsd: exportfs: add exportfs.h header\n\ncurrently the export_operation structure and helpers related to it are in\nfs.h.  fs.h is already far too large and there are very few places needing the\nexport bits, so split them off into a separate header.\n\n[akpm@linux-foundation.org: fix cifs build]\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nCc: Steven French \u003csfrench@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": "9281acea6a3687ff0f262e0be31eac34895b95d7",
      "tree": "f060d6e4f6a5da1c82bc789104683d39377a2e9a",
      "parents": [
        "b45d52797432bd6b5d9786dbda940eb8d0b9ed06"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "htejun@gmail.com",
        "time": "Tue Jul 17 04:03:51 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:03 2007 -0700"
      },
      "message": "kallsyms: make KSYM_NAME_LEN include space for trailing \u0027\\0\u0027\n\nKSYM_NAME_LEN is peculiar in that it does not include the space for the\ntrailing \u0027\\0\u0027, forcing all users to use KSYM_NAME_LEN + 1 when allocating\nbuffer.  This is nonsense and error-prone.  Moreover, when the caller\nforgets that it\u0027s very likely to subtly bite back by corrupting the stack\nbecause the last position of the buffer is always cleared to zero.\n\nThis patch increments KSYM_NAME_LEN by one and updates code accordingly.\n\n* off-by-one bug in asm-powerpc/kprobes.h::kprobe_lookup_name() macro\n  is fixed.\n\n* Where MODULE_NAME_LEN and KSYM_NAME_LEN were used together,\n  MODULE_NAME_LEN was treated as if it didn\u0027t include space for the\n  trailing \u0027\\0\u0027.  Fix it.\n\nSigned-off-by: Tejun Heo \u003chtejun@gmail.com\u003e\nAcked-by: Paulo Marques \u003cpmarques@grupopie.com\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2a7326b5bbafac4c96bcdb944b2a773593030b96",
      "tree": "25bc49eadea73cf2133198963d1baf3f5def7316",
      "parents": [
        "831441862956fffa17b9801db37e6ea1650b0f69"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:37 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:02 2007 -0700"
      },
      "message": "CONFIG_BOUNCE to avoid useless inclusion of bounce buffer logic\n\nThe bounce buffer logic is included on systems that do not need it.  If a\nsystem does not have zones like ZONE_DMA and ZONE_HIGHMEM that can lead to\nthe use of bounce buffers then there is no need to reserve memory pools etc\netc.  This is true f.e.  for SGI Altix.\n\nAlso nicifies the Makefile and gets rid of the tricky \"and\" there.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nAcked-by: Jens Axboe \u003cjens.axboe@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": "831441862956fffa17b9801db37e6ea1650b0f69",
      "tree": "b0334921341f8f1734bdd3243de76d676329d21c",
      "parents": [
        "787d2214c19bcc9b6ac48af0ce098277a801eded"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Tue Jul 17 04:03:35 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:02 2007 -0700"
      },
      "message": "Freezer: make kernel threads nonfreezable by default\n\nCurrently, the freezer treats all tasks as freezable, except for the kernel\nthreads that explicitly set the PF_NOFREEZE flag for themselves.  This\napproach is problematic, since it requires every kernel thread to either\nset PF_NOFREEZE explicitly, or call try_to_freeze(), even if it doesn\u0027t\ncare for the freezing of tasks at all.\n\nIt seems better to only require the kernel threads that want to or need to\nbe frozen to use some freezer-related code and to remove any\nfreezer-related code from the other (nonfreezable) kernel threads, which is\ndone in this patch.\n\nThe patch causes all kernel threads to be nonfreezable by default (ie.  to\nhave PF_NOFREEZE set by default) and introduces the set_freezable()\nfunction that should be called by the freezable kernel threads in order to\nunset PF_NOFREEZE.  It also makes all of the currently freezable kernel\nthreads call set_freezable(), so it shouldn\u0027t cause any (intentional)\nchange of behaviour to appear.  Additionally, it updates documentation to\ndescribe the freezing of tasks more accurately.\n\n[akpm@linux-foundation.org: build fixes]\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nAcked-by: Nigel Cunningham \u003cnigel@nigel.suspend2.net\u003e\nCc: Pavel Machek \u003cpavel@ucw.cz\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Gautham R Shenoy \u003cego@in.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": "787d2214c19bcc9b6ac48af0ce098277a801eded",
      "tree": "a040604fdf9620a66dc83a0cde4f2140e2ec25b3",
      "parents": [
        "a1ed3dda0ad181532f1e0f0d548067fb9fdddac4"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Jul 17 04:03:34 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:02 2007 -0700"
      },
      "message": "fs: introduce some page/buffer invariants\n\nIt is a bug to set a page dirty if it is not uptodate unless it has\nbuffers.  If the page has buffers, then the page may be dirty (some buffers\ndirty) but not uptodate (some buffers not uptodate).  The exception to this\nrule is if the set_page_dirty caller is racing with truncate or invalidate.\n\nA buffer can not be set dirty if it is not uptodate.\n\nIf either of these situations occurs, it indicates there could be some data\nloss problem.  Some of these warnings could be a harmless one where the\npage or buffer is set uptodate immediately after it is dirtied, however we\nshould fix those up, and enforce this ordering.\n\nBring the order of operations for truncate into line with those of\ninvalidate.  This will prevent a page from being able to go !uptodate while\nwe\u0027re holding the tree_lock, which is probably a good thing anyway.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@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": "a1ed3dda0ad181532f1e0f0d548067fb9fdddac4",
      "tree": "dbbb62a8a1816e24369caca1886576154b588340",
      "parents": [
        "b5fab14e5d87df4d94161ae5f5e0c8625f9ffda2"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@mindspring.com",
        "time": "Tue Jul 17 04:03:33 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:02 2007 -0700"
      },
      "message": "MM: Make needlessly global hugetlb_no_page() static.\n\nSigned-off-by: Robert P. J. Day \u003crpjday@mindspring.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8ab1372fac5684de56c68f0da1ddc90e1c4ce740",
      "tree": "42594d334c83ff18655731bf4d9f5d023c9c2886",
      "parents": [
        "a0e1d1be204612ee83b3afe8aa24c5d27e63d464"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:32 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:02 2007 -0700"
      },
      "message": "SLUB: Fix CONFIG_SLUB_DEBUG use for CONFIG_NUMA\n\nWe currently cannot disable CONFIG_SLUB_DEBUG for CONFIG_NUMA.  Now that\nembedded systems start to use NUMA we may need this.\n\nPut an #ifdef around places where NUMA only code uses fields only valid\nfor CONFIG_SLUB_DEBUG.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a0e1d1be204612ee83b3afe8aa24c5d27e63d464",
      "tree": "a32092a7eda82c84c5e195de5efd2cb6c0bff553",
      "parents": [
        "434e245ddd3f14aa8eef97cae16c71b863ab092a"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:31 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:02 2007 -0700"
      },
      "message": "SLUB: Move sysfs operations outside of slub_lock\n\nSysfs can do a gazillion things when called.  Make sure that we do not call\nany sysfs functions while holding the slub_lock.\n\nJust protect the essentials:\n\n1. The list of all slab caches\n2. The kmalloc_dma array\n3. The ref counters of the slabs.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "434e245ddd3f14aa8eef97cae16c71b863ab092a",
      "tree": "bbfd9d012416e6882fd714650435a78ce4f9da9b",
      "parents": [
        "94f6030ca792c57422f04a73e7a872d8325946d3"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:30 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:02 2007 -0700"
      },
      "message": "SLUB: Do not allocate object bit array on stack\n\nThe objects per slab increase with the current patches in mm since we allow up\nto order 3 allocs by default.  More patches in mm actually allow to use 2M or\nhigher sized slabs.  For slab validation we need per object bitmaps in order\nto check a slab.  We end up with up to 64k objects per slab resulting in a\npotential requirement of 8K stack space.  That does not look good.\n\nAllocate the bit arrays via kmalloc.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "94f6030ca792c57422f04a73e7a872d8325946d3",
      "tree": "0197f24d82b1706f1b0521f2cf68feeff64123df",
      "parents": [
        "81cda6626178cd55297831296ba8ecedbfd8b52d"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:29 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:02 2007 -0700"
      },
      "message": "Slab allocators: Replace explicit zeroing with __GFP_ZERO\n\nkmalloc_node() and kmem_cache_alloc_node() were not available in a zeroing\nvariant in the past.  But with __GFP_ZERO it is possible now to do zeroing\nwhile allocating.\n\nUse __GFP_ZERO to remove the explicit clearing of memory via memset whereever\nwe can.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "81cda6626178cd55297831296ba8ecedbfd8b52d",
      "tree": "fa35a6a04db63080bbeb42f33f4b4a891b7fc96c",
      "parents": [
        "ce15fea8274acca06daa1674322d37a7d3f0036b"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:29 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "Slab allocators: Cleanup zeroing allocations\n\nIt becomes now easy to support the zeroing allocs with generic inline\nfunctions in slab.h.  Provide inline definitions to allow the continued use of\nkzalloc, kmem_cache_zalloc etc but remove other definitions of zeroing\nfunctions from the slab allocators and util.c.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ce15fea8274acca06daa1674322d37a7d3f0036b",
      "tree": "ade273da0bfdc0eadb176d847012ce1656b75c93",
      "parents": [
        "12ad6843dd145050231ec5a27fe326c2085f9095"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:28 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB: Do not use length parameter in slab_alloc()\n\nWe can get to the length of the object through the kmem_cache_structure.  The\nadditional parameter does no good and causes the compiler to generate bad\ncode.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "12ad6843dd145050231ec5a27fe326c2085f9095",
      "tree": "36159963da99f44f34b6bb9c7c1a294b2a56642f",
      "parents": [
        "5af328a51067d8dc574c2b2c2629dd436a1e841e"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:28 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB: Style fix up the loop to disable small slabs\n\nDo proper spacing and we only need to do this in steps of 8.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5af328a51067d8dc574c2b2c2629dd436a1e841e",
      "tree": "ca1c305a1019eb49a9ead016e6e31aafc3ce8a46",
      "parents": [
        "7b55f620e6908fec2d51751320c2a9459b5f375f"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Tue Jul 17 04:03:27 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "mm/slub.c: make code static\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7b55f620e6908fec2d51751320c2a9459b5f375f",
      "tree": "6fb32a7051b4358018fb26a3125e3b9621418abe",
      "parents": [
        "f1b263393626fe66bee34ccdbf0487cd377e0213"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:27 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB: Simplify dma index -\u003e size calculation\n\nThere is no need to caculate the dma slab size ourselves. We can simply\nlookup the size of the corresponding non dma slab.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f1b263393626fe66bee34ccdbf0487cd377e0213",
      "tree": "c144c6f8c0fd8f5eeeac1504bf7204c09938135f",
      "parents": [
        "dfce8648d64c07eade40d456d59cb4bfcbba008c"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:26 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB: faster more efficient slab determination for __kmalloc\n\nkmalloc_index is a long series of comparisons.  The attempt to replace\nkmalloc_index with something more efficient like ilog2 failed due to compiler\nissues with constant folding on gcc 3.3 / powerpc.\n\nkmalloc_index()\u0027es long list of comparisons works fine for constant folding\nsince all the comparisons are optimized away.  However, SLUB also uses\nkmalloc_index to determine the slab to use for the __kmalloc_xxx functions.\nThis leads to a large set of comparisons in get_slab().\n\nThe patch here allows to get rid of that list of comparisons in get_slab():\n\n1. If the requested size is larger than 192 then we can simply use\n   fls to determine the slab index since all larger slabs are\n   of the power of two type.\n\n2. If the requested size is smaller then we cannot use fls since there\n   are non power of two caches to be considered. However, the sizes are\n   in a managable range. So we divide the size by 8. Then we have only\n   24 possibilities left and then we simply look up the kmalloc index\n   in a table.\n\nCode size of slub.o decreases by more than 200 bytes through this patch.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dfce8648d64c07eade40d456d59cb4bfcbba008c",
      "tree": "7141882bd03d9848ec6299a48bc08796a8382062",
      "parents": [
        "2e443fd003d76394a8ceb78f079260478aa10710"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:25 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB: do proper locking during dma slab creation\n\nWe modify the kmalloc_cache_dma[] array without proper locking.  Do the proper\nlocking and undo the dma cache creation if another processor has already\ncreated it.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2e443fd003d76394a8ceb78f079260478aa10710",
      "tree": "e67fe6e1382ec7a2f636ab09285a41620192eb9f",
      "parents": [
        "0c710013200e72b5e0bc680ff4ec6bdac53c5ce8"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:24 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB: extract dma_kmalloc_cache from get_cache.\n\nThe rarely used dma functionality in get_slab() makes the function too\ncomplex.  The compiler begins to spill variables from the working set onto the\nstack.  The created function is only used in extremely rare cases so make sure\nthat the compiler does not decide on its own to merge it back into get_slab().\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0c710013200e72b5e0bc680ff4ec6bdac53c5ce8",
      "tree": "160c44e8036e9ea65e7863271f925954d05ed091",
      "parents": [
        "d07dbea46405b37d59495eb4de9d1056dcfb7c6d"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:24 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB: add some more inlines and #ifdef CONFIG_SLUB_DEBUG\n\nAdd #ifdefs around data structures only needed if debugging is compiled into\nSLUB.\n\nAdd inlines to small functions to reduce code size.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d07dbea46405b37d59495eb4de9d1056dcfb7c6d",
      "tree": "221376c8c5509a88f8942246180685d5c01baf46",
      "parents": [
        "6cb8f91320d3e720351c21741da795fed580b21b"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:23 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "Slab allocators: support __GFP_ZERO in all allocators\n\nA kernel convention for many allocators is that if __GFP_ZERO is passed to an\nallocator then the allocated memory should be zeroed.\n\nThis is currently not supported by the slab allocators.  The inconsistency\nmakes it difficult to implement in derived allocators such as in the uncached\nallocator and the pool allocators.\n\nIn addition the support zeroed allocations in the slab allocators does not\nhave a consistent API.  There are no zeroing allocator functions for NUMA node\nplacement (kmalloc_node, kmem_cache_alloc_node).  The zeroing allocations are\nonly provided for default allocs (kzalloc, kmem_cache_zalloc_node).\n__GFP_ZERO will make zeroing universally available and does not require any\naddititional functions.\n\nSo add the necessary logic to all slab allocators to support __GFP_ZERO.\n\nThe code is added to the hot path.  The gfp flags are on the stack and so the\ncacheline is readily available for checking if we want a zeroed object.\n\nZeroing while allocating is now a frequent operation and we seem to be\ngradually approaching a 1-1 parity between zeroing and not zeroing allocs.\nThe current tree has 3476 uses of kmalloc vs 2731 uses of kzalloc.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6cb8f91320d3e720351c21741da795fed580b21b",
      "tree": "c9f73c8b82cd0f6c534939b8b9f36e8615b0ab2d",
      "parents": [
        "ef2ad80c7d255ed0449eda947c2d700635b7e0f5"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:22 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "Slab allocators: consistent ZERO_SIZE_PTR support and NULL result semantics\n\nDefine ZERO_OR_NULL_PTR macro to be able to remove the checks from the\nallocators.  Move ZERO_SIZE_PTR related stuff into slab.h.\n\nMake ZERO_SIZE_PTR work for all slab allocators and get rid of the\nWARN_ON_ONCE(size \u003d\u003d 0) that is still remaining in SLAB.\n\nMake slub return NULL like the other allocators if a too large memory segment\nis requested via __kmalloc.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ef2ad80c7d255ed0449eda947c2d700635b7e0f5",
      "tree": "bc44916bdb25de29c8211566a4b5a1c041fa8ab6",
      "parents": [
        "d45f39cb06610ea456e1d689149b9becacda8b40"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:21 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "Slab allocators: consolidate code for krealloc in mm/util.c\n\nThe size of a kmalloc object is readily available via ksize().  ksize is\nprovided by all allocators and thus we can implement krealloc in a generic\nway.\n\nImplement krealloc in mm/util.c and drop slab specific implementations of\nkrealloc.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d45f39cb06610ea456e1d689149b9becacda8b40",
      "tree": "b320a92971c43c42ee1e440e8b43c864485452ab",
      "parents": [
        "6300ea75031e7aebfe3331245b7f750d82621223"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:21 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB Debug: fix initial object debug state of NUMA bootstrap objects\n\nThe function we are calling to initialize object debug state during early NUMA\nbootstrap sets up an inactive object giving it the wrong redzone signature.\nThe bootstrap nodes are active objects and should have active redzone\nsignatures.\n\nCurrently slab validation complains and reverts the object to active state.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6300ea75031e7aebfe3331245b7f750d82621223",
      "tree": "ccd49c8173ac6b8449b57555bd0070ceafe3f3b8",
      "parents": [
        "68dff6a9af9f27df5aeee6d0339818b0e36c1b51"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:20 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB: ensure that the number of objects per slab stays low for high orders\n\nCurrently SLUB has no provision to deal with too high page orders that may\nbe specified on the kernel boot line.  If an order higher than 6 (on a 4k\nplatform) is generated then we will BUG() because slabs get more than 65535\nobjects.\n\nAdd some logic that decreases order for slabs that have too many objects.\nThis allow booting with slab sizes up to MAX_ORDER.\n\nFor example\n\n\tslub_min_order\u003d10\n\nwill boot with a default slab size of 4M and reduce slab sizes for small\nobject sizes to lower orders if the number of objects becomes too big.\nLarge slab sizes like that allow a concentration of objects of the same\nslab cache under as few as possible TLB entries and thus potentially\nreduces TLB pressure.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "68dff6a9af9f27df5aeee6d0339818b0e36c1b51",
      "tree": "f25cc5e85925a8901e301e8f8d5d04188f27c0ee",
      "parents": [
        "5b95a4acf157eee552e013795b54eaa2ab1ee4a1"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:20 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB slab validation: Move tracking information alloc outside of lock\n\nWe currently have to do an GFP_ATOMIC allocation because the list_lock is\nalready taken when we first allocate memory for tracking allocation\ninformation.  It would be better if we could avoid atomic allocations.\n\nAllocate a size of the tracking table that is usually sufficient (one page)\nbefore we take the list lock.  We will then only do the atomic allocation\nif we need to resize the table to become larger than a page (mostly only\nneeded under large NUMA because of the tracking of cpus and nodes otherwise\nthe table stays small).\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5b95a4acf157eee552e013795b54eaa2ab1ee4a1",
      "tree": "8222033f1db996fd6ce28ce3685edc8b17793b0b",
      "parents": [
        "2492268472e7d326a6fe10f92f9211c4578f2482"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:19 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB: use list_for_each_entry for loops over all slabs\n\nUse list_for_each_entry() instead of list_for_each().\n\nGet rid of for_all_slabs(). It had only one user. So fold it into the\ncallback. This also gets rid of cpu_slab_flush.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2492268472e7d326a6fe10f92f9211c4578f2482",
      "tree": "5f668469190b96bc0db13f836d774ae73cf385ca",
      "parents": [
        "8e1f936b73150f5095448a0fee6d4f30a1f9001d"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Jul 17 04:03:18 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:01 2007 -0700"
      },
      "message": "SLUB: change error reporting format to follow lockdep loosely\n\nChanges the error reporting format to loosely follow lockdep.\n\nIf data corruption is detected then we generate the following lines:\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\nBUG \u003cslab-cache\u003e: \u003cproblem\u003e\n--------------------------------------------\n\nINFO: \u003cmore information\u003e [possibly multiple times]\n\n\u003cobject dump\u003e\n\nFIX \u003cslab-cache\u003e: \u003cremedial action\u003e\n\nThis also adds some more intelligence to the data corruption detection. Its\nnow capable of figuring out the start and end.\n\nAdd a comment on how to configure SLUB so that a production system may\ncontinue to operate even though occasional slab corruption occur through\na misbehaving kernel component. See \"Emergency operations\" in\nDocumentation/vm/slub.txt.\n\n[akpm@linux-foundation.org: build fix]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8e1f936b73150f5095448a0fee6d4f30a1f9001d",
      "tree": "0996203e35c629e2ec243d128c7bd91ecd74d24a",
      "parents": [
        "5ad333eb66ff1e52a87639822ae088577669dcf9"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Jul 17 04:03:17 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:23:00 2007 -0700"
      },
      "message": "mm: clean up and kernelify shrinker registration\n\nI can never remember what the function to register to receive VM pressure\nis called.  I have to trace down from __alloc_pages() to find it.\n\nIt\u0027s called \"set_shrinker()\", and it needs Your Help.\n\n1) Don\u0027t hide struct shrinker.  It contains no magic.\n2) Don\u0027t allocate \"struct shrinker\".  It\u0027s not helpful.\n3) Call them \"register_shrinker\" and \"unregister_shrinker\".\n4) Call the function \"shrink\" not \"shrinker\".\n5) Reduce the 17 lines of waffly comments to 13, but document it properly.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: David Chinner \u003cdgc@sgi.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5ad333eb66ff1e52a87639822ae088577669dcf9",
      "tree": "addae6bbd19585f19328f309924d06d647e8f2b7",
      "parents": [
        "7e63efef857575320fb413fbc3d0ee704b72845f"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Tue Jul 17 04:03:16 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "Lumpy Reclaim V4\n\nWhen we are out of memory of a suitable size we enter reclaim.  The current\nreclaim algorithm targets pages in LRU order, which is great for fairness at\norder-0 but highly unsuitable if you desire pages at higher orders.  To get\npages of higher order we must shoot down a very high proportion of memory;\n\u003e95% in a lot of cases.\n\nThis patch set adds a lumpy reclaim algorithm to the allocator.  It targets\ngroups of pages at the specified order anchored at the end of the active and\ninactive lists.  This encourages groups of pages at the requested orders to\nmove from active to inactive, and active to free lists.  This behaviour is\nonly triggered out of direct reclaim when higher order pages have been\nrequested.\n\nThis patch set is particularly effective when utilised with an\nanti-fragmentation scheme which groups pages of similar reclaimability\ntogether.\n\nThis patch set is based on Peter Zijlstra\u0027s lumpy reclaim V2 patch which forms\nthe foundation.  Credit to Mel Gorman for sanitity checking.\n\nMel said:\n\n  The patches have an application with hugepage pool resizing.\n\n  When lumpy-reclaim is used used with ZONE_MOVABLE, the hugepages pool can\n  be resized with greater reliability.  Testing on a desktop machine with 2GB\n  of RAM showed that growing the hugepage pool with ZONE_MOVABLE on it\u0027s own\n  was very slow as the success rate was quite low.  Without lumpy-reclaim,\n  each attempt to grow the pool by 100 pages would yield 1 or 2 hugepages.\n  With lumpy-reclaim, getting 40 to 70 hugepages on each attempt was typical.\n\n[akpm@osdl.org: ia64 pfn_to_nid fixes and loop cleanup]\n[bunk@stusta.de: static declarations for internal functions]\n[a.p.zijlstra@chello.nl: initial lumpy V2 implementation]\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Bob Picco \u003cbob.picco@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7e63efef857575320fb413fbc3d0ee704b72845f",
      "tree": "ce33c10e5f5d9ea16b0e6944d6994b1f9cc22040",
      "parents": [
        "ed7ed365172e27b0efe9d43cc962723c7193e34e"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jul 17 04:03:15 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "Add a movablecore\u003d parameter for sizing ZONE_MOVABLE\n\nThis patch adds a new parameter for sizing ZONE_MOVABLE called\nmovablecore\u003d.  While kernelcore\u003d is used to specify the minimum amount of\nmemory that must be available for all allocation types, movablecore\u003d is\nused to specify the minimum amount of memory that is used for migratable\nallocations.  The amount of memory used for migratable allocations\ndetermines how large the huge page pool could be dynamically resized to at\nruntime for example.\n\nHow movablecore is actually handled is that the total number of pages in\nthe system is calculated and a value is set for kernelcore that is\n\nkernelcore \u003d\u003d totalpages - movablecore\n\nBoth kernelcore\u003d and movablecore\u003d can be safely specified at the same time.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ed7ed365172e27b0efe9d43cc962723c7193e34e",
      "tree": "6c22daf6908f92c64aae2b425e6383fe0ed404ac",
      "parents": [
        "396faf0303d273219db5d7eb4a2879ad977ed185"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jul 17 04:03:14 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "handle kernelcore\u003d: generic\n\nThis patch adds the kernelcore\u003d parameter for x86.\n\nOnce all patches are applied, a new command-line parameter exist and a new\nsysctl.  This patch adds the necessary documentation.\n\nFrom: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\n\n  When \"kernelcore\" boot option is specified, kernel can\u0027t boot up on ia64\n  because of an infinite loop.  In addition, the parsing code can be handled\n  in an architecture-independent manner.\n\n  This patch uses common code to handle the kernelcore\u003d parameter.  It is\n  only available to architectures that support arch-independent zone-sizing\n  (i.e.  define CONFIG_ARCH_POPULATES_NODE_MAP).  Other architectures will\n  ignore the boot parameter.\n\n[bunk@stusta.de: make cmdline_parse_kernelcore() static]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nAcked-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "396faf0303d273219db5d7eb4a2879ad977ed185",
      "tree": "96cb64fd6713ef7a924f4f878e259aea781f079a",
      "parents": [
        "2a1e274acf0b1c192face19a4be7c12d4503eaaf"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jul 17 04:03:13 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "Allow huge page allocations to use GFP_HIGH_MOVABLE\n\nHuge pages are not movable so are not allocated from ZONE_MOVABLE.  However,\nas ZONE_MOVABLE will always have pages that can be migrated or reclaimed, it\ncan be used to satisfy hugepage allocations even when the system has been\nrunning a long time.  This allows an administrator to resize the hugepage pool\nat runtime depending on the size of ZONE_MOVABLE.\n\nThis patch adds a new sysctl called hugepages_treat_as_movable.  When a\nnon-zero value is written to it, future allocations for the huge page pool\nwill use ZONE_MOVABLE.  Despite huge pages being non-movable, we do not\nintroduce additional external fragmentation of note as huge pages are always\nthe largest contiguous block we care about.\n\n[akpm@linux-foundation.org: various fixes]\nSigned-off-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": "2a1e274acf0b1c192face19a4be7c12d4503eaaf",
      "tree": "f7e98e1fe19d38bb10bf178fb8f8ed1789b659b2",
      "parents": [
        "769848c03895b63e5662eb7e4ec8c4866f7d0183"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jul 17 04:03:12 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "Create the ZONE_MOVABLE zone\n\nThe following 8 patches against 2.6.20-mm2 create a zone called ZONE_MOVABLE\nthat is only usable by allocations that specify both __GFP_HIGHMEM and\n__GFP_MOVABLE.  This has the effect of keeping all non-movable pages within a\nsingle memory partition while allowing movable allocations to be satisfied\nfrom either partition.  The patches may be applied with the list-based\nanti-fragmentation patches that groups pages together based on mobility.\n\nThe size of the zone is determined by a kernelcore\u003d parameter specified at\nboot-time.  This specifies how much memory is usable by non-movable\nallocations and the remainder is used for ZONE_MOVABLE.  Any range of pages\nwithin ZONE_MOVABLE can be released by migrating the pages or by reclaiming.\n\nWhen selecting a zone to take pages from for ZONE_MOVABLE, there are two\nthings to consider.  First, only memory from the highest populated zone is\nused for ZONE_MOVABLE.  On the x86, this is probably going to be ZONE_HIGHMEM\nbut it would be ZONE_DMA on ppc64 or possibly ZONE_DMA32 on x86_64.  Second,\nthe amount of memory usable by the kernel will be spread evenly throughout\nNUMA nodes where possible.  If the nodes are not of equal size, the amount of\nmemory usable by the kernel on some nodes may be greater than others.\n\nBy default, the zone is not as useful for hugetlb allocations because they are\npinned and non-migratable (currently at least).  A sysctl is provided that\nallows huge pages to be allocated from that zone.  This means that the huge\npage pool can be resized to the size of ZONE_MOVABLE during the lifetime of\nthe system assuming that pages are not mlocked.  Despite huge pages being\nnon-movable, we do not introduce additional external fragmentation of note as\nhuge pages are always the largest contiguous block we care about.\n\nCredit goes to Andy Whitcroft for catching a large variety of problems during\nreview of the patches.\n\nThis patch creates an additional zone, ZONE_MOVABLE.  This zone is only usable\nby allocations which specify both __GFP_HIGHMEM and __GFP_MOVABLE.  Hot-added\nmemory continues to be placed in their existing destination as there is no\nmechanism to redirect them to a specific zone.\n\n[y-goto@jp.fujitsu.com: Fix section mismatch of memory hotplug related code]\n[akpm@linux-foundation.org: various fixes]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "769848c03895b63e5662eb7e4ec8c4866f7d0183",
      "tree": "8911c7c312c8b8b172795fa2874c8162e1d3d15a",
      "parents": [
        "a32ea1e1f925399e0d81ca3f7394a44a6dafa12c"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jul 17 04:03:05 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "Add __GFP_MOVABLE for callers to flag allocations from high memory that may be migrated\n\nIt is often known at allocation time whether a page may be migrated or not.\nThis patch adds a flag called __GFP_MOVABLE and a new mask called\nGFP_HIGH_MOVABLE.  Allocations using the __GFP_MOVABLE can be either migrated\nusing the page migration mechanism or reclaimed by syncing with backing\nstorage and discarding.\n\nAn API function very similar to alloc_zeroed_user_highpage() is added for\n__GFP_MOVABLE allocations called alloc_zeroed_user_highpage_movable().  The\nflags used by alloc_zeroed_user_highpage() are not changed because it would\nchange the semantics of an existing API.  After this patch is applied there\nare no in-kernel users of alloc_zeroed_user_highpage() so it probably should\nbe marked deprecated if this patch is merged.\n\nNote that this patch includes a minor cleanup to the use of __GFP_ZERO in\nshmem.c to keep all flag modifications to inode-\u003emapping in the\nshmem_dir_alloc() helper function.  This clean-up suggestion is courtesy of\nHugh Dickens.\n\nAdditional credit goes to Christoph Lameter and Linus Torvalds for shaping the\nconcept.  Credit to Hugh Dickens for catching issues with shmem swap vector\nand ramfs allocations.\n\n[akpm@linux-foundation.org: build fix]\n[hugh@veritas.com: __GFP_ZERO cleanup]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a32ea1e1f925399e0d81ca3f7394a44a6dafa12c",
      "tree": "fade44f4d7baf5695a856ad73e6b98f0d6edf9de",
      "parents": [
        "e21ea246bce5bb93dd822de420172ec280aed492"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 17 04:03:04 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "Fix read/truncate race\n\ndo_generic_mapping_read currently samples the i_size at the start and doesn\u0027t\ndo so again unless it needs to call -\u003ereadpage to load a page.  After\n-\u003ereadpage it has to re-sample i_size as a truncate may have caused that page\nto be filled with zeros, and the read() call should not see these.\n\nHowever there are other activities that might cause -\u003ereadpage to be called on\na page between the time that do_generic_mapping_read samples i_size and when\nit finds that it has an uptodate page.  These include at least read-ahead and\npossibly another thread performing a read.\n\nSo do_generic_mapping_read must sample i_size *after* it has an uptodate page.\n Thus the current sampling at the start and after a read can be replaced with\na sampling before the copy-out.\n\nThe same change applied to __generic_file_splice_read.\n\nNote that this fixes any race with truncate_complete_page, but does not fix a\npossible race with truncate_partial_page.  If a partial truncate happens after\ndo_generic_mapping_read samples i_size and before the copy_out, the nuls that\ntruncate_partial_page place in the page could be copied out incorrectly.\n\nI think the best fix for that is to *not* zero out parts of the page in\ntruncate_partial_page, but rather to zero out the tail of a page when\nincreasing i_size.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nAcked-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "489de30259e667d7bc47da9da44a0270b050cd97"
}
