)]}'
{
  "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": "eb59c505f8a5906ad2e053d14fab50eb8574fd6f",
      "tree": "c6e875adc12b481b916e847e8f80b8881a0fb02c",
      "parents": [
        "1619ed8f60959829d070d8f39cd2f8ca0e7135ce",
        "c233523b3d392e530033a7587d7970dc62a02361"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 08 13:10:57 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 08 13:10:57 2012 -0800"
      },
      "message": "Merge branch \u0027pm-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm\n\n* \u0027pm-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (76 commits)\n  PM / Hibernate: Implement compat_ioctl for /dev/snapshot\n  PM / Freezer: fix return value of freezable_schedule_timeout_killable()\n  PM / shmobile: Allow the A4R domain to be turned off at run time\n  PM / input / touchscreen: Make st1232 use device PM QoS constraints\n  PM / QoS: Introduce dev_pm_qos_add_ancestor_request()\n  PM / shmobile: Remove the stay_on flag from SH7372\u0027s PM domains\n  PM / shmobile: Don\u0027t include SH7372\u0027s INTCS in syscore suspend/resume\n  PM / shmobile: Add support for the sh7372 A4S power domain / sleep mode\n  PM: Drop generic_subsys_pm_ops\n  PM / Sleep: Remove forward-only callbacks from AMBA bus type\n  PM / Sleep: Remove forward-only callbacks from platform bus type\n  PM: Run the driver callback directly if the subsystem one is not there\n  PM / Sleep: Make pm_op() and pm_noirq_op() return callback pointers\n  PM/Devfreq: Add Exynos4-bus device DVFS driver for Exynos4210/4212/4412.\n  PM / Sleep: Merge internal functions in generic_ops.c\n  PM / Sleep: Simplify generic system suspend callbacks\n  PM / Hibernate: Remove deprecated hibernation snapshot ioctls\n  PM / Sleep: Fix freezer failures due to racy usermodehelper_is_disabled()\n  ARM: S3C64XX: Implement basic power domain support\n  PM / shmobile: Use common always on power domain governor\n  ...\n\nFix up trivial conflict in fs/xfs/xfs_buf.c due to removal of unused\nXBT_FORCE_SLEEP bit\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": "ff01bb4832651c6d25ac509a06a10fcbd75c461c",
      "tree": "bbfdebd317db97d346df78293566f36e883b1be9",
      "parents": [
        "94ea4158f1733e3b10cef067d535f504866e0c41"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Sep 16 02:31:11 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:07 2012 -0500"
      },
      "message": "fs: move code out of buffer.c\n\nMove invalidate_bdev, block_sync_page into fs/block_dev.c.  Export\nkill_bdev as well, so brd doesn\u0027t have to open code it.  Reduce\nbuffer_head.h requirement accordingly.\n\nRemoved a rather large comment from invalidate_bdev, as it looked a bit\nobsolete to bother moving.  The small comment replacing it says enough.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b7ba68c4a072c9aa8f04b8cf7838b6cd2f48d918",
      "tree": "cd8f8029111fc52d06060691fb0325ba2e798e94",
      "parents": [
        "8d274ab7d3d6f23e2bc0e433c8d53acbe60a9773",
        "90363ddf0a1a4dccfbb8d0c10b8f488bc7fa69f8"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Sun Dec 25 23:42:20 2011 +0100"
      },
      "committer": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Sun Dec 25 23:42:20 2011 +0100"
      },
      "message": "Merge branch \u0027pm-sleep\u0027 into pm-for-linus\n\n* pm-sleep: (51 commits)\n  PM: Drop generic_subsys_pm_ops\n  PM / Sleep: Remove forward-only callbacks from AMBA bus type\n  PM / Sleep: Remove forward-only callbacks from platform bus type\n  PM: Run the driver callback directly if the subsystem one is not there\n  PM / Sleep: Make pm_op() and pm_noirq_op() return callback pointers\n  PM / Sleep: Merge internal functions in generic_ops.c\n  PM / Sleep: Simplify generic system suspend callbacks\n  PM / Hibernate: Remove deprecated hibernation snapshot ioctls\n  PM / Sleep: Fix freezer failures due to racy usermodehelper_is_disabled()\n  PM / Sleep: Recommend [un]lock_system_sleep() over using pm_mutex directly\n  PM / Sleep: Replace mutex_[un]lock(\u0026pm_mutex) with [un]lock_system_sleep()\n  PM / Sleep: Make [un]lock_system_sleep() generic\n  PM / Sleep: Use the freezer_count() functions in [un]lock_system_sleep() APIs\n  PM / Freezer: Remove the \"userspace only\" constraint from freezer[_do_not]_count()\n  PM / Hibernate: Replace unintuitive \u0027if\u0027 condition in kernel/power/user.c with \u0027else\u0027\n  Freezer / sunrpc / NFS: don\u0027t allow TASK_KILLABLE sleeps to block the freezer\n  PM / Sleep: Unify diagnostic messages from device suspend/resume\n  ACPI / PM: Do not save/restore NVS on Asus K54C/K54HR\n  PM / Hibernate: Remove deprecated hibernation test modes\n  PM / Hibernate: Thaw processes in SNAPSHOT_CREATE_IMAGE ioctl test path\n  ...\n\nConflicts:\n\tkernel/kmod.c\n"
    },
    {
      "commit": "b00f4dc5ff022cb9cbaffd376d9454d7fa1e496f",
      "tree": "40f1b232e2f1e8ac365317a14fdcbcb331722b46",
      "parents": [
        "1eac8111e0763853266a171ce11214da3a347a0a",
        "b9e26dfdad5a4f9cbdaacafac6998614cc9c41bc"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Wed Dec 21 21:59:45 2011 +0100"
      },
      "committer": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Wed Dec 21 21:59:45 2011 +0100"
      },
      "message": "Merge branch \u0027master\u0027 into pm-sleep\n\n* master: (848 commits)\n  SELinux: Fix RCU deref check warning in sel_netport_insert()\n  binary_sysctl(): fix memory leak\n  mm/vmalloc.c: remove static declaration of va from __get_vm_area_node\n  ipmi_watchdog: restore settings when BMC reset\n  oom: fix integer overflow of points in oom_badness\n  memcg: keep root group unchanged if creation fails\n  nilfs2: potential integer overflow in nilfs_ioctl_clean_segments()\n  nilfs2: unbreak compat ioctl\n  cpusets: stall when updating mems_allowed for mempolicy or disjoint nodemask\n  evm: prevent racing during tfm allocation\n  evm: key must be set once during initialization\n  mmc: vub300: fix type of firmware_rom_wait_states module parameter\n  Revert \"mmc: enable runtime PM by default\"\n  mmc: sdhci: remove \"state\" argument from sdhci_suspend_host\n  x86, dumpstack: Fix code bytes breakage due to missing KERN_CONT\n  IB/qib: Correct sense on freectxts increment and decrement\n  RDMA/cma: Verify private data length\n  cgroups: fix a css_set not found bug in cgroup_attach_proc\n  oprofile: Fix uninitialized memory access when writing to writing to oprofilefs\n  Revert \"xen/pv-on-hvm kexec: add xs_reset_watches to shutdown watches from old kernel\"\n  ...\n\nConflicts:\n\tkernel/cgroup_freezer.c\n"
    },
    {
      "commit": "1bc36b6426ae49139e9f56491db76b95921454d7",
      "tree": "66708091d7628c45cb81279dcdefd911b11aa3e1",
      "parents": [
        "b3bba872ddb0320a7ecb54decae53c13ceb2ed4c"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Oct 19 11:44:41 2011 +0200"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Dec 18 14:20:18 2011 +0800"
      },
      "message": "writeback: Include all dirty inodes in background writeback\n\nCurrent livelock avoidance code makes background work to include only inodes\nthat were dirtied before background writeback has started. However background\nwriteback can be running for a long time and thus excluding newly dirtied\ninodes can eventually exclude significant portion of dirty inodes making\nbackground writeback inefficient. Since background writeback avoids livelocking\nthe flusher thread by yielding to any other work, there is no real reason why\nbackground work should not include all dirty inodes so change the logic in\nwb_writeback().\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "b3bba872ddb0320a7ecb54decae53c13ceb2ed4c",
      "tree": "ed47c72d9193d40173e319663d4e1eb1c60a7d15",
      "parents": [
        "384703b8e6cd4c8ef08512e596024e028c91c339"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Dec 08 16:53:54 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Dec 18 14:20:17 2011 +0800"
      },
      "message": "writeback: show writeback reason with __print_symbolic\n\nThis makes the binary trace understandable by trace-cmd.\n\nCC: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCC: Curt Wohlgemuth \u003ccurtw@google.com\u003e\nCC: Steven Rostedt \u003crostedt@goodmis.org\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "786228ab3095fe18dba3bc0d62055a123991d9d9",
      "tree": "b722e6d7ab1d8bf2f595bf941dc8c624bc9631e2",
      "parents": [
        "8748dfae379573cdbea4e765b55e608a1764f918"
      ],
      "author": {
        "name": "Marcos Paulo de Souza",
        "email": "marcos.mage@gmail.com",
        "time": "Wed Nov 23 20:56:45 2011 +0800"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Nov 29 15:50:28 2011 +0800"
      },
      "message": "writeback: Fix issue on make htmldocs\n\nDocument the @reason parameter to make \"make htmldocs\" happy.\n\nAcked-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nSigned-off-by: Marcos Paulo de Souza \u003cmarcos.mage@gmail.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "8a32c441c1609f80e55df75422324a1151208f40",
      "tree": "73884b06cc2db3ea155af9a88815bb5105a4473e",
      "parents": [
        "a0acae0e886d44bd5ce6d2f173c1ace0fcf0d9f6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 21 12:32:23 2011 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Nov 21 12:32:23 2011 -0800"
      },
      "message": "freezer: implement and use kthread_freezable_should_stop()\n\nWriteback and thinkpad_acpi have been using thaw_process() to prevent\ndeadlock between the freezer and kthread_stop(); unfortunately, this\nis inherently racy - nothing prevents freezing from happening between\nthaw_process() and kthread_stop().\n\nThis patch implements kthread_freezable_should_stop() which enters\nrefrigerator if necessary but is guaranteed to return if\nkthread_stop() is invoked.  Both thaw_process() users are converted to\nuse the new function.\n\nNote that this deadlock condition exists for many of freezable\nkthreads.  They need to be converted to use the new should_stop or\nfreezable workqueue.\n\nTested with synthetic test case.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Henrique de Moraes Holschuh \u003cibm-acpi@hmh.eng.br\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Oleg Nesterov \u003coleg@redhat.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": "ad4e38dd6a33bb3a4882c487d7abe621e583b982",
      "tree": "5b78b8929ade5372b2e24d4c1793f8cb39962146",
      "parents": [
        "ece13ac31bbe492d940ba0bc4ade2ae1521f46a5"
      ],
      "author": {
        "name": "Curt Wohlgemuth",
        "email": "curtw@google.com",
        "time": "Fri Oct 07 21:51:56 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Oct 31 00:33:27 2011 +0800"
      },
      "message": "writeback: send work item to queue_io, move_expired_inodes\n\nInstead of sending -\u003eolder_than_this to queue_io() and\nmove_expired_inodes(), send the entire wb_writeback_work\nstructure.  There are other fields of a work item that are\nuseful in these routines and in tracepoints.\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": "b00949aa2df9970a912bf060bc95e99da356881c",
      "tree": "d86e3942214c20de67a19fd19658c834cc5b5eb3",
      "parents": [
        "8927f66c4ede9a18b4b58f7e6f9debca67065f6b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Nov 18 14:38:33 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Oct 03 21:08:58 2011 +0800"
      },
      "message": "writeback: per-bdi background threshold\n\nOne thing puzzled me is that in JBOD case, the per-disk writeout\nperformance is smaller than the corresponding single-disk case even\nwhen they have comparable bdi_thresh. Tracing shows find that in single\ndisk case, bdi_writeback is always kept high while in JBOD case, it\ncould drop low from time to time and correspondingly bdi_reclaimable\ncould sometimes rush high.\n\nThe fix is to watch bdi_reclaimable and kick background writeback as\nsoon as it goes high. This resembles the global background threshold\nbut in per-bdi manner. The trick is, as long as bdi_reclaimable does\nnot go high, bdi_writeback naturally won\u0027t go low because\nbdi_reclaimable+bdi_writeback ~\u003d bdi_thresh.\n\nWith less fluctuated writeback pages, JBOD performance is observed to\nincrease noticeably in various cases.\n\nvmstat:nr_written values before/after patch:\n\n  3.1.0-rc4-wo-underrun+      3.1.0-rc4-bgthresh3+  \n------------------------  ------------------------  \n               125596480       +25.9%    158179363  JBOD-10HDD-16G/ext4-100dd-1M-24p-16384M-20:10-X\n                61790815      +110.4%    130032231  JBOD-10HDD-16G/ext4-10dd-1M-24p-16384M-20:10-X\n                58853546        -0.1%     58823828  JBOD-10HDD-16G/ext4-1dd-1M-24p-16384M-20:10-X\n               110159811       +24.7%    137355377  JBOD-10HDD-16G/xfs-100dd-1M-24p-16384M-20:10-X\n                69544762       +10.8%     77080047  JBOD-10HDD-16G/xfs-10dd-1M-24p-16384M-20:10-X\n                50644862        +0.5%     50890006  JBOD-10HDD-16G/xfs-1dd-1M-24p-16384M-20:10-X\n                42677090       +28.0%     54643527  JBOD-10HDD-thresh\u003d100M/ext4-100dd-1M-24p-16384M-100M:10-X\n                47491324       +13.3%     53785605  JBOD-10HDD-thresh\u003d100M/ext4-10dd-1M-24p-16384M-100M:10-X\n                52548986        +0.9%     53001031  JBOD-10HDD-thresh\u003d100M/ext4-1dd-1M-24p-16384M-100M:10-X\n                26783091       +36.8%     36650248  JBOD-10HDD-thresh\u003d100M/xfs-100dd-1M-24p-16384M-100M:10-X\n                35526347       +14.0%     40492312  JBOD-10HDD-thresh\u003d100M/xfs-10dd-1M-24p-16384M-100M:10-X\n                44670723        -1.1%     44177606  JBOD-10HDD-thresh\u003d100M/xfs-1dd-1M-24p-16384M-100M:10-X\n               127996037       +22.4%    156719990  JBOD-10HDD-thresh\u003d2G/ext4-100dd-1M-24p-16384M-2048M:10-X\n                57518856        +3.8%     59677625  JBOD-10HDD-thresh\u003d2G/ext4-10dd-1M-24p-16384M-2048M:10-X\n                51919909       +12.2%     58269894  JBOD-10HDD-thresh\u003d2G/ext4-1dd-1M-24p-16384M-2048M:10-X\n                86410514       +79.0%    154660433  JBOD-10HDD-thresh\u003d2G/xfs-100dd-1M-24p-16384M-2048M:10-X\n                40132519       +38.6%     55617893  JBOD-10HDD-thresh\u003d2G/xfs-10dd-1M-24p-16384M-2048M:10-X\n                48423248        +7.5%     52042927  JBOD-10HDD-thresh\u003d2G/xfs-1dd-1M-24p-16384M-2048M:10-X\n               206041046       +44.1%    296846536  JBOD-10HDD-thresh\u003d4G/xfs-100dd-1M-24p-16384M-4096M:10-X\n                72312903       -19.4%     58272885  JBOD-10HDD-thresh\u003d4G/xfs-10dd-1M-24p-16384M-4096M:10-X\n                50635672        -0.5%     50384787  JBOD-10HDD-thresh\u003d4G/xfs-1dd-1M-24p-16384M-4096M:10-X\n                68308534      +115.7%    147324758  JBOD-10HDD-thresh\u003d800M/ext4-100dd-1M-24p-16384M-800M:10-X\n                57882933       +14.5%     66269621  JBOD-10HDD-thresh\u003d800M/ext4-10dd-1M-24p-16384M-800M:10-X\n                52183472       +12.8%     58855181  JBOD-10HDD-thresh\u003d800M/ext4-1dd-1M-24p-16384M-800M:10-X\n                53788956       +94.2%    104460352  JBOD-10HDD-thresh\u003d800M/xfs-100dd-1M-24p-16384M-800M:10-X\n                44493342       +35.5%     60298210  JBOD-10HDD-thresh\u003d800M/xfs-10dd-1M-24p-16384M-800M:10-X\n                42641209       +18.9%     50681038  JBOD-10HDD-thresh\u003d800M/xfs-1dd-1M-24p-16384M-800M:10-X\n\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": "0e995816f4fb69cef602b7fe82da68ced6be3b41",
      "tree": "841ce0af67dfaef41e5297fdbfa52255a1343f0b",
      "parents": [
        "250f8e3db646028353a2a737ddb7a894c97a1098"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Fri Jul 29 22:14:35 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Jul 31 22:52:08 2011 +0800"
      },
      "message": "don\u0027t busy retry the inode on failed grab_super_passive()\n\nThis fixes a soft lockup on conditions\n\na) the flusher is working on a work by __bdi_start_writeback(), while\n\nb) someone else calls writeback_inodes_sb*() or sync_inodes_sb(), which\n   grab sb-\u003es_umount and enqueue a new work for the flusher to execute\n\nThe s_umount grabbed by (b) will fail the grab_super_passive() in (a).\nThen if the inode is requeued, wb_writeback() will busy retry on it.\nAs a result, wb_writeback() loops for ever without releasing\nwb-\u003elist_lock, which further blocks other tasks.\n\nFix the busy loop by redirtying the inode. This may undesirably delay\nthe writeback of the inode, however most likely it will be picked up\nsoon by the queued work by writeback_inodes_sb*(), sync_inodes_sb() or\neven writeback_inodes_wb().\n\nbug url: http://www.spinics.net/lists/linux-fsdevel/msg47292.html\n\nReported-by: Christoph Hellwig \u003chch@infradead.org\u003e\nTested-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "f01ef569cddb1a8627b1c6b3a134998ad1cf4b22",
      "tree": "29ea1a0942c8549c24411e976cd6891c7e995e89",
      "parents": [
        "a93a1329271038f0e8337061d3b41b3b212a851e",
        "bcff25fc8aa47a13faff8b4b992589813f7b450a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 10:39:54 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 10:39:54 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/writeback\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/writeback: (27 commits)\n  mm: properly reflect task dirty limits in dirty_exceeded logic\n  writeback: don\u0027t busy retry writeback on new/freeing inodes\n  writeback: scale IO chunk size up to half device bandwidth\n  writeback: trace global_dirty_state\n  writeback: introduce max-pause and pass-good dirty limits\n  writeback: introduce smoothed global dirty limit\n  writeback: consolidate variable names in balance_dirty_pages()\n  writeback: show bdi write bandwidth in debugfs\n  writeback: bdi write bandwidth estimation\n  writeback: account per-bdi accumulated written pages\n  writeback: make writeback_control.nr_to_write straight\n  writeback: skip tmpfs early in balance_dirty_pages_ratelimited_nr()\n  writeback: trace event writeback_queue_io\n  writeback: trace event writeback_single_inode\n  writeback: remove .nonblocking and .encountered_congestion\n  writeback: remove writeback_control.more_io\n  writeback: skip balance_dirty_pages() for in-memory fs\n  writeback: add bdi_dirty_limit() kernel-doc\n  writeback: avoid extra sync work at enqueue time\n  writeback: elevate queue_io() into wb_writeback()\n  ...\n\nFix up trivial conflicts in fs/fs-writeback.c and mm/filemap.c\n"
    },
    {
      "commit": "fcc5c22218a18509a7412bf074fc9a7a5d874a8a",
      "tree": "338828e4017ed7c603b93c541c34af4e4005bd31",
      "parents": [
        "1a12d8bd7b2998be01ee55edb64e7473728abb9c"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Mon Jul 11 23:08:50 2011 -0700"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sun Jul 24 10:46:51 2011 +0800"
      },
      "message": "writeback: don\u0027t busy retry writeback on new/freeing inodes\n\nFix a system hang bug introduced by commit b7a2441f9966 (\"writeback:\nremove writeback_control.more_io\") and e8dfc3058 (\"writeback: elevate\nqueue_io() into wb_writeback()\") easily reproducible with high memory\npressure and lots of file creation/deletions, for example, a kernel\nbuild in limited memory.\n\nIt hangs when some inode is in the I_NEW, I_FREEING or I_WILL_FREE \nstate, the flusher will get stuck busy retrying that inode, never\nreleasing wb-\u003elist_lock. The lock in turn blocks all kinds of other\ntasks when they are trying to grab it.\n\nAs put by Jan, it\u0027s a safe change regarding data integrity. I_FREEING or\nI_WILL_FREE inodes are written back by iput_final() and it is reclaim\ncode that is responsible for eventually removing them. So writeback code\ncan safely ignore them. I_NEW inodes should move out of this state when\nthey are fully set up and in the writeback round following that, we will\nconsider them for writeback. So the change makes sense.                                                         \n\nCC: Jan Kara \u003cjack@suse.cz\u003e \nReported-by: Hugh Dickins \u003chughd@google.com\u003e\nTested-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "12ad3ab66103e6582ca69c0c9de18b13487eaaef",
      "tree": "52d1ecd11d48faa7e6f8d6600c8e76807b0985a5",
      "parents": [
        "09cc9fc7a7c3d872065426d7fb0f0ad6d3eb90fc"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Fri Jul 08 14:14:41 2011 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:38 2011 -0400"
      },
      "message": "superblock: move pin_sb_for_writeback() to fs/super.c\n\nThe per-sb shrinker has the same requirement as the writeback\nthreads of ensuring that the superblock is usable and pinned for the\ntime it takes to run the work. Both need to take a passive reference\nto the sb, take a read lock on the s_umount lock and then only\ncontinue if an unmount is not in progress.\n\npin_sb_for_writeback() does this exactly, so move it to fs/super.c\nand rename it to grab_super_passive() and exporting it via\nfs/internal.h for all the VFS code to be able to use.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\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": "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": "e84d0a4f8e39a73003a6ec9a11b07702745f4c1f",
      "tree": "2319765d78502d13101ac50bafb0ba5577133092",
      "parents": [
        "251d6a471c831e22880b3c146bb4556ddfb1dc82"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Sat Apr 23 12:27:27 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:23 2011 +0800"
      },
      "message": "writeback: trace event writeback_queue_io\n\nNote that it adds a little overheads to account the moved/enqueued\ninodes from b_dirty to b_io. The \"moved\" accounting may be later used to\nlimit the number of inodes that can be moved in one shot, in order to\nkeep spinlock hold time under control.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "251d6a471c831e22880b3c146bb4556ddfb1dc82",
      "tree": "5ea61b9153866eda9f4164bf316c03786e1a7840",
      "parents": [
        "846d5a091b0506b75489577cde27f39b37a192a4"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Dec 01 17:33:37 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:23 2011 +0800"
      },
      "message": "writeback: trace event writeback_single_inode\n\nIt is valuable to know how the dirty inodes are iterated and their IO size.\n\n\"writeback_single_inode: bdi 8:0: ino\u003d134246746 state\u003dI_DIRTY_SYNC|I_SYNC age\u003d414 index\u003d0 to_write\u003d1024 wrote\u003d0\"\n\n- \"state\" reflects inode-\u003ei_state at the end of writeback_single_inode()\n- \"index\" reflects mapping-\u003ewriteback_index after the -\u003ewritepages() call\n- \"to_write\" is the wbc-\u003enr_to_write at entrance of writeback_single_inode()\n- \"wrote\" is the number of pages actually written\n\nv2: add trace event writeback_single_inode_requeue as proposed by Dave.\n\nCC: Dave Chinner \u003cdavid@fromorbit.com\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": "e8dfc30582995ae12454cda517b17d6294175b07",
      "tree": "357fe8482d6d125c5b96bb398b4a588cc2c1f16f",
      "parents": [
        "f758eeabeb96f878c860e8f110f94ec8820822a9"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Apr 21 12:06:32 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:21 2011 +0800"
      },
      "message": "writeback: elevate queue_io() into wb_writeback()\n\nCode refactor for more logical code layout.\nNo behavior change.\n\n- remove the mis-named __writeback_inodes_sb()\n\n- wb_writeback()/writeback_inodes_wb() will decide when to queue_io()\n  before calling __writeback_inodes_wb()\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": "424b351fe1901fc909fd0ca4f21dab58f24c1aac",
      "tree": "51fc3aa51991cf21756adcb5158cd95c89209b20",
      "parents": [
        "ba9aa8399fda48510d80c2fed1afb8fedbe1bb41"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jul 21 20:11:53 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:21 2011 +0800"
      },
      "message": "writeback: refill b_io iff empty\n\nThere is no point to carry different refill policies between for_kupdate\nand other type of works. Use a consistent \"refill b_io iff empty\" policy\nwhich can guarantee fairness in an easy to understand way.\n\nA b_io refill will setup a _fixed_ work set with all currently eligible\ninodes and start a new round of walk through b_io. The \"fixed\" work set\nmeans no new inodes will be added to the work set during the walk.\nOnly when a complete walk over b_io is done, new inodes that are\neligible at the time will be enqueued and the walk be started over.\n\nThis procedure provides fairness among the inodes because it guarantees\neach inode to be synced once and only once at each round. So all inodes\nwill be free from starvations.\n\nThis change relies on wb_writeback() to keep retrying as long as we made\nsome progress on cleaning some pages and/or inodes. Without that ability,\nthe old logic on background works relies on aggressively queuing all\neligible inodes into b_io at every time. But that\u0027s not a guarantee.\n\nThe below test script completes a slightly faster now:\n\n             2.6.39-rc3\t  2.6.39-rc3-dyn-expire+\n------------------------------------------------\nall elapsed     256.043      252.367\nstddev           24.381       12.530\n\ntar elapsed      30.097       28.808\ndd  elapsed      13.214       11.782\n\n\t#!/bin/zsh\n\n\tcp /c/linux-2.6.38.3.tar.bz2 /dev/shm/\n\n\tumount /dev/sda7\n\tmkfs.xfs -f /dev/sda7\n\tmount /dev/sda7 /fs\n\n\techo 3 \u003e /proc/sys/vm/drop_caches\n\n\ttic\u003d$(cat /proc/uptime|cut -d\u0027 \u0027 -f2)\n\n\tcd /fs\n\ttime tar jxf /dev/shm/linux-2.6.38.3.tar.bz2 \u0026\n\ttime dd if\u003d/dev/zero of\u003d/fs/zero bs\u003d1M count\u003d1000 \u0026\n\n\twait\n\tsync\n\ttac\u003d$(cat /proc/uptime|cut -d\u0027 \u0027 -f2)\n\techo elapsed: $((tac - tic))\n\nIt maintains roughly the same small vs. large file writeout shares, and\noffers large files better chances to be written in nice 4M chunks.\n\nAnalyzes from Dave Chinner in great details:\n\nLet\u0027s say we have lots of inodes with 100 dirty pages being created,\nand one large writeback going on. We expire 8 new inodes for every\n1024 pages we write back.\n\nWith the old code, we do:\n\n\tb_more_io (large inode) -\u003e b_io (1l)\n\t8 newly expired inodes -\u003e b_io (1l, 8s)\n\n\twriteback  large inode 1024 pages -\u003e b_more_io\n\n\tb_more_io (large inode) -\u003e b_io (8s, 1l)\n\t8 newly expired inodes -\u003e b_io (8s, 1l, 8s)\n\n\twriteback  8 small inodes 800 pages\n\t\t   1 large inode 224 pages -\u003e b_more_io\n\n\tb_more_io (large inode) -\u003e b_io (8s, 1l)\n\t8 newly expired inodes -\u003e b_io (8s, 1l, 8s)\n\t.....\n\nYour new code:\n\n\tb_more_io (large inode) -\u003e b_io (1l)\n\t8 newly expired inodes -\u003e b_io (1l, 8s)\n\n\twriteback  large inode 1024 pages -\u003e b_more_io\n\t(b_io \u003d\u003d 8s)\n\twriteback  8 small inodes 800 pages\n\n\tb_io empty: (1800 pages written)\n\t\tb_more_io (large inode) -\u003e b_io (1l)\n\t\t14 newly expired inodes -\u003e b_io (1l, 14s)\n\n\twriteback  large inode 1024 pages -\u003e b_more_io\n\t(b_io \u003d\u003d 14s)\n\twriteback  10 small inodes 1000 pages\n\t\t   1 small inode 24 pages -\u003e b_more_io (1l, 1s(24))\n\twriteback  5 small inodes 500 pages\n\tb_io empty: (2548 pages written)\n\t\tb_more_io (large inode) -\u003e b_io (1l, 1s(24))\n\t\t20 newly expired inodes -\u003e b_io (1l, 1s(24), 20s)\n\t......\n\nRough progression of pages written at b_io refill:\n\nOld code:\n\n\ttotal\tlarge file\t% of writeback\n\t1024\t224\t\t21.9% (fixed)\n\nNew code:\n\ttotal\tlarge file\t% of writeback\n\t1800\t1024\t\t~55%\n\t2550\t1024\t\t~40%\n\t3050\t1024\t\t~33%\n\t3500\t1024\t\t~29%\n\t3950\t1024\t\t~26%\n\t4250\t1024\t\t~24%\n\t4500\t1024\t\t~22.7%\n\t4700\t1024\t\t~21.7%\n\t4800\t1024\t\t~21.3%\n\t4800\t1024\t\t~21.3%\n\t(pretty much steady state from here)\n\nOk, so the steady state is reached with a similar percentage of\nwriteback to the large file as the existing code. Ok, that\u0027s good,\nbut providing some evidence that is doesn\u0027t change the shared of\nwriteback to the large should be in the commit message ;)\n\nThe other advantage to this is that we always write 1024 page chunks\nto the large file, rather than smaller \"whatever remains\" chunks.\n\nCC: 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": "ba9aa8399fda48510d80c2fed1afb8fedbe1bb41",
      "tree": "477c6fc2ca327316139d8ba935e410bf528ab84e",
      "parents": [
        "e6fb6da2e10682d477f2fdb749451d9fe5d168e8"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jul 21 20:32:30 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:21 2011 +0800"
      },
      "message": "writeback: the kupdate expire timestamp should be a moving target\n\nDynamically compute the dirty expire timestamp at queue_io() time.\n\nwriteback_control.older_than_this used to be determined at entrance to\nthe kupdate writeback work. This _static_ timestamp may go stale if the\nkupdate work runs on and on. The flusher may then stuck with some old\nbusy inodes, never considering newly expired inodes thereafter.\n\nThis has two possible problems:\n\n- It is unfair for a large dirty inode to delay (for a long time) the\n  writeback of small dirty inodes.\n\n- As time goes by, the large and busy dirty inode may contain only\n  _freshly_ dirtied pages. Ignoring newly expired dirty inodes risks\n  delaying the expired dirty pages to the end of LRU lists, triggering\n  the evil pageout(). Nevertheless this patch merely addresses part\n  of the problem.\n\nv2: keep policy changes inside wb_writeback() and keep the\nwbc.older_than_this visibility as suggested by Dave.\n\nCC: Dave Chinner \u003cdavid@fromorbit.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Itaru Kitayama \u003ckitayama@cl.bb4u.ne.jp\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\n"
    },
    {
      "commit": "e6fb6da2e10682d477f2fdb749451d9fe5d168e8",
      "tree": "d1061bddc0aeca62d84842ce80ae6c1b5d410113",
      "parents": [
        "cb9bd1159c5fe8995e151fa7df10fa19f8c119cc"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Jul 22 10:23:44 2010 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:20 2011 +0800"
      },
      "message": "writeback: try more writeback as long as something was written\n\nwriteback_inodes_wb()/__writeback_inodes_sb() are not aggressive in that\nthey only populate possibly a subset of eligible inodes into b_io at\nentrance time. When the queued set of inodes are all synced, they just\nreturn, possibly with all queued inode pages written but still\nwbc.nr_to_write \u003e 0.\n\nFor kupdate and background writeback, there may be more eligible inodes\nsitting in b_dirty when the current set of b_io inodes are completed. So\nit is necessary to try another round of writeback as long as we made some\nprogress in this round. When there are no more eligible inodes, no more\ninodes will be enqueued in queue_io(), hence nothing could/will be\nsynced and we may safely bail.\n\nFor example, imagine 100 inodes\n\n        i0, i1, i2, ..., i90, i91, i99\n\nAt queue_io() time, i90-i99 happen to be expired and moved to s_io for\nIO. When finished successfully, if their total size is less than\nMAX_WRITEBACK_PAGES, nr_to_write will be \u003e 0. Then wb_writeback() will\nquit the background work (w/o this patch) while it\u0027s still over\nbackground threshold. This will be a fairly normal/frequent case I guess.\n\nNow that we do tagged sync and update inode-\u003edirtied_when after the sync,\nthis change won\u0027t livelock sync(1).  I actually tried to write 1 page\nper 1ms with this command\n\n\twrite-and-fsync -n10000 -S 1000 -c 4096 /fs/test\n\nand do sync(1) at the same time. The sync completes quickly on ext4,\nxfs, btrfs.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\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": "94c3dcbb0b0cdfd82cedd21705424d8044edc42c",
      "tree": "f991941a1d5c5f23530e0cc4eb68bfe5d0684b9e",
      "parents": [
        "6e6938b6d3130305a5960c86b1a9b21e58cf6144"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Apr 27 19:05:21 2011 -0600"
      },
      "committer": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Jun 08 08:25:20 2011 +0800"
      },
      "message": "writeback: update dirtied_when for synced inode to prevent livelock\n\nExplicitly update .dirtied_when on synced inodes, so that they are no\nlonger considered for writeback in the next round.\n\nIt can prevent both of the following livelock schemes:\n\n- while true; do echo data \u003e\u003e f; done\n- while true; do touch f;        done (in theory)\n\nThe exact livelock condition is, during sync(1):\n\n(1) no new inodes are dirtied\n(2) an inode being actively dirtied\n\nOn (2), the inode will be tagged and synced with .nr_to_write\u003dLONG_MAX.\nWhen finished, it will be redirty_tail()ed because it\u0027s still dirty\nand (.nr_to_write \u003e 0). redirty_tail() won\u0027t update its -\u003edirtied_when\non condition (1). The sync work will then revisit it on the next\nqueue_io() and find it eligible again because its old -\u003edirtied_when\npredates the sync work start time.\n\nWe\u0027ll do more aggressive \"keep writeback as long as we wrote something\"\nlogic in wb_writeback(). The \"use LONG_MAX .nr_to_write\" trick in commit\nb9543dac5bbc (\"writeback: avoid livelocking WB_SYNC_ALL writeback\") will\nno longer be enough to stop sync livelock.\n\nReviewed-by: Jan Kara \u003cjack@suse.cz\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": "aa38572954ade525817fe88c54faebf85e5a61c0",
      "tree": "ef398ec06c97134592f62a49c99f3f80041b427c",
      "parents": [
        "d6e9bd256c88ce5f4b668249e363a74f51393daa"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri May 27 06:53:02 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 27 07:04:40 2011 -0400"
      },
      "message": "fs: pass exact type of data dirties to -\u003edirty_inode\n\nTell the filesystem if we just updated timestamp (I_DIRTY_SYNC) or\nanything else, so that the filesystem can track internally if it\nneeds to push out a transaction for fdatasync or not.\n\nThis is just the prototype change with no user for it yet.  I plan\nto push large XFS changes for the next merge window, and getting\nthis trivial infrastructure in this window would help a lot to avoid\ntree interdependencies.\n\nAlso remove incorrect comments that -\u003edirty_inode can\u0027t block.  That\nhas been changed a long time ago, and many implementations rely on it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "0f1b1fd86f6fd662e04da3e82a6780b226fcd0d1",
      "tree": "422e2923193f5ac4ea2a6864a6635878ad58c43b",
      "parents": [
        "67a23c494621ff1d5431c3bc320947865b224625"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Mar 22 22:23:43 2011 +1100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 24 21:17:51 2011 -0400"
      },
      "message": "fs: pull inode-\u003ei_lock up out of writeback_single_inode\n\nFirst thing we do in writeback_single_inode() is take the i_lock and\nthe last thing we do is drop it. A caller already holds the i_lock,\nso pull the i_lock out of writeback_single_inode() to reduce the\nround trips on this lock during inode writeback.\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": "55fa6091d83160ca772fc37cebae45d42695a708",
      "tree": "4df49f372032e30449e1a2dd64daf443e20b781c",
      "parents": [
        "f283c86afe6aa70b733d1ecebad5d9464943b774"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Mar 22 22:23:40 2011 +1100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 24 21:16:32 2011 -0400"
      },
      "message": "fs: move i_sb_list out from under inode_lock\n\nProtect the per-sb inode list with a new global lock\ninode_sb_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": "250df6ed274d767da844a5d9f05720b804240197",
      "tree": "b74f49a86c4451d9e3e82f90e3f791163025be21",
      "parents": [
        "3dc8fe4dca9cd3e4aa828ed36451e2bcfd2350da"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Tue Mar 22 22:23:36 2011 +1100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 24 21:16:31 2011 -0400"
      },
      "message": "fs: protect inode-\u003ei_state with inode-\u003ei_lock\n\nProtect inode state transitions and validity checks with the\ninode-\u003ei_lock. This enables us to make inode state transitions\nindependently of the inode_lock and is the first step to peeling\naway the inode_lock from the code.\n\nThis requires that __iget() is done atomically with i_state checks\nduring list traversals so that we don\u0027t race with another thread\nmarking the inode I_FREEING between the state check and grabbing the\nreference.\n\nAlso remove the unlock_new_inode() memory barrier optimisation\nrequired to avoid taking the inode_lock when clearing I_NEW.\nSimplify the code by simply taking the inode-\u003ei_lock around the\nstate change and wakeup. Because the wakeup is no longer tricky,\nremove the wake_up_inode() function and open code the wakeup where\nnecessary.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cb9ef8d5e394f70db64bda79c20d3569a20d2574",
      "tree": "b0048b0de7892c124cf13c7d114632b050564623",
      "parents": [
        "684265d4a30f133162f06ddb2e5010608e60e4bb"
      ],
      "author": {
        "name": "Stefan Hajnoczi",
        "email": "stefanha@linux.vnet.ibm.com",
        "time": "Thu Jan 13 15:47:26 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:48 2011 -0800"
      },
      "message": "fs/fs-writeback.c: fix sync_inodes_sb() return value kernel-doc\n\nThe sync_inodes_sb() function does not have a return value.  Remove the\noutdated documentation comment.\n\nSigned-off-by: Stefan Hajnoczi \u003cstefanha@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c691b9d983d7015d54057034f4cd9b6d8affd976",
      "tree": "f87bd8ba07deacb2bcab5fe93684a04f0f7d34c2",
      "parents": [
        "b9543dac5bbc4aef0a598965b6b34f6259ab9a9b"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Jan 13 15:45:48 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:32 2011 -0800"
      },
      "message": "sync_inode_metadata: fix comment\n\nUse correct function name, remove incorrect apostrophe\n\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b9543dac5bbc4aef0a598965b6b34f6259ab9a9b",
      "tree": "255244e6bb9340d4b8ce1fa6b4d2ed4adece4b15",
      "parents": [
        "aa373cf550994623efb5d49a4d8775bafd10bbc1"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Jan 13 15:45:48 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:32 2011 -0800"
      },
      "message": "writeback: avoid livelocking WB_SYNC_ALL writeback\n\nWhen wb_writeback() is called in WB_SYNC_ALL mode, work-\u003enr_to_write is\nusually set to LONG_MAX.  The logic in wb_writeback() then calls\n__writeback_inodes_sb() with nr_to_write \u003d\u003d MAX_WRITEBACK_PAGES and we\neasily end up with non-positive nr_to_write after the function returns, if\nthe inode has more than MAX_WRITEBACK_PAGES dirty pages at the moment.\n\nWhen nr_to_write is \u003c\u003d 0 wb_writeback() decides we need another round of\nwriteback but this is wrong in some cases!  For example when a single\nlarge file is continuously dirtied, we would never finish syncing it\nbecause each pass would be able to write MAX_WRITEBACK_PAGES and inode\ndirty timestamp never gets updated (as inode is never completely clean).\nThus __writeback_inodes_sb() would write the redirtied inode again and\nagain.\n\nFix the issue by setting nr_to_write to LONG_MAX in WB_SYNC_ALL mode.  We\ndo not need nr_to_write in WB_SYNC_ALL mode anyway since\nwrite_cache_pages() does livelock avoidance using page tagging in\nWB_SYNC_ALL mode.\n\nThis makes wb_writeback() call __writeback_inodes_sb() only once on\nWB_SYNC_ALL.  The latter function won\u0027t livelock because it works on\n\n- a finite set of files by doing queue_io() once at the beginning\n- a finite set of pages by PAGECACHE_TAG_TOWRITE page tagging\n\nAfter this patch, program from http://lkml.org/lkml/2010/10/24/154 is no\nlonger able to stall sync forever.\n\n[fengguang.wu@intel.com: fix locking comment]\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Jan Engelhardt \u003cjengelh@medozas.de\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": "aa373cf550994623efb5d49a4d8775bafd10bbc1",
      "tree": "64b14d1f5491f436a8b3ea5c32edecde5c255285",
      "parents": [
        "71927e84e0aebfbe5a91565c3b207af25a4e9162"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Jan 13 15:45:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:32 2011 -0800"
      },
      "message": "writeback: stop background/kupdate works from livelocking other works\n\nBackground writeback is easily livelockable in a loop in wb_writeback() by\na process continuously re-dirtying pages (or continuously appending to a\nfile).  This is in fact intended as the target of background writeback is\nto write dirty pages it can find as long as we are over\ndirty_background_threshold.\n\nBut the above behavior gets inconvenient at times because no other work\nqueued in the flusher thread\u0027s queue gets processed.  In particular, since\ne.g.  sync(1) relies on flusher thread to do all the IO for it, sync(1)\ncan hang forever waiting for flusher thread to do the work.\n\nGenerally, when a flusher thread has some work queued, someone submitted\nthe work to achieve a goal more specific than what background writeback\ndoes.  Moreover by working on the specific work, we also reduce amount of\ndirty pages which is exactly the target of background writeout.  So it\nmakes sense to give specific work a priority over a generic page cleaning.\n\nThus we interrupt background writeback if there is some other work to do.\nWe return to the background writeback after completing all the queued\nwork.\n\nThis may delay the writeback of expired inodes for a while, however the\nexpired inodes will eventually be flushed to disk as long as the other\nworks won\u0027t livelock.\n\n[fengguang.wu@intel.com: update comment]\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\n\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "71927e84e0aebfbe5a91565c3b207af25a4e9162",
      "tree": "8271f6d2008405bd392893ab0f7a4bd25653dc90",
      "parents": [
        "6585027a5e8cb490e3a761b2f3f3c3acf722aff2"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Jan 13 15:45:46 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:32 2011 -0800"
      },
      "message": "writeback: trace wakeup event for background writeback\n\nThis tracks when balance_dirty_pages() tries to wakeup the flusher thread\nfor background writeback (if it was not started already).\n\nSuggested-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Jan Engelhardt \u003cjengelh@medozas.de\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": "6585027a5e8cb490e3a761b2f3f3c3acf722aff2",
      "tree": "ac856c00c148d590d6b7632cc11bc23be6a9ccc2",
      "parents": [
        "b44129b30652c8771db2265939bb8b463724043d"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Jan 13 15:45:44 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:32 2011 -0800"
      },
      "message": "writeback: integrated background writeback work\n\nCheck whether background writeback is needed after finishing each work.\n\nWhen bdi flusher thread finishes doing some work check whether any kind of\nbackground writeback needs to be done (either because\ndirty_background_ratio is exceeded or because we need to start flushing\nold inodes).  If so, just do background write back.\n\nThis way, bdi_start_background_writeback() just needs to wake up the\nflusher thread.  It will do background writeback as soon as there is no\nother work.\n\nThis is a preparatory patch for the next patch which stops background\nwriteback as soon as there is other work to do.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Jan Engelhardt \u003cjengelh@medozas.de\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": "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": "cdf01dd5443d0befc8c6a32cb2e3d2f568fd2558",
      "tree": "97ff92f14a00146ad20b168559bb13f11db7fafb",
      "parents": [
        "847f877600313e65c5659476b30d74a6f66e388e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 30 08:55:52 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 30 08:55:52 2010 -0700"
      },
      "message": "fs-writeback.c: unify some common code\n\nThe btrfs merge looks like hell, because it changes fs-writeback.c, and\nthe crazy code has this repeated \"estimate number of dirty pages\"\ncounting that involves three different helper functions.  And it\u0027s done\nin two different places.\n\nJust unify that whole calculation as a \"get_nr_dirty_pages()\" helper\nfunction, and the merge result will look half-way decent.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\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": "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": "766f9164193f6dda1497bbf3861060198421fb92",
      "tree": "a2fd9a8231d12b822721a4306b614dd0e2e0d9c0",
      "parents": [
        "4ce6494dbd8909718840bb88d5a699ef6ce5c212"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Oct 26 14:22:45 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:15 2010 -0700"
      },
      "message": "kernel: remove PF_FLUSHER\n\nPF_FLUSHER is only ever set, not tested, remove it.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\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": "74ce002d9aee23031b4967e1dd1c1966ddc60749",
      "tree": "797e998b3c8661d8e6884de4228928d6cda74047",
      "parents": [
        "16b56cf4b8a0fa9acc21bd2ad19839b917999b96"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Oct 26 14:22:05 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:10 2010 -0700"
      },
      "message": "fs/fs-writeback.c: restore lost comment\n\nI had to go back to a 2.6.20 tree to work out why we\u0027re adding a\nnumber-of-inodes into a number-of-pages count.  Restore the lost comment.\n\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": "4cbec4c8b9fda9ec784086fe7f74cd32a8adda95",
      "tree": "669c3df27982345b52d0bfca8026e3f275e64a03",
      "parents": [
        "0e093d99763eb4cea09f8ca4f1d01f34e121d10b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Oct 26 14:21:45 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:08 2010 -0700"
      },
      "message": "writeback: remove the internal 5% low bound on dirty_ratio\n\nThe dirty_ratio was silently limited in global_dirty_limits() to \u003e\u003d 5%.\nThis is not a user expected behavior.  And it\u0027s inconsistent with\ncalc_period_shift(), which uses the plain vm_dirty_ratio value.\n\nLet\u0027s remove the internal bound.\n\nAt the same time, fix balance_dirty_pages() to work with the\ndirty_thresh\u003d0 case.  This allows applications to proceed when\ndirty+writeback pages are all cleaned.\n\nAnd \"\u003e\" fits with the name \"exceeded\" better than \"\u003e\u003d\" does.  Neil thinks\nit is an aesthetic improvement as well as a functional one :)\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nProposed-by: Con Kolivas \u003ckernel@kolivas.org\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Neil Brown \u003cneilb@suse.de\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\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": "9843b76aae80293f5b5a0e275360627508595ce5",
      "tree": "522fc7b8435d13e2a6c329d93a597173ce6956a7",
      "parents": [
        "a031878670ac8fe466859d4c1506bd91ae48678c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sun Oct 24 19:40:46 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:16 2010 -0400"
      },
      "message": "fs: skip I_FREEING inodes in writeback_sb_inodes\n\nSkip I_FREEING inodes just like I_WILL_FREE and I_NEW when walking the\nwriteback lists.  Currenly this can\u0027t happen, but once we move from\ninode_lock to more fine grained locking we can have an inode that\u0027s\nstill on the writeback lists but has I_FREEING set, and we absolutely\nneed to skip it here, just like we do for all other inode list walks.\n\nBased on a patch from Dave Chinner.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7ccf19a8042e343f8159f8a5fdd6a9422aa90c78",
      "tree": "9a69aaad6eb8992cae06f44dfea8c1d94f2a7f99",
      "parents": [
        "a5491e0c7bb7387e3e6ff9994d6dc2efc78af56c"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Thu Oct 21 11:49:30 2010 +1100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:15 2010 -0400"
      },
      "message": "fs: inode split IO and LRU lists\n\nThe use of the same inode list structure (inode-\u003ei_list) for two\ndifferent list constructs with different lifecycles and purposes\nmakes it impossible to separate the locking of the different\noperations. Therefore, to enable the separation of the locking of\nthe writeback and reclaim lists, split the inode-\u003ei_list into two\nseparate lists dedicated to their specific tracking functions.\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": "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": "cffbc8aa334f55c9ed42d25202eb3ebf3a97c195",
      "tree": "dab046695754e2cec1a7ab7a64b236e976d94360",
      "parents": [
        "be1a16a0ae29a7c90081a657b64aa51cb1a65a27"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Sat Oct 23 05:03:02 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:09 2010 -0400"
      },
      "message": "fs: Convert nr_inodes and nr_unused to per-cpu counters\n\nThe number of inodes allocated does not need to be tied to the\naddition or removal of an inode to/from a list. If we are not tied\nto a list lock, we could update the counters when inodes are\ninitialised or destroyed, but to do that we need to convert the\ncounters to be per-cpu (i.e. independent of a lock). This means that\nwe have the freedom to change the list/locking implementation\nwithout needing to care about the counters.\n\nBased on a patch originally from Eric Dumazet.\n\n[AV: cleaned up a bit, fixed build breakage on weird configs\n\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": "1d3382cbf02986e4833849f528d451367ea0b4cb",
      "tree": "b754f9903c0f77ce40dcff18030b49d0ce213eab",
      "parents": [
        "a8dade34e3df581bc36ca2afe6e27055e178801c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Oct 23 15:19:20 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:24:15 2010 -0400"
      },
      "message": "new helper: inode_unhashed()\n\nnote: for race-free uses you inode_lock held\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c37650161a53c01ddd88587675f9a4adc909a73e",
      "tree": "85821998de9a6723dedc42488b9491db9692d1e3",
      "parents": [
        "81fca444001e5a41ab80ce8cf9a5734c00ec6546"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Oct 06 10:48:20 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:18:19 2010 -0400"
      },
      "message": "fs: add sync_inode_metadata\n\nAdd a new helper to write out the inode using the writeback code,\nthat is including the correct dirty bit and list manipulation.  A few\nof filesystems already opencode this, and a lot of others should be\nusing it instead of using write_inode_now which also writes out the\ndata.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "aaead25b954879e1a708ff2f3602f494c18d20b5",
      "tree": "85c42d7c603bba80035079400764bffd27b2ff0e",
      "parents": [
        "c6ea21e35bf3691cad59647c771e6606067f627d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Oct 04 14:25:33 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Oct 04 14:25:33 2010 +0200"
      },
      "message": "writeback: always use sb-\u003es_bdi for writeback purposes\n\nWe currently use struct backing_dev_info for various different purposes.\nOriginally it was introduced to describe a backing device which includes\nan unplug and congestion function and various bits of readahead information\nand VM-relevant flags.  We\u0027re also using for tracking dirty inodes for\nwriteback.\n\nTo make writeback properly find all inodes we need to only access the\nper-filesystem backing_device pointed to by the superblock in -\u003es_bdi\ninside the writeback code, and not the instances pointeded to by\ninode-\u003ei_mapping-\u003ebacking_dev which can be overriden by special devices\nor might not be set at all by some filesystems.\n\nLong term we should split out the writeback-relevant bits of struct\nbacking_device_info (which includes more than the current bdi_writeback)\nand only point to it from the superblock while leaving the traditional\nbacking device as a separate structure that can be overriden by devices.\n\nThe one exception for now is the block device filesystem which really\nwants different writeback contexts for it\u0027s different (internal) inodes\nto handle the writeout more efficiently.  For now we do this with\na hack in fs-writeback.c because we\u0027re so late in the cycle, but in\nthe future I plan to replace this with a superblock method that allows\nfor multiple writeback contexts per filesystem.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "692ebd17c2905313fff3c504c249c6a0faad16ec",
      "tree": "656c80512505d5b117bd01e25d66d88d7cfe9851",
      "parents": [
        "371d217ee1ff8b418b8f73fb2a34990f951ec2d4"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Sep 21 11:51:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Sep 22 09:48:47 2010 +0200"
      },
      "message": "bdi: Fix warnings in __mark_inode_dirty for /dev/zero and friends\n\nInodes of devices such as /dev/zero can get dirty for example via\nutime(2) syscall or due to atime update. Backing device of such inodes\n(zero_bdi, etc.) is however unable to handle dirty inodes and thus\n__mark_inode_dirty complains.  In fact, inode should be rather dirtied\nagainst backing device of the filesystem holding it. This is generally a\ngood rule except for filesystems such as \u0027bdev\u0027 or \u0027mtd_inodefs\u0027. Inodes\nin these pseudofilesystems are referenced from ordinary filesystem\ninodes and carry mapping with real data of the device. Thus for these\ninodes we have to use inode-\u003ei_mapping-\u003ebacking_dev_info as we did so\nfar. We distinguish these filesystems by checking whether sb-\u003es_bdi\npoints to a non-trivial backing device or not.\n\nExample: Assume we have an ext3 filesystem on /dev/sda1 mounted on /.\nThere\u0027s a device inode A described by a path \"/dev/sdb\" on this\nfilesystem. This inode will be dirtied against backing device \"8:0\"\nafter this patch. bdev filesystem contains block device inode B coupled\nwith our inode A. When someone modifies a page of /dev/sdb, it\u0027s B that\ngets dirtied and the dirtying happens against the backing device \"8:16\".\nThus both inodes get filed to a correct bdi list.\n\nCc: stable@kernel.org\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b76b4014f9d988d2412b873e4d4c13c7f9afc4e4",
      "tree": "25493858be740a5cb558e594e6af61971758a94a",
      "parents": [
        "6628bc74f1aa9c35dd386320bf7ec04f12edb1b3"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Sat Aug 28 08:52:10 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 28 08:52:10 2010 +0200"
      },
      "message": "writeback: Fix lost wake-up shutting down writeback thread\n\nSetting the task state here may cause us to miss the wake up from\nkthread_stop(), so we need to recheck kthread_should_stop() or risk\nsleeping forever in the following schedule().\n\nSymptom was an indefinite hang on an NFSv4 mount.  (NFSv4 may create\nmultiple mounts in a temporary namespace while traversing the mount\npath, and since the temporary namespace is immediately destroyed, it may\nend up destroying a mount very soon after it was created, possibly\nmaking this race more likely.)\n\nINFO: task mount.nfs4:4314 blocked for more than 120 seconds.\n\"echo 0 \u003e /proc/sys/kernel/hung_task_timeout_secs\" disables this message.\nmount.nfs4    D 0000000000000000  2880  4314   4313 0x00000000\n ffff88001ed6da28 0000000000000046 ffff88001ed6dfd8 ffff88001ed6dfd8\n ffff88001ed6c000 ffff88001ed6c000 ffff88001ed6c000 ffff88001e5003a0\n ffff88001ed6dfd8 ffff88001e5003a8 ffff88001ed6c000 ffff88001ed6dfd8\nCall Trace:\n [\u003cffffffff8196090d\u003e] schedule_timeout+0x1cd/0x2e0\n [\u003cffffffff8106a31c\u003e] ? mark_held_locks+0x6c/0xa0\n [\u003cffffffff819639a0\u003e] ? _raw_spin_unlock_irq+0x30/0x60\n [\u003cffffffff8106a5fd\u003e] ? trace_hardirqs_on_caller+0x14d/0x190\n [\u003cffffffff819671fe\u003e] ? sub_preempt_count+0xe/0xd0\n [\u003cffffffff8195fc80\u003e] wait_for_common+0x120/0x190\n [\u003cffffffff81033c70\u003e] ? default_wake_function+0x0/0x20\n [\u003cffffffff8195fdcd\u003e] wait_for_completion+0x1d/0x20\n [\u003cffffffff810595fa\u003e] kthread_stop+0x4a/0x150\n [\u003cffffffff81061a60\u003e] ? thaw_process+0x70/0x80\n [\u003cffffffff810cc68a\u003e] bdi_unregister+0x10a/0x1a0\n [\u003cffffffff81229dc9\u003e] nfs_put_super+0x19/0x20\n [\u003cffffffff810ee8c4\u003e] generic_shutdown_super+0x54/0xe0\n [\u003cffffffff810ee9b6\u003e] kill_anon_super+0x16/0x60\n [\u003cffffffff8122d3b9\u003e] nfs4_kill_super+0x39/0x90\n [\u003cffffffff810eda45\u003e] deactivate_locked_super+0x45/0x60\n [\u003cffffffff810edfb9\u003e] deactivate_super+0x49/0x70\n [\u003cffffffff81108294\u003e] mntput_no_expire+0x84/0xe0\n [\u003cffffffff811084ef\u003e] release_mounts+0x9f/0xc0\n [\u003cffffffff81108575\u003e] put_mnt_ns+0x65/0x80\n [\u003cffffffff8122cc56\u003e] nfs_follow_remote_path+0x1e6/0x420\n [\u003cffffffff8122cfbf\u003e] nfs4_try_mount+0x6f/0xd0\n [\u003cffffffff8122d0c2\u003e] nfs4_get_sb+0xa2/0x360\n [\u003cffffffff810edcb8\u003e] vfs_kern_mount+0x88/0x1f0\n [\u003cffffffff810ede92\u003e] do_kern_mount+0x52/0x130\n [\u003cffffffff81963d9a\u003e] ? _lock_kernel+0x6a/0x170\n [\u003cffffffff81108e9e\u003e] do_mount+0x26e/0x7f0\n [\u003cffffffff81106b3a\u003e] ? copy_mount_options+0xea/0x190\n [\u003cffffffff811094b8\u003e] sys_mount+0x98/0xf0\n [\u003cffffffff810024d8\u003e] system_call_fastpath+0x16/0x1b\n1 lock held by mount.nfs4/4314:\n #0:  (\u0026type-\u003es_umount_key#24){+.+...}, at: [\u003cffffffff810edfb1\u003e] deactivate_super+0x41/0x70\n\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nAcked-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\n"
    },
    {
      "commit": "81d73a32d775ae9674ea6edf0b5b721fc3bc57d9",
      "tree": "c4097c3c7715a128cf54252b2ff906d3d8946ae0",
      "parents": [
        "a50aeb40144982eb766053309b6fc33e14ca46f0"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Aug 11 14:17:44 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:30 2010 -0700"
      },
      "message": "mm: fix writeback_in_progress()\n\nCommit 83ba7b071f3 (\"writeback: simplify the write back thread queue\")\nbroke writeback_in_progress() as in that commit we started to remove work\nitems from the list at the moment we start working on them and not at the\nmoment they are finished.  Thus if the flusher thread was doing some work\nbut there was no other work queued, writeback_in_progress() returned\nfalse.  This could in particular cause unnecessary queueing of background\nwriteback from balance_dirty_pages() or writeout work from\nwriteback_sb_if_idle().\n\nThis patch fixes the problem by introducing a bit in the bdi state which\nindicates that the flusher thread is processing some work and uses this\nbit for writeback_in_progress() test.\n\nNOTE: Both callsites of writeback_in_progress() (namely,\nwriteback_inodes_sb_if_idle() and balance_dirty_pages()) would actually\nneed a different information than what writeback_in_progress() provides.\nThey would need to know whether *the kind of writeback they are going to\nsubmit* is already queued.  But this information isn\u0027t that simple to\nprovide so let\u0027s fix writeback_in_progress() for the time being.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a50aeb40144982eb766053309b6fc33e14ca46f0",
      "tree": "15837ddb24c356b910a9af3e06f47937c0716027",
      "parents": [
        "4ea879b96d437693485d21f4b7e1eb72f7615fc2"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Aug 11 14:17:43 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:30 2010 -0700"
      },
      "message": "writeback: merge for_kupdate and !for_kupdate cases\n\nUnify the logic for kupdate and non-kupdate cases.  There won\u0027t be\nstarvation because the inodes requeued into b_more_io will later be\nspliced _after_ the remaining inodes in b_io, hence won\u0027t stand in the way\nof other inodes in the next run.\n\nIt avoids unnecessary redirty_tail() calls, hence the update of\ni_dirtied_when.  The timestamp update is undesirable because it could\nlater delay the inode\u0027s periodic writeback, or may exclude the inode from\nthe data integrity sync operation (which checks timestamp to avoid extra\nwork and livelock).\n\n\u003d\u003d\u003d\nHow the redirty_tail() comes about:\n\nIt was a long story..  This redirty_tail() was introduced with\nwbc.more_io.  The initial patch for more_io actually does not have the\nredirty_tail(), and when it\u0027s merged, several 100% iowait bug reports\narised:\n\nreiserfs:\n        http://lkml.org/lkml/2007/10/23/93\n\njfs:\n        commit 29a424f28390752a4ca2349633aaacc6be494db5\n        JFS: clear PAGECACHE_TAG_DIRTY for no-write pages\n\next2:\n        http://www.spinics.net/linux/lists/linux-ext4/msg04762.html\n\nThey are all old bugs hidden in various filesystems that become \"visible\"\nwith the more_io patch.  At the time, the ext2 bug is thought to be\n\"trivial\", so not fixed.  Instead the following updated more_io patch with\nredirty_tail() is merged:\n\n\thttp://www.spinics.net/linux/lists/linux-ext4/msg04507.html\n\nThis will in general prevent 100% on ext2 and possibly other unknown FS bugs.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Martin Bligh \u003cmbligh@google.com\u003e\nCc: Michael Rubin \u003cmrubin@google.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\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": "4ea879b96d437693485d21f4b7e1eb72f7615fc2",
      "tree": "142899843f2ce27334dbd134cd1bab3058cc8028",
      "parents": [
        "23539afc71937dbaca7de2229669f4475ff4ea7b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Aug 11 14:17:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:30 2010 -0700"
      },
      "message": "writeback: fix queue_io() ordering\n\nThis was not a bug, since b_io is empty for kupdate writeback.  The next\npatch will do requeue_io() for non-kupdate writeback, so let\u0027s fix it.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Martin Bligh \u003cmbligh@google.com\u003e\nCc: Michael Rubin \u003cmrubin@google.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\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": "23539afc71937dbaca7de2229669f4475ff4ea7b",
      "tree": "1a37d78bc4d387c6cbdc201755dce09297ebe308",
      "parents": [
        "1babe18385d3976043c04237ce837f3736197eb4"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Aug 11 14:17:41 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:30 2010 -0700"
      },
      "message": "writeback: don\u0027t redirty tail an inode with dirty pages\n\nAvoid delaying writeback for an expire inode with lots of dirty pages, but\nno active dirtier at the moment.  Previously we only do that for the\nkupdate case.\n\nAny filesystem that does delayed allocation or unwritten extent conversion\nafter IO completion will cause this - for example, XFS.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\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": "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": "2f9e825d3e0e2b407ae8f082de5c00afcf7378fb",
      "tree": "f8b3ee40674ce4acd5508a0a0bf52a30904caf6c",
      "parents": [
        "7ae0dea900b027cd90e8a3e14deca9a19e17638b",
        "de75d60d5ea235e6e09f4962ab22541ce0fe176a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 15:22:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 15:22:42 2010 -0700"
      },
      "message": "Merge branch \u0027for-2.6.36\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.36\u0027 of git://git.kernel.dk/linux-2.6-block: (149 commits)\n  block: make sure that REQ_* types are seen even with CONFIG_BLOCK\u003dn\n  xen-blkfront: fix missing out label\n  blkdev: fix blkdev_issue_zeroout return value\n  block: update request stacking methods to support discards\n  block: fix missing export of blk_types.h\n  writeback: fix bad _bh spinlock nesting\n  drbd: revert \"delay probes\", feature is being re-implemented differently\n  drbd: Initialize all members of sync_conf to their defaults [Bugz 315]\n  drbd: Disable delay probes for the upcomming release\n  writeback: cleanup bdi_register\n  writeback: add new tracepoints\n  writeback: remove unnecessary init_timer call\n  writeback: optimize periodic bdi thread wakeups\n  writeback: prevent unnecessary bdi threads wakeups\n  writeback: move bdi threads exiting logic to the forker thread\n  writeback: restructure bdi forker loop a little\n  writeback: move last_active to bdi\n  writeback: do not remove bdi from bdi_list\n  writeback: simplify bdi code a little\n  writeback: do not lose wake-ups in bdi threads\n  ...\n\nFixed up pretty trivial conflicts in drivers/block/virtio_blk.c and\ndrivers/scsi/scsi_error.c as per Jens.\n"
    },
    {
      "commit": "5f248c9c251c60af3403902b26e08de43964ea0b",
      "tree": "6d3328e72a7e4015a64017eb30be18095c6a3c64",
      "parents": [
        "f6cec0ae58c17522a7bc4e2f39dae19f199ab534",
        "dca332528bc69e05f67161e1ed59929633d5e63d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 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: (96 commits)\n  no need for list_for_each_entry_safe()/resetting with superblock list\n  Fix sget() race with failing mount\n  vfs: don\u0027t hold s_umount over close_bdev_exclusive() call\n  sysv: do not mark superblock dirty on remount\n  sysv: do not mark superblock dirty on mount\n  btrfs: remove junk sb_dirt change\n  BFS: clean up the superblock usage\n  AFFS: wait for sb synchronization when needed\n  AFFS: clean up dirty flag usage\n  cifs: truncate fallout\n  mbcache: fix shrinker function return value\n  mbcache: Remove unused features\n  add f_flags to struct statfs(64)\n  pass a struct path to vfs_statfs\n  update VFS documentation for method changes.\n  All filesystems that need invalidate_inode_buffers() are doing that explicitly\n  convert remaining -\u003eclear_inode() to -\u003eevict_inode()\n  Make -\u003edrop_inode() just return whether inode needs to be dropped\n  fs/inode.c:clear_inode() is gone\n  fs/inode.c:evict() doesn\u0027t care about delete vs. non-delete paths now\n  ...\n\nFix up trivial conflicts in fs/nilfs2/super.c\n"
    },
    {
      "commit": "7624ee72aa09334af072853457a5d46d9901c3f8",
      "tree": "046321fdf7f46c38a6e6d686c1cd962e70149c94",
      "parents": [
        "d9f8984c2c23b91e202a764fe4b15041a29a201a"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Aug 09 17:20:03 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:45:03 2010 -0700"
      },
      "message": "mm: avoid resetting wb_start after each writeback round\n\nWB_SYNC_NONE writeback is done in rounds of 1024 pages so that we don\u0027t\nwrite out some huge inode for too long while starving writeout of other\ninodes.  To avoid livelocks, we record time we started writeback in\nwbc-\u003ewb_start and do not write out inodes which were dirtied after this\ntime.  But currently, writeback_inodes_wb() resets wb_start each time it\nis called thus effectively invalidating this logic and making any\nWB_SYNC_NONE writeback prone to livelocks.\n\nThis patch makes sure wb_start is set only once when we start writeback.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nReviewed-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a4ffdde6e56fdf8c34ddadc2674d6eb978083369",
      "tree": "0fa07df92d804cb7d0482135195e4835cb16403a",
      "parents": [
        "b5fc510c48f631882ccec3c0f02a25d5b67de09f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 02 17:38:30 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:44 2010 -0400"
      },
      "message": "simplify checks for I_CLEAR/I_FREEING\n\nadd I_CLEAR instead of replacing I_FREEING with it.  I_CLEAR is\nequivalent to I_FREEING for almost all code looking at either;\nit\u0027s there to keep track of having called clear_inode() exactly\nonce per inode lifetime, at some point after having set I_FREEING.\nI_CLEAR and I_FREEING never get set at the same time with the\ncurrent code, so we can switch to setting i_flags to I_FREEING | I_CLEAR\ninstead of I_CLEAR without loss of information.  As the result of\nsuch change, checks become simpler and the amount of code that needs\nto know about I_CLEAR shrinks a lot.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6467716a37673e8d47b4984eb19839bdad0a8353",
      "tree": "8b2bfd38d53e31c47654162d4ce9220c4424a31d",
      "parents": [
        "253c34e9b10c30d3064be654b5b78fbc1a8b1896"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:22 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: optimize periodic bdi thread wakeups\n\nWhe the first inode for a bdi is marked dirty, we wake up the bdi thread which\nshould take care of the periodic background write-out. However, the write-out\nwill actually start only \u0027dirty_writeback_interval\u0027 centisecs later, so we can\ndelay the wake-up.\n\nThis change was requested by Nick Piggin who pointed out that if we delay the\nwake-up, we weed out 2 unnecessary contex switches, which matters because\n\u0027__mark_inode_dirty()\u0027 is a hot-path function.\n\nThis patch introduces a new function - \u0027bdi_wakeup_thread_delayed()\u0027, which\nsets up a timer to wake-up the bdi thread and returns. So the wake-up is\ndelayed.\n\nWe also delete the timer in bdi threads just before writing-back. And\nsynchronously delete it when unregistering bdi. At the unregister point the bdi\ndoes not have any users, so no one can arm it again.\n\nSince now we take \u0027bdi-\u003ewb_lock\u0027 in the timer, which can execute in softirq\ncontext, we have to use \u0027spin_lock_bh()\u0027 for \u0027bdi-\u003ewb_lock\u0027. This patch makes\nthis change as well.\n\nThis patch also moves the \u0027bdi_wb_init()\u0027 function down in the file to avoid\nforward-declaration of \u0027bdi_wakeup_thread_delayed()\u0027.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "253c34e9b10c30d3064be654b5b78fbc1a8b1896",
      "tree": "1ee077a52fd1036fe26ddfe8cabd5a5315dc1285",
      "parents": [
        "fff5b85aa4225a7be157f208277a055822039a9e"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:21 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: prevent unnecessary bdi threads wakeups\n\nFinally, we can get rid of unnecessary wake-ups in bdi threads, which are very\nbad for battery-driven devices.\n\nThere are two types of activities bdi threads do:\n1. process bdi works from the \u0027bdi-\u003ework_list\u0027\n2. periodic write-back\n\nSo there are 2 sources of wake-up events for bdi threads:\n\n1. \u0027bdi_queue_work()\u0027 - submits bdi works\n2. \u0027__mark_inode_dirty()\u0027 - adds dirty I/O to bdi\u0027s\n\nThe former already has bdi wake-up code. The latter does not, and this patch\nadds it.\n\n\u0027__mark_inode_dirty()\u0027 is hot-path function, but this patch adds another\n\u0027spin_lock(\u0026bdi-\u003ewb_lock)\u0027 there. However, it is taken only in rare cases when\nthe bdi has no dirty inodes. So adding this spinlock should be fine and should\nnot affect performance.\n\nThis patch makes sure bdi threads and the forker thread do not wake-up if there\nis nothing to do. The forker thread will nevertheless wake up at least every\n5 min. to check whether it has to kill a bdi thread. This can also be optimized,\nbut is not worth it.\n\nThis patch also tidies up the warning about unregistered bid, and turns it from\nan ugly crocodile to a simple \u0027WARN()\u0027 statement.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "fff5b85aa4225a7be157f208277a055822039a9e",
      "tree": "f4310bf188ef0a1dac52da39b61968aa566a717e",
      "parents": [
        "adf392407076b85816d48714fb8eeaedb2157884"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:20 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: move bdi threads exiting logic to the forker thread\n\nCurrently, bdi threads can decide to exit if there were no useful activities\nfor 5 minutes. However, this causes nasty races: we can easily oops in the\n\u0027bdi_queue_work()\u0027 if the bdi thread decides to exit while we are waking it up.\n\nAnd even if we do not oops, but the bdi tread exits immediately after we wake\nit up, we\u0027d lose the wake-up event and have an unnecessary delay (up to 5 secs)\nin the bdi work processing.\n\nThis patch makes the forker thread to be the central place which not only\ncreates bdi threads, but also kills them if they were inactive long enough.\nThis better design-wise.\n\nAnother reason why this change was done is to prepare for the further changes\nwhich will prevent the bdi threads from waking up every 5 sec and wasting\npower. Indeed, when the task does not wake up periodically anymore, it won\u0027t be\nable to exit either.\n\nThis patch also moves the the \u0027wake_up_bit()\u0027 call from the bdi thread to the\nforker thread as well. So now the forker thread sets the BDI_pending bit, then\nforks the task or kills it, then clears the bit and wakes up the waiting\nprocess.\n\nThe only process which may wain on the bit is \u0027bdi_wb_shutdown()\u0027. This\nfunction was changed as well - now it first removes the bdi from the\n\u0027bdi_list\u0027, then waits on the \u0027BDI_pending\u0027 bit. Once it wakes up, it is\nguaranteed that the forker thread won\u0027t race with it, because the bdi is not\nvisible. Note, the forker thread sets the \u0027BDI_pending\u0027 bit under the\n\u0027bdi-\u003ewb_lock\u0027 which is essential for proper serialization.\n\nAnd additionally, when we change \u0027bdi-\u003ewb.task\u0027, we now take the\n\u0027bdi-\u003ework_lock\u0027, to make sure that we do not lose wake-ups which we otherwise\nwould when raced with, say, \u0027bdi_queue_work()\u0027.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ecd584030da67ede1bf17955746a6ce834d9fc6b",
      "tree": "3f26260102a84e8cb047249e65cdde6b9aadcb96",
      "parents": [
        "78c40cb6581a74adc48821f3de6b864a54d4c34d"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:18 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: move last_active to bdi\n\nCurrently bdi threads use local variable \u0027last_active\u0027 which stores last time\nwhen the bdi thread did some useful work. Move this local variable to \u0027struct\nbdi_writeback\u0027. This is just a preparation for the further patches which will\nmake the forker thread decide when bdi threads should be killed.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "78c40cb6581a74adc48821f3de6b864a54d4c34d",
      "tree": "9ef19e68f6c28ded34f42de8a21b139006bfceaa",
      "parents": [
        "080dcec41709be72613133f695be75b98dd43e88"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:17 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: do not remove bdi from bdi_list\n\nThe forker thread removes bdis from \u0027bdi_list\u0027 before forking the bdi thread.\nBut this is wrong for at least 2 reasons.\n\nReason #1: if we temporary remove a bdi from the list, we may miss works which\n           would otherwise be given to us.\n\nReason #2: this is racy; indeed, \u0027bdi_wb_shutdown()\u0027 expects that bdis are\n           always in the \u0027bdi_list\u0027 (see \u0027bdi_remove_from_list()\u0027), and when\n           it races with the forker thread, it can shut down the bdi thread\n           at the same time as the forker creates it.\n\nThis patch makes sure the forker thread never removes bdis from \u0027bdi_list\u0027\n(which was suggested by Christoph Hellwig).\n\nIn order to make sure that we do not race with \u0027bdi_wb_shutdown()\u0027, we have to\nhold the \u0027bdi_lock\u0027 while walking the \u0027bdi_list\u0027 and setting the \u0027BDI_pending\u0027\nflag.\n\nNOTE! The error path is interesting. Currently, when we fail to create a bdi\nthread, we move the bdi to the tail of \u0027bdi_list\u0027. But if we never remove the\nbdi from the list, we cannot move it to the tail either, because then we can\nmess up the RCU readers which walk the list. And also, we\u0027ll have the race\ndescribed above in \"Reason #2\".\n\nBut I not think that adding to the tail is any important so I just do not do\nthat.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "297252c81de8043ca6c36e5984c24fdb5aab9013",
      "tree": "d94a35abcd3b227b072955622f703a2cdc3c309d",
      "parents": [
        "c4ec7908c2c5125f75fabd100e7a95626a6883ee"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:15 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:55 2010 +0200"
      },
      "message": "writeback: do not lose wake-ups in bdi threads\n\nCurrently, bdi threads (\u0027bdi_writeback_thread()\u0027) can lose wake-ups. For\nexample, if \u0027bdi_queue_work()\u0027 is executed after the bdi thread have had\nfinished \u0027wb_do_writeback()\u0027 but before it called\n\u0027schedule_timeout_interruptible()\u0027.\n\nTo fix this issue, we have to check whether we have works to process after we\nhave changed the task state to \u0027TASK_INTERRUPTIBLE\u0027.\n\nThis patch also clean-ups handling of the cases when \u0027dirty_writeback_interval\u0027\nis zero or non-zero.\n\nAdditionally, this patch also removes unneeded \u0027list_empty_careful()\u0027 call.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6f904ff0e39ea88f81eb77e8dfb4e1238492f0a8",
      "tree": "8a22ff5ffe31e221554915ac9135da15d3adad8d",
      "parents": [
        "4aeefdc69f7b6f3f287e6fd8d4b213953b9e92d8"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:11 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:16 2010 +0200"
      },
      "message": "writeback: harmonize writeback threads naming\n\nThe write-back code mixes words \"thread\" and \"task\" for the same things. This\nis not a big deal, but still an inconsistency.\n\nhch: a convention I tend to use and I\u0027ve seen in various places\nis to always use _task for the storage of the task_struct pointer,\nand thread everywhere else.  This especially helps with having\nfoo_thread for the actual thread and foo_task for a global\nvariable keeping the task_struct pointer\n\nThis patch renames:\n* \u0027bdi_add_default_flusher_task()\u0027 -\u003e \u0027bdi_add_default_flusher_thread()\u0027\n* \u0027bdi_forker_task()\u0027              -\u003e \u0027bdi_forker_thread()\u0027\n\nbecause bdi threads are \u0027bdi_writeback_thread()\u0027, so these names are more\nconsistent.\n\nThis patch also amends commentaries and makes them refer the forker and bdi\nthreads as \"thread\", not \"task\".\n\nAlso, while on it, make \u0027bdi_add_default_flusher_thread()\u0027 declaration use\n\u0027static void\u0027 instead of \u0027void static\u0027 and make checkpatch.pl happy.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "08852b6d6c40f387f2b75e199e2ca1df68970f4c",
      "tree": "a5c10224444a93e014337e577dbd5a8aacc50e59",
      "parents": [
        "6965031d331a642e31278fa1b5bd47f372ffdd5d"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Aug 03 12:51:16 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:01 2010 +0200"
      },
      "message": "writeback: remove wb in get_next_work_item\n\n83ba7b07 cleans up the writeback.\nSo we don\u0027t use wb any more in get_next_work_item.\nLet\u0027s remove unnecessary argument.\n\nCC: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "028c2dd184c097809986684f2f0627eea5529fea",
      "tree": "f6eb9e30a24d73597e5ce2a65b4638e9d1947504",
      "parents": [
        "455b2864686d3591b3b2f39eb46290c95f76471f"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Jul 07 13:24:07 2010 +1000"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:24:25 2010 +0200"
      },
      "message": "writeback: Add tracing to balance_dirty_pages\n\nTracing high level background writeback events is good, but it doesn\u0027t\ngive the entire picture. Add visibility into write throttling to catch IO\ndispatched by foreground throttling of processing dirtying lots of pages.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "455b2864686d3591b3b2f39eb46290c95f76471f",
      "tree": "b88059e3691fc5ad4491518e9eb1f1f2ba21711a",
      "parents": [
        "a89f5c899db3c6be4bb426e4efb72ecee29a93b5"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Wed Jul 07 13:24:06 2010 +1000"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:24:23 2010 +0200"
      },
      "message": "writeback: Initial tracing support\n\nTrace queue/sched/exec parts of the writeback loop. This provides\ninsight into when and why flusher threads are scheduled to run. e.g\na sync invocation leaves traces like:\n\n     sync-[...]: writeback_queue: bdi 8:0: sb_dev 8:1 nr_pages\u003d7712 sync_mode\u003d0 kupdate\u003d0 range_cyclic\u003d0 background\u003d0\nflush-8:0-[...]: writeback_exec: bdi 8:0: sb_dev 8:1 nr_pages\u003d7712 sync_mode\u003d0 kupdate\u003d0 range_cyclic\u003d0 background\u003d0\n\nThis also lays the foundation for adding more writeback tracing to\nprovide deeper insight into the whole writeback path.\n\nThe original tracing code is from Jens Axboe, though this version is\na rewrite as a result of the code being traced changing\nsignificantly.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "082439004b31adc146e96e5f1c574dd2b57dcd93",
      "tree": "19ef2ccab9588c2aa77d0b09c2bae760b23ae110",
      "parents": [
        "c1955ce32fdb0877b7a1b22feb2669358f65be76"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jun 19 23:08:22 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:23:06 2010 +0200"
      },
      "message": "writeback: merge bdi_writeback_task and bdi_start_fn\n\nMove all code for the writeback thread into fs/fs-writeback.c instead of\nsplitting it over two functions in two files.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c1955ce32fdb0877b7a1b22feb2669358f65be76",
      "tree": "805b4da7168b0b16de890ea248323f3cdf5dc0b7",
      "parents": [
        "4c4762d10faf93167b84ee03e4b58dd62012b06f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jun 19 23:08:06 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:23:03 2010 +0200"
      },
      "message": "writeback: remove wb_list\n\nThe wb_list member of struct backing_device_info always has exactly one\nelement.  Just use the direct bdi-\u003ewb pointer instead and simplify some\ncode.\n\nAlso remove bdi_task_init which is now trivial to prepare for the next\npatch.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "83ba7b071f30f7c01f72518ad72d5cd203c27502",
      "tree": "4737320dcce72cfff4d87d835e4f78428eca7ef5",
      "parents": [
        "edadfb10ba35da7253541e4155aa92eff758ebe6"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jul 06 08:59:53 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 06 08:59:53 2010 +0200"
      },
      "message": "writeback: simplify the write back thread queue\n\nFirst remove items from work_list as soon as we start working on them.  This\nmeans we don\u0027t have to track any pending or visited state and can get\nrid of all the RCU magic freeing the work items - we can simply free\nthem once the operation has finished.  Second use a real completion for\ntracking synchronous requests - if the caller sets the completion pointer\nwe complete it, otherwise use it as a boolean indicator that we can free\nthe work item directly.  Third unify struct wb_writeback_args and struct\nbdi_work into a single data structure, wb_writeback_work.  Previous we\nset all parameters into a struct wb_writeback_args, copied it into\nstruct bdi_work, copied it again on the stack to use it there.  Instead\nof just allocate one structure dynamically or on the stack and use it\nall the way through the stack.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\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": "06d738fa9155ff16dba3d7e501ba4581d01a98cb",
      "tree": "ea1e3a1632207c9b0ad7fedc47eaeb1c35e5d8bc",
      "parents": [
        "19c9a49b432f245c6293508d164a4350f1f2c601"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Thu Jul 01 08:26:34 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jul 01 08:26:34 2010 +0200"
      },
      "message": "fs-writeback: fix kernel-doc warnings\n\nFix kernel-doc to match the function\u0027s changed args.\n\nWarning(fs/fs-writeback.c:190): No description found for parameter \u0027args\u0027\nWarning(fs/fs-writeback.c:190): Excess function parameter \u0027sb\u0027 description in \u0027bdi_queue_work_onstack\u0027\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "29cb48594b873f6193d6327097e504bd3e2314de",
      "tree": "1c93364fd70d93d42c6749c261f96f84a66d71e2",
      "parents": [
        "334132ae921a14ac2b2ba48e174136f7f2c9aae1"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Jun 09 15:31:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:08 2010 +0200"
      },
      "message": "writeback: fix pin_sb_for_writeback\n\nWe need to check for s_instances to make sure we don\u0027t bother working\nagainst a filesystem that is beeing unmounted, and we need to call\nput_super to make sure a superblock is freed when we race against\numount.  Also no need to keep sb_lock after we got a reference on it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "334132ae921a14ac2b2ba48e174136f7f2c9aae1",
      "tree": "4367a78d60365cc4d8c751c81c06d0b6d736bdbf",
      "parents": [
        "c5444198ca210498e8ac0ba121b4cd3537aa12f7"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Jun 09 14:28:43 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:08 2010 +0200"
      },
      "message": "writeback: add missing requeue_io in writeback_inodes_wb\n\nIn \"writeback: fix writeback_inodes_wb from writeback_inodes_sb\" I\naccidentally removed the requeue_io if we need to skip a superblock\nbecause we can\u0027t pin it.  Add it back, otherwise we\u0027re getting spurious\nlockups after multiple xfstests runs.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c5444198ca210498e8ac0ba121b4cd3537aa12f7",
      "tree": "c423d38fe1ac7f51a48e455a19ecbe2354811fca",
      "parents": [
        "b8c2f3474f1077599ec6e90c2f263f17055cc3d8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:15:15 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:08 2010 +0200"
      },
      "message": "writeback: simplify and split bdi_start_writeback\n\nbdi_start_writeback now never gets a superblock passed, so we can just remove\nthat case.  And to further untangle the code and flatten the call stack\nsplit it into two trivial helpers for it\u0027s two callers.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b8c2f3474f1077599ec6e90c2f263f17055cc3d8",
      "tree": "aedccfc59c7fd5592311534395eacf8afd1c956f",
      "parents": [
        "d19de7edf59cdd586777b009e0e8fbe5412dd35f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:15:07 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:07 2010 +0200"
      },
      "message": "writeback: simplify wakeup_flusher_threads\n\nbdi_writeback_all only has one caller, so fold it to simplify the code and\nflatten the call stack.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d19de7edf59cdd586777b009e0e8fbe5412dd35f",
      "tree": "8b6b56c705d7ed6fc22fe53b4d49b41372874afa",
      "parents": [
        "cf37e972478ec58a8a54a6b4f951815f0ae28f78"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:14:58 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:07 2010 +0200"
      },
      "message": "writeback: fix writeback_inodes_wb from writeback_inodes_sb\n\nWhen we call writeback_inodes_wb from writeback_inodes_sb we always have\ns_umount held, which currently makes the whole operation a no-op.\n\nBut if we are called to write out inodes for a specific superblock we always\nhave s_umount held, so replace the incorrect logic checking for WB_SYNC_ALL\nwhich only worked by coincidence with the proper check for an explicit\nsuperblock argument.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "cf37e972478ec58a8a54a6b4f951815f0ae28f78",
      "tree": "b14d75074692ddb213e22e098a64087950f4cf78",
      "parents": [
        "3c4d716538f3eefb1c1f10961a047a6456a2b590"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:14:51 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:07 2010 +0200"
      },
      "message": "writeback: enforce s_umount locking in writeback_inodes_sb\n\nMake sure that not only sync_filesystem but all callers of writeback_inodes_sb\nhave the superblock protected against remount.  As-is this disables all\nfunctionality for these callers, but the next patch relies on this locking to\nfix writeback_inodes_sb for sync_filesystem.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3c4d716538f3eefb1c1f10961a047a6456a2b590",
      "tree": "3cfc50c18cc3d2351ddac4309e8f228e22faed71",
      "parents": [
        "7f0e7bed936a0c422641a046551829a01341dd80"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:14:43 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:07 2010 +0200"
      },
      "message": "writeback: queue work on stack in writeback_inodes_sb\n\nIf we want to rely on s_umount in the caller we need to wait for completion\nof the I/O submission before returning to the caller.  Refactor\nbdi_sync_writeback into a bdi_queue_work_onstack helper and use it for this\ncase.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7f0e7bed936a0c422641a046551829a01341dd80",
      "tree": "6b5fd4a8e11253819c883e409b612fc26c57235e",
      "parents": [
        "7908a9e5fc3f9a679b1777ed231a03636c068446"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:14:34 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:07 2010 +0200"
      },
      "message": "writeback: fix writeback completion notifications\n\nThe code dealing with bdi_work-\u003estate and completion of a bdi_work is a\nmajor mess currently.  This patch makes sure we directly use one set of\nflags to deal with it, and use it consistently, which means:\n\n - always notify about completion from the rcu callback.  We only ever\n   wait for it from on-stack callers, so this simplification does not\n   even cause a theoretical slowdown currently.  It also makes sure we\n   don\u0027t miss out on the notification if we ever add other callers to\n   wait for it.\n - make earlier completion notification depending on the on-stack\n   allocation, not the sync mode.  If we introduce new callers that\n   want to do WB_SYNC_NONE writeback from on-stack callers this will\n   be nessecary.\n\nAlso rename bdi_wait_on_work_clear to bdi_wait_on_work_done and inline\na few small functions into their only caller to make the code\nunderstandable.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b4ca761577535b2b4d153689ee97342797dfff05",
      "tree": "29054d55508f1faa22ec32acf7c245751af03348",
      "parents": [
        "28f4197e5d4707311febeec8a0eb97cb5fd93c97",
        "67a3e12b05e055c0415c556a315a3d3eb637e29e"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jun 01 12:42:12 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jun 01 12:42:12 2010 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into for-linus\n\nConflicts:\n\tfs/pipe.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\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": "f17625b318d9b151e7bd41e31223e9d89b2aaa77",
      "tree": "6b4f04ff35d9bfcc73fc4d3f08120347b0ab4706",
      "parents": [
        "0ae0b5d0557264bad65e22f1e2da4b83a02c4535"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jun 01 11:05:22 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jun 01 11:05:22 2010 +0200"
      },
      "message": "Revert \"writeback: ensure that WB_SYNC_NONE writeback with sb pinned is sync\"\n\nThis reverts commit 7c8a3554c683f512dbcee26faedb42e4c05f12fa.\n\nWe are investigating a hang associated with the WB_SYNC_NONE changes,\nso revert them for now.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "58a9d3d8db06ca2ec31f64ec49ab0aeb89971b85",
      "tree": "70c695b6473d4d25b32a2946e053742f6c49755e",
      "parents": [
        "ec95f53aa6ed62ba68660cb19c8474ebe9025cce"
      ],
      "author": {
        "name": "Richard Kennedy",
        "email": "richard@rsk.demon.co.uk",
        "time": "Mon May 24 14:32:38 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:07:00 2010 -0700"
      },
      "message": "fs-writeback: check sync bit earlier in inode_wait_for_writeback\n\nWhen wb_writeback() hasn\u0027t written anything it will re-acquire the inode\nlock before calling inode_wait_for_writeback.\n\nThis change tests the sync bit first so that is doesn\u0027t need to drop \u0026\nre-acquire the lock if the inode became available while wb_writeback() was\nwaiting to get the lock.\n\nSigned-off-by: Richard Kennedy \u003crichard@rsk.demon.co.uk\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\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: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e8bebe2f71d26871b0970ae1d9cf0ed3cdd9569d",
      "tree": "c0d82cbd11daaf579b74121c6641d58947091094",
      "parents": [
        "6109e2ce2600e2db26cd0424bb9c6ed019723288",
        "82f3952c02add60b15eea9151d4d99b6b82066c6"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 21 19:37:45 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 21 19:37:45 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: (69 commits)\n  fix handling of offsets in cris eeprom.c, get rid of fake on-stack files\n  get rid of home-grown mutex in cris eeprom.c\n  switch ecryptfs_write() to struct inode *, kill on-stack fake files\n  switch ecryptfs_get_locked_page() to struct inode *\n  simplify access to ecryptfs inodes in -\u003ereadpage() and friends\n  AFS: Don\u0027t put struct file on the stack\n  Ban ecryptfs over ecryptfs\n  logfs: replace inode uid,gid,mode initialization with helper function\n  ufs: replace inode uid,gid,mode initialization with helper function\n  udf: replace inode uid,gid,mode init with helper\n  ubifs: replace inode uid,gid,mode initialization with helper function\n  sysv: replace inode uid,gid,mode initialization with helper function\n  reiserfs: replace inode uid,gid,mode initialization with helper function\n  ramfs: replace inode uid,gid,mode initialization with helper function\n  omfs: replace inode uid,gid,mode initialization with helper function\n  bfs: replace inode uid,gid,mode initialization with helper function\n  ocfs2: replace inode uid,gid,mode initialization with helper function\n  nilfs2: replace inode uid,gid,mode initialization with helper function\n  minix: replace inode uid,gid,mode init with helper\n  ext4: replace inode uid,gid,mode init with helper\n  ...\n\nTrivial conflict in fs/fs-writeback.c (mark bitfields unsigned)\n"
    }
  ],
  "next": "52957fe1c709d5ca3732456d73f4e4d95492c72c"
}
