)]}'
{
  "log": [
    {
      "commit": "001a541ea9163ace5e8243ee0e907ad80a4c0ec2",
      "tree": "a76225046369c440de93739add9823f5ea060245",
      "parents": [
        "40ba587923ae67090d9f141c1d3c951be5c1420e",
        "bc31b86a5923fad5f3fbb6192f767f410241ba27"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:59:59 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:59:59 2012 -0800"
      },
      "message": "Merge branch \u0027writeback-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux\n\n* \u0027writeback-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux:\n  writeback: move MIN_WRITEBACK_PAGES to fs-writeback.c\n  writeback: balanced_rate cannot exceed write bandwidth\n  writeback: do strict bdi dirty_exceeded\n  writeback: avoid tiny dirty poll intervals\n  writeback: max, min and target dirty pause time\n  writeback: dirty ratelimit - think time compensation\n  btrfs: fix dirtied pages accounting on sub-page writes\n  writeback: fix dirtied pages accounting on redirty\n  writeback: fix dirtied pages accounting on sub-page writes\n  writeback: charge leaked page dirties to active tasks\n  writeback: Include all dirty inodes in background writeback\n"
    },
    {
      "commit": "a756cf5908530e8b40bdf569eb48b40139e8d7fd",
      "tree": "ba9df151d5468098c7eae563ce09faea6a539fc0",
      "parents": [
        "ccafa2879fb8d13b8031337a8743eac4189e5d6e"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "jweiner@redhat.com",
        "time": "Tue Jan 10 15:07:49 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:43 2012 -0800"
      },
      "message": "mm: try to distribute dirty pages fairly across zones\n\nThe maximum number of dirty pages that exist in the system at any time is\ndetermined by a number of pages considered dirtyable and a user-configured\npercentage of those, or an absolute number in bytes.\n\nThis number of dirtyable pages is the sum of memory provided by all the\nzones in the system minus their lowmem reserves and high watermarks, so\nthat the system can retain a healthy number of free pages without having\nto reclaim dirty pages.\n\nBut there is a flaw in that we have a zoned page allocator which does not\ncare about the global state but rather the state of individual memory\nzones.  And right now there is nothing that prevents one zone from filling\nup with dirty pages while other zones are spared, which frequently leads\nto situations where kswapd, in order to restore the watermark of free\npages, does indeed have to write pages from that zone\u0027s LRU list.  This\ncan interfere so badly with IO from the flusher threads that major\nfilesystems (btrfs, xfs, ext4) mostly ignore write requests from reclaim\nalready, taking away the VM\u0027s only possibility to keep such a zone\nbalanced, aside from hoping the flushers will soon clean pages from that\nzone.\n\nEnter per-zone dirty limits.  They are to a zone\u0027s dirtyable memory what\nthe global limit is to the global amount of dirtyable memory, and try to\nmake sure that no single zone receives more than its fair share of the\nglobally allowed dirty pages in the first place.  As the number of pages\nconsidered dirtyable excludes the zones\u0027 lowmem reserves and high\nwatermarks, the maximum number of dirty pages in a zone is such that the\nzone can always be balanced without requiring page cleaning.\n\nAs this is a placement decision in the page allocator and pages are\ndirtied only after the allocation, this patch allows allocators to pass\n__GFP_WRITE when they know in advance that the page will be written to and\nbecome dirty soon.  The page allocator will then attempt to allocate from\nthe first zone of the zonelist - which on NUMA is determined by the task\u0027s\nNUMA memory policy - that has not exceeded its dirty limit.\n\nAt first glance, it would appear that the diversion to lower zones can\nincrease pressure on them, but this is not the case.  With a full high\nzone, allocations will be diverted to lower zones eventually, so it is\nmore of a shift in timing of the lower zone allocations.  Workloads that\npreviously could fit their dirty pages completely in the higher zone may\nbe forced to allocate from lower zones, but the amount of pages that\n\"spill over\" are limited themselves by the lower zones\u0027 dirty constraints,\nand thus unlikely to become a problem.\n\nFor now, the problem of unfair dirty page distribution remains for NUMA\nconfigurations where the zones allowed for allocation are in sum not big\nenough to trigger the global dirty limits, wake up the flusher threads and\nremedy the situation.  Because of this, an allocation that could not\nsucceed on any of the considered zones is allowed to ignore the dirty\nlimits before going into direct reclaim or even failing the allocation,\nuntil a future patch changes the global dirty throttling and flusher\nthread activation so that they take individual zone states into account.\n\n\t\t\tTest results\n\n15M DMA + 3246M DMA32 + 504 Normal \u003d 3765M memory\n40% dirty ratio\n16G USB thumb drive\n10 runs of dd if\u003d/dev/zero of\u003ddisk/zeroes bs\u003d32k count\u003d$((10 \u003c\u003c 15))\n\n\t\tseconds\t\t\tnr_vmscan_write\n\t\t        (stddev)\t       min|     median|        max\nxfs\nvanilla:\t 549.747( 3.492)\t     0.000|      0.000|      0.000\npatched:\t 550.996( 3.802)\t     0.000|      0.000|      0.000\n\nfuse-ntfs\nvanilla:\t1183.094(53.178)\t 54349.000|  59341.000|  65163.000\npatched:\t 558.049(17.914)\t     0.000|      0.000|     43.000\n\nbtrfs\nvanilla:\t 573.679(14.015)\t156657.000| 460178.000| 606926.000\npatched:\t 563.365(11.368)\t     0.000|      0.000|   1362.000\n\next4\nvanilla:\t 561.197(15.782)\t     0.000|2725438.000|4143837.000\npatched:\t 568.806(17.496)\t     0.000|      0.000|      0.000\n\nSigned-off-by: Johannes Weiner \u003cjweiner@redhat.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nTested-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Chris Mason \u003cchris.mason@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": "1edf223485c42c99655dcd001db1e46ad5e5d2d7",
      "tree": "33b93dc8f2a249806150b5792ac1787688bf6b74",
      "parents": [
        "e4e11180dfa545233e5145919b75b7fac88638df"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Tue Jan 10 15:06:57 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:41 2012 -0800"
      },
      "message": "mm/page-writeback.c: make determine_dirtyable_memory static again\n\nThe tracing ring-buffer used this function briefly, but not anymore.\nMake it local to the writeback code again.\n\nAlso, move the function so that no forward declaration needs to be\nreintroduced.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nAcked-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bc31b86a5923fad5f3fbb6192f767f410241ba27",
      "tree": "9c1c0a21b7324567088e37e3c30697f5ebd1c621",
      "parents": [
        "bdaac4902a8225bf247ecaeac46c4b2980cc70e5"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sat Jan 07 20:41:55 2012 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Jan 08 10:35:19 2012 +0800"
      },
      "message": "writeback: move MIN_WRITEBACK_PAGES to fs-writeback.c\n\nFix compile error\n\n fs/fs-writeback.c:515:33: error: ‘PAGE_CACHE_SHIFT’ undeclared (first use in this function)\n\nReported-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nAcked-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "2f800fbd777b792de54187088df19a7df0251254",
      "tree": "2dc813b41da42d647468dafcf49a0b9e673df8b5",
      "parents": [
        "d3bc1fef9389e409a772ea174a5e41a6f93d9b7b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Aug 08 15:22:00 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Dec 18 14:20:23 2011 +0800"
      },
      "message": "writeback: fix dirtied pages accounting on redirty\n\nDe-account the accumulative dirty counters on page redirty.\n\nPage redirties (very common in ext4) will introduce mismatch between\ncounters (a) and (b)\n\na) NR_DIRTIED, BDI_DIRTIED, tsk-\u003enr_dirtied\nb) NR_WRITTEN, BDI_WRITTEN\n\nThis will introduce systematic errors in balanced_rate and result in\ndirty page position errors (ie. the dirty pages are no longer balanced\naround the global/bdi setpoints).\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "54848d73f9f254631303d6eab9b976855988b266",
      "tree": "9fb4b7e564f2c0df88d0bde2f482b9b7efc847fa",
      "parents": [
        "1bc36b6426ae49139e9f56491db76b95921454d7"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Apr 05 13:21:19 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Dec 18 14:20:20 2011 +0800"
      },
      "message": "writeback: charge leaked page dirties to active tasks\n\nIt\u0027s a years long problem that a large number of short-lived dirtiers\n(eg. gcc instances in a fast kernel build) may starve long-run dirtiers\n(eg. dd) as well as pushing the dirty pages to the global hard limit.\n\nThe solution is to charge the pages dirtied by the exited gcc to the\nother random dirtying tasks. It sounds not perfect, however should\nbehave good enough in practice, seeing as that throttled tasks aren\u0027t\nactually running so those that are running are more likely to pick it up\nand get throttled, therefore promoting an equal spread.\n\nRandy: fix compile error: \u0027dirty_throttle_leaks\u0027 undeclared in exit.c\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "0e175a1835ffc979e55787774e58ec79e41957d7",
      "tree": "6ec4b65a8de4e9d1c12d26a1079079ed81d79450",
      "parents": [
        "ad4e38dd6a33bb3a4882c487d7abe621e583b982"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Fri Oct 07 21:54:10 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Oct 31 00:33:36 2011 +0800"
      },
      "message": "writeback: Add a \u0027reason\u0027 to wb_writeback_work\n\nThis creates a new \u0027reason\u0027 field in a wb_writeback_work\nstructure, which unambiguously identifies who initiates\nwriteback activity.  A \u0027wb_reason\u0027 enumeration has been\nadded to writeback.h, to enumerate the possible reasons.\n\nThe \u0027writeback_work_class\u0027 and tracepoint event class and\n\u0027writeback_queue_io\u0027 tracepoints are updated to include the\nsymbolic \u0027reason\u0027 in all trace events.\n\nAnd the \u0027writeback_inodes_sbXXX\u0027 family of routines has had\na wb_stats parameter added to them, so callers can specify\nwhy writeback is being started.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "af6a311384bce6c88e15c80ab22ab051a918b4eb",
      "tree": "55ebac9ff575b3b6b4cfe46a38282c007c62d188",
      "parents": [
        "6c14ae1e92c77eabd3e7527cf2e7836cde8b8487"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Oct 03 20:46:17 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Oct 03 21:08:56 2011 +0800"
      },
      "message": "writeback: add bg_threshold parameter to __bdi_update_bandwidth()\n\nNo behavior change.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "bb0822954aab7d23a3f902c2a103ee0242f6046e",
      "tree": "3049962f0ecc05eea4b2b4ef5480b6708bc74ce7",
      "parents": [
        "93ee7a9340d64f20295aacc3fb6a22b759323280"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Aug 16 13:37:14 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Fri Aug 19 22:42:07 2011 +0800"
      },
      "message": "squeeze max-pause area and drop pass-good area\n\nRevert the pass-good area introduced in ffd1f609ab10 (\"writeback:\nintroduce max-pause and pass-good dirty limits\") and make the max-pause\narea smaller and safe.\n\nThis fixes ~30% performance regression in the ext3 data\u003dwriteback\nfio_mmap_randwrite_64k/fio_mmap_randrw_64k test cases, where there are\n12 JBOD disks, on each disk runs 8 concurrent tasks doing reads+writes.\n\nUsing deadline scheduler also has a regression, but not that big as CFQ,\nso this suggests we have some write starvation.\n\nThe test logs show that\n\n- the disks are sometimes under utilized\n\n- global dirty pages sometimes rush high to the pass-good area for\n  several hundred seconds, while in the mean time some bdi dirty pages\n  drop to very low value (bdi_dirty \u003c\u003c bdi_thresh).  Then suddenly the\n  global dirty pages dropped under global dirty threshold and bdi_dirty\n  rush very high (for example, 2 times higher than bdi_thresh). During\n  which time balance_dirty_pages() is not called at all.\n\nSo the problems are\n\n1) The random writes progress so slow that they break the assumption of\n   the max-pause logic that \"8 pages per 200ms is typically more than\n   enough to curb heavy dirtiers\".\n\n2) The max-pause logic ignored task_bdi_thresh and thus opens the possibility\n   for some bdi\u0027s to over dirty pages, leading to (bdi_dirty \u003e\u003e bdi_thresh)\n   and then (bdi_thresh \u003e\u003e bdi_dirty) for others.\n\n3) The higher max-pause/pass-good thresholds somehow leads to the bad\n   swing of dirty pages.\n\nThe fix is to allow the task to slightly dirty over task_bdi_thresh, but\nno way to exceed bdi_dirty and/or global dirty_thresh.\n\nTests show that it fixed the JBOD regression completely (both behavior\nand performance), while still being able to cut down large pause times\nin balance_dirty_pages() for single-disk cases.\n\nReported-by: Li Shaohua \u003cshaohua.li@intel.com\u003e\nTested-by: Li Shaohua \u003cshaohua.li@intel.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "1a12d8bd7b2998be01ee55edb64e7473728abb9c",
      "tree": "d3466ea7eaa308e3d40a43e372bd4baaf461d7bb",
      "parents": [
        "e1cbe236013c82bcf9a156e98d7b47efb89d2674"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Aug 29 13:28:09 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sat Jul 09 22:09:03 2011 -0700"
      },
      "message": "writeback: scale IO chunk size up to half device bandwidth\n\nOriginally, MAX_WRITEBACK_PAGES was hard-coded to 1024 because of a\nconcern of not holding I_SYNC for too long.  (At least, that was the\ncomment previously.)  This doesn\u0027t make sense now because the only\ntime we wait for I_SYNC is if we are calling sync or fsync, and in\nthat case we need to write out all of the data anyway.  Previously\nthere may have been other code paths that waited on I_SYNC, but not\nany more.\t\t\t\t\t    -- Theodore Ts\u0027o\n\nSo remove the MAX_WRITEBACK_PAGES constraint. The writeback pages\nwill adapt to as large as the storage device can write within 500ms.\n\nXFS is observed to do IO completions in a batch, and the batch size is\nequal to the write chunk size. To avoid dirty pages to suddenly drop\nout of balance_dirty_pages()\u0027s dirty control scope and create large\nfluctuations, the chunk size is also limited to half the control scope.\n\nThe balance_dirty_pages() control scrope is\n\n\t[(background_thresh + dirty_thresh) / 2, dirty_thresh]\n\nwhich is by default [15%, 20%] of global dirty pages, whose range size\nis dirty_thresh / DIRTY_FULL_SCOPE.\n\nThe adpative write chunk size will be rounded to the nearest 4MB\nboundary.\n\nhttp://bugzilla.kernel.org/show_bug.cgi?id\u003d13930\n\nCC: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nCC: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCC: Chris Mason \u003cchris.mason@oracle.com\u003e\nCC: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "ffd1f609ab10532e8137b4b981fdf903ef4d0b32",
      "tree": "b691e22952a8d12782cc73ec21e7aa450859cf4f",
      "parents": [
        "c42843f2f0bbc9d716a32caf667d18fc2bf3bc4c"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Jun 19 22:18:42 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sat Jul 09 22:09:02 2011 -0700"
      },
      "message": "writeback: introduce max-pause and pass-good dirty limits\n\nThe max-pause limit helps to keep the sleep time inside\nbalance_dirty_pages() within MAX_PAUSE\u003d200ms. The 200ms max sleep means\nper task rate limit of 8pages/200ms\u003d160KB/s when dirty exceeded, which\nnormally is enough to stop dirtiers from continue pushing the dirty\npages high, unless there are a sufficient large number of slow dirtiers\n(eg. 500 tasks doing 160KB/s will still sum up to 80MB/s, exceeding the\nwrite bandwidth of a slow disk and hence accumulating more and more dirty\npages).\n\nThe pass-good limit helps to let go of the good bdi\u0027s in the presence of\na blocked bdi (ie. NFS server not responding) or slow USB disk which for\nsome reason build up a large number of initial dirty pages that refuse\nto go away anytime soon.\n\nFor example, given two bdi\u0027s A and B and the initial state\n\n\tbdi_thresh_A \u003d dirty_thresh / 2\n\tbdi_thresh_B \u003d dirty_thresh / 2\n\tbdi_dirty_A  \u003d dirty_thresh / 2\n\tbdi_dirty_B  \u003d dirty_thresh / 2\n\nThen A get blocked, after a dozen seconds\n\n\tbdi_thresh_A \u003d 0\n\tbdi_thresh_B \u003d dirty_thresh\n\tbdi_dirty_A  \u003d dirty_thresh / 2\n\tbdi_dirty_B  \u003d dirty_thresh / 2\n\nThe (bdi_dirty_B \u003c bdi_thresh_B) test is now useless and the dirty pages\nwill be effectively throttled by condition (nr_dirty \u003c dirty_thresh).\nThis has two problems:\n(1) we lose the protections for light dirtiers\n(2) balance_dirty_pages() effectively becomes IO-less because the\n    (bdi_nr_reclaimable \u003e bdi_thresh) test won\u0027t be true. This is good\n    for IO, but balance_dirty_pages() loses an important way to break\n    out of the loop which leads to more spread out throttle delays.\n\nDIRTY_PASSGOOD_AREA can eliminate the above issues. The only problem is,\nDIRTY_PASSGOOD_AREA needs to be defined as 2 to fully cover the above\nexample while this patch uses the more conservative value 8 so as not to\nsurprise people with too many dirty pages than expected.\n\nThe max-pause limit won\u0027t noticeably impact the speed dirty pages are\nknocked down when there is a sudden drop of global/bdi dirty thresholds.\nBecause the heavy dirties will be throttled below 160KB/s which is slow\nenough. It does help to avoid long dirty throttle delays and especially\nwill make light dirtiers more responsive.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "c42843f2f0bbc9d716a32caf667d18fc2bf3bc4c",
      "tree": "835b801d215dd70cbb5a282232ce23fa3167a880",
      "parents": [
        "7762741e3af69720186802e945229b6a5afd5c49"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Mar 02 15:54:09 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sat Jul 09 22:09:02 2011 -0700"
      },
      "message": "writeback: introduce smoothed global dirty limit\n\nThe start of a heavy weight application (ie. KVM) may instantly knock\ndown determine_dirtyable_memory() if the swap is not enabled or full.\nglobal_dirty_limits() and bdi_dirty_limit() will in turn get global/bdi\ndirty thresholds that are _much_ lower than the global/bdi dirty pages.\n\nbalance_dirty_pages() will then heavily throttle all dirtiers including\nthe light ones, until the dirty pages drop below the new dirty thresholds.\nDuring this _deep_ dirty-exceeded state, the system may appear rather\nunresponsive to the users.\n\nAbout \"deep\" dirty-exceeded: task_dirty_limit() assigns 1/8 lower dirty\nthreshold to heavy dirtiers than light ones, and the dirty pages will\nbe throttled around the heavy dirtiers\u0027 dirty threshold and reasonably\nbelow the light dirtiers\u0027 dirty threshold. In this state, only the heavy\ndirtiers will be throttled and the dirty pages are carefully controlled\nto not exceed the light dirtiers\u0027 dirty threshold. However if the\nthreshold itself suddenly drops below the number of dirty pages, the\nlight dirtiers will get heavily throttled.\n\nSo introduce global_dirty_limit for tracking the global dirty threshold\nwith policies\n\n- follow downwards slowly\n- follow up in one shot\n\nglobal_dirty_limit can effectively mask out the impact of sudden drop of\ndirtyable memory. It will be used in the next patch for two new type of\ndirty limits. Note that the new dirty limits are not going to avoid\nthrottling the light dirtiers, but could limit their sleep time to 200ms.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "e98be2d599207c6b31e9bb340d52a231b2f3662d",
      "tree": "3ae28e7d621a6e2ddf8e7462f8d282901c113d5c",
      "parents": [
        "f7d2b1ecd0c714adefc7d3a942ef87beb828a763"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Aug 29 11:22:30 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sat Jul 09 22:09:01 2011 -0700"
      },
      "message": "writeback: bdi write bandwidth estimation\n\nThe estimation value will start from 100MB/s and adapt to the real\nbandwidth in seconds.\n\nIt tries to update the bandwidth only when disk is fully utilized.\nAny inactive period of more than one second will be skipped.\n\nThe estimated bandwidth will be reflecting how fast the device can\nwriteout when _fully utilized_, and won\u0027t drop to 0 when it goes idle.\nThe value will remain constant at disk idle time. At busy write time, if\nnot considering fluctuations, it will also remain high unless be knocked\ndown by possible concurrent reads that compete for the disk time and\nbandwidth with async writes.\n\nThe estimation is not done purely in the flusher because there is no\nguarantee for write_cache_pages() to return timely to update bandwidth.\n\nThe bdi-\u003eavg_write_bandwidth smoothing is very effective for filtering\nout sudden spikes, however may be a little biased in long term.\n\nThe overheads are low because the bdi bandwidth update only occurs at\n200ms intervals.\n\nThe 200ms update interval is suitable, because it\u0027s not possible to get\nthe real bandwidth for the instance at all, due to large fluctuations.\n\nThe NFS commits can be as large as seconds worth of data. One XFS\ncompletion may be as large as half second worth of data if we are going\nto increase the write chunk to half second worth of data. In ext4,\nfluctuations with time period of around 5 seconds is observed. And there\nis another pattern of irregular periods of up to 20 seconds on SSD tests.\n\nThat\u0027s why we are not only doing the estimation at 200ms intervals, but\nalso averaging them over a period of 3 seconds and then go further to do\nanother level of smoothing in avg_write_bandwidth.\n\nCC: Li Shaohua \u003cshaohua.li@intel.com\u003e\nCC: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "d46db3d58233be4be980eb1e42eebe7808bcabab",
      "tree": "6d813b33938d915f0c0633e8615d1ffdcc554c96",
      "parents": [
        "36715cef0770b7e2547892b7c3197fc024274630"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed May 04 19:54:37 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sat Jul 09 22:09:01 2011 -0700"
      },
      "message": "writeback: make writeback_control.nr_to_write straight\n\nPass struct wb_writeback_work all the way down to writeback_sb_inodes(),\nand initialize the struct writeback_control there.\n\nstruct writeback_control is basically designed to control writeback of a\nsingle file, but we keep abuse it for writing multiple files in\nwriteback_sb_inodes() and its callers.\n\nIt immediately clean things up, e.g. suddenly wbc.nr_to_write vs\nwork-\u003enr_pages starts to make sense, and instead of saving and restoring\npages_skipped in writeback_sb_inodes it can always start with a clean\nzero value.\n\nIt also makes a neat IO pattern change: large dirty files are now\nwritten in the full 4MB writeback chunk size, rather than whatever\nremained quota in wbc-\u003enr_to_write.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nProposed-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "846d5a091b0506b75489577cde27f39b37a192a4",
      "tree": "739bd1e28f86d4620b55401d0cc4b5ab4e44eb91",
      "parents": [
        "b7a2441f9966fe3e1be960a876ab52e6029ea005"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Thu May 05 21:10:38 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:23 2011 +0800"
      },
      "message": "writeback: remove .nonblocking and .encountered_congestion\n\nRemove two unused struct writeback_control fields:\n\n\t.encountered_congestion\t(completely unused)\n\t.nonblocking\t\t(never set, checked/showed in XFS,NFS/btrfs)\n\nThe .for_background check in nfs_write_inode() is also removed btw,\nas .for_background implies WB_SYNC_NONE.\n\nReviewed-by: Jan Kara \u003cjack@suse.cz\u003e\nProposed-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "b7a2441f9966fe3e1be960a876ab52e6029ea005",
      "tree": "f3e4373e6434bc21a4be983c3174aeb3298bf329",
      "parents": [
        "3efaf0faba6793cd91298c76315e15de59c13ae0"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jul 21 22:19:51 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:23 2011 +0800"
      },
      "message": "writeback: remove writeback_control.more_io\n\nWhen wbc.more_io was first introduced, it indicates whether there are\nat least one superblock whose s_more_io contains more IO work. Now with\nthe per-bdi writeback, it can be replaced with a simple b_more_io test.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "e185dda89d69cde142b48059413a03561f41f78a",
      "tree": "505fa875bdf7968892882a1f93993c9114d768b0",
      "parents": [
        "e8dfc30582995ae12454cda517b17d6294175b07"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sat Apr 23 11:26:07 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:22 2011 +0800"
      },
      "message": "writeback: avoid extra sync work at enqueue time\n\nThis removes writeback_control.wb_start and does more straightforward\nsync livelock prevention by setting .older_than_this to prevent extra\ninodes from being enqueued in the first place.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "f758eeabeb96f878c860e8f110f94ec8820822a9",
      "tree": "fea5a465aa0aa38c6c9263eb264acbeb7f722c02",
      "parents": [
        "424b351fe1901fc909fd0ca4f21dab58f24c1aac"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Thu Apr 21 18:19:44 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:21 2011 +0800"
      },
      "message": "writeback: split inode_wb_list_lock into bdi_writeback.list_lock\n\nSplit the global inode_wb_list_lock into a per-bdi_writeback list_lock,\nas it\u0027s currently the most contended lock in the system for metadata\nheavy workloads.  It won\u0027t help for single-filesystem workloads for\nwhich we\u0027ll need the I/O-less balance_dirty_pages, but at least we\ncan dedicate a cpu to spinning on each bdi now for larger systems.\n\nBased on earlier patches from Nick Piggin and Dave Chinner.\n\nIt reduces lock contentions to 1/4 in this test case:\n10 HDD JBOD, 100 dd on each disk, XFS, 6GB ram\n\nlock_stat version 0.3\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n                              class name    con-bounces    contentions   waittime-min   waittime-max waittime-total    acq-bounces   acquisitions   holdtime-min   holdtime-max holdtime-total\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\nvanilla 2.6.39-rc3:\n                      inode_wb_list_lock:         42590          44433           0.12         147.74      144127.35         252274         886792           0.08         121.34      917211.23\n                      ------------------\n                      inode_wb_list_lock              2          [\u003cffffffff81165da5\u003e] bdev_inode_switch_bdi+0x29/0x85\n                      inode_wb_list_lock             34          [\u003cffffffff8115bd0b\u003e] inode_wb_list_del+0x22/0x49\n                      inode_wb_list_lock          12893          [\u003cffffffff8115bb53\u003e] __mark_inode_dirty+0x170/0x1d0\n                      inode_wb_list_lock          10702          [\u003cffffffff8115afef\u003e] writeback_single_inode+0x16d/0x20a\n                      ------------------\n                      inode_wb_list_lock              2          [\u003cffffffff81165da5\u003e] bdev_inode_switch_bdi+0x29/0x85\n                      inode_wb_list_lock             19          [\u003cffffffff8115bd0b\u003e] inode_wb_list_del+0x22/0x49\n                      inode_wb_list_lock           5550          [\u003cffffffff8115bb53\u003e] __mark_inode_dirty+0x170/0x1d0\n                      inode_wb_list_lock           8511          [\u003cffffffff8115b4ad\u003e] writeback_sb_inodes+0x10f/0x157\n\n2.6.39-rc3 + patch:\n                \u0026(\u0026wb-\u003elist_lock)-\u003erlock:         11383          11657           0.14         151.69       40429.51          90825         527918           0.11         145.90      556843.37\n                ------------------------\n                \u0026(\u0026wb-\u003elist_lock)-\u003erlock             10          [\u003cffffffff8115b189\u003e] inode_wb_list_del+0x5f/0x86\n                \u0026(\u0026wb-\u003elist_lock)-\u003erlock           1493          [\u003cffffffff8115b1ed\u003e] writeback_inodes_wb+0x3d/0x150\n                \u0026(\u0026wb-\u003elist_lock)-\u003erlock           3652          [\u003cffffffff8115a8e9\u003e] writeback_sb_inodes+0x123/0x16f\n                \u0026(\u0026wb-\u003elist_lock)-\u003erlock           1412          [\u003cffffffff8115a38e\u003e] writeback_single_inode+0x17f/0x223\n                ------------------------\n                \u0026(\u0026wb-\u003elist_lock)-\u003erlock              3          [\u003cffffffff8110b5af\u003e] bdi_lock_two+0x46/0x4b\n                \u0026(\u0026wb-\u003elist_lock)-\u003erlock              6          [\u003cffffffff8115b189\u003e] inode_wb_list_del+0x5f/0x86\n                \u0026(\u0026wb-\u003elist_lock)-\u003erlock           2061          [\u003cffffffff8115af97\u003e] __mark_inode_dirty+0x173/0x1cf\n                \u0026(\u0026wb-\u003elist_lock)-\u003erlock           2629          [\u003cffffffff8115a8e9\u003e] writeback_sb_inodes+0x123/0x16f\n\nhughd@google.com: fix recursive lock when bdi_lock_two() is called with new the same as old\nakpm@linux-foundation.org: cleanup bdev_inode_switch_bdi() comment\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "cb9bd1159c5fe8995e151fa7df10fa19f8c119cc",
      "tree": "3f2dd37182180cf85cd9e23d989b7fd7eceb1d63",
      "parents": [
        "94c3dcbb0b0cdfd82cedd21705424d8044edc42c"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jul 21 22:50:57 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:20 2011 +0800"
      },
      "message": "writeback: introduce writeback_control.inodes_written\n\nThe flusher works on dirty inodes in batches, and may quit prematurely\nif the batch of inodes happen to be metadata-only dirtied: in this case\nwbc-\u003enr_to_write won\u0027t be decreased at all, which stands for \"no pages\nwritten\" but also mis-interpreted as \"no progress\".\n\nSo introduce writeback_control.inodes_written to count the inodes get\ncleaned from VFS POV.  A non-zero value means there are some progress on\nwriteback, in which case more writeback can be tried.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "6e6938b6d3130305a5960c86b1a9b21e58cf6144",
      "tree": "de5546e8390ce31cd31412d2ef78ce732a42191c",
      "parents": [
        "59c5f46fbe01a00eedf54a23789634438bb80603"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Jun 06 10:38:15 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:20 2011 +0800"
      },
      "message": "writeback: introduce .tagged_writepages for the WB_SYNC_NONE sync stage\n\nsync(2) is performed in two stages: the WB_SYNC_NONE sync and the\nWB_SYNC_ALL sync. Identify the first stage with .tagged_writepages and\ndo livelock prevention for it, too.\n\nJan\u0027s commit f446daaea9 (\"mm: implement writeback livelock avoidance\nusing page tagging\") is a partial fix in that it only fixed the\nWB_SYNC_ALL phase livelock.\n\nAlthough ext4 is tested to no longer livelock with commit f446daaea9,\nit may due to some \"redirty_tail() after pages_skipped\" effect which\nis by no means a guarantee for _all_ the file systems.\n\nNote that writeback_inodes_sb() is called by not only sync(), they are\ntreated the same because the other callers also need livelock prevention.\n\nImpact:  It changes the order in which pages/inodes are synced to disk.\nNow in the WB_SYNC_NONE stage, it won\u0027t proceed to write the next inode\nuntil finished with the current inode.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nCC: Dave Chinner \u003cdavid@fromorbit.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "67a23c494621ff1d5431c3bc320947865b224625",
      "tree": "cce0868fc73031d8b0addc4dc7412d49ee9ec370",
      "parents": [
        "a66979abad090b2765a6c6790c9fdeab996833f2"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Mar 22 22:23:42 2011 +1100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 24 21:17:51 2011 -0400"
      },
      "message": "fs: rename inode_lock to inode_hash_lock\n\nAll that remains of the inode_lock is protecting the inode hash list\nmanipulation and traversals. Rename the inode_lock to\ninode_hash_lock to reflect it\u0027s actual function.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a66979abad090b2765a6c6790c9fdeab996833f2",
      "tree": "e48b2d0fac8f96456286a503aeeb952620234961",
      "parents": [
        "55fa6091d83160ca772fc37cebae45d42695a708"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Mar 22 22:23:41 2011 +1100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 24 21:17:51 2011 -0400"
      },
      "message": "fs: move i_wb_list out from under inode_lock\n\nProtect the inode writeback list with a new global lock\ninode_wb_list_lock and use it to protect the list manipulations and\ntraversals. This lock replaces the inode_lock as the inodes on the\nlist can be validity checked while holding the inode-\u003ei_lock and\nhence the inode_lock is no longer needed to protect the list.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "925d169f5b86fe57e2f5264ea574cce9a89b719d",
      "tree": "241d3156b427c6398bd3fc5efa9108635d0e189b",
      "parents": [
        "cdf01dd5443d0befc8c6a32cb2e3d2f568fd2558",
        "6418c96107a2b399848bb8cfc6e29f11ca74fb94"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 30 09:05:48 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 30 09:05:48 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (39 commits)\n  Btrfs: deal with errors from updating the tree log\n  Btrfs: allow subvol deletion by unprivileged user with -o user_subvol_rm_allowed\n  Btrfs: make SNAP_DESTROY async\n  Btrfs: add SNAP_CREATE_ASYNC ioctl\n  Btrfs: add START_SYNC, WAIT_SYNC ioctls\n  Btrfs: async transaction commit\n  Btrfs: fix deadlock in btrfs_commit_transaction\n  Btrfs: fix lockdep warning on clone ioctl\n  Btrfs: fix clone ioctl where range is adjacent to extent\n  Btrfs: fix delalloc checks in clone ioctl\n  Btrfs: drop unused variable in block_alloc_rsv\n  Btrfs: cleanup warnings from gcc 4.6 (nonbugs)\n  Btrfs: Fix variables set but not read (bugs found by gcc 4.6)\n  Btrfs: Use ERR_CAST helpers\n  Btrfs: use memdup_user helpers\n  Btrfs: fix raid code for removing missing drives\n  Btrfs: Switch the extent buffer rbtree into a radix tree\n  Btrfs: restructure try_release_extent_buffer()\n  Btrfs: use the flusher threads for delalloc throttling\n  Btrfs: tune the chunk allocation to 5% of the FS as metadata\n  ...\n\nFix up trivial conflicts in fs/btrfs/super.c and fs/fs-writeback.c, and\nremove use of INIT_RCU_HEAD in fs/btrfs/extent_io.c (that init macro was\nuseless and removed in commit 5e8067adfdba: \"rcu head remove init\")\n"
    },
    {
      "commit": "3259f8bed2f0f57c2fdcdac1b510c3fa319ef97e",
      "tree": "5f06f6c83413ca2fc7aec85ba0811a8c91904097",
      "parents": [
        "cb44921a09221f0a90217b44044448f63190f3e5"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 11:16:17 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 11:25:29 2010 -0400"
      },
      "message": "Add new functions for triggering inode writeback\n\nWhen btrfs is running low on metadata space, it needs to force delayed\nallocation pages to disk.  It currently does this with a suboptimal walk\nof a private list of inodes with delayed allocation, and it would be\nmuch better if we used the generic flusher threads.\n\nwriteback_inodes_sb_if_idle would be ideal, but it waits for the flusher\nthread to start IO on all the dirty pages in the FS before it returns.\nThis adds variants of writeback_inodes_sb* that allow the caller to\ncontrol how many pages get sent down.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a107e5a3a473a2ea62bd5af24e11b84adf1486ff",
      "tree": "d36c2cb38d8be88d4d75cdebc354aa140aa0e470",
      "parents": [
        "e3e1288e86a07cdeb0aee5860a2dff111c6eff79",
        "a269029d0e2192046be4c07ed78a45022469ee4c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 23:44:47 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 23:44:47 2010 -0400"
      },
      "message": "Merge branch \u0027next\u0027 into upstream-merge\n\nConflicts:\n\tfs/ext4/inode.c\n\tfs/ext4/mballoc.c\n\tinclude/trace/events/ext4.h\n"
    },
    {
      "commit": "5b41d92437f1ae19b3f3ffa3b16589fd5df50ac0",
      "tree": "ed7e1999a2349811e3cae0f0bdd53a93aea413d7",
      "parents": [
        "bbd08344e3df8c7c1d7aa04bc0c8c9367806e12d"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Oct 27 21:30:13 2010 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Oct 27 21:30:13 2010 -0400"
      },
      "message": "ext4: implement writeback livelock avoidance using page tagging\n\nThis is analogous to Jan Kara\u0027s commit,\nf446daaea9d4a420d16c606f755f3689dcb2d0ce\nmm: implement writeback livelock avoidance using page tagging\n\nbut since we forked write_cache_pages, we need to reimplement\nit there (and in ext4_da_writepages, since range_cyclic handling\nwas moved to there)\n\nIf you start a large buffered IO to a file, and then set\nfsync after it, you\u0027ll find that fsync does not complete\nuntil the other IO stops.\n\nIf you continue re-dirtying the file (say, putting dd\nwith conv\u003dnotrunc in a loop), when fsync finally completes\n(after all IO is done), it reports via tracing that\nit has written many more pages than the file contains;\nin other words it has synced and re-synced pages in\nthe file multiple times.\n\nThis then leads to problems with our writeback_index\nupdate, since it advances it by pages written, and\nessentially sets writeback_index off the end of the\nfile...\n\nWith the following patch, we only sync as much as was\ndirty at the time of the sync.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "426e1f5cec4821945642230218876b0e89aafab1",
      "tree": "2728ace018d0698886989da586210ef1543a7098",
      "parents": [
        "9e5fca251f44832cb996961048ea977f80faf6ea",
        "63997e98a3be68d7cec806d22bf9b02b2e1daabb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 17:58:44 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 17:58:44 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (52 commits)\n  split invalidate_inodes()\n  fs: skip I_FREEING inodes in writeback_sb_inodes\n  fs: fold invalidate_list into invalidate_inodes\n  fs: do not drop inode_lock in dispose_list\n  fs: inode split IO and LRU lists\n  fs: switch bdev inode bdi\u0027s correctly\n  fs: fix buffer invalidation in invalidate_list\n  fsnotify: use dget_parent\n  smbfs: use dget_parent\n  exportfs: use dget_parent\n  fs: use RCU read side protection in d_validate\n  fs: clean up dentry lru modification\n  fs: split __shrink_dcache_sb\n  fs: improve DCACHE_REFERENCED usage\n  fs: use percpu counter for nr_dentry and nr_dentry_unused\n  fs: simplify __d_free\n  fs: take dcache_lock inside __d_path\n  fs: do not assign default i_ino in new_inode\n  fs: introduce a per-cpu last_ino allocator\n  new helper: ihold()\n  ...\n"
    },
    {
      "commit": "92c09c041f15fc88b35f8628e07639f52e1fbb38",
      "tree": "c9b91ace1405487a7a939229620d415461c76124",
      "parents": [
        "e199b5d1fed13f5e8f47a0ee8216f36244dad1f4"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue Oct 26 14:22:03 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:10 2010 -0700"
      },
      "message": "mm: declare some external symbols\n\nDeclare \u0027bdi_pending_list\u0027 and \u0027tag_pages_for_writeback()\u0027 to remove\nfollowing sparse warnings:\n\n mm/backing-dev.c:46:1: warning: symbol \u0027bdi_pending_list\u0027 was not declared. Should it be static?\n mm/page-writeback.c:825:6: warning: symbol \u0027tag_pages_for_writeback\u0027 was not declared. Should it be static?\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9e38d86ff2d8a8db99570e982230861046df32b5",
      "tree": "7ea2ceea24a4e070259a4585b2748c9e2c070ee0",
      "parents": [
        "cffbc8aa334f55c9ed42d25202eb3ebf3a97c195"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Sat Oct 23 06:55:17 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:09 2010 -0400"
      },
      "message": "fs: Implement lazy LRU updates for inodes\n\nConvert the inode LRU to use lazy updates to reduce lock and\ncacheline traffic.  We avoid moving inodes around in the LRU list\nduring iget/iput operations so these frequent operations don\u0027t need\nto access the LRUs. Instead, we defer the refcount checks to\nreclaim-time and use a per-inode state flag, I_REFERENCED, to tell\nreclaim that iget has touched the inode in the past. This means that\nonly reclaim should be touching the LRU with any frequency, hence\nsignificantly reducing lock acquisitions and the amount contention\non LRU updates.\n\nThis also removes the inode_in_use list, which means we now only\nhave one list for tracking the inode LRU status. This makes it much\nsimpler to split out the LRU list operations under it\u0027s own lock.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "16c4042f08919f447d6b2a55679546c9b97c7264",
      "tree": "0248b64d46237854ebe67efe8c742cb5878d8611",
      "parents": [
        "e50e37201ae2e7d6a52e87815759e6481f0bcfb9"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Aug 11 14:17:39 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:29 2010 -0700"
      },
      "message": "writeback: avoid unnecessary calculation of bdi dirty thresholds\n\nSplit get_dirty_limits() into global_dirty_limits()+bdi_dirty_limit(), so\nthat the latter can be avoided when under global dirty background\nthreshold (which is the normal state for most systems).\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "edadfb10ba35da7253541e4155aa92eff758ebe6",
      "tree": "a3c676f7b2c9b301d7e1948febeaba76ea1c5850",
      "parents": [
        "9c3a8ee8a1d72c5c0d7fbdf426d80e270ddfa54c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Jun 10 12:07:54 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 06 08:54:08 2010 +0200"
      },
      "message": "writeback: split writeback_inodes_wb\n\nThe case where we have a superblock doesn\u0027t require a loop here as we scan\nover all inodes in writeback_sb_inodes. Split it out into a separate helper\nto make the code simpler.  This also allows to get rid of the sb member in\nstruct writeback_control, which was rather out of place there.\n\nAlso update the comments in writeback_sb_inodes that explain the handling\nof inodes from wrong superblocks.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9c3a8ee8a1d72c5c0d7fbdf426d80e270ddfa54c",
      "tree": "fa131760a61f66afeede852622ede0d716965489",
      "parents": [
        "06d738fa9155ff16dba3d7e501ba4581d01a98cb"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Jun 10 12:07:27 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 06 08:54:03 2010 +0200"
      },
      "message": "writeback: remove writeback_inodes_wbc\n\nThis was just an odd wrapper around writeback_inodes_wb.  Removing this\nalso allows to get rid of the bdi member of struct writeback_control\nwhich was rather out of place there.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0b5649278e39a068aaf91399941bab1b4a4a3cc2",
      "tree": "3fd2c782385137f5b135c07149de772e207fdaf8",
      "parents": [
        "8d7458daea2a6809d32418bf489b949d23de99ea"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Jun 09 10:37:18 2010 +1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 08 18:12:44 2010 -0700"
      },
      "message": "writeback: pay attention to wbc-\u003enr_to_write in write_cache_pages\n\nIf a filesystem writes more than one page in -\u003ewritepage, write_cache_pages\nfails to notice this and continues to attempt writeback when wbc-\u003enr_to_write\nhas gone negative - this trace was captured from XFS:\n\n    wbc_writeback_start: towrt\u003d1024\n    wbc_writepage: towrt\u003d1024\n    wbc_writepage: towrt\u003d0\n    wbc_writepage: towrt\u003d-1\n    wbc_writepage: towrt\u003d-5\n    wbc_writepage: towrt\u003d-21\n    wbc_writepage: towrt\u003d-85\n\nThis has adverse effects on filesystem writeback behaviour. write_cache_pages()\nneeds to terminate after a certain number of pages are written, not after a\ncertain number of calls to -\u003ewritepage are made.  This is a regression\nintroduced by 17bc6c30cf6bfffd816bdc53682dd46fc34a2cf4 (\"vfs: Add\nno_nrwrite_index_update writeback control flag\"), but cannot be reverted\ndirectly due to subsequent bug fixes that have gone in on top of it.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0e3c9a2284f5417f196e327c254d0b84c9ee8929",
      "tree": "e3fb40ebe7d042b4b3c1042bc7f2edaf7fb6eee0",
      "parents": [
        "f17625b318d9b151e7bd41e31223e9d89b2aaa77"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jun 01 11:08:43 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jun 01 11:08:43 2010 +0200"
      },
      "message": "Revert \"writeback: fix WB_SYNC_NONE writeback from umount\"\n\nThis reverts commit e913fc825dc685a444cb4c1d0f9d32f372f59861.\n\nWe are investigating a hang associated with the WB_SYNC_NONE changes,\nso revert them for now.\n\nConflicts:\n\n\tfs/fs-writeback.c\n\tmm/page-writeback.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c2c4986eddaa7dc3d036cb2bfa5c8c5f1f2492a0",
      "tree": "4787499c06028f73c770daadae772c9af7c3499c",
      "parents": [
        "b403a98e260f3a8c7c33f58a07c7ae549852170f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu May 20 09:18:47 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 20:01:03 2010 +0200"
      },
      "message": "writeback: fix problem with !CONFIG_BLOCK compilation\n\nWhen CONFIG_BLOCK isn\u0027t enabled:\n\nmm/page-writeback.c: In function \u0027laptop_mode_timer_fn\u0027:\nmm/page-writeback.c:708: error: dereferencing pointer to incomplete type\nmm/page-writeback.c:709: error: dereferencing pointer to incomplete type\n\nFix this by essentially eliminating the laptop sync handlers when\nCONFIG_BLOCK isn\u0027t set, as most are only used from the block layer code.\nThe exception is laptop_sync_completion() which is used from sys_sync(),\nmake that an empty declaration in that case.\n\nReported-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "e913fc825dc685a444cb4c1d0f9d32f372f59861",
      "tree": "e470697e43ffe4028ac81c17d3ef90ee9f30bcfb",
      "parents": [
        "69b62d01ec44fe0d505d89917392347732135a4d"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 17 12:55:07 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 17 12:55:07 2010 +0200"
      },
      "message": "writeback: fix WB_SYNC_NONE writeback from umount\n\nWhen umount calls sync_filesystem(), we first do a WB_SYNC_NONE\nwriteback to kick off writeback of pending dirty inodes, then follow\nthat up with a WB_SYNC_ALL to wait for it. Since umount already holds\nthe sb s_umount mutex, WB_SYNC_NONE ends up doing nothing and all\nwriteback happens as WB_SYNC_ALL. This can greatly slow down umount,\nsince WB_SYNC_ALL writeback is a data integrity operation and thus\na bigger hammer than simple WB_SYNC_NONE. For barrier aware file systems\nit\u0027s a lot slower.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "31373d09da5b7fe21fe6f781e92bd534a3495f00",
      "tree": "38cd9896cfc6ce106a03431658a9b98a09129034",
      "parents": [
        "9195291e5f05e01d67f9a09c756b8aca8f009089"
      ],
      "author": {
        "name": "Matthew Garrett",
        "email": "mjg@redhat.com",
        "time": "Tue Apr 06 14:25:14 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Apr 06 14:25:14 2010 +0200"
      },
      "message": "laptop-mode: Make flushes per-device\n\nOne of the features of laptop-mode is that it forces a writeout of dirty\npages if something else triggers a physical read or write from a device.\nThe current implementation flushes pages on all devices, rather than only\nthe one that triggered the flush. This patch alters the behaviour so that\nonly the recently accessed block device is flushed, preventing other\ndisks being spun up for no terribly good reason.\n\nSigned-off-by: Matthew Garrett \u003cmjg@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f11c9c5c259cb2c3d698548dc3936f773ab1f5b9",
      "tree": "c6461c9d6981122e1507dafa0394901903eb2ca1",
      "parents": [
        "c12ec0a2d94001003dfb929ce14c287fca0522b0"
      ],
      "author": {
        "name": "Edward Shishkin",
        "email": "edward.shishkin@gmail.com",
        "time": "Thu Mar 11 14:09:47 2010 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Mar 12 10:03:42 2010 +0100"
      },
      "message": "vfs: improve writeback_inodes_wb()\n\nDo not pin/unpin superblock for every inode in writeback_inodes_wb(), pin\nit for the whole group of inodes which belong to the same superblock and\ncall writeback_sb_inodes() handler for them.\n\nSigned-off-by: Edward Shishkin \u003cedward.shishkin@gmail.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "17bd55d037a02b04d9119511cfd1a4b985d20f63",
      "tree": "ddbc227fffb84d1b95f5f8c48b627f88f3fd56ed",
      "parents": [
        "d3533d72e7478a61a3e1936956fc825289a2acf4"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Dec 23 07:57:07 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 23 07:57:07 2009 -0500"
      },
      "message": "fs-writeback: Add helper function to start writeback if idle\n\next4, at least, would like to start pushing on writeback if it starts\nto get close to ENOSPC when reserving worst-case blocks for delalloc\nwrites.  Writing out delalloc data will convert those worst-case\npredictions into usually smaller actual usage, freeing up space\nbefore we hit ENOSPC based on this speculation.\n\nThanks to Jens for the suggestion for the helper function,\n\u0026 the naming help.\n\nI\u0027ve made the helper return status on whether writeback was\nstarted even though I don\u0027t plan to use it in the ext4 patch;\nit seems like it would be potentially useful to test this\nin some cases.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "eaff8079d4f1016a12e34ab323737314f24127dd",
      "tree": "a3d9e00320c6195e55811d5247a521f99341a411",
      "parents": [
        "7a0ad10c367ab57c899d340372f37880cbe6ab52"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Dec 17 14:25:01 2009 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 17 11:03:25 2009 -0500"
      },
      "message": "kill I_LOCK\n\nAfter I_SYNC was split from I_LOCK the leftover is always used together with\nI_NEW and thus superflous.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b17621fed6aa039387e35f9b4d34d98f213e5673",
      "tree": "bc755d1aa204518600a6d82dd51d970c685dc68c",
      "parents": [
        "951c30d135390a108f102b0f6e3cfa6241f2a1aa"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@gmail.com",
        "time": "Thu Dec 03 13:54:25 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 13:54:25 2009 +0100"
      },
      "message": "writeback: introduce wbc.for_background\n\nIt will lower the flush priority for NFS, and maybe more in future.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "8d65af789f3e2cf4cfbdbf71a0f7a61ebcd41d38",
      "tree": "121df3bfffc7853ac6d2c514ad514d4a748a0933",
      "parents": [
        "c0d0787b6d47d9f4d5e8bd321921104e854a9135"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Wed Sep 23 15:57:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:04 2009 -0700"
      },
      "message": "sysctl: remove \"struct file *\" argument of -\u003eproc_handler\n\nIt\u0027s unused.\n\nIt isn\u0027t needed -- read or write flag is already passed and sysctl\nshouldn\u0027t care about the rest.\n\nIt _was_ used in two places at arch/frv for some reason.\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b6e51316daede0633e9274e1e30391cfa4747877",
      "tree": "664476bb4e7c05dcce3ad908363b482134c68429",
      "parents": [
        "bcddc3f01c9122882c8b9f12ab94a934e55aef97"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:13:54 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:52 2009 +0200"
      },
      "message": "writeback: separate starting of sync vs opportunistic writeback\n\nbdi_start_writeback() is currently split into two paths, one for\nWB_SYNC_NONE and one for WB_SYNC_ALL. Add bdi_sync_writeback()\nfor WB_SYNC_ALL writeback and let bdi_start_writeback() handle\nonly WB_SYNC_NONE.\n\nPush down the writeback_control allocation and only accept the\nparameters that make sense for each function. This cleans up\nthe API considerably.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1fe06ad89255c211fe100d7f690d10b161398df8",
      "tree": "826d32bf081a6729aeaa08fe42422e49a9b86f6f",
      "parents": [
        "2c96ce9f2084c1e04d02883e622f74a537a63aea"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Sep 15 15:10:20 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:16:18 2009 +0200"
      },
      "message": "writeback: get rid of wbc-\u003efor_writepages\n\nIt\u0027s only set, it\u0027s never checked. Kill it.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "18f2ee705d98034b0f229a3202d827468d4bffd9",
      "tree": "1da282e5eb90dc8e8a1e46214e0e7639138d3568",
      "parents": [
        "2f3d675bcd4a84251d6e8eea8096ec8fc795e5d6"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Aug 18 18:43:15 2009 +0200"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Sep 14 17:08:17 2009 +0200"
      },
      "message": "vfs: Remove generic_osync_inode() and sync_page_range{_nolock}()\n\nRemove these three functions since nobody uses them anymore.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "d0bceac747b547c0b4769b91fec7d3c15600153f",
      "tree": "f8de99db3c0cdafb01a801d1c2e94b2f5ddac967",
      "parents": [
        "03ba3782e8dcc5b0e1efe440d33084f066e38cae"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 18 08:20:32 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:25 2009 +0200"
      },
      "message": "writeback: get rid of pdflush completely\n\nIt is now unused, so kill it off.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "03ba3782e8dcc5b0e1efe440d33084f066e38cae",
      "tree": "e5a6513b411de16a46199530ec98ef9b7f1efc50",
      "parents": [
        "66f3b8e2e103a0b93b945764d98e9ba46cb926dd"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 09 09:08:54 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:25 2009 +0200"
      },
      "message": "writeback: switch to per-bdi threads for flushing data\n\nThis gets rid of pdflush for bdi writeout and kupdated style cleaning.\npdflush writeout suffers from lack of locality and also requires more\nthreads to handle the same workload, since it has to work in a\nnon-blocking fashion against each queue. This also introduces lumpy\nbehaviour and potential request starvation, since pdflush can be starved\nfor queue access if others are accessing it. A sample ffsb workload that\ndoes random writes to files is about 8% faster here on a simple SATA drive\nduring the benchmark phase. File layout also seems a LOT more smooth in\nvmstat:\n\n r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa\n 0  1      0 608848   2652 375372    0    0     0 71024  604    24  1 10 48 42\n 0  1      0 549644   2712 433736    0    0     0 60692  505    27  1  8 48 44\n 1  0      0 476928   2784 505192    0    0     4 29540  553    24  0  9 53 37\n 0  1      0 457972   2808 524008    0    0     0 54876  331    16  0  4 38 58\n 0  1      0 366128   2928 614284    0    0     4 92168  710    58  0 13 53 34\n 0  1      0 295092   3000 684140    0    0     0 62924  572    23  0  9 53 37\n 0  1      0 236592   3064 741704    0    0     4 58256  523    17  0  8 48 44\n 0  1      0 165608   3132 811464    0    0     0 57460  560    21  0  8 54 38\n 0  1      0 102952   3200 873164    0    0     4 74748  540    29  1 10 48 41\n 0  1      0  48604   3252 926472    0    0     0 53248  469    29  0  7 47 45\n\nwhere vanilla tends to fluctuate a lot in the creation phase:\n\n r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa\n 1  1      0 678716   5792 303380    0    0     0 74064  565    50  1 11 52 36\n 1  0      0 662488   5864 319396    0    0     4   352  302   329  0  2 47 51\n 0  1      0 599312   5924 381468    0    0     0 78164  516    55  0  9 51 40\n 0  1      0 519952   6008 459516    0    0     4 78156  622    56  1 11 52 37\n 1  1      0 436640   6092 541632    0    0     0 82244  622    54  0 11 48 41\n 0  1      0 436640   6092 541660    0    0     0     8  152    39  0  0 51 49\n 0  1      0 332224   6200 644252    0    0     4 102800  728    46  1 13 49 36\n 1  0      0 274492   6260 701056    0    0     4 12328  459    49  0  7 50 43\n 0  1      0 211220   6324 763356    0    0     0 106940  515    37  1 10 51 39\n 1  0      0 160412   6376 813468    0    0     0  8224  415    43  0  6 49 45\n 1  1      0  85980   6452 886556    0    0     4 113516  575    39  1 11 54 34\n 0  2      0  85968   6452 886620    0    0     0  1640  158   211  0  0 46 54\n\nA 10 disk test with btrfs performs 26% faster with per-bdi flushing. A\nSSD based writeback test on XFS performs over 20% better as well, with\nthe throughput being very stable around 1GB/sec, where pdflush only\nmanages 750MB/sec and fluctuates wildly while doing so. Random buffered\nwrites to many files behave a lot better as well, as does random mmap\u0027ed\nwrites.\n\nA separate thread is added to sync the super blocks. In the long term,\nadding sync_supers_bdi() functionality could get rid of this thread again.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "d8a8559cd7a9ccac98d5f6f13297a2ff68a43627",
      "tree": "165e02117205e9790c21b2facc130b23addf3775",
      "parents": [
        "0d03d59d9b31cd1e33b7e46a80b6fef66244b1f2"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 02 12:34:32 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:25 2009 +0200"
      },
      "message": "writeback: get rid of generic_sync_sb_inodes() export\n\nThis adds two new exported functions:\n\n- writeback_inodes_sb(), which only attempts to writeback dirty inodes on\n  this super_block, for WB_SYNC_NONE writeout.\n- sync_inodes_sb(), which writes out all dirty inodes on this super_block\n  and also waits for the IO to complete.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "5cee5815d1564bbbd505fea86f4550f1efdb5cd0",
      "tree": "ba99c38932dc534bf56f0d7dcfeeca153f50b007",
      "parents": [
        "429479f031322a0cc5c921ffb2321a51718dc875"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Apr 27 16:43:51 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:03 2009 -0400"
      },
      "message": "vfs: Make sys_sync() use fsync_super() (version 4)\n\nIt is unnecessarily fragile to have two places (fsync_super() and do_sync())\ndoing data integrity sync of the filesystem. Alter __fsync_super() to\naccommodate needs of both callers and use it. So after this patch\n__fsync_super() is the only place where we gather all the calls needed to\nproperly send all data on a filesystem to disk.\n\nNice bonus is that we get a complete livelock avoidance and write_supers()\nis now only used for periodic writeback of superblocks.\n\nsync_blockdevs() introduced a couple of patches ago is gone now.\n\n[build fixes folded]\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cd17cbfda004fe5f406c01b318c6378d9895896f",
      "tree": "821e279bc6d9d52bc13fa6c3905ebbd44a2e4860",
      "parents": [
        "05dc7b613481c695bb4fc476c6fbb46364b63f62"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 15 11:32:24 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 15 11:32:24 2009 +0200"
      },
      "message": "Revert \"mm: add /proc controls for pdflush threads\"\n\nThis reverts commit fafd688e4c0c34da0f3de909881117d374e4c7af.\n\nWork is progressing to switch away from pdflush as the process backing\nfor flushing out dirty data. So it seems pointless to add more knobs\nto control pdflush threads. The original author of the patch did not\nhave any specific use cases for adding the knobs, so we can easily\nrevert this before 2.6.30 to avoid having to maintain this API\nforever.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "fafd688e4c0c34da0f3de909881117d374e4c7af",
      "tree": "5c61d499b96d78f5b56507a5d34af0ccd7c69060",
      "parents": [
        "a56ed663047fc9927ec8b35750d23ece54f85dc7"
      ],
      "author": {
        "name": "Peter W Morreale",
        "email": "pmorreale@novell.com",
        "time": "Mon Apr 06 19:00:29 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 07 08:31:03 2009 -0700"
      },
      "message": "mm: add /proc controls for pdflush threads\n\nAdd /proc entries to give the admin the ability to control the minimum and\nmaximum number of pdflush threads.  This allows finer control of pdflush\non both large and small machines.\n\nThe rationale is simply one size does not fit all.  Admins on large and/or\nsmall systems may want to tune the min/max pdflush thread count to best\nsuit their needs.  Right now the min/max is hardcoded to 2/8.  While\nprobably a fair estimate for smaller machines, large machines with large\nnumbers of CPUs and large numbers of filesystems/block devices may benefit\nfrom larger numbers of threads working on different block devices.\n\nEven if the background flushing algorithm is radically changed, it is\nstill likely that multiple threads will be involved and admins would still\ndesire finer control on the min/max other than to have to recompile the\nkernel.\n\nThe patch adds \u0027/proc/sys/vm/nr_pdflush_threads_min\u0027 and\n\u0027/proc/sys/vm/nr_pdflush_threads_max\u0027 with r/w permissions.\n\nThe minimum value for nr_pdflush_threads_min is 1 and the maximum value is\nthe current value of nr_pdflush_threads_max.  This minimum is required\nsince additional thread creation is performed in a pdflush thread itself.\n\nThe minimum value for nr_pdflush_threads_max is the current value of\nnr_pdflush_threads_min and the maximum value can be 1000.\n\nDocumentation/sysctl/vm.txt is also updated.\n\n[akpm@linux-foundation.org: fix comment, fix whitespace, use __read_mostly]\nSigned-off-by: Peter W Morreale \u003cpmorreale@novell.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "704503d836042d4a4c7685b7036e7de0418fbc0f",
      "tree": "218bea088f0b286981221e44d5247dab98020d30",
      "parents": [
        "6a11f75b6a17b5d9ac5025f8d048382fd1f47377"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Tue Mar 31 15:23:18 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:13 2009 -0700"
      },
      "message": "mm: fix proc_dointvec_userhz_jiffies \"breakage\"\n\nAddresses http://bugzilla.kernel.org/show_bug.cgi?id\u003d9838\n\nOn i386, HZ\u003d1000, jiffies_to_clock_t() converts time in a somewhat strange\nway from the user\u0027s point of view:\n\n\t# echo 500 \u003e/proc/sys/vm/dirty_writeback_centisecs\n\t# cat /proc/sys/vm/dirty_writeback_centisecs\n\t499\n\nSo, we have 5000 jiffies converted to only 499 clock ticks and reported\nback.\n\nTICK_NSEC \u003d 999848\nACTHZ \u003d 256039\n\nKeeping in-kernel variable in units passed from userspace will fix issue\nof course, but this probably won\u0027t be right for every sysctl.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\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": "4f5a99d64c17470a784a6c68064207d82e3e74a5",
      "tree": "2a3e0f0c3990bb8dbda2cdaa506a64180e5cbff2",
      "parents": [
        "e8ea1759138d4279869f52bfb7dca8f02f8ccfe5"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Jan 06 14:40:25 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:09 2009 -0800"
      },
      "message": "fs: remove WB_SYNC_HOLD\n\nRemove WB_SYNC_HOLD.  The primary motiviation is the design of my\nanti-starvation code for fsync.  It requires taking an inode lock over the\nsync operation, so we could run into lock ordering problems with multiple\ninodes.  It is possible to take a single global lock to solve the ordering\nproblem, but then that would prevent a future nice implementation of \"sync\nmultiple inodes\" based on lock order via inode address.\n\nSeems like a backward step to remove this, but actually it is busted\nanyway: we can\u0027t use the inode lists for data integrity wait: an inode can\nbe taken off the dirty lists but still be under writeback.  In order to\nsatisfy data integrity semantics, we should wait for it to finish\nwriteback, but if we only search the dirty lists, we\u0027ll miss it.\n\nIt would be possible to have a \"writeback\" list, for sys_sync, I suppose.\nBut why complicate things by prematurely optimise?  For unmounting, we\ncould avoid the \"livelock avoidance\" code, which would be easier, but\nagain premature IMO.\n\nFixing the existing data integrity problem will come next.\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": "2da02997e08d3efe8174c7a47696e6f7cbe69ba9",
      "tree": "2e52d9346c52dda83dc8cc9626cbe302e026ad9a",
      "parents": [
        "364aeb2849789b51bf4b9af2ddd02fee7285c54e"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jan 06 14:39:31 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:03 2009 -0800"
      },
      "message": "mm: add dirty_background_bytes and dirty_bytes sysctls\n\nThis change introduces two new sysctls to /proc/sys/vm:\ndirty_background_bytes and dirty_bytes.\n\ndirty_background_bytes is the counterpart to dirty_background_ratio and\ndirty_bytes is the counterpart to dirty_ratio.\n\nWith growing memory capacities of individual machines, it\u0027s no longer\nsufficient to specify dirty thresholds as a percentage of the amount of\ndirtyable memory over the entire system.\n\ndirty_background_bytes and dirty_bytes specify quantities of memory, in\nbytes, that represent the dirty limits for the entire system.  If either\nof these values is set, its value represents the amount of dirty memory\nthat is needed to commence either background or direct writeback.\n\nWhen a `bytes\u0027 or `ratio\u0027 file is written, its counterpart becomes a\nfunction of the written value.  For example, if dirty_bytes is written to\nbe 8096, 8K of memory is required to commence direct writeback.\ndirty_ratio is then functionally equivalent to 8K / the amount of\ndirtyable memory:\n\n\tdirtyable_memory \u003d free pages + mapped pages + file cache\n\n\tdirty_background_bytes \u003d dirty_background_ratio * dirtyable_memory\n\t\t-or-\n\tdirty_background_ratio \u003d dirty_background_bytes / dirtyable_memory\n\n\t\tAND\n\n\tdirty_bytes \u003d dirty_ratio * dirtyable_memory\n\t\t-or-\n\tdirty_ratio \u003d dirty_bytes / dirtyable_memory\n\nOnly one of dirty_background_bytes and dirty_background_ratio may be\nspecified at a time, and only one of dirty_bytes and dirty_ratio may be\nspecified.  When one sysctl is written, the other appears as 0 when read.\n\nThe `bytes\u0027 files operate on a page size granularity since dirty limits\nare compared with ZVC values, which are in page units.\n\nPrior to this change, the minimum dirty_ratio was 5 as implemented by\nget_dirty_limits() although /proc/sys/vm/dirty_ratio would show any user\nwritten value between 0 and 100.  This restriction is maintained, but\ndirty_bytes has a lower limit of only one page.\n\nAlso prior to this change, the dirty_background_ratio could not equal or\nexceed dirty_ratio.  This restriction is maintained in addition to\nrestricting dirty_background_bytes.  If either background threshold equals\nor exceeds that of the dirty threshold, it is implicitly set to half the\ndirty threshold.\n\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Andrea Righi \u003crighi.andrea@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "364aeb2849789b51bf4b9af2ddd02fee7285c54e",
      "tree": "4a24ea43a2a76ae744571f3c7b5022aa1107599e",
      "parents": [
        "58a01a45721bf7bd3a41a86248c3cb02a6b0c501"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jan 06 14:39:29 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:02 2009 -0800"
      },
      "message": "mm: change dirty limit type specifiers to unsigned long\n\nThe background dirty and dirty limits are better defined with type\nspecifiers of unsigned long since negative writeback thresholds are not\npossible.\n\nThese values, as returned by get_dirty_limits(), are normally compared\nwith ZVC values to determine whether writeback shall commence or be\nthrottled.  Such page counts cannot be negative, so declaring the page\nlimits as signed is unnecessary.\n\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Andrea Righi \u003crighi.andrea@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "17bc6c30cf6bfffd816bdc53682dd46fc34a2cf4",
      "tree": "9fb9512764e970123c0f44573b0bfd74539744e3",
      "parents": [
        "74baaaaec8b4f22e1ae279f5ecca4ff705b28912"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Thu Oct 16 10:09:17 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Thu Oct 16 10:09:17 2008 -0400"
      },
      "message": "vfs: Add no_nrwrite_index_update writeback control flag\n\nIf no_nrwrite_index_update is set we don\u0027t update nr_to_write and\naddress space writeback_index in write_cache_pages.  This change\nenables a file system to skip these updates in write_cache_pages and do\nthem in the writepages() callback.  This patch will be followed by an\next4 patch that make use of these new flags.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCC: linux-fsdevel@vger.kernel.org\n"
    },
    {
      "commit": "74baaaaec8b4f22e1ae279f5ecca4ff705b28912",
      "tree": "ef224dcfcf675eb5050fd457192e740c314437c3",
      "parents": [
        "af6f029d3836eb7264cd3fbb13a6baf0e5fdb5ea"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Tue Oct 14 09:21:02 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Tue Oct 14 09:21:02 2008 -0400"
      },
      "message": "vfs: Remove the range_cont writeback mode.\n\nExt4 was the only user of range_cont writeback mode and ext4 switched\nto a different method. So remove the range_cont mode which is not used\nin the kernel.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCC: linux-fsdevel@vger.kernel.org\n"
    },
    {
      "commit": "8d2567a620ae8c24968a2bdc1c906c724fac1f6a",
      "tree": "8e228abbadbe760e3f015d30c2e1180a67eeb8f9",
      "parents": [
        "bcf559e385ba099996c90469c817d2eb38aba418",
        "49f1487b2e41bd8439ea39a4f15b4064e823cc54"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 15 08:36:38 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 15 08:36:38 2008 -0700"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (61 commits)\n  ext4: Documention update for new ordered mode and delayed allocation\n  ext4: do not set extents feature from the kernel\n  ext4: Don\u0027t allow nonextenst mount option for large filesystem\n  ext4: Enable delalloc by default.\n  ext4: delayed allocation i_blocks fix for stat\n  ext4: fix delalloc i_disksize early update issue\n  ext4: Handle page without buffers in ext4_*_writepage()\n  ext4: Add ordered mode support for delalloc\n  ext4: Invert lock ordering of page_lock and transaction start in delalloc\n  mm: Add range_cont mode for writeback\n  ext4: delayed allocation ENOSPC handling\n  percpu_counter: new function percpu_counter_sum_and_set\n  ext4: Add delayed allocation support in data\u003dwriteback mode\n  vfs: add hooks for ext4\u0027s delayed allocation support\n  jbd2: Remove data\u003dordered mode support using jbd buffer heads\n  ext4: Use new framework for data\u003dordered mode in JBD2\n  jbd2: Implement data\u003dordered mode handling via inodes\n  vfs: export filemap_fdatawrite_range()\n  ext4: Fix lock inversion in ext4_ext_truncate()\n  ext4: Invert the locking order of page_lock and transaction start\n  ...\n"
    },
    {
      "commit": "06d6cf6959d22037fcec598f4f954db5db3d7356",
      "tree": "3248c7a27114031ac3d0012080a97932a6190469",
      "parents": [
        "d2a1763791a634e315ec926b62829c1e88842c86"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Fri Jul 11 19:27:31 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Jul 11 19:27:31 2008 -0400"
      },
      "message": "mm: Add range_cont mode for writeback\n\nFilesystems like ext4 needs to start a new transaction in\nthe writepages for block allocation. This happens with delayed\nallocation and there is limit to how many credits we can request\nfrom the journal layer. So we call write_cache_pages multiple\ntimes with wbc-\u003enr_to_write set to the maximum possible value\nlimitted by the max journal credits available.\n\nAdd a new mode to writeback that enables us to handle this\nbehaviour. In the new mode we update the wbc-\u003erange_start\nto point to the new offset to be written. Next call to\ncall to write_cache_pages will start writeout from specified\nrange_start offset. In the new mode we also limit writing\nto the specified wbc-\u003erange_end.\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Mingming Cao \u003ccmm@us.ibm.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\n"
    },
    {
      "commit": "3eefae994d9224fb7771a3ddb683868363c23510",
      "tree": "0c7fe35765b485ff2a155c4ae1189199476a34b3",
      "parents": [
        "6c6c27969a4c6024e6c8838829546c02aaddca18"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon May 12 21:21:04 2008 +0200"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri May 23 22:05:14 2008 +0200"
      },
      "message": "ftrace: limit trace entries\n\nCurrently there is no protection from the root user to use up all of\nmemory for trace buffers. If the root user allocates too many entries,\nthe OOM killer might start kill off all tasks.\n\nThis patch adds an algorith to check the following condition:\n\n pages_requested \u003e (freeable_memory + current_trace_buffer_pages) / 4\n\nIf the above is met then the allocation fails. The above prevents more\nthan 1/4th of freeable memory from being used by trace buffers.\n\nTo determine the freeable_memory, I made determine_dirtyable_memory in\nmm/page-writeback.c global.\n\nSpecial thanks goes to Peter Zijlstra for suggesting the above calculation.\n\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\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": "8bc3be2751b4f74ab90a446da1912fd8204d53f7",
      "tree": "2bc514025a906203244d98de70fb6bd87f3ac9ac",
      "parents": [
        "a322f8ab66f50b6c0dcdb59abae84fede7a5fded"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Mon Feb 04 22:29:36 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Feb 05 09:44:19 2008 -0800"
      },
      "message": "writeback: speed up writeback of big dirty files\n\nAfter making dirty a 100M file, the normal behavior is to start the\nwriteback for all data after 30s delays.  But sometimes the following\nhappens instead:\n\n\t- after 30s:    ~4M\n\t- after 5s:     ~4M\n\t- after 5s:     all remaining 92M\n\nSome analyze shows that the internal io dispatch queues goes like this:\n\n\t\ts_io            s_more_io\n\t\t-------------------------\n\t1)\t100M,1K         0\n\t2)\t1K              96M\n\t3)\t0               96M\n1) initial state with a 100M file and a 1K file\n\n2) 4M written, nr_to_write \u003c\u003d 0, so write more\n\n3) 1K written, nr_to_write \u003e 0, no more writes(BUG)\n\nnr_to_write \u003e 0 in (3) fools the upper layer to think that data have all\nbeen written out.  The big dirty file is actually still sitting in\ns_more_io.  We cannot simply splice s_more_io back to s_io as soon as s_io\nbecomes empty, and let the loop in generic_sync_sb_inodes() continue: this\nmay starve newly expired inodes in s_dirty.  It is also not an option to\ndraw inodes from both s_more_io and s_dirty, an let the loop go on: this\nmight lead to live locks, and might also starve other superblocks in sync\ntime(well kupdate may still starve some superblocks, that\u0027s another bug).\n\nWe have to return when a full scan of s_io completes.  So nr_to_write \u003e 0\ndoes not necessarily mean that \"all data are written\".  This patch\nintroduces a flag writeback_control.more_io to indicate that more io should\nbe done.  With it the big dirty file no longer has to wait for the next\nkupdate invokation 5s later.\n\nIn sync_sb_inodes() we only set more_io on super_blocks we actually\nvisited.  This avoids the interaction between two pdflush deamons.\n\nAlso in __sync_single_inode() we don\u0027t blindly keep requeuing the io if the\nfilesystem cannot progress.  Failing to do so may lead to 100% iowait.\n\nTested-by: Mike Snitzer \u003csnitzer@gmail.com\u003e\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Michael Rubin \u003cmrubin@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": "195cf453d2c3d789cbe80e3735755f860c2fb222",
      "tree": "fad48a8167744b6c091c8ca499bc78b859af8957",
      "parents": [
        "3dfa5721f12c3d5a441448086bee156887daa961"
      ],
      "author": {
        "name": "Bron Gondwana",
        "email": "brong@fastmail.fm",
        "time": "Mon Feb 04 22:29:20 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Feb 05 09:44:18 2008 -0800"
      },
      "message": "mm/page-writeback: highmem_is_dirtyable option\n\nAdd vm.highmem_is_dirtyable toggle\n\nA 32 bit machine with HIGHMEM64 enabled running DCC has an MMAPed file of\napproximately 2Gb size which contains a hash format that is written\nrandomly by the dbclean process.  On 2.6.16 this process took a few\nminutes.  With lowmem only accounting of dirty ratios, this takes about 12\nhours of 100% disk IO, all random writes.\n\nInclude a toggle in /proc/sys/vm/highmem_is_dirtyable which can be set to 1 to\nadd the highmem back to the total available memory count.\n\n[akpm@linux-foundation.org: Fix the CONFIG_DETECT_SOFTLOCKUP\u003dy build]\nSigned-off-by: Bron Gondwana \u003cbrong@fastmail.fm\u003e\nCc: Ethan Solomita \u003csolo@google.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\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": "c23f72cae9523d29ff94eec8f30ccbdaf234b20e",
      "tree": "1e5f46971510cd36a3deebfa8f160933212f4df0",
      "parents": [
        "031f2dcd7075e218e74dd7f942ad015cf82dffab"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Jan 14 21:21:29 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Jan 14 21:21:29 2008 -0800"
      },
      "message": "Revert \"writeback: introduce writeback_control.more_io to indicate more io\"\n\nThis reverts commit 2e6883bdf49abd0e7f0d9b6297fc3be7ebb2250b, as\nrequested by Fengguang Wu.  It\u0027s not quite fully baked yet, and while\nthere are patches around to fix the problems it caused, they should get\nmore testing.  Says Fengguang: \"I\u0027ll resend them both for -mm later on,\nin a more complete patchset\".\n\nSee\n\n\thttp://bugzilla.kernel.org/show_bug.cgi?id\u003d9738\n\nfor some of this discussion.\n\nRequested-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1c0eeaf5698597146ed9b873e2f9e0961edcf0f9",
      "tree": "5265eac8437e8ce517a62db8fe2bd99db5b7019b",
      "parents": [
        "2e6883bdf49abd0e7f0d9b6297fc3be7ebb2250b"
      ],
      "author": {
        "name": "Joern Engel",
        "email": "joern@wohnheim.fh-wedel.de",
        "time": "Tue Oct 16 23:30:44 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:43:02 2007 -0700"
      },
      "message": "introduce I_SYNC\n\nI_LOCK was used for several unrelated purposes, which caused deadlock\nsituations in certain filesystems as a side effect.  One of the purposes\nnow uses the new I_SYNC bit.\n\nAlso document the various bits and change their order from historical to\nlogical.\n\n[bunk@stusta.de: make fs/inode.c:wake_up_inode() static]\nSigned-off-by: Joern Engel \u003cjoern@wohnheim.fh-wedel.de\u003e\nCc: Dave Kleikamp \u003cshaggy@linux.vnet.ibm.com\u003e\nCc: David Chinner \u003cdgc@sgi.com\u003e\nCc: Anton Altaparmakov \u003caia21@cam.ac.uk\u003e\nCc: Al Viro \u003cviro@ftp.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\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": "2e6883bdf49abd0e7f0d9b6297fc3be7ebb2250b",
      "tree": "aec0418150413c7e9f43fb2ec68bfd24738b0623",
      "parents": [
        "1f7decf6d9f06dac008b8d66935c0c3b18e564f9"
      ],
      "author": {
        "name": "Fengguang Wu",
        "email": "wfg@mail.ustc.edu.cn",
        "time": "Tue Oct 16 23:30:43 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:43:02 2007 -0700"
      },
      "message": "writeback: introduce writeback_control.more_io to indicate more io\n\nAfter making dirty a 100M file, the normal behavior is to start the writeback\nfor all data after 30s delays.  But sometimes the following happens instead:\n\n\t- after 30s:    ~4M\n\t- after 5s:     ~4M\n\t- after 5s:     all remaining 92M\n\nSome analyze shows that the internal io dispatch queues goes like this:\n\n\t\ts_io            s_more_io\n\t\t-------------------------\n\t1)\t100M,1K         0\n\t2)\t1K              96M\n\t3)\t0               96M\n\n1) initial state with a 100M file and a 1K file\n2) 4M written, nr_to_write \u003c\u003d 0, so write more\n3) 1K written, nr_to_write \u003e 0, no more writes(BUG)\n\nnr_to_write \u003e 0 in (3) fools the upper layer to think that data have all been\nwritten out.  The big dirty file is actually still sitting in s_more_io.  We\ncannot simply splice s_more_io back to s_io as soon as s_io becomes empty, and\nlet the loop in generic_sync_sb_inodes() continue: this may starve newly\nexpired inodes in s_dirty.  It is also not an option to draw inodes from both\ns_more_io and s_dirty, an let the loop go on: this might lead to live locks,\nand might also starve other superblocks in sync time(well kupdate may still\nstarve some superblocks, that\u0027s another bug).\n\nWe have to return when a full scan of s_io completes.  So nr_to_write \u003e 0 does\nnot necessarily mean that \"all data are written\".  This patch introduces a\nflag writeback_control.more_io to indicate this situation.  With it the big\ndirty file no longer has to wait for the next kupdate invocation 5s later.\n\nCc: David Chinner \u003cdgc@sgi.com\u003e\nCc: Ken Chen \u003ckenchen@google.com\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": "04fbfdc14e5f48463820d6b9807daa5e9c92c51f",
      "tree": "c62905212c8c6373b2258c7f528398d3c831b075",
      "parents": [
        "145ca25eb2fbd20d4faf1bad4628c7650332058f"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Oct 16 23:25:50 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:42:45 2007 -0700"
      },
      "message": "mm: per device dirty threshold\n\nScale writeback cache per backing device, proportional to its writeout speed.\n\nBy decoupling the BDI dirty thresholds a number of problems we currently have\nwill go away, namely:\n\n - mutual interference starvation (for any number of BDIs);\n - deadlocks with stacked BDIs (loop, FUSE and local NFS mounts).\n\nIt might be that all dirty pages are for a single BDI while other BDIs are\nidling. By giving each BDI a \u0027fair\u0027 share of the dirty limit, each one can have\ndirty pages outstanding and make progress.\n\nA global threshold also creates a deadlock for stacked BDIs; when A writes to\nB, and A generates enough dirty pages to get throttled, B will never start\nwriteback until the dirty pages go away. Again, by giving each BDI its own\n\u0027independent\u0027 dirty limit, this problem is avoided.\n\nSo the problem is to determine how to distribute the total dirty limit across\nthe BDIs fairly and efficiently. A DBI that has a large dirty limit but does\nnot have any dirty pages outstanding is a waste.\n\nWhat is done is to keep a floating proportion between the DBIs based on\nwriteback completions. This way faster/more active devices get a larger share\nthan slower/idle devices.\n\n[akpm@linux-foundation.org: fix warnings]\n[hugh@veritas.com: Fix occasional hang when a task couldn\u0027t get out of balance_dirty_pages]\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\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": "f4921aff5b174349bc36551f142a5dbac782ea3f",
      "tree": "bdff8ca1531977ad1d04ac8d70e10f8dfbb26c38",
      "parents": [
        "419217cb1d0266f62cbea6cdc6b1d1324350bc34",
        "05c88babab957dfd63bd351b25042d80bd854dd0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Oct 15 10:46:05 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Oct 15 10:47:35 2007 -0700"
      },
      "message": "Merge git://git.linux-nfs.org/pub/linux/nfs-2.6\n\n* git://git.linux-nfs.org/pub/linux/nfs-2.6: (131 commits)\n  NFSv4: Fix a typo in nfs_inode_reclaim_delegation\n  NFS: Add a boot parameter to disable 64 bit inode numbers\n  NFS: nfs_refresh_inode should clear cache_validity flags on success\n  NFS: Fix a connectathon regression in NFSv3 and NFSv4\n  NFS: Use nfs_refresh_inode() in ops that aren\u0027t expected to change the inode\n  SUNRPC: Don\u0027t call xprt_release in call refresh\n  SUNRPC: Don\u0027t call xprt_release() if call_allocate fails\n  SUNRPC: Fix buggy UDP transmission\n  [23/37] Clean up duplicate includes in\n  [2.6 patch] net/sunrpc/rpcb_clnt.c: make struct rpcb_program static\n  SUNRPC: Use correct type in buffer length calculations\n  SUNRPC: Fix default hostname created in rpc_create()\n  nfs: add server port to rpc_pipe info file\n  NFS: Get rid of some obsolete macros\n  NFS: Simplify filehandle revalidation\n  NFS: Ensure that nfs_link() returns a hashed dentry\n  NFS: Be strict about dentry revalidation when doing exclusive create\n  NFS: Don\u0027t zap the readdir caches upon error\n  NFS: Remove the redundant nfs_reval_fsid()\n  NFSv3: Always use directory post-op attributes in nfs3_proc_lookup\n  ...\n\nFix up trivial conflict due to sock_owned_by_user() cleanup manually in\nnet/sunrpc/xprtsock.c\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": "90e9a3f9b0a14198a8ae5a0a5c13ad30f0b8b40d",
      "tree": "7d7a39b929bc07c7a339d316df654858829e7cce",
      "parents": [
        "f758c885199611504ff681e3ba66c410b4e9e995"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sun Jul 22 19:27:46 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:15:16 2007 -0400"
      },
      "message": "VFS: Remove writeback_control-\u003efs_private\n\nThe only user of this field was NFS.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "a200ee182a016752464a12cb2e8762e48254bb09",
      "tree": "7b273f002625a4c368f7b20b144990f7f4f81df9",
      "parents": [
        "3eb215de26e6e94bf5fed9cb77230c383b30e53b"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "peterz@infradead.org",
        "time": "Mon Oct 08 18:54:37 2007 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Oct 08 12:58:14 2007 -0700"
      },
      "message": "mm: set_page_dirty_balance() vs -\u003epage_mkwrite()\n\nAll the current page_mkwrite() implementations also set the page dirty. Which\nresults in the set_page_dirty_balance() call to _not_ call balance, because the\npage is already found dirty.\n\nThis allows us to dirty a _lot_ of pages without ever hitting\nbalance_dirty_pages().  Not good (tm).\n\nForce a balance call if -\u003epage_mkwrite() was successful.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e8edc6e03a5c8562dc70a6d969f732bdb355a7e7",
      "tree": "fc86c863655128a7041dfe613d14393d761fa7b9",
      "parents": [
        "ff1be9ad61e3e17ba83702d8ed0b534e5b8ee15c"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon May 21 01:22:52 2007 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon May 21 09:18:19 2007 -0700"
      },
      "message": "Detach sched.h from mm.h\n\nFirst thing mm.h does is including sched.h solely for can_do_mlock() inline\nfunction which has \"current\" dereference inside. By dealing with can_do_mlock()\nmm.h can be detached from sched.h which is good. See below, why.\n\nThis patch\na) removes unconditional inclusion of sched.h from mm.h\nb) makes can_do_mlock() normal function in mm/mlock.c\nc) exports can_do_mlock() to not break compilation\nd) adds sched.h inclusions back to files that were getting it indirectly.\ne) adds less bloated headers to some files (asm/signal.h, jiffies.h) that were\n   getting them indirectly\n\nNet result is:\na) mm.h users would get less code to open, read, preprocess, parse, ... if\n   they don\u0027t need sched.h\nb) sched.h stops being dependency for significant number of files:\n   on x86_64 allmodconfig touching sched.h results in recompile of 4083 files,\n   after patch it\u0027s only 3744 (-8.3%).\n\nCross-compile tested on\n\n\tall arm defconfigs, all mips defconfigs, all powerpc defconfigs,\n\talpha alpha-up\n\tarm\n\ti386 i386-up i386-defconfig i386-allnoconfig\n\tia64 ia64-up\n\tm68k\n\tmips\n\tparisc parisc-up\n\tpowerpc powerpc-up\n\ts390 s390-up\n\tsparc sparc-up\n\tsparc64 sparc64-up\n\tum-x86_64\n\tx86_64 x86_64-up x86_64-defconfig x86_64-allnoconfig\n\nas well as my two usual configs.\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0ea971801625184a91a6d80ea85e53875caa0bf5",
      "tree": "6f4144b7ba809fccfe6d75314df8c348596c9a01",
      "parents": [
        "e10cc1df1d2014f68a4bdcf73f6dd122c4561f94"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Thu May 10 22:22:51 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri May 11 08:29:35 2007 -0700"
      },
      "message": "consolidate generic_writepages and mpage_writepages\n\nClean up massive code duplication between mpage_writepages() and\ngeneric_writepages().\n\nThe new generic function, write_cache_pages() takes a function pointer\nargument, which will be called for each page to be written.\n\nMaybe cifs_writepages() too can use this infrastructure, but I\u0027m not\ntouching that with a ten-foot pole.\n\nThe upcoming page writeback support in fuse will also want this.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nAcked-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c63c7b051395368573779c8309aa5c990dcf2f96",
      "tree": "db54090eef99349d15b95fcd8c2620a2403d8db8",
      "parents": [
        "8b09bee3083897e375bd0bf9d60f48daedfab3e0"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Apr 02 19:29:52 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Apr 30 22:17:06 2007 -0700"
      },
      "message": "NFS: Fix a race when doing NFS write coalescing\n\nCurrently we do write coalescing in a very inefficient manner: one pass in\ngeneric_writepages() in order to lock the pages for writing, then one pass\nin nfs_flush_mapping() and/or nfs_sync_mapping_wait() in order to gather\nthe locked pages for coalescing into RPC requests of size \"wsize\".\n\nIn fact, it turns out there is actually a deadlock possible here since we\nonly start I/O on the second pass. If the user signals the process while\nwe\u0027re in nfs_sync_mapping_wait(), for instance, then we may exit before\nstarting I/O on all the requests that have been queued up.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "232ea4d69d81169453344b7d05203425c88d973b",
      "tree": "00799a50022f97a93c0e7524752b817399955851",
      "parents": [
        "b1a316f6f9c54d668df4304ddf935595501ccb25"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Wed Feb 28 20:13:21 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Mar 01 14:53:38 2007 -0800"
      },
      "message": "[PATCH] throttle_vm_writeout(): don\u0027t loop on GFP_NOFS and GFP_NOIO allocations\n\nthrottle_vm_writeout() is designed to wait for the dirty levels to subside.\nBut if the caller holds IO or FS locks, we might be holding up that writeout.\n\nSo change it to take a single nap to give other devices a chance to clean some\nmemory, then return.\n\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nCc: Kumar Gala \u003cgalak@kernel.crashing.org\u003e\nCc: Pete Zaitcev \u003czaitcev@redhat.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3fcfab16c5b86eaa3db3a9a31adba550c5b67141",
      "tree": "bd348fa081b8fbec2c79fbf8f173a306d70b2b2c",
      "parents": [
        "79e2de4bc53d7ca2a8eedee49e4a92479b4b530e"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Thu Oct 19 23:28:16 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 20 10:26:35 2006 -0700"
      },
      "message": "[PATCH] separate bdi congestion functions from queue congestion functions\n\nSeparate out the concept of \"queue congestion\" from \"backing-dev congestion\".\nCongestion is a backing-dev concept, not a queue concept.\n\nThe blk_* congestion functions are retained, as wrappers around the core\nbacking-dev congestion functions.\n\nThis proper layering is needed so that NFS can cleanly use the congestion\nfunctions, and so that CONFIG_BLOCK\u003dn actually links.\n\nCc: \"Thomas Maier\" \u003cbalagi@justmail.de\u003e\nCc: \"Jens Axboe\" \u003cjens.axboe@oracle.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Peter Osterlund \u003cpetero2@telia.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f30c2269544bffc7bf1b0d7c0abe5be1be83b8cb",
      "tree": "2f6140d8a555af6a133690ed6b42599e78a43c54",
      "parents": [
        "670e9f34ee3c7e052514c85014d2fdd99b672cdc"
      ],
      "author": {
        "name": "Uwe Zeisberger",
        "email": "Uwe_Zeisberger@digi.com",
        "time": "Tue Oct 03 23:01:26 2006 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Tue Oct 03 23:01:26 2006 +0200"
      },
      "message": "fix file specification in comments\n\nMany files include the filename at the beginning, serveral used a wrong one.\n\nSigned-off-by: Uwe Zeisberger \u003cUwe_Zeisberger@digi.com\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "811d736f9e8013966e1a5a930c0db09508bdbb15",
      "tree": "566225f7991f987007ccc2e8d99255f21041b6cb",
      "parents": [
        "7b0de42d7c5a471741ede4e71727d88000e6ea59"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 29 19:06:09 2006 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@nelson.home.kernel.dk",
        "time": "Sat Sep 30 20:52:26 2006 +0200"
      },
      "message": "[PATCH] BLOCK: Dissociate generic_writepages() from mpage stuff [try #6]\n\nDissociate the generic_writepages() function from the mpage stuff, moving its\ndeclaration to linux/mm.h and actually emitting a full implementation into\nmm/page-writeback.c.\n\nThe implementation is a partial duplicate of mpage_writepages() with all BIO\nreferences removed.\n\nIt is used by NFS to do writeback.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "2d1d43f6a43b703587e759145f69467e7c6553a7",
      "tree": "8ceb1c78a54c6f44f177779b2b7bdbbc9e03048a",
      "parents": [
        "40c99aae23529f3d069ae08836ae46fadb3fd2bd"
      ],
      "author": {
        "name": "Chandra Seetharaman",
        "email": "sekharan@us.ibm.com",
        "time": "Fri Sep 29 02:01:25 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 29 09:18:22 2006 -0700"
      },
      "message": "[PATCH] call mm/page-writeback.c:set_ratelimit() when new pages are hot-added\n\nratelimit_pages in page-writeback.c is recalculated (in set_ratelimit())\nevery time a CPU is hot-added/removed.  But this value is not recalculated\nwhen new pages are hot-added.\n\nThis patch fixes that problem by calling set_ratelimit() when new pages\nare hot-added.\n\n[akpm@osdl.org: cleanups]\nSigned-off-by: Chandra Seetharaman \u003csekharan@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "edc79b2a46ed854595e40edcf3f8b37f9f14aa3f",
      "tree": "c1120bebede9660ab00f9439aa7a84ab9434ac38",
      "parents": [
        "d08b3851da41d0ee60851f2c75b118e1f7a5fc89"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Mon Sep 25 23:30:58 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:44 2006 -0700"
      },
      "message": "[PATCH] mm: balance dirty pages\n\nNow that we can detect writers of shared mappings, throttle them.  Avoids OOM\nby surprise.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "275a082fe9308e710324e26ccb5363c53d8fd45f",
      "tree": "e97df6e45f98ea2827f71dc749f8cd47f3f353cc",
      "parents": [
        "94a6d75320b3681e6e728b70e18bd186cb55e682"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Aug 22 20:06:24 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:54 2006 -0400"
      },
      "message": "Add a real API for dealing with blk_congestion_wait()\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "111ebb6e6f7bd7de6d722c5848e95621f43700d9",
      "tree": "bb00b13001db9be201e9b6d31468a79f4d1240bf",
      "parents": [
        "4c91c3648c620003cb7b21b8858f36cd6132e168"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Jun 23 02:03:26 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 23 07:42:49 2006 -0700"
      },
      "message": "[PATCH] writeback: fix range handling\n\nWhen a writeback_control\u0027s `start\u0027 and `end\u0027 fields are used to\nindicate a one-byte-range starting at file offset zero, the required\nvalues of .start\u003d0,.end\u003d0 mean that the -\u003ewritepages() implementation\nhas no way of telling that it is being asked to perform a range\nrequest.  Because we\u0027re currently overloading (start \u003d\u003d 0 \u0026\u0026 end \u003d\u003d 0)\nto mean \"this is not a write-a-range request\".\n\nTo make all this sane, the patch changes range of writeback_control.\n\nSo caller does: If it is calling -\u003ewritepages() to write pages, it\nsets range (range_start/end or range_cyclic) always.\n\nAnd if range_cyclic is true, -\u003ewritepages() thinks the range is\ncyclic, otherwise it just uses range_start and range_end.\n\nThis patch does,\n\n    - Add LLONG_MAX, LLONG_MIN, ULLONG_MAX to include/linux/kernel.h\n      -1 is usually ok for range_end (type is long long). But, if someone did,\n\n\t\trange_end +\u003d val;\t\trange_end is \"val - 1\"\n\t\tu64val \u003d range_end \u003e\u003e bits;\tu64val is \"~(0ULL)\"\n\n      or something, they are wrong. So, this adds LLONG_MAX to avoid nasty\n      things, and uses LLONG_MAX for range_end.\n\n    - All callers of -\u003ewritepages() sets range_start/end or range_cyclic.\n\n    - Fix updates of -\u003ewriteback_index. It seems already bit strange.\n      If it starts at 0 and ended by check of nr_to_write, this last\n      index may reduce chance to scan end of file.  So, this updates\n      -\u003ewriteback_index only if range_cyclic is true or whole-file is\n      scanned.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nCc: Nathan Scott \u003cnathans@sgi.com\u003e\nCc: Anton Altaparmakov \u003caia21@cantab.net\u003e\nCc: Steven French \u003csfrench@us.ibm.com\u003e\nCc: \"Vladimir V. Saveliev\" \u003cvs@namesys.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "fa5a734e406b53761fcc5ee22366006f71112c2d",
      "tree": "003a238b9207e38f747bfb119a30fb52f1cd5ae9",
      "parents": [
        "8a14342683b1e3adcf5f78660a42fcbd95b44a35"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Fri Mar 24 03:18:10 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 24 07:33:26 2006 -0800"
      },
      "message": "[PATCH] balance_dirty_pages_ratelimited: take nr_pages arg\n\nModify balance_dirty_pages_ratelimited() so that it can take a\nnumber-of-pages-which-I-just-dirtied argument.  For msync().\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f6ef943813ac3085ece7252ea101d663581219f6",
      "tree": "e32d3e57ba6ae235ec1f510b16d77fe9bfa8f96e",
      "parents": [
        "36f574135e36b86bb6ae794bf1d0fce3efa5601f"
      ],
      "author": {
        "name": "Bart Samwel",
        "email": "bart@samwel.tk",
        "time": "Fri Mar 24 03:15:48 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 24 07:33:20 2006 -0800"
      },
      "message": "[PATCH] Represent dirty_*_centisecs as jiffies internally\n\nMake that the internal values for:\n\n/proc/sys/vm/dirty_writeback_centisecs\n/proc/sys/vm/dirty_expire_centisecs\n\nare stored as jiffies instead of centiseconds.  Let the sysctl interface do\nthe conversions with full precision using clock_t_to_jiffies, instead of\ndoing overflow-sensitive on-the-fly conversions every time the values are\nused.\n\nCons: apparent precision loss if HZ is not a multiple of 100, because of\nconversion back and forth.  This is a common problem for all sysctl values\nthat use proc_dointvec_userhz_jiffies.  (There is only one other in-tree\nuse, in net/core/neighbour.c.)\n\nSigned-off-by: Bart Samwel \u003cbart@samwel.tk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "268fc16e343b4f8e249468747db2e658da46a814",
      "tree": "871a1b1ad8250d1f5b0e4585fe32d00f90443bd3",
      "parents": [
        "e5174baaea7585760f02eef23b225847d209a8db"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Jan 08 01:02:12 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:47 2006 -0800"
      },
      "message": "[PATCH] export/change sync_page_range/_nolock()\n\nThis exports/changes the sync_page_range/_nolock().  The fatfs needs\nsync_page_range/_nolock() for expanding truncate, and changes \"size_t count\"\nto \"loff_t count\".\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": "22905f775dd6a8b73be99826dcad07ceec00244b",
      "tree": "960c0ad3d10fa208a31b78256788f332e5ebdd48",
      "parents": [
        "d99cf9d679a520d67f81d805b7cb91c68e1847f0"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Wed Nov 16 15:07:01 2005 -0800"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jan 06 14:58:38 2006 -0500"
      },
      "message": "identify multipage -\u003ewritepages() calls\n\n NFS needs to be able to distinguish between single-page -\u003ewritepage() calls and\n multipage -\u003ewritepages() calls.\n\n For the single-page writepage calls NFS can kick off the I/O within the\n context of -\u003ewritepage().\n\n For multipage -\u003ewritepages calls, nfs_writepage() will leave the I/O pending\n and nfs_writepages() will kick off the I/O when it all has been queued up\n within NFS.\n\n Cc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\n Signed-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\n Signed-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.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": "5ce7852cdf07ab903fb1c72d0915ac492c6e07c7",
      "tree": "7992224cd306be5e827de0bdf6255bc87a2bf4c8",
      "parents": [
        "dd81eca83c8300c95d8a1eaf0d38f56513711535"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Sat Sep 10 00:26:28 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Sep 10 10:06:25 2005 -0700"
      },
      "message": "[PATCH] mm/filemap.c: make two functions static\n\nWith Nick Piggin \u003cnpiggin@suse.de\u003e\n\nGive some things static scope.\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "687a21cee17000177b1935896b9b475acf136678",
      "tree": "41e59684ae6479e84b34edc46972ce32c2cc58b7",
      "parents": [
        "05133fc498e788e1c1ca4e906f9e05d9779fd63b"
      ],
      "author": {
        "name": "Pekka J Enberg",
        "email": "penberg@cs.Helsinki.FI",
        "time": "Tue Jun 28 20:44:55 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Tue Jun 28 21:20:31 2005 -0700"
      },
      "message": "[PATCH] rename wakeup_bdflush to wakeup_pdflush\n\nSigned-off-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "22e2c507c301c3dbbcf91b4948b88f78842ee6c9",
      "tree": "9a97c91d1362e69703aa286021daffb8a5456f4c",
      "parents": [
        "020f46a39eb7b99a575b9f4d105fce2b142acdf1"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@suse.de",
        "time": "Mon Jun 27 10:55:12 2005 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Mon Jun 27 14:33:29 2005 -0700"
      },
      "message": "[PATCH] Update cfq io scheduler to time sliced design\n\nThis updates the CFQ io scheduler to the new time sliced design (cfq\nv3).  It provides full process fairness, while giving excellent\naggregate system throughput even for many competing processes.  It\nsupports io priorities, either inherited from the cpu nice value or set\ndirectly with the ioprio_get/set syscalls.  The latter closely mimic\nset/getpriority.\n\nThis import is based on my latest from -mm.\n\nSigned-off-by: Jens Axboe \u003caxboe@suse.de\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"
    }
  ]
}
