)]}'
{
  "log": [
    {
      "commit": "650957da7699e730e78e82735b8c2595fcf7794a",
      "tree": "1f44a3a822a79e5f89eb6c71427d2576a087e7d5",
      "parents": [
        "b045b9a265fb46d8197b7d78aff1a8f6ab8e23df"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "peterz@infradead.org",
        "time": "Mon Jul 25 17:11:57 2011 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu Aug 04 21:58:39 2011 -0700"
      },
      "message": "mm/backing-dev.c: reset bdi min_ratio in bdi_unregister()\n\ncommit ccb6108f5b0b541d3eb332c3a73e645c0f84278e upstream.\n\nVito said:\n\n: The system has many usb disks coming and going day to day, with their\n: respective bdi\u0027s having min_ratio set to 1 when inserted.  It works for\n: some time until eventually min_ratio can no longer be set, even when the\n: active set of bdi\u0027s seen in /sys/class/bdi/*/min_ratio doesn\u0027t add up to\n: anywhere near 100.\n:\n: This then leads to an unrelated starvation problem caused by write-heavy\n: fuse mounts being used atop the usb disks, a problem the min_ratio setting\n: at the underlying devices bdi effectively prevents.\n\nFix this leakage by resetting the bdi min_ratio when unregistering the\nBDI.\n\nSigned-off-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nReported-by: Vito Caputo \u003clkml@pengaru.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "345227d705f2318e9bc088e79fe71a38bb5fe82b",
      "tree": "63db4303b1d077d244d492d430da3d6f0c51a5fc",
      "parents": [
        "771949d03b4f5295f648f09141325fd478f6c7ce"
      ],
      "author": {
        "name": "Gustavo F. Padovan",
        "email": "padovan@profusion.mobi",
        "time": "Fri May 20 21:23:37 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri May 20 21:23:37 2011 +0200"
      },
      "message": "backing-dev: Kill set but not used var in  bdi_debug_stats_show()\n\nSigned-off-by: Gustavo F. Padovan \u003cpadovan@profusion.mobi\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\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": "d39dd11c3e6a7af5c20bfac40594db36cf270f42",
      "tree": "6384e07fa2f347b286cde9754c4507b5a738ab47",
      "parents": [
        "30f5b28e7f937608e0407edaa459cc8161de81d9",
        "0b2d0724e26a335cd326eb7ad552c109116a8795"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 19:01:30 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 24 19:01:30 2011 -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:\n  fs: simplify iget \u0026 friends\n  fs: pull inode-\u003ei_lock up out of writeback_single_inode\n  fs: rename inode_lock to inode_hash_lock\n  fs: move i_wb_list out from under inode_lock\n  fs: move i_sb_list out from under inode_lock\n  fs: remove inode_lock from iput_final and prune_icache\n  fs: Lock the inode LRU list separately\n  fs: factor inode disposal\n  fs: protect inode-\u003ei_state with inode-\u003ei_lock\n  autofs4: Do not potentially dereference NULL pointer returned by fget() in autofs_dev_ioctl_setpipefd()\n  autofs4 - remove autofs4_lock\n  autofs4 - fix d_manage() return on rcu-walk\n  autofs4 - fix autofs4_expire_indirect() traversal\n  autofs4 - fix dentry leak in autofs4_expire_direct()\n  autofs4 - reinstate last used update on access\n  vfs - check non-mountpoint dentry might block in __follow_mount_rcu()\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": "95f28604a65b1c40b6c6cd95e58439cd7ded3add",
      "tree": "25b3be2d5505f06b2262bade8d1ecf5323c47ff8",
      "parents": [
        "a91a2785b200864aef2270ed6a3babac7a253a20"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 17 11:13:12 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 17 11:13:12 2011 +0100"
      },
      "message": "fs: assign sb-\u003es_bdi to default_backing_dev_info if the bdi is going away\n\nWe don\u0027t have proper reference counting for this yet, so we run into\ncases where the device is pulled and we OOPS on flushing the fs data.\nThis happens even though the dirty inodes have already been\nmigrated to the default_backing_dev_info.\n\nReported-by: Torsten Hilbrich \u003ctorsten.hilbrich@secunet.com\u003e\nTested-by: Torsten Hilbrich \u003ctorsten.hilbrich@secunet.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7eaceaccab5f40bbfda044629a6298616aeaed50",
      "tree": "33954d12f63e25a47eb6d86ef3d3d0a5e62bf752",
      "parents": [
        "73c101011926c5832e6e141682180c4debe2cf45"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "message": "block: remove per-queue plugging\n\nCode has been converted over to the new explicit on-stack plugging,\nand delay users have been converted to use the new API for that.\nSo lets kill off the old plugging along with aops-\u003esync_page().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.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": "0e093d99763eb4cea09f8ca4f1d01f34e121d10b",
      "tree": "fad38f9c3651c81db298521141a79d9468f71986",
      "parents": [
        "08fc468f4eaf6683bae5bdb94743a09d8630cb80"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Oct 26 14:21:45 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:07 2010 -0700"
      },
      "message": "writeback: do not sleep on the congestion queue if there are no congested BDIs or if significant congestion is not being encountered in the current zone\n\nIf congestion_wait() is called with no BDI congested, the caller will\nsleep for the full timeout and this may be an unnecessary sleep.  This\npatch adds a wait_iff_congested() that checks congestion and only sleeps\nif a BDI is congested else, it calls cond_resched() to ensure the caller\nis not hogging the CPU longer than its quota but otherwise will not sleep.\n\nThis is aimed at reducing some of the major desktop stalls reported during\nIO.  For example, while kswapd is operating, it calls congestion_wait()\nbut it could just have been reclaiming clean page cache pages with no\ncongestion.  Without this patch, it would sleep for a full timeout but\nafter this patch, it\u0027ll just call schedule() if it has been on the CPU too\nlong.  Similar logic applies to direct reclaimers that are not making\nenough progress.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.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": "52bb9198668968506f9d12bf35d7f5d3f094921e",
      "tree": "6e1f79c46de902c4462054803eb13115673f8c8c",
      "parents": [
        "e11da5b4fdf01d71d73c21cb92b00595b917d7fd"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Oct 26 14:21:41 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:07 2010 -0700"
      },
      "message": "writeback: account for time spent congestion_waited\n\nThere is strong evidence to indicate a lot of time is being spent in\ncongestion_wait(), some of it unnecessarily.  This patch adds a tracepoint\nfor congestion_wait to record when congestion_wait() was called, how long\nthe timeout was for and how long it actually slept.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "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": "976e48f8a5b02fc33f3e5cad87fb3fcea041a49c",
      "tree": "a4245a8a37202f1c6847dbfa6931b8287b7d0b0b",
      "parents": [
        "180be2a0420a0d680285e9352c0db85016b9ed2a"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Sep 21 11:48:55 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Sep 22 09:48:47 2010 +0200"
      },
      "message": "bdi: Initialize noop_backing_dev_info properly\n\nProperly initialize this backing dev info so that writeback code does not\nbarf when getting to it e.g. via sb-\u003es_bdi.\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": "6628bc74f1aa9c35dd386320bf7ec04f12edb1b3",
      "tree": "c51e82966384fcdda25594372197d80fcb6a649b",
      "parents": [
        "2a643ec67f9efc4b6921a3dd6e257f3b5360622b"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Fri Aug 27 09:15:09 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Aug 27 09:16:18 2010 +0200"
      },
      "message": "writeback: do not lose wakeup events when forking bdi threads\n\nThis patch fixes the following issue:\n\nINFO: task mount.nfs4:1120 blocked for more than 120 seconds.\n\"echo 0 \u003e /proc/sys/kernel/hung_task_timeout_secs\" disables this message.\nmount.nfs4    D 00000000fffc6a21     0  1120   1119 0x00000000\n ffff880235643948 0000000000000046 ffffffff00000000 ffffffff00000000\n ffff880235643fd8 ffff880235314760 00000000001d44c0 ffff880235643fd8\n 00000000001d44c0 00000000001d44c0 00000000001d44c0 00000000001d44c0\nCall Trace:\n [\u003cffffffff813bc747\u003e] schedule_timeout+0x34/0xf1\n [\u003cffffffff813bc530\u003e] ? wait_for_common+0x3f/0x130\n [\u003cffffffff8106b50b\u003e] ? trace_hardirqs_on+0xd/0xf\n [\u003cffffffff813bc5c3\u003e] wait_for_common+0xd2/0x130\n [\u003cffffffff8104159c\u003e] ? default_wake_function+0x0/0xf\n [\u003cffffffff813beaa0\u003e] ? _raw_spin_unlock+0x26/0x2a\n [\u003cffffffff813bc6bb\u003e] wait_for_completion+0x18/0x1a\n [\u003cffffffff81101a03\u003e] sync_inodes_sb+0xca/0x1bc\n [\u003cffffffff811056a6\u003e] __sync_filesystem+0x47/0x7e\n [\u003cffffffff81105798\u003e] sync_filesystem+0x47/0x4b\n [\u003cffffffff810e7ffd\u003e] generic_shutdown_super+0x22/0xd2\n [\u003cffffffff810e80f8\u003e] kill_anon_super+0x11/0x4f\n [\u003cffffffffa00d06d7\u003e] nfs4_kill_super+0x3f/0x72 [nfs]\n [\u003cffffffff810e7b68\u003e] deactivate_locked_super+0x21/0x41\n [\u003cffffffff810e7fd6\u003e] deactivate_super+0x40/0x45\n [\u003cffffffff810fc66c\u003e] mntput_no_expire+0xb8/0xed\n [\u003cffffffff810fc73b\u003e] release_mounts+0x9a/0xb0\n [\u003cffffffff810fc7bb\u003e] put_mnt_ns+0x6a/0x7b\n [\u003cffffffffa00d0fb2\u003e] nfs_follow_remote_path+0x19a/0x296 [nfs]\n [\u003cffffffffa00d11ca\u003e] nfs4_try_mount+0x75/0xaf [nfs]\n [\u003cffffffffa00d1790\u003e] nfs4_get_sb+0x276/0x2ff [nfs]\n [\u003cffffffff810e7dba\u003e] vfs_kern_mount+0xb8/0x196\n [\u003cffffffff810e7ef6\u003e] do_kern_mount+0x48/0xe8\n [\u003cffffffff810fdf68\u003e] do_mount+0x771/0x7e8\n [\u003cffffffff810fe062\u003e] sys_mount+0x83/0xbd\n [\u003cffffffff810089c2\u003e] system_call_fastpath+0x16/0x1b\n\nThe reason of this hang was a race condition: when the flusher thread is\nforking a bdi thread, we use \u0027kthread_run()\u0027, so we run it _before_ we make it\nvisible in \u0027bdi-\u003ewb.task\u0027. The bdi thread runs, does all works, and goes sleep.\n\u0027bdi-\u003ewb.task\u0027 is still NULL. And this is a dangerous time window.\n\nIf at this time someone queues a work for this bdi, he does not see the bdi\nthread and wakes up the forker thread instead! But the forker has already\nforked this bdi thread, but just did not make it visible yet!\n\nThe result is that we lose the wake up event for this bdi thread and the NFS4\ncode waits forever.\n\nTo fix the problem, we should use \u0027ktrhead_create()\u0027 for creating bdi threads,\nthen make them visible in \u0027bdi-\u003ewb.task\u0027, and only after this wake them up.\nThis is exactly what this patch does.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\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": "6bf05d03ea8d00bb53e0642f94a5a6815be2edb6",
      "tree": "d36ea43efb9306fa4ff2fdb8f579fb661cad61e8",
      "parents": [
        "e7f52dfb4f378ea1bbfd4476f4e8ba42f5fb332c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Aug 04 13:34:31 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:57 2010 +0200"
      },
      "message": "writeback: fix bad _bh spinlock nesting\n\nFix a bug where a lock is _bh nested within another _bh lock,\nbut forgets to use the _bh variant for unlock.\n\nFurther more, it\u0027s not necessary to test _bh locks, the inner lock\ncan just use spin_lock(). So fix up the bug by making that change.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c284de61db31669cce547ffc99efda971146719d",
      "tree": "d4b05dd00d1e33dd34917f3d2a9476f69ca9ac99",
      "parents": [
        "603320239fb436f175c8b6bfa43d5023c47a6dc2"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:25 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:57 2010 +0200"
      },
      "message": "writeback: cleanup bdi_register\n\nThis patch makes sure we first initialize everything and set the BDI_registered\nflag, and only after this we add the bdi to \u0027bdi_list\u0027. Current code adds the\nbdi to the list too early, and as a result I the\n\nWARN(!test_bit(BDI_registered, \u0026bdi-\u003estate)\n\nin bdi forker is triggered. Also, it is in general good practice to make things\nvisible only when they are fully initialized.\n\nAlso, this patch does few micro clean-ups:\n1. Removes the \u0027exit\u0027 label which does not do anything, just returns. This\n   allows to get rid of few braces and \u0027ret\u0027 variable and make the code smaller.\n2. If \u0027kthread_run()\u0027 fails, remove the error code it returns, not hard-coded\n   \u0027-ENOMEM\u0027. Theoretically, some day \u0027kthread_run()\u0027 can return something\n   else. Also, in case of failure it is not necessary to set \u0027bdi-\u003ewb.task\u0027 to\n   NULL.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "603320239fb436f175c8b6bfa43d5023c47a6dc2",
      "tree": "efe1e78de6c2b8029cdcdcad2e98e3ef6c017900",
      "parents": [
        "b5048a6cb5455a16bdff26a4c5ae9534f070d94c"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:24 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: add new tracepoints\n\nAdd 2 new trace points to the periodic write-back wake up case, just like we do\nin the \u0027bdi_queue_work()\u0027 function. Namely, introduce:\n\n1. trace_writeback_wake_thread(bdi)\n2. trace_writeback_wake_forker_thread(bdi)\n\nThe first event is triggered every time we wake up a bdi thread to start\nperiodic background write-out. The second event is triggered only when the bdi\nthread does not exist and should be created by the forker thread.\n\nThis patch was suggested by Dave Chinner and Christoph Hellwig.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b5048a6cb5455a16bdff26a4c5ae9534f070d94c",
      "tree": "fe66278b6ff27a6ef9dbef0cd3db1d8640e10bbd",
      "parents": [
        "6467716a37673e8d47b4984eb19839bdad0a8353"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:23 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: remove unnecessary init_timer call\n\nThe \u0027setup_timer()\u0027 function also calls \u0027init_timer()\u0027, so the extra\n\u0027init_timer()\u0027 call is not needed. Indeed, \u0027setup_timer()\u0027 is basically\n\u0027init_timer()\u0027 plus callback function and data pointers initialization.\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": "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": "adf392407076b85816d48714fb8eeaedb2157884",
      "tree": "e926a18b55e67724e0267fe359caf51d530d5b09",
      "parents": [
        "ecd584030da67ede1bf17955746a6ce834d9fc6b"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:19 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: restructure bdi forker loop a little\n\nThis patch re-structures the bdi forker a little:\n1. Add \u0027bdi_cap_flush_forker(bdi)\u0027 condition check to the bdi loop. The reason\n   for this is that the forker thread can start _before_ the \u0027BDI_registered\u0027\n   flag is set (see \u0027bdi_register()\u0027), so the WARN() statement will fire for\n   the default bdi. I observed this warning at boot-up.\n\n2. Introduce an enum \u0027action\u0027 and use \"switch\" statement in the outer loop.\n   This is a preparation to the further patch which will teach the forker\n   thread killing bdi threads, so we\u0027ll have another case in the \"switch\"\n   statement. This change was suggested by Christoph Hellwig.\n\nThis patch is just a small step towards the coming change where the forker\nthread will kill the bdi threads. It should simplify reviewing the following\nchanges, which would otherwise be larger.\n\nThis patch also amends comments a little.\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": "080dcec41709be72613133f695be75b98dd43e88",
      "tree": "8f453a9fe9b2a144662aad4e06944722610a1056",
      "parents": [
        "297252c81de8043ca6c36e5984c24fdb5aab9013"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:16 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: simplify bdi code a little\n\nThis patch simplifies bdi code a little by removing the \u0027pending_list\u0027 which is\nredundant. Indeed, currently the forker thread (\u0027bdi_forker_thread()\u0027) is\nworking like this:\n\n1. In a loop, fetch all bdi\u0027s which have works but have no writeback thread and\n   move them to the \u0027pending_list\u0027.\n2. If the list is empty, sleep for 5 sec.\n3. Otherwise, take one bdi from the list, fork the writeback thread for this\n   bdi, and repeat the loop.\n\nIOW, it first moves everything to the \u0027pending_list\u0027, then process only one\nelement, and so on. This patch simplifies the algorithm, which is now as\nfollows.\n\n1. Find the first bdi which has a work and remove it from the global list of\n   bdi\u0027s (bdi_list).\n2. If there was not such bdi, sleep 5 sec.\n3. Fork the writeback thread for this bdi and repeat the loop.\n\nIOW, now we find the first bdi to process, process it, and so on. This is\nsimpler and involves less lists.\n\nThe bonus now is that we can get rid of a couple of functions, as well as\nremove complications which involve \u0027rcu_call()\u0027 and \u0027bdi-\u003ercu_head\u0027.\n\nThis patch also makes sure we use \u0027list_add_tail_rcu()\u0027, instead of plain\n\u0027list_add_tail()\u0027, but this piece of code is going to be removed in the next\npatch anyway.\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": "c4ec7908c2c5125f75fabd100e7a95626a6883ee",
      "tree": "d58ee401205de8385c74a04e9b66101fc9a6e22b",
      "parents": [
        "c5f7ad233b8805dae06e694538d8095b19f3c560"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:14 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 the forker thread - 2\n\nCurrently, if someone submits jobs for the default bdi, we can lose wake-up\nevents. E.g., this can happen if \u0027bdi_queue_work()\u0027 is called when\n\u0027bdi_forker_thread()\u0027 is executing code after \u0027wb_do_writeback(me, 0)\u0027, but\nbefore \u0027set_current_state(TASK_INTERRUPTIBLE)\u0027.\n\nThis situation is unlikely, and the result is not very severe - we\u0027ll just\ndelay the execution of the work, but this is still not very nice.\n\nThis patch fixes the issue by checking whether the default bdi has works before\nthe forker thread goes sleep.\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": "c5f7ad233b8805dae06e694538d8095b19f3c560",
      "tree": "c47a1991fe1de055cfd06f5cecb8cfaa9f497ed7",
      "parents": [
        "94eac5e62364df4e605e451218ee6024a7ba664f"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:13 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 the forker thread - 1\n\nCurrently the forker thread can lose wake-ups which may lead to unnecessary\ndelays in processing bdi works. E.g., consider the following scenario.\n\n1. \u0027bdi_forker_thread()\u0027 walks the \u0027bdi_list\u0027, finds out there is nothing to\n   do, and is about to finish the loop.\n2. A bdi thread decides to exit because it was inactive for long time.\n3. \u0027bdi_queue_work()\u0027 adds a work to the bdi which just exited, so it wakes up\n   the forker thread.\n4. but \u0027bdi_forker_thread()\u0027 executes \u0027set_current_state(TASK_INTERRUPTIBLE)\u0027\n   and goes sleep. We lose a wake-up.\n\nLosing the wake-up is not fatal, but this means that the bdi work processing\nwill be delayed by up to 5 sec. This race is theoretical, I never hit it, but\nit is worth fixing.\n\nThe fix is to execute \u0027set_current_state(TASK_INTERRUPTIBLE)\u0027 _before_ walking\n\u0027bdi_list\u0027, not after.\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": "94eac5e62364df4e605e451218ee6024a7ba664f",
      "tree": "5e4b7d85361ad20821ba3371acc1536262846f22",
      "parents": [
        "6f904ff0e39ea88f81eb77e8dfb4e1238492f0a8"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:12 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:19 2010 +0200"
      },
      "message": "writeback: fix possible race when creating bdi threads\n\nThis patch fixes a very unlikely race condition on the bdi forker thread error\npath: when bdi thread creation fails, \u0027bdi-\u003ewb.task\u0027 may contain the error code\nfor a short period of time. If at the same time someone submits a work to this\nbdi, we can end up with an oops \u0027bdi_queue_work()\u0027 while executing\n\u0027wake_up_process(wb-\u003etask)\u0027.\n\nThis patch fixes the issue by introducing a temporary variable \u0027task\u0027 and\nstoring the possible error code there, so that \u0027wb-\u003etask\u0027 would never take\nerroneous values.\n\nNote, this race is very unlikely and I never hit it, so it is theoretical, but\nnevertheless worth fixing.\n\nThis patch also merges 2 comments which were previously separate.\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": "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": "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": "6423104b6a1e6f0c18be60e8c33f02d263331d5e",
      "tree": "e22957400e9679bf82b62e03d6bd831181053945",
      "parents": [
        "f9eadbbd424c083b8005c7b738f644611b9ef489"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 20:00:35 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 20:00:35 2010 +0200"
      },
      "message": "writeback: fixups for !dirty_writeback_centisecs\n\nCommit 69b62d01 fixed up most of the places where we would enter\nbusy schedule() spins when disabling the periodic background\nwriteback. This fixes up the sb timer so that it doesn\u0027t get\nhammered on with the delay disabled, and ensures that it gets\nrearmed if needed when /proc/sys/vm/dirty_writeback_centisecs\ngets modified.\n\nbdi_forker_task() also needs to check for !dirty_writeback_centisecs\nand use schedule() appropriately, fix that up too.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "5129a469a91a91427334c40e29e64c6d0ab68caf",
      "tree": "141a17cbea94c7c9c038187cc7081e1c688eac55",
      "parents": [
        "7e2455c1a123ceadbb35150a610d61e8443fd340"
      ],
      "author": {
        "name": "Jörn Engel",
        "email": "joern@logfs.org",
        "time": "Sun Apr 25 08:54:42 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Apr 25 08:54:42 2010 +0200"
      },
      "message": "Catch filesystems lacking s_bdi\n\nnoop_backing_dev_info is used only as a flag to mark filesystems that\ndon\u0027t have any backing store, like tmpfs, procfs, spufs, etc.\n\nSigned-off-by: Joern Engel \u003cjoern@logfs.org\u003e\n\nChanged the BUG_ON() to a WARN_ON(). Note that adding dirty inodes\nto the noop_backing_dev_info is not legal and will not result in\nthem being flushed, but we already catch this condition in\n__mark_inode_dirty() when checking for a registered bdi.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c3c532061e46156e8aab1268f38d66cfb63aeb2d",
      "tree": "8c5b027873b823b04f5564d442477e80e82e8edb",
      "parents": [
        "a534dbe96e9929c7245924d8252d89048c23d569"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Apr 22 11:37:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Apr 22 11:39:36 2010 +0200"
      },
      "message": "bdi: add helper function for doing init and register of a bdi for a file system\n\nPretty trivial helper, just sets up the bdi and registers it. An atomic\nsequence count is used to ensure that the registered sysfs names are\nunique.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "144214537370b4f133a735446ebe86e90cfb2501",
      "tree": "840f26c5a83d4730c28b5c46ec000a76e89adcc9",
      "parents": [
        "a506aedc51093544ff0f9610af6066d18cb6abbe"
      ],
      "author": {
        "name": "Anton Blanchard",
        "email": "anton@samba.org",
        "time": "Fri Apr 02 09:46:55 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 02 09:46:55 2010 +0200"
      },
      "message": "backing-dev: Handle class_create() failure\n\nI hit this when we had a bug in IDR for a few days. Basically sysfs would\nfail to create new inodes since it uses an IDR and therefore class_create would\nfail.\n\nWhile we are unlikely to see this fail we may as well handle it instead of\noopsing.\n\nSigned-off-by: Anton Blanchard \u003canton@samba.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "bf7ec5bb6114b2f086e536e24486fdacd1c0d339",
      "tree": "8f42b40fed799332e94142a084fed158f56a4d1a",
      "parents": [
        "220d0b1dbf78c6417a658c96e571415552d3abac"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Dec 03 13:49:43 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 13:49:43 2009 +0100"
      },
      "message": "flusher: Fix PF_FROZEN race\n\nTo touch task-\u003eflags directly is racy. thaw_process() still has race\n(changing non_current-\u003eflags, but this is another issue) though, I think\nit\u0027s much better off.\n\nSo, use thaw_process() instead.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c62b17a58ab5e97534ff6487241addd5fcc606de",
      "tree": "577c41e145d934d5fc39b6bd0b623ff508a6159d",
      "parents": [
        "aa021baa3295fa6e3f367d80f8955dd5176656eb"
      ],
      "author": {
        "name": "Romit Dasgupta",
        "email": "romit@ti.com",
        "time": "Thu Nov 12 13:08:11 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Nov 12 13:08:11 2009 +0100"
      },
      "message": "Thaw refrigerated bdi flusher threads before invoking kthread_stop on them\n\nUnfreezes the bdi flusher task when the said task needs to exit.\n\nSteps to reproduce this.\n1) Mount a file system from MMC/SD card.\n2) Unmount the file system. This creates a flusher task.\n3) Attempt suspend to RAM. System is unresponsive.\n\nThis is because the bdi flusher thread is already in the refrigerator and will\nremain so until it is thawed. The MMC driver suspend routine call stack will\nultimately issue a \u0027kthread_stop\u0027 on the bdi flusher thread and will block\nuntil the flusher thread is exited. Since the bdi flusher thread is in the\nrefrigerator it never cleans up until thawed.\n\nSigned-off-by: Romit Dasgupta \u003cromit@ti.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "8c4db3355b0fcc9ad77431f15b955efa0645b5d0",
      "tree": "59182683545e9ca548d0e17e52d6326bb24b44cf",
      "parents": [
        "5f04eeb8a76521dec371ceb05e8263889a8af2bc"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Nov 03 20:18:44 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Nov 03 20:18:44 2009 +0100"
      },
      "message": "backing-dev: bdi sb prune should be in the unregister path, not destroy\n\nCommit 592b09a42fc3ae6737a0f3ecf4fee42ecd0296f8 was different from\nthe tested path, in that it moved the bdi super_block prune from\nunregister to destroy context. This doesn\u0027t fully fix the sync hang\nbug on unexpected device removal, as need to prune the bdi cache\npointer before killing flusher thread.\n\nTested-by: Artur Skawina \u003cart.08.09@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "592b09a42fc3ae6737a0f3ecf4fee42ecd0296f8",
      "tree": "d06ca7165c5dfc5224910993b36a50e54a896831",
      "parents": [
        "960cc0f4fef607baabc2232fbd7cce5368a9dcfd"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 29 11:46:12 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 29 11:46:12 2009 +0100"
      },
      "message": "backing-dev: ensure that a removed bdi no longer has super_block referencing it\n\nWhen the bdi is being removed, we have to ensure that no super_blocks\ncurrently have that cached in sb-\u003es_bdi. Normally this is ensured by\nthe sb having a longer life span than the bdi, but if the device is\nsuddenly yanked, we have to kill this reference. sb-\u003es_bdi is pointed\nto freed memory at that point.\n\nThis fixes a problem with sync(1) hanging when a USB stick is pulled\nwithout cleanly umounting it first.\n\nReported-by: Pavel Machek \u003cpavel@ucw.cz\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "961515f613f26b7958c56c5c71061a8231e02be7",
      "tree": "136d6cc71141a66368bfd121f4ab84a47ad715cc",
      "parents": [
        "d25105e8911bff1dbd68e387f12901c5b1a15fe8"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Fri Oct 09 13:01:27 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Oct 09 13:01:27 2009 +0200"
      },
      "message": "writeback: kill space in debugfs item name\n\nThe space is not script friendly, kill it.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ce5f8e7795195edb6f84f74aa9d72e739df38486",
      "tree": "f8d5a3a18d70b49b2c9bbe47f62c908e8eda9c64",
      "parents": [
        "b6e51316daede0633e9274e1e30391cfa4747877"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Sep 14 12:57:56 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:52 2009 +0200"
      },
      "message": "writeback: splice dirty inode entries to default bdi on bdi_destroy()\n\nWe cannot safely ensure that the inodes are all gone at this point\nin time, and we must not destroy this bdi with inodes having off it.\nSo just splice our entries to the default bdi since that one will\nalways persist.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "cfc4ba5365449cb6b5c9f68d755a142f17da1e47",
      "tree": "08770de9bb0e658f2e65abd4d10187b3e9f6bb1b",
      "parents": [
        "f11fcae8401a3175f528e2f7917362645d570111"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Sep 14 13:12:40 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:51 2009 +0200"
      },
      "message": "writeback: use RCU to protect bdi_list\n\nNow that bdi_writeback_all() no longer handles integrity writeback,\nit doesn\u0027t have to block anymore. This means that we can switch\nbdi_list reader side protection to RCU.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "500b067c5e6ceea49cf280a02597b1169320e08c",
      "tree": "5e2e9bfd66f825f845fdf395b6303b884769ff6d",
      "parents": [
        "d993831fa7ffeb89e994f046f93eeb09ec91df08"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 09 09:10:25 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:26 2009 +0200"
      },
      "message": "writeback: check for registered bdi in flusher add and inode dirty\n\nAlso a debugging aid. We want to catch dirty inodes being added to\nbacking devices that don\u0027t do writeback.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "d993831fa7ffeb89e994f046f93eeb09ec91df08",
      "tree": "da4f94bbf022c83988bda71adf1f1b3a88cb4592",
      "parents": [
        "f09b00d3e789a88fa6c7c03cedc62cb65c1de0cb"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Jun 12 14:45:52 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:26 2009 +0200"
      },
      "message": "writeback: add name to backing_dev_info\n\nThis enables us to track who does what and print info. Its main use\nis catching dirty inodes on the default_backing_dev_info, so we can\nfix that up.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f09b00d3e789a88fa6c7c03cedc62cb65c1de0cb",
      "tree": "9451d5cfb8d52f2aa9987d93e420ecb505d09ba5",
      "parents": [
        "d0bceac747b547c0b4769b91fec7d3c15600153f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 25 09:08:21 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:26 2009 +0200"
      },
      "message": "writeback: add some debug inode list counters to bdi stats\n\nAdd some debug entries to be able to inspect the internal state of\nthe writeback details.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "03ba3782e8dcc5b0e1efe440d33084f066e38cae",
      "tree": "e5a6513b411de16a46199530ec98ef9b7f1efc50",
      "parents": [
        "66f3b8e2e103a0b93b945764d98e9ba46cb926dd"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 09 09:08:54 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:25 2009 +0200"
      },
      "message": "writeback: switch to per-bdi threads for flushing data\n\nThis gets rid of pdflush for bdi writeout and kupdated style cleaning.\npdflush writeout suffers from lack of locality and also requires more\nthreads to handle the same workload, since it has to work in a\nnon-blocking fashion against each queue. This also introduces lumpy\nbehaviour and potential request starvation, since pdflush can be starved\nfor queue access if others are accessing it. A sample ffsb workload that\ndoes random writes to files is about 8% faster here on a simple SATA drive\nduring the benchmark phase. File layout also seems a LOT more smooth in\nvmstat:\n\n r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa\n 0  1      0 608848   2652 375372    0    0     0 71024  604    24  1 10 48 42\n 0  1      0 549644   2712 433736    0    0     0 60692  505    27  1  8 48 44\n 1  0      0 476928   2784 505192    0    0     4 29540  553    24  0  9 53 37\n 0  1      0 457972   2808 524008    0    0     0 54876  331    16  0  4 38 58\n 0  1      0 366128   2928 614284    0    0     4 92168  710    58  0 13 53 34\n 0  1      0 295092   3000 684140    0    0     0 62924  572    23  0  9 53 37\n 0  1      0 236592   3064 741704    0    0     4 58256  523    17  0  8 48 44\n 0  1      0 165608   3132 811464    0    0     0 57460  560    21  0  8 54 38\n 0  1      0 102952   3200 873164    0    0     4 74748  540    29  1 10 48 41\n 0  1      0  48604   3252 926472    0    0     0 53248  469    29  0  7 47 45\n\nwhere vanilla tends to fluctuate a lot in the creation phase:\n\n r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa\n 1  1      0 678716   5792 303380    0    0     0 74064  565    50  1 11 52 36\n 1  0      0 662488   5864 319396    0    0     4   352  302   329  0  2 47 51\n 0  1      0 599312   5924 381468    0    0     0 78164  516    55  0  9 51 40\n 0  1      0 519952   6008 459516    0    0     4 78156  622    56  1 11 52 37\n 1  1      0 436640   6092 541632    0    0     0 82244  622    54  0 11 48 41\n 0  1      0 436640   6092 541660    0    0     0     8  152    39  0  0 51 49\n 0  1      0 332224   6200 644252    0    0     4 102800  728    46  1 13 49 36\n 1  0      0 274492   6260 701056    0    0     4 12328  459    49  0  7 50 43\n 0  1      0 211220   6324 763356    0    0     0 106940  515    37  1 10 51 39\n 1  0      0 160412   6376 813468    0    0     0  8224  415    43  0  6 49 45\n 1  1      0  85980   6452 886556    0    0     4 113516  575    39  1 11 54 34\n 0  2      0  85968   6452 886620    0    0     0  1640  158   211  0  0 46 54\n\nA 10 disk test with btrfs performs 26% faster with per-bdi flushing. A\nSSD based writeback test on XFS performs over 20% better as well, with\nthe throughput being very stable around 1GB/sec, where pdflush only\nmanages 750MB/sec and fluctuates wildly while doing so. Random buffered\nwrites to many files behave a lot better as well, as does random mmap\u0027ed\nwrites.\n\nA separate thread is added to sync the super blocks. In the long term,\nadding sync_supers_bdi() functionality could get rid of this thread again.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "66f3b8e2e103a0b93b945764d98e9ba46cb926dd",
      "tree": "442bf5664214f0a1448e4010b09868cc58fdd3d1",
      "parents": [
        "d8a8559cd7a9ccac98d5f6f13297a2ff68a43627"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 02 09:19:46 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:25 2009 +0200"
      },
      "message": "writeback: move dirty inodes from super_block to backing_dev_info\n\nThis is a first step at introducing per-bdi flusher threads. We should\nhave no change in behaviour, although sb_has_dirty_inodes() is now\nridiculously expensive, as there\u0027s no easy way to answer that question.\nNot a huge problem, since it\u0027ll be deleted in subsequent patches.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "8aa7e847d834ed937a9ad37a0f2ad5b8584c1ab0",
      "tree": "76c8b4f1362a928d426f2201790ab5d128f57724",
      "parents": [
        "c2cc49a2f8a479dde96a599646d30b6cc9dbed78"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Jul 09 14:52:32 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.(none)",
        "time": "Fri Jul 10 20:31:53 2009 +0200"
      },
      "message": "Fix congestion_wait() sync/async vs read/write confusion\n\nCommit 1faa16d22877f4839bd433547d770c676d1d964c accidentally broke\nthe bdi congestion wait queue logic, causing us to wait on congestion\nfor WRITE (\u003d\u003d 1) when we really wanted BLK_RW_ASYNC (\u003d\u003d 0) instead.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1faa16d22877f4839bd433547d770c676d1d964c",
      "tree": "9a0d50be1ef0358c1f53d7107413100904e7d526",
      "parents": [
        "0221c81b1b8eb0cbb6b30a0ced52ead32d2b4e4c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Apr 06 14:48:01 2009 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 06 08:04:53 2009 -0700"
      },
      "message": "block: change the request allocation/congestion logic to be sync/async based\n\nThis makes sure that we never wait on async IO for sync requests, instead\nof doing the split on writes vs reads.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "26160158d3d3df548f4ee046cc6147fe048cfa9c",
      "tree": "19affc0b08f00ac22e8881d6ec73061a8764cc5d",
      "parents": [
        "07e86f405addc6436eb969b8279bb14a6dcacce4"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Mar 17 09:35:06 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Mar 26 11:01:33 2009 +0100"
      },
      "message": "Move the default_backing_dev_info out of readahead.c and into backing-dev.c\n\nIt really makes no sense to have it in readahead.c, so move it where\nit belongs.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f94181da7192f4ed8ccb1b633ea4ce56954df130",
      "tree": "2e28785f2df447573a11fbdd611dc19eb3fcb794",
      "parents": [
        "932adbed6d99cc373fc3433d701b3a594fea872c",
        "fdbc0450df12cc9cb397f3497db4b0cad7c1a8ff"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 17:10:04 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 17:10:04 2009 -0800"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  rcu: fix rcutorture bug\n  rcu: eliminate synchronize_rcu_xxx macro\n  rcu: make treercu safe for suspend and resume\n  rcu: fix rcutree grace-period-latency bug on small systems\n  futex: catch certain assymetric (get|put)_futex_key calls\n  futex: make futex_(get|put)_key() calls symmetric\n  locking, percpu counters: introduce separate lock classes\n  swiotlb: clean up EXPORT_SYMBOL usage\n  swiotlb: remove unnecessary declaration\n  swiotlb: replace architecture-specific swiotlb.h with linux/swiotlb.h\n  swiotlb: add support for systems with highmem\n  swiotlb: store phys address in io_tlb_orig_addr array\n  swiotlb: add hwdev to swiotlb_phys_to_bus() / swiotlb_sg_to_bus()\n"
    },
    {
      "commit": "364aeb2849789b51bf4b9af2ddd02fee7285c54e",
      "tree": "4a24ea43a2a76ae744571f3c7b5022aa1107599e",
      "parents": [
        "58a01a45721bf7bd3a41a86248c3cb02a6b0c501"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jan 06 14:39:29 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:02 2009 -0800"
      },
      "message": "mm: change dirty limit type specifiers to unsigned long\n\nThe background dirty and dirty limits are better defined with type\nspecifiers of unsigned long since negative writeback thresholds are not\npossible.\n\nThese values, as returned by get_dirty_limits(), are normally compared\nwith ZVC values to determine whether writeback shall commence or be\nthrottled.  Such page counts cannot be negative, so declaring the page\nlimits as signed is unnecessary.\n\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Andrea Righi \u003crighi.andrea@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fdbc0450df12cc9cb397f3497db4b0cad7c1a8ff",
      "tree": "3d266bd156f140f06b22f27784a7487bba6d6da5",
      "parents": [
        "46483d10e5123d78cf9abf37577aa8e75f18b8a4",
        "90621c40cc4ab7b0a414311ce37e7cc7173403b6",
        "ea319518ba3de282c13ae1cf4bf2215c5e03e67e",
        "238c6d54830c624f34ac9cf123ac04aebfca5013"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jan 06 09:32:11 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jan 06 09:32:11 2009 +0100"
      },
      "message": "Merge branches \u0027core/futexes\u0027, \u0027core/locking\u0027, \u0027core/rcu\u0027 and \u0027linus\u0027 into core/urgent\n"
    },
    {
      "commit": "ea319518ba3de282c13ae1cf4bf2215c5e03e67e",
      "tree": "72eea2b8e5d8926e95ade18d610d59b13df5dae5",
      "parents": [
        "00ef9f7348dfd2fc223ec42aceb30836e86b367f"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Fri Dec 26 15:08:55 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Dec 29 13:43:00 2008 +0100"
      },
      "message": "locking, percpu counters: introduce separate lock classes\n\nImpact: fix lockdep false positives\n\nClassify percpu_counter instances similar to regular lock objects --\nthat is, per instantiation site.\n\nThe networking code has increased its use of percpu_counters, which\nleads to false positives if they are treated as a single class.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "69fc208be5b7eb18d22d1eca185b201400fd5ffc",
      "tree": "2f3961f9f74ed8b136d7550291367fa80f4b54ea",
      "parents": [
        "437f2f91d6597c67662f847d9ed4c99cb3c440cd"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Dec 09 13:14:06 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 10 08:01:52 2008 -0800"
      },
      "message": "mm/backing-dev.c: remove recently-added WARN_ON()\n\nOn second thoughts, this is just going to disturb people while telling us\nthings which we already knew.\n\nCc: Peter Korsgaard \u003cjacmet@sunsite.dk\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f1d0b063d993527754f062c589b73f125024d216",
      "tree": "65abf0c262ea1c8cf3931ea328329c82a049d341",
      "parents": [
        "1b79cd04fab80be61dcd2732e2423aafde9a4c1c"
      ],
      "author": {
        "name": "Kay Sievers",
        "email": "kay.sievers@vrfy.org",
        "time": "Tue Dec 02 10:31:50 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 02 15:50:40 2008 -0800"
      },
      "message": "bdi: register sysfs bdi device only once per queue\n\nDevices which share the same queue, like floppies and mtd devices, get\nregistered multiple times in the bdi interface, but bdi accounts only the\nlast registered device of the devices sharing one queue.\n\nOn remove, all earlier registered devices leak, stay around in sysfs, and\ncause \"duplicate filename\" errors if the devices are re-created.\n\nThis prevents the creation of multiple bdi interfaces per queue, and the\nbdi device will carry the dev_t name of the block device which is the\nfirst one registered, of the pool of devices using the same queue.\n\n[akpm@linux-foundation.org: add a WARN_ON so we know which drivers are misbehaving]\nTested-by: Peter Korsgaard \u003cjacmet@sunsite.dk\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "19051c5035d217e572672a2ca9db06c1cef50e9b",
      "tree": "9fef0047e070c977463a85d5cbd0f9479694d286",
      "parents": [
        "8882b39421bae317e3ee864edd845e994307ce16"
      ],
      "author": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu May 15 13:44:08 2008 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Tue May 20 13:31:53 2008 -0700"
      },
      "message": "mm: bdi: fix race in bdi_class device creation\n\nThere is a race from when a device is created with device_create() and\nthen the drvdata is set with a call to dev_set_drvdata() in which a\nsysfs file could be open, yet the drvdata will be NULL, causing all\nsorts of bad things to happen.\n\nThis patch fixes the problem by using the new function,\ndevice_create_vargs().\n\nMany thanks to Arthur Jones \u003cajones@riverbed.com\u003e for reporting the bug,\nand testing patches out.\n\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: Arthur Jones \u003cajones@riverbed.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "76f1418b485da2707531178e517bbb5cf06b3c76",
      "tree": "138a012d965ebc284163f42e0ff5786c6de1cda5",
      "parents": [
        "a42dde04152750426cc620fd277e80fffae2f65a"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Wed Apr 30 00:54:36 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:50 2008 -0700"
      },
      "message": "mm: bdi: move statistics to debugfs\n\nMove BDI statistics to debugfs:\n\n   /sys/kernel/debug/bdi/\u003cbdi\u003e/stats\n\nUse postcore_initcall() to initialize the sysfs class and debugfs,\nbecause debugfs is initialized in core_initcall().\n\nUpdate descriptions in ABI documentation.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a42dde04152750426cc620fd277e80fffae2f65a",
      "tree": "98cdf246280c59e0bf044ae6d2c229fc27b73203",
      "parents": [
        "189d3c4a94ef19fca2a71a6a336e9fda900e25e7"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Apr 30 00:54:36 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:50 2008 -0700"
      },
      "message": "mm: bdi: allow setting a maximum for the bdi dirty limit\n\nAdd \"max_ratio\" to /sys/class/bdi.  This indicates the maximum percentage of\nthe global dirty threshold allocated to this bdi.\n\n[mszeredi@suse.cz]\n\n - fix parsing in max_ratio_store().\n - export bdi_set_max_ratio() to modules\n - limit bdi_dirty with bdi-\u003emax_ratio\n - document new sysfs attribute\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "189d3c4a94ef19fca2a71a6a336e9fda900e25e7",
      "tree": "75c0de871fe9922885a2fa073f15806d829342fa",
      "parents": [
        "b6f2fcbcfca9db2bd7aa24940224fcd3bbdbb8aa"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Apr 30 00:54:35 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:50 2008 -0700"
      },
      "message": "mm: bdi: allow setting a minimum for the bdi dirty limit\n\nUnder normal circumstances each device is given a part of the total write-back\ncache that relates to its current avg writeout speed in relation to the other\ndevices.\n\nmin_ratio - allows one to assign a minimum portion of the write-back cache to\na particular device.  This is useful in situations where you might want to\nprovide a minimum QoS.  (One request for this feature came from flash based\nstorage people who wanted to avoid writing out at all costs - they of course\nneeded some pdflush hacks as well)\n\nmax_ratio - allows one to assign a maximum portion of the dirty limit to a\nparticular device.  This is useful in situations where you want to avoid one\ndevice taking all or most of the write-back cache.  Eg.  an NFS mount that is\nprone to get stuck, or a FUSE mount which you don\u0027t trust to play fair.\n\nAdd \"min_ratio\" to /sys/class/bdi.  This indicates the minimum percentage of\nthe global dirty threshold allocated to this bdi.\n\n[mszeredi@suse.cz]\n\n - fix parsing in min_ratio_store()\n - document new sysfs attribute\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cf0ca9fe5dd9e3693d935757a7b2fc50fc576554",
      "tree": "c795c5271eda9fc67579fa3176c646b892dfdb41",
      "parents": [
        "caafa4324335aeb11bc233d5f87aca8cce30beba"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Apr 30 00:54:32 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:49 2008 -0700"
      },
      "message": "mm: bdi: export BDI attributes in sysfs\n\nProvide a place in sysfs (/sys/class/bdi) for the backing_dev_info object.\nThis allows us to see and set the various BDI specific variables.\n\nIn particular this properly exposes the read-ahead window for all relevant\nusers and /sys/block/\u003cblock\u003e/queue/read_ahead_kb should be deprecated.\n\nWith patient help from Kay Sievers and Greg KH\n\n[mszeredi@suse.cz]\n\n - split off NFS and FUSE changes into separate patches\n - document new sysfs attributes under Documentation/ABI\n - do bdi_class_init as a core_initcall, otherwise the \"default\" BDI\n   won\u0027t be initialized\n - remove bdi_init_fmt macro, it\u0027s not used very much\n\n[akpm@linux-foundation.org: fix ia64 warning]\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nAcked-by: Greg KH \u003cgreg@kroah.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4b01a0b1613beeb01e12c78feb69e98f0da0a69a",
      "tree": "d92ae6d43c8f3b18c8ae785dc322ad9e2e3fae36",
      "parents": [
        "0c664f974269bb4c3d38ba900c91a9a5d4cee5b1"
      ],
      "author": {
        "name": "Denis Cheng",
        "email": "crquan@gmail.com",
        "time": "Tue Dec 04 23:45:07 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Dec 05 09:21:18 2007 -0800"
      },
      "message": "mm/backing-dev.c: fix percpu_counter_destroy call bug in bdi_init\n\nthis call should use the array index j, not i.  But with this approach, just\none int i is enough, int j is not needed.\n\nSigned-off-by: Denis Cheng \u003ccrquan@gmail.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "04fbfdc14e5f48463820d6b9807daa5e9c92c51f",
      "tree": "c62905212c8c6373b2258c7f528398d3c831b075",
      "parents": [
        "145ca25eb2fbd20d4faf1bad4628c7650332058f"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Oct 16 23:25:50 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:42:45 2007 -0700"
      },
      "message": "mm: per device dirty threshold\n\nScale writeback cache per backing device, proportional to its writeout speed.\n\nBy decoupling the BDI dirty thresholds a number of problems we currently have\nwill go away, namely:\n\n - mutual interference starvation (for any number of BDIs);\n - deadlocks with stacked BDIs (loop, FUSE and local NFS mounts).\n\nIt might be that all dirty pages are for a single BDI while other BDIs are\nidling. By giving each BDI a \u0027fair\u0027 share of the dirty limit, each one can have\ndirty pages outstanding and make progress.\n\nA global threshold also creates a deadlock for stacked BDIs; when A writes to\nB, and A generates enough dirty pages to get throttled, B will never start\nwriteback until the dirty pages go away. Again, by giving each BDI its own\n\u0027independent\u0027 dirty limit, this problem is avoided.\n\nSo the problem is to determine how to distribute the total dirty limit across\nthe BDIs fairly and efficiently. A DBI that has a large dirty limit but does\nnot have any dirty pages outstanding is a waste.\n\nWhat is done is to keep a floating proportion between the DBIs based on\nwriteback completions. This way faster/more active devices get a larger share\nthan slower/idle devices.\n\n[akpm@linux-foundation.org: fix warnings]\n[hugh@veritas.com: Fix occasional hang when a task couldn\u0027t get out of balance_dirty_pages]\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b2e8fb6efa209c82203c79b491b5bc952d44aa57",
      "tree": "e4c82e3f2c70a188ced7126435bf153f5f6c4a1c",
      "parents": [
        "e0bf68ddec4f4f90e5871404be4f1854c17f3120"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Oct 16 23:25:47 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:42:45 2007 -0700"
      },
      "message": "mm: scalable bdi statistics counters\n\nProvide scalable per backing_dev_info statistics counters.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c4dc4beed23827e155d7cbc2a1ffa3949eddd194",
      "tree": "b7f115c159fe26b90b7e5b7d5dcf2f9318b69bf1",
      "parents": [
        "1f7d6668c29b1dfa307a44844f9bb38356fc989b"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Oct 16 23:25:41 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:42:44 2007 -0700"
      },
      "message": "nfs: remove congestion_end()\n\nThese patches aim to improve balance_dirty_pages() and directly address three\nissues:\n  1) inter device starvation\n  2) stacked device deadlocks\n  3) inter process starvation\n\n1 and 2 are a direct result from removing the global dirty limit and using\nper device dirty limits. By giving each device its own dirty limit is will\nno longer starve another device, and the cyclic dependancy on the dirty limit\nis broken.\n\nIn order to efficiently distribute the dirty limit across the independant\ndevices a floating proportion is used, this will allocate a share of the total\nlimit proportional to the device\u0027s recent activity.\n\n3 is done by also scaling the dirty limit proportional to the current task\u0027s\nrecent dirty rate.\n\nThis patch:\n\nnfs: remove congestion_end().  It\u0027s redundant, clear_bdi_congested() already\nwakes the waiters.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: \"J. Bruce Fields\" \u003cbfields@fieldses.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8f8a68ee486e1c81eaead3c521822bf86142d380",
      "tree": "8435b491a52ea22918f621892970536957352fa0",
      "parents": [
        "1492192b4a0bb84dd9b792cc0bd30583220a28a7"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Sun Jul 15 23:41:52 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Jul 16 09:05:52 2007 -0700"
      },
      "message": "remove mm/backing-dev.c:congestion_wait_interruptible()\n\ncongestion_wait_interruptible() is no longer used.\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nAcked-by: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "89a09141df6ac1c3821fbe44ca8384eb37692965",
      "tree": "ccb21055fca86ac2657b3262ac37eb3e5c44bea0",
      "parents": [
        "b74a2f0913694556a027795d2954d30523fac4c5"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Fri Mar 16 13:38:26 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Mar 16 19:25:05 2007 -0700"
      },
      "message": "[PATCH] nfs: fix congestion control\n\nThe current NFS client congestion logic is severly broken, it marks the\nbacking device congested during each nfs_writepages() call but doesn\u0027t\nmirror this in nfs_writepage() which makes for deadlocks.  Also it\nimplements its own waitqueue.\n\nReplace this by a more regular congestion implementation that puts a cap on\nthe number of active writeback pages and uses the bdi congestion waitqueue.\n\nAlso always use an interruptible wait since it makes sense to be able to\nSIGKILL the process even for mounts without \u0027intr\u0027.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3fcfab16c5b86eaa3db3a9a31adba550c5b67141",
      "tree": "bd348fa081b8fbec2c79fbf8f173a306d70b2b2c",
      "parents": [
        "79e2de4bc53d7ca2a8eedee49e4a92479b4b530e"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Thu Oct 19 23:28:16 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 20 10:26:35 2006 -0700"
      },
      "message": "[PATCH] separate bdi congestion functions from queue congestion functions\n\nSeparate out the concept of \"queue congestion\" from \"backing-dev congestion\".\nCongestion is a backing-dev concept, not a queue concept.\n\nThe blk_* congestion functions are retained, as wrappers around the core\nbacking-dev congestion functions.\n\nThis proper layering is needed so that NFS can cleanly use the congestion\nfunctions, and so that CONFIG_BLOCK\u003dn actually links.\n\nCc: \"Thomas Maier\" \u003cbalagi@justmail.de\u003e\nCc: \"Jens Axboe\" \u003cjens.axboe@oracle.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Peter Osterlund \u003cpetero2@telia.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    }
  ]
}
