)]}'
{
  "log": [
    {
      "commit": "65a80b4c61f5b5f6eb0f5669c8fb120893bfb388",
      "tree": "44136f7130ad0a1074502afbfdf8b93efe35976e",
      "parents": [
        "26b3c01f7debc1bbc3117bc9c9e016ca6f2e41d5"
      ],
      "author": {
        "name": "Hisashi Hifumi",
        "email": "hifumi.hisashi@oss.ntt.co.jp",
        "time": "Thu Dec 17 15:27:26 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 17 15:45:32 2009 -0800"
      },
      "message": "readahead: add blk_run_backing_dev\n\nI added blk_run_backing_dev on page_cache_async_readahead so readahead I/O\nis unpluged to improve throughput on especially RAID environment.\n\nThe normal case is, if page N become uptodate at time T(N), then T(N) \u003c\u003d\nT(N+1) holds.  With RAID (and NFS to some degree), there is no strict\nordering, the data arrival time depends on runtime status of individual\ndisks, which breaks that formula.  So in do_generic_file_read(), just\nafter submitting the async readahead IO request, the current page may well\nbe uptodate, so the page won\u0027t be locked, and the block device won\u0027t be\nimplicitly unplugged:\n\n               if (PageReadahead(page))\n                        page_cache_async_readahead()\n                if (!PageUptodate(page))\n                                goto page_not_up_to_date;\n                //...\npage_not_up_to_date:\n                lock_page_killable(page);\n\nTherefore explicit unplugging can help.\n\nFollowing is the test result with dd.\n\n#dd if\u003dtestdir/testfile of\u003d/dev/null bs\u003d16384\n\n-2.6.30-rc6\n1048576+0 records in\n1048576+0 records out\n17179869184 bytes (17 GB) copied, 224.182 seconds, 76.6 MB/s\n\n-2.6.30-rc6-patched\n1048576+0 records in\n1048576+0 records out\n17179869184 bytes (17 GB) copied, 206.465 seconds, 83.2 MB/s\n\n(7Disks RAID-0 Array)\n\n-2.6.30-rc6\n1054976+0 records in\n1054976+0 records out\n17284726784 bytes (17 GB) copied, 212.233 seconds, 81.4 MB/s\n\n-2.6.30-rc6-patched\n1054976+0 records out\n17284726784 bytes (17 GB) copied, 198.878 seconds, 86.9 MB/s\n\n(7Disks RAID-5 Array)\n\nThe patch was found to improve performance with the SCST scsi target\ndriver.  See\nhttp://sourceforge.net/mailarchive/forum.php?thread_name\u003da0272b440906030714g67eabc5k8f847fb1e538cc62%40mail.gmail.com\u0026forum_name\u003dscst-devel\n\n[akpm@linux-foundation.org: unbust comment layout]\n[akpm@linux-foundation.org: \"fix\" CONFIG_BLOCK\u003dn]\nSigned-off-by: Hisashi Hifumi \u003chifumi.hisashi@oss.ntt.co.jp\u003e\nAcked-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nTested-by: Ronald \u003cintercommit@gmail.com\u003e\nCc: Bart Van Assche \u003cbart.vanassche@gmail.com\u003e\nCc: Vladislav Bolkhovitin \u003cvst@vlnb.net\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "10be0b372cac50e2e7a477852f98bf069a97a3fa",
      "tree": "b3599c6418c5c8c143c6f5e293f8ea93351b889f",
      "parents": [
        "045a2529a3513faed2d45bd82f9013b124309d94"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:36 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:30 2009 -0700"
      },
      "message": "readahead: introduce context readahead algorithm\n\nIntroduce page cache context based readahead algorithm.\nThis is to better support concurrent read streams in general.\n\nRATIONALE\n---------\nThe current readahead algorithm detects interleaved reads in a _passive_ way.\nGiven a sequence of interleaved streams 1,1001,2,1002,3,4,1003,5,1004,1005,6,...\nBy checking for (offset \u003d\u003d prev_offset + 1), it will discover the sequentialness\nbetween 3,4 and between 1004,1005, and start doing sequential readahead for the\nindividual streams since page 4 and page 1005.\n\nThe context readahead algorithm guarantees to discover the sequentialness no\nmatter how the streams are interleaved. For the above example, it will start\nsequential readahead since page 2 and 1002.\n\nThe trick is to poke for page @offset-1 in the page cache when it has no other\nclues on the sequentialness of request @offset: if the current requenst belongs\nto a sequential stream, that stream must have accessed page @offset-1 recently,\nand the page will still be cached now. So if page @offset-1 is there, we can\ntake request @offset as a sequential access.\n\nBENEFICIARIES\n-------------\n- strictly interleaved reads  i.e. 1,1001,2,1002,3,1003,...\n  the current readahead will take them as silly random reads;\n  the context readahead will take them as two sequential streams.\n\n- cooperative IO processes   i.e. NFS and SCST\n  They create a thread pool, farming off (sequential) IO requests to different\n  threads which will be performing interleaved IO.\n\n  It was not easy(or possible) to reliably tell from file-\u003ef_ra all those\n  cooperative processes working on the same sequential stream, since they will\n  have different file-\u003ef_ra instances. And NFSD\u0027s file-\u003ef_ra is particularly\n  unusable, since their file objects are dynamically created for each request.\n  The nfsd does have code trying to restore the f_ra bits, but not satisfactory.\n\n  The new scheme is to detect the sequential pattern via looking up the page\n  cache, which provides one single and consistent view of the pages recently\n  accessed. That makes sequential detection for cooperative processes possible.\n\nUSER REPORT\n-----------\nVladislav recommends the addition of context readahead as a result of his SCST\nbenchmarks. It leads to 6%~40% performance gains in various cases and achieves\nequal performance in others.                http://lkml.org/lkml/2009/3/19/239\n\nOVERHEADS\n---------\nIn theory, it introduces one extra page cache lookup per random read.  However\nthe below benchmark shows context readahead to be slightly faster, wondering..\n\nRandomly reading 200MB amount of data on a sparse file, repeat 20 times for\neach block size. The average throughputs are:\n\n                       \toriginal ra\tcontext ra\tgain\n 4K random reads:\t 65.561MB/s\t 65.648MB/s\t+0.1%\n16K random reads:\t124.767MB/s\t124.951MB/s\t+0.1%\n64K random reads: \t162.123MB/s\t162.278MB/s\t+0.1%\n\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nTested-by: Vladislav Bolkhovitin \u003cvst@vlnb.net\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "045a2529a3513faed2d45bd82f9013b124309d94",
      "tree": "99b7743b6dab54286afe94d4d7b8113a271661b5",
      "parents": [
        "dc566127dd161b6c997466a2349ac179527ea89b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:30 2009 -0700"
      },
      "message": "readahead: move the random read case to bottom\n\nSplit all readahead cases, and move the random one to bottom.\n\nNo behavior changes.\n\nThis is to prepare for the introduction of context readahead, and make it\neasy for inserting accounting/tracing points for each case.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Vladislav Bolkhovitin \u003cvst@vlnb.net\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d30a11004e3411909f2448546f036a011978062e",
      "tree": "c1980adb410d9fabd2c2eb8af9f0ed8ee4b656da",
      "parents": [
        "2fad6f5deee5556f511eab58da78737a23ddb35d"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:30 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:29 2009 -0700"
      },
      "message": "readahead: record mmap read-around states in file_ra_state\n\nMmap read-around now shares the same code style and data structure with\nreadahead code.\n\nThis also removes do_page_cache_readahead().  Its last user, mmap\nread-around, has been changed to call ra_submit().\n\nThe no-readahead-if-congested logic is dumped by the way.  Users will be\npretty sensitive about the slow loading of executables.  So it\u0027s\nunfavorable to disabled mmap read-around on a congested queue.\n\n[akpm@linux-foundation.org: coding-style fixes]\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "51daa88ebd8e0d437289f589af29d4b39379ea76",
      "tree": "cbf2990a12ee4285d4e906c2c5614689922b8ab1",
      "parents": [
        "160334a0cfa8e578b718f81038026326845d07d7"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:24 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:29 2009 -0700"
      },
      "message": "readahead: remove sync/async readahead call dependency\n\nThe readahead call scheme is error-prone in that it expects the call sites\nto check for async readahead after doing a sync one.  I.e.\n\n\t\t\tif (!page)\n\t\t\t\tpage_cache_sync_readahead();\n\t\t\tpage \u003d find_get_page();\n\t\t\tif (page \u0026\u0026 PageReadahead(page))\n\t\t\t\tpage_cache_async_readahead();\n\nThis is because PG_readahead could be set by a sync readahead for the\n_current_ newly faulted in page, and the readahead code simply expects one\nmore callback on the same page to start the async readahead.  If the\ncaller fails to do so, it will miss the PG_readahead bits and never able\nto start an async readahead.\n\nEliminate this insane constraint by piggy-backing the async part into the\ncurrent readahead window.\n\nNow if an async readahead should be started immediately after a sync one,\nthe readahead logic itself will do it.  So the following code becomes\nvalid: (the \u0027else\u0027 in particular)\n\n\t\t\tif (!page)\n\t\t\t\tpage_cache_sync_readahead();\n\t\t\telse if (PageReadahead(page))\n\t\t\t\tpage_cache_async_readahead();\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "160334a0cfa8e578b718f81038026326845d07d7",
      "tree": "3c5b524faf23cdde4da1a3f2112de0c645206dba",
      "parents": [
        "caca7cb748571a5b39943a9b3e7081feef055e5e"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:23 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:29 2009 -0700"
      },
      "message": "readahead: increase interleaved readahead size\n\nMake sure interleaved readahead size is larger than request size.  This\nalso makes the readahead window grow up more quickly.\n\nReported-by: Xu Chenfeng \u003cxcf@ustc.edu.cn\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "caca7cb748571a5b39943a9b3e7081feef055e5e",
      "tree": "8f115031584d8ebc14280079fed8183ef1f032ac",
      "parents": [
        "fc31d16add13773265cc53d59f2e7594cb3c0a14"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:28 2009 -0700"
      },
      "message": "readahead: remove one unnecessary radix tree lookup\n\n(hit_readahead_marker !\u003d 0) means the page at @offset is present, so we\ncan search for non-present page starting from @offset+1.\n\nReported-by: Xu Chenfeng \u003cxcf@ustc.edu.cn\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fc31d16add13773265cc53d59f2e7594cb3c0a14",
      "tree": "fe67988da0a8b7bd08cdf3da95c852373638e06b",
      "parents": [
        "f7e839dd36fd940b0202cfb7d39b2a1b2dc59b1b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:21 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:28 2009 -0700"
      },
      "message": "readahead: apply max_sane_readahead() limit in ondemand_readahead()\n\nJust in case someone aggressively sets a huge readahead size.\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f7e839dd36fd940b0202cfb7d39b2a1b2dc59b1b",
      "tree": "5c99332a62aa8135bd58485e7f3c22634ecdc90c",
      "parents": [
        "1ebf26a9b338534def47f307c6c8694b6dfc0a79"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:31:20 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:28 2009 -0700"
      },
      "message": "readahead: move max_sane_readahead() calls into force_page_cache_readahead()\n\nImpact: code simplification.\n\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "266cf658efcf6ac33541a46740f74f50c79d2b6b",
      "tree": "5c83b0879892d509e598dfd54be3ba3679ecd348",
      "parents": [
        "03fb3d2af96c2783c3a5bc03f3d984cf422f0e69"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:36 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:36 2009 +0100"
      },
      "message": "FS-Cache: Recruit a page flags for cache management\n\nRecruit a page flag to aid in cache management.  The following extra flag is\ndefined:\n\n (1) PG_fscache (PG_private_2)\n\n     The marked page is backed by a local cache and is pinning resources in the\n     cache driver.\n\nIf PG_fscache is set, then things that checked for PG_private will now also\ncheck for that.  This includes things like truncation and page invalidation.\nThe function page_has_private() had been added to make the checks for both\nPG_private and PG_private_2 at the same time.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "03fb3d2af96c2783c3a5bc03f3d984cf422f0e69",
      "tree": "6618f82f8be26ba2c7ac38d6e6e16befc8e1140f",
      "parents": [
        "8f0aa2f25b31ba27db84259141e52ee6ec0d2820"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Apr 03 16:42:35 2009 +0100"
      },
      "message": "FS-Cache: Release page-\u003eprivate after failed readahead\n\nThe attached patch causes read_cache_pages() to release page-private data on a\npage for which add_to_page_cache() fails.  If the filler function fails, then\nthe problematic page is left attached to the pagecache (with appropriate flags\nset, one presumes) and the remaining to-be-attached pages are invalidated and\ndiscarded.  This permits pages with caching references associated with them to\nbe cleaned up.\n\nThe invalidatepage() address space op is called (indirectly) to do the honours.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Steve Dickson \u003csteved@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nTested-by: Daire Byrne \u003cDaire.Byrne@framestore.com\u003e\n"
    },
    {
      "commit": "26160158d3d3df548f4ee046cc6147fe048cfa9c",
      "tree": "19affc0b08f00ac22e8881d6ec73061a8764cc5d",
      "parents": [
        "07e86f405addc6436eb969b8279bb14a6dcacce4"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Mar 17 09:35:06 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Mar 26 11:01:33 2009 +0100"
      },
      "message": "Move the default_backing_dev_info out of readahead.c and into backing-dev.c\n\nIt really makes no sense to have it in readahead.c, so move it where\nit belongs.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "4f98a2fee8acdb4ac84545df98cccecfd130f8db",
      "tree": "035a2937f4c3e2f7b4269412041c073ac646937c",
      "parents": [
        "b2e185384f534781fd22f5ce170b2ad26f97df70"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Sat Oct 18 20:26:32 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:50:25 2008 -0700"
      },
      "message": "vmscan: split LRU lists into anon \u0026 file sets\n\nSplit the LRU lists in two, one set for pages that are backed by real file\nsystems (\"file\") and one for pages that are backed by memory and swap\n(\"anon\").  The latter includes tmpfs.\n\nThe advantage of doing this is that the VM will not have to scan over lots\nof anonymous pages (which we generally do not want to swap out), just to\nfind the page cache pages that it should evict.\n\nThis patch has the infrastructure and a basic policy to balance how much\nwe scan the anon lists and how much we scan the file lists.  The big\npolicy changes are in separate patches.\n\n[lee.schermerhorn@hp.com: collect lru meminfo statistics from correct offset]\n[kosaki.motohiro@jp.fujitsu.com: prevent incorrect oom under split_lru]\n[kosaki.motohiro@jp.fujitsu.com: fix pagevec_move_tail() doesn\u0027t treat unevictable page]\n[hugh@veritas.com: memcg swapbacked pages active]\n[hugh@veritas.com: splitlru: BDI_CAP_SWAP_BACKED]\n[akpm@linux-foundation.org: fix /proc/vmstat units]\n[nishimura@mxp.nes.nec.co.jp: memcg: fix handling of shmem migration]\n[kosaki.motohiro@jp.fujitsu.com: adjust Quicklists field of /proc/meminfo]\n[kosaki.motohiro@jp.fujitsu.com: fix style issue of get_scan_ratio()]\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e1f8e87449147ffe5ea3de64a46af7de450ce279",
      "tree": "304e90a6747f5a7586a67305b7225ed4b4dbb53a",
      "parents": [
        "8033fe65a6d6c0e47ba9e3cb2e4e6902f9dfb8dd"
      ],
      "author": {
        "name": "Francois Cami",
        "email": "francois.cami@free.fr",
        "time": "Wed Oct 15 22:01:59 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:21:32 2008 -0700"
      },
      "message": "Remove Andrew Morton\u0027s old email accounts\n\nPeople can use the real name an an index into MAINTAINERS to find the\ncurrent email address.\n\nSigned-off-by: Francois Cami \u003cfrancois.cami@free.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "30002ed2e41830ec03ec3e577ad83ac6b188f96e",
      "tree": "13896f3038e391eb41246455239d7678cf51b011",
      "parents": [
        "652ea695364142b2464744746beac206d050ef19"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Fri Jul 25 19:45:28 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jul 26 12:00:06 2008 -0700"
      },
      "message": "mm: readahead scan lockless\n\nradix_tree_next_hole() is implemented as a series of radix_tree_lookup()s.\nSo it can be called locklessly, under rcu_read_lock().\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@us.ibm.com\u003e\nReviewed-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": "cf0ca9fe5dd9e3693d935757a7b2fc50fc576554",
      "tree": "c795c5271eda9fc67579fa3176c646b892dfdb41",
      "parents": [
        "caafa4324335aeb11bc233d5f87aca8cce30beba"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Apr 30 00:54:32 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:49 2008 -0700"
      },
      "message": "mm: bdi: export BDI attributes in sysfs\n\nProvide a place in sysfs (/sys/class/bdi) for the backing_dev_info object.\nThis allows us to see and set the various BDI specific variables.\n\nIn particular this properly exposes the read-ahead window for all relevant\nusers and /sys/block/\u003cblock\u003e/queue/read_ahead_kb should be deprecated.\n\nWith patient help from Kay Sievers and Greg KH\n\n[mszeredi@suse.cz]\n\n - split off NFS and FUSE changes into separate patches\n - document new sysfs attributes under Documentation/ABI\n - do bdi_class_init as a core_initcall, otherwise the \"default\" BDI\n   won\u0027t be initialized\n - remove bdi_init_fmt macro, it\u0027s not used very much\n\n[akpm@linux-foundation.org: fix ia64 warning]\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nAcked-by: Greg KH \u003cgreg@kroah.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f7850d932fc69cb4bad83117f0bef1a658cce350",
      "tree": "2c7d96fd628472dbecd4f8cddbdabaec2809b92f",
      "parents": [
        "08ca0db8aa2db4ddcf487d46d85dc8ffb22162cc"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Wed Mar 19 17:01:02 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 19 18:53:37 2008 -0700"
      },
      "message": "mm/readahead: fix kernel-doc notation\n\nFix kernel-doc notation in mm/readahead.c.\n\nChange \":\" to \";\" so that it doesn\u0027t get treated as a doc section heading.\nMove the comment block ending \"*/\" to a line by itself so that the text on\nthat last line is not lost (dropped).\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": "e0bf68ddec4f4f90e5871404be4f1854c17f3120",
      "tree": "36203a3558cbe26d698bed18be69b3822fb5eef2",
      "parents": [
        "dc62a30e274d003a4d08fb888f1520add4b21373"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Oct 16 23:25:46 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:42:45 2007 -0700"
      },
      "message": "mm: bdi init hooks\n\nprovide BDI constructor/destructor hooks\n\n[akpm@linux-foundation.org: compile fix]\nSigned-off-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": "eb2be189317d031895b5ca534fbf735eb546158b",
      "tree": "8f1eda7af3be7285244a6f1ad77682e90d403c7b",
      "parents": [
        "64649a58919e66ec21792dbb6c48cb3da22cbd7f"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Oct 16 01:24:57 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:54 2007 -0700"
      },
      "message": "mm: buffered write cleanup\n\nQuite a bit of code is used in maintaining these \"cached pages\" that are\nprobably pretty unlikely to get used. It would require a narrow race where\nthe page is inserted concurrently while this process is allocating a page\nin order to create the spare page. Then a multi-page write into an uncached\npart of the file, to make use of it.\n\nNext, the buffered write path (and others) uses its own LRU pagevec when it\nshould be just using the per-CPU LRU pagevec (which will cut down on both data\nand code size cacheline footprint). Also, these private LRU pagevecs are\nemptied after just a very short time, in contrast with the per-CPU pagevecs\nthat are persistent. Net result: 7.3 times fewer lru_lock acquisitions required\nto add the pages to pagecache for a bulk write (in 4K chunks).\n\n[this gets rid of some cond_resched() calls in readahead.c and mpage.c due\n to clashes in -mm. What put them there, and why? ]\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": "001281881067a5998384c6669bc8dbbbab8456c4",
      "tree": "6229d16c737782a36795354b218c74d4d2749752",
      "parents": [
        "557ed1fa2620dc119adb86b34c614e152a629a80"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Oct 16 01:24:40 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:53 2007 -0700"
      },
      "message": "mm: use lockless radix-tree probe\n\nProbing pages and radix_tree_tagged are lockless operations with the lockless\nradix-tree.  Convert these users to RCU locking rather than using tree_lock.\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": "535443f51543df61111bbd234300ae549d220448",
      "tree": "e9b022969776132b9fd3bde351673edc006a1bac",
      "parents": [
        "7ff81078d8b9f3d05a27b7bd3786ffb1ef1b0d1f"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Tue Oct 16 01:24:36 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:52 2007 -0700"
      },
      "message": "readahead: remove several readahead macros\n\nRemove VM_MAX_CACHE_HIT, MAX_RA_PAGES and MIN_RA_PAGES.\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": "6b10c6c9fbfe754e8482efb8c8b84f8e40c0f2eb",
      "tree": "08f275b1e8d2e9c93bb46367611c43ab88f8f8dc",
      "parents": [
        "6df8ba4f8a4c4abca9ccad10441d0dddbdff301c"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Tue Oct 16 01:24:34 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:52 2007 -0700"
      },
      "message": "readahead: basic support of interleaved reads\n\nThis is a simplified version of the pagecache context based readahead.  It\nhandles the case of multiple threads reading on the same fd and invalidating\neach others\u0027 readahead state.  It does the trick by scanning the pagecache and\nrecovering the current read stream\u0027s readahead status.\n\nThe algorithm works in a opportunistic way, in that it does not try to detect\ninterleaved reads _actively_, which requires a probe into the page cache\n(which means a little more overhead for random reads).  It only tries to\nhandle a previously started sequential readahead whose state was overwritten\nby another concurrent stream, and it can do this job pretty well.\n\nNegative and positive examples(or what you can expect from it):\n\n1) it cannot detect and serve perfect request-by-request interleaved reads\n   right:\n\ttime\tstream 1  stream 2\n\t0 \t1\n\t1 \t          1001\n\t2 \t2\n\t3 \t          1002\n\t4 \t3\n\t5 \t          1003\n\t6 \t4\n\t7 \t          1004\n\t8 \t5\n\t9\t          1005\n\nHere no single readahead will be carried out.\n\n2) However, if it\u0027s two concurrent reads by two threads, the chance of the\n   initial sequential readahead be started is huge. Once the first sequential\n   readahead is started for a stream, this patch will ensure that the readahead\n   window continues to rampup and won\u0027t be disturbed by other streams.\n\n\ttime\tstream 1  stream 2\n\t0 \t1\n\t1 \t2\n\t2 \t          1001\n\t3 \t3\n\t4 \t          1002\n\t5 \t          1003\n\t6 \t4\n\t7 \t5\n\t8 \t          1004\n\t9 \t6\n\t10\t          1005\n\t11\t7\n\t12\t          1006\n\t13\t          1007\n\nHere stream 1 will start a readahead at page 2, and stream 2 will start its\nfirst readahead at page 1003.  From then on the two streams will be served\nright.\n\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\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": "f4e6b498d6e06742d72706ef50593a9c4dd72214",
      "tree": "74a573302b2ea086c0d21907175be604f110f5b1",
      "parents": [
        "0bb7ba6b9c358c12084a3cbc6ac08c8d1e973937"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Tue Oct 16 01:24:33 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:52 2007 -0700"
      },
      "message": "readahead: combine file_ra_state.prev_index/prev_offset into prev_pos\n\nCombine the file_ra_state members\n\t\t\t\tunsigned long prev_index\n\t\t\t\tunsigned int prev_offset\ninto\n\t\t\t\tloff_t prev_pos\n\nIt is more consistent and better supports huge files.\n\nThanks to Peter for the nice proposal!\n\n[akpm@linux-foundation.org: fix shift overflow]\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\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": "937085aa35cc873d427d250a1e304d641af24628",
      "tree": "99b0d2d9e6721a72e65b4cb5ad0fc30ec04f4aa2",
      "parents": [
        "43fac94dd62667c83dd2daa5b7ac548512af780a"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Tue Oct 16 01:24:31 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:52 2007 -0700"
      },
      "message": "readahead: compacting file_ra_state\n\nUse \u0027unsigned int\u0027 instead of \u0027unsigned long\u0027 for readahead sizes.\n\nThis helps reduce memory consumption on 64bit CPU when a lot of files are\nopened.\n\nCC: Andi Kleen \u003candi@firstfloor.org\u003e\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": "f5ff8422bbdd59f8c1f699df248e1b7a11073027",
      "tree": "cdd0777acc58c0badd2d0ae66f3efc2f7318e776",
      "parents": [
        "3317fedba9446465082bcc6ce1232451ad1d51ce"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 21 09:19:54 2007 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.home.kernel.dk",
        "time": "Wed Oct 10 09:25:57 2007 +0200"
      },
      "message": "Fix warnings with !CONFIG_BLOCK\n\nHide everything in blkdev.h with CONFIG_BLOCK isn\u0027t set, and fixup\nthe (few) files that fail to build because they were relying on blkdev.h\npulling in extra includes for them.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\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": "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": "6ce745ed39d35f9d547d00d406db2be7c6c175b3",
      "tree": "16f471389c9f619c37891fdb6e1843e1f2721c78",
      "parents": [
        "ec0f16372277052a29a6c17527c6cae5e898b3fd"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Sun May 06 14:49:26 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon May 07 12:12:52 2007 -0700"
      },
      "message": "readahead: code cleanup\n\nRename file_ra_state.prev_page to prev_index and file_ra_state.offset to\nprev_offset.  Also update of prev_index in do_generic_mapping_read() is now\nmoved close to the update of prev_offset.\n\n[wfg@mail.ustc.edu.cn: fix it]\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: WU Fengguang \u003cwfg@mail.ustc.edu.cn\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": "ec0f16372277052a29a6c17527c6cae5e898b3fd",
      "tree": "35636edac6ed01baf301f3aca96f090caae82c9d",
      "parents": [
        "b813e931b4c8235bb42e301096ea97dbdee3e8fe"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Sun May 06 14:49:25 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon May 07 12:12:52 2007 -0700"
      },
      "message": "readahead: improve heuristic detecting sequential reads\n\nIntroduce ra.offset and store in it an offset where the previous read\nended.  This way we can detect whether reads are really sequential (and\nthus we should not mark the page as accessed repeatedly) or whether they\nare random and just happen to be in the same page (and the page should\nreally be marked accessed again).\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nAcked-by: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: WU Fengguang \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": "05a0416be2b88d859efcbc4a4290555a04d169a1",
      "tree": "da7216a3a04625a45b952ea21f817d5cdb199530",
      "parents": [
        "9195481d2f869a2707a272057f3f8664fd277534"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Sat Feb 10 01:43:05 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Feb 11 10:51:18 2007 -0800"
      },
      "message": "[PATCH] Drop __get_zone_counts()\n\nValues are readily available via ZVC per node and global sums.\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": "8bde37f08fe3340435f4320b5a092eeb55acebfd",
      "tree": "8afd0179f4fe46d806cb40cfadb1843a480c154d",
      "parents": [
        "faccbd4b26df7bd977cee33d4145155d0ef95c87"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Sun Dec 10 02:19:40 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:55:41 2006 -0800"
      },
      "message": "[PATCH] io-accounting-read-accounting nfs fix\n\nnfs\u0027s -\u003ereadpages uses read_cache_pages().  Wire it up there.\n\n[wfg@mail.ustc.edu.cn: account only successful nfs/fuse reads]\nCc: Jay Lan \u003cjlan@sgi.com\u003e\nCc: Shailabh Nagar \u003cnagar@watson.ibm.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Chris Sturtivant \u003ccsturtiv@sgi.com\u003e\nCc: Tony Ernst \u003ctee@sgi.com\u003e\nCc: Guillaume Thouvenin \u003cguillaume.thouvenin@bull.net\u003e\nCc: David Wright \u003cdaw@sgi.com\u003e\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e9536ae7205d255bc94616b72910fc6e16c861fe",
      "tree": "4c91e2fbe096958ab8f7476306c4a61c30cbe502",
      "parents": [
        "1b04fe9a8ef10774174897b15d753b9de85fe9e9"
      ],
      "author": {
        "name": "Josef Sipek",
        "email": "jsipek@fsl.cs.sunysb.edu",
        "time": "Fri Dec 08 02:37:21 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:28:47 2006 -0800"
      },
      "message": "[PATCH] struct path: convert mm\n\nSigned-off-by: Josef Sipek \u003cjsipek@fsl.cs.sunysb.edu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "38da288b8ba2b07b4e07165027e650b61d7c8ffc",
      "tree": "71382f10406db9598cef7df3842e428c77cae728",
      "parents": [
        "8bca98cabf6db738b06d6f3b6d4b6c5f2a5cb7b6"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Wed Dec 06 20:36:46 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:34 2006 -0800"
      },
      "message": "[PATCH] read_cache_pages() cleanup\n\nUse put_pages_list() instead of opencoding it.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "029e332ea717810172e965ec50f942755ad0c58a",
      "tree": "dcffd8c8ad3229a3af603a4e59e43c05793c1617",
      "parents": [
        "5d861d920a86523bbeb56c19b9906c3fb1b58048"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Nov 02 22:07:06 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Nov 03 12:27:56 2006 -0800"
      },
      "message": "[PATCH] Cleanup read_pages()\n\nCurrent read_pages() assume -\u003ereadpages() frees the passed pages.\n\nThis patch free the pages in -\u003eread_pages(), if those were remaining in the\npages_list.  So, readpages() just can ignore the remaining pages in\npages_list.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nCc: Steven French \u003csfrench@us.ibm.com\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0a1340c185734a57fbf4775927966ad4a1347b02",
      "tree": "d9ed8f0dd809a7c542a3356601125ea5b5aaa804",
      "parents": [
        "af18ddb8864b096e3ed4732e2d4b21c956dcfe3a",
        "29454dde27d8e340bb1987bad9aa504af7081eba"
      ],
      "author": {
        "name": "Steven Whitehouse",
        "email": "swhiteho@redhat.com",
        "time": "Mon Jul 03 10:25:08 2006 -0400"
      },
      "committer": {
        "name": "Steven Whitehouse",
        "email": "swhiteho@redhat.com",
        "time": "Mon Jul 03 10:25:08 2006 -0400"
      },
      "message": "Merge rsync://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6\n\nConflicts:\n\n\tinclude/linux/kernel.h\n"
    },
    {
      "commit": "d6e05edc59ecd79e8badf440c0d295a979bdfa3e",
      "tree": "50362161f69317242ab603c51a18a818a4c93285",
      "parents": [
        "f18190bd3407554ba6df30a1927e07e6cba93e56"
      ],
      "author": {
        "name": "Andreas Mohr",
        "email": "andi@lisas.de",
        "time": "Mon Jun 26 18:35:02 2006 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Mon Jun 26 18:35:02 2006 +0200"
      },
      "message": "spelling fixes\n\nacquired (aquired)\ncontiguous (contigious)\nsuccessful (succesful, succesfull)\nsurprise (suprise)\nwhether (weather)\nsome other misspellings\n\nSigned-off-by: Andreas Mohr \u003candi@lisas.de\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "bd40cddae2211950c81c41f25a818189f80fd0b5",
      "tree": "7568908eb5a049308aa0ad42ef31f080add0ef21",
      "parents": [
        "43d23f9039fc810ecd621f1e4f9d578eadce058a"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "rdunlap@xenotime.net",
        "time": "Sun Jun 25 05:48:08 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jun 25 10:01:10 2006 -0700"
      },
      "message": "[PATCH] kernel-doc: mm/readhead fixup\n\nPut short function description for read_cache_pages() on one line as needed\nby kernel-doc.\n\nSigned-off-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9f1a3cfcffaed2fbb3206179295c79ca8289f5c3",
      "tree": "d7adeab100ff8e2fe0b64fa5b2c9ef09ec60c842",
      "parents": [
        "09a9a45dc62fef5f46a0dc98a3cefdb464cc4aaa"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Sun Jun 25 05:46:46 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jun 25 10:00:54 2006 -0700"
      },
      "message": "[PATCH] AOP_TRUNCATED_PAGE victims in read_pages() belong in the LRU\n\nAOP_TRUNCATED_PAGE victims in read_pages() belong in the LRU\n\nNick Piggin rightly pointed out that the introduction of AOP_TRUNCATED_PAGE\nto read_pages() was wrong to leave A_T_P victim pages in the page cache but\nnot put them in the LRU.  Failing to do so hid them from the VM.\n\nA_T_P just means that the aop method unlocked the page rather than\nperforming IO.  It would be very rare that the page was truncated between\nthe unlock and testing A_T_P.  So we leave the pages in the LRU for likely\nreuse soon rather than backing them back out of the page cache.  We do this\nby matching the behaviour before the A_T_P introduction which added pages\nto the LRU regardless of what -\u003ereadpage() did.\n\nThis doesn\u0027t include the unrelated cleanup in Nick\u0027s initial fix which\nchanged read_pages() to return void to match its only caller\u0027s behaviour of\nignoring errors.\n\nSigned-off-by: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "86579dd06deecfa6ac88d5e84e4d63c397cd6f6d",
      "tree": "b4475d3ccde53015ad84a06e4e55e64591171b75",
      "parents": [
        "7ea9ea832212c4a755650f7c7cc1ff0b63292a41",
        "a0f067802576d4eb4c65d40b8ee7d6ea3c81dd61"
      ],
      "author": {
        "name": "Steven Whitehouse",
        "email": "swhiteho@redhat.com",
        "time": "Fri Mar 31 15:34:58 2006 -0500"
      },
      "committer": {
        "name": "Steven Whitehouse",
        "email": "swhiteho@redhat.com",
        "time": "Fri Mar 31 15:34:58 2006 -0500"
      },
      "message": "Merge branch \u0027master\u0027\n"
    },
    {
      "commit": "d8733c2956968a01394a4d2a9e97a8b431a78776",
      "tree": "9743c9020eb5193efa4a0f102b3a7eb1d999c4fd",
      "parents": [
        "b8e31edc10d160a8bf2159541d9d12f2079a0887"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Thu Mar 23 03:00:11 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Mar 23 07:38:09 2006 -0800"
      },
      "message": "[PATCH] ext3_readdir: use generic readahead\n\nLinus points out that ext3_readdir\u0027s readahead only cuts in when\next3_readdir() is operating at the very start of the directory.  So for large\ndirectories we end up performing no readahead at all and we suck.\n\nSo take it all out and use the core VM\u0027s page_cache_readahead().  This means\nthat ext3 directory reads will use all of readahead\u0027s dynamic sizing goop.\n\nNote that we\u0027re using the directory\u0027s filp-\u003ef_ra to hold the readahead state,\nbut readahead is actually being performed against the underlying blockdev\u0027s\naddress_space.  Fortunately the readahead code is all set up to handle this.\n\nTested with printk.  It works.  I was struggling to find a real workload which\nactually cared.\n\n(The patch also exports page_cache_readahead() to GPL modules)\n\nCc: \"Stephen C. Tweedie\" \u003csct@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "aed75ff3caafce404d9be7f0c088716375be5279",
      "tree": "15e7165969ff533b73e29a4ee0d4b7c889ef1d29",
      "parents": [
        "a564da3964db3256069190c2ae95069143ac37fb"
      ],
      "author": {
        "name": "Steven Pratt",
        "email": "slpratt@austin.ibm.com",
        "time": "Wed Mar 22 00:08:48 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Mar 22 07:54:03 2006 -0800"
      },
      "message": "[PATCH] readahead: fix initial window size calculation\n\nThe current current get_init_ra_size is not optimal across different IO\nsizes and max_readahead values.  Here is a quick summary of sizes computed\nunder current design and under the attached patch.  All of these assume 1st\nIO at offset 0, or 1st detected sequential IO.\n\n\t32k max, 4k request\n\n\told         new\n\t-----------------\n\t 8k        8k\n\t16k       16k\n\t32k       32k\n\n\t128k max, 4k request\n\told         new\n\t-----------------\n\t32k         16k\n\t64k         32k\n\t128k        64k\n\t128k       128k\n\n\t128k max, 32k request\n\told         new\n\t-----------------\n\t32k         64k    \u003c-----\n\t64k        128k\n\t128k       128k\n\n\t512k max, 4k request\n\told         new\n\t-----------------\n\t4k         32k     \u003c----\n\t16k        64k\n\t64k       128k\n\t128k      256k\n\t512k      512k\n\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Steven Pratt \u003cslpratt@austin.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a564da3964db3256069190c2ae95069143ac37fb",
      "tree": "b7b9d66c1d6dde82db23222b16b0296013b1c3db",
      "parents": [
        "d15c023b44e5d323f1f4130b85d29f08e43433b1"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed Mar 22 00:08:47 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Mar 22 07:54:03 2006 -0800"
      },
      "message": "[PATCH] readahead: -\u003eprev_page can overrun the ahead window\n\nIf get_next_ra_size() does not grow fast enough, -\u003eprev_page can overrun\nthe ahead window.  This means the caller will read the pages from\n-\u003eahead_start + -\u003eahead_size to -\u003eprev_page synchronously.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Steven Pratt \u003cslpratt@austin.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d41cc702cc4ba3782ebe3b2e189633607d5ccd6a",
      "tree": "d893f6f84df3da9ed3adfbe571902e1187e2030d",
      "parents": [
        "b381beadee8a3d6e690d30bdccddd08ab024945e"
      ],
      "author": {
        "name": "Steven Whitehouse",
        "email": "swhiteho@redhat.com",
        "time": "Mon Jan 30 08:53:33 2006 +0000"
      },
      "committer": {
        "name": "Steven Whitehouse",
        "email": "swhiteho@redhat.com",
        "time": "Mon Jan 30 08:53:33 2006 +0000"
      },
      "message": "[GFS2] Export file_ra_state_init\n\nExport file_ra_state_init so that its possible to use the already\nexported functions which require a struct ra_state as an argument\nfrom a module.\n\nSigned-off-by: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\n"
    },
    {
      "commit": "994fc28c7b1e697ac56befe4aecabf23f0689f46",
      "tree": "da36d162e9bd077e9b5be385b28e2db90475c263",
      "parents": [
        "7063fbf2261194f72ee75afca67b3b38b554b5fa"
      ],
      "author": {
        "name": "Zach Brown",
        "email": "zach.brown@oracle.com",
        "time": "Thu Dec 15 14:28:17 2005 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Jan 03 11:45:42 2006 -0800"
      },
      "message": "[PATCH] add AOP_TRUNCATED_PAGE, prepend AOP_ to WRITEPAGE_ACTIVATE\n\nreadpage(), prepare_write(), and commit_write() callers are updated to\nunderstand the special return code AOP_TRUNCATED_PAGE in the style of\nwritepage() and WRITEPAGE_ACTIVATE.  AOP_TRUNCATED_PAGE tells the caller that\nthe callee has unlocked the page and that the operation should be tried again\nwith a new page.  OCFS2 uses this to detect and work around a lock inversion in\nits aop methods.  There should be no change in behaviour for methods that don\u0027t\nreturn AOP_TRUNCATED_PAGE.\n\nWRITEPAGE_ACTIVATE is also prepended with AOP_ for consistency and they are\nmade enums so that kerneldoc can be used to document their semantics.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n"
    },
    {
      "commit": "7361f4d8ca65d23a18ba009b4484612183332c2f",
      "tree": "7e3dcf22f7d191bcbeb78eb633ae067a76163124",
      "parents": [
        "bf8f972d3a1daf969cf44f64cc36d53bfd76441f"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Mon Nov 07 00:59:28 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 07 07:53:37 2005 -0800"
      },
      "message": "[PATCH] readahead commentary\n\nAdd a few comments surrounding the generic readahead API.\n\nAlso convert some ulongs into pgoff_t: the identifier for PAGE_CACHE_SIZE\noffsets into pagecache.\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3b30bbd963ac2606b0377b39c9d148d6eeef7dce",
      "tree": "40365e8055cf698f39c2e5891fbca375dea7ce76",
      "parents": [
        "e139aa595c5d3bd01699530cbe017dec75fdb07f"
      ],
      "author": {
        "name": "Steven Pratt",
        "email": "slpratt@austin.ibm.com",
        "time": "Tue Sep 06 15:17:06 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:25 2005 -0700"
      },
      "message": "[PATCH] readahead: reset cache_hit earlier\n\nWe don\u0027t reset the cache hit count until after readahead does a successful\nreadahead.  This seems to leave a corner case open where we miss in cache,\nbut don\u0027t restart the readhead right away.\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
