)]}'
{
  "log": [
    {
      "commit": "cb9ef8d5e394f70db64bda79c20d3569a20d2574",
      "tree": "b0048b0de7892c124cf13c7d114632b050564623",
      "parents": [
        "684265d4a30f133162f06ddb2e5010608e60e4bb"
      ],
      "author": {
        "name": "Stefan Hajnoczi",
        "email": "stefanha@linux.vnet.ibm.com",
        "time": "Thu Jan 13 15:47:26 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:48 2011 -0800"
      },
      "message": "fs/fs-writeback.c: fix sync_inodes_sb() return value kernel-doc\n\nThe sync_inodes_sb() function does not have a return value.  Remove the\noutdated documentation comment.\n\nSigned-off-by: Stefan Hajnoczi \u003cstefanha@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c691b9d983d7015d54057034f4cd9b6d8affd976",
      "tree": "f87bd8ba07deacb2bcab5fe93684a04f0f7d34c2",
      "parents": [
        "b9543dac5bbc4aef0a598965b6b34f6259ab9a9b"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Jan 13 15:45:48 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:32 2011 -0800"
      },
      "message": "sync_inode_metadata: fix comment\n\nUse correct function name, remove incorrect apostrophe\n\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b9543dac5bbc4aef0a598965b6b34f6259ab9a9b",
      "tree": "255244e6bb9340d4b8ce1fa6b4d2ed4adece4b15",
      "parents": [
        "aa373cf550994623efb5d49a4d8775bafd10bbc1"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Jan 13 15:45:48 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:32 2011 -0800"
      },
      "message": "writeback: avoid livelocking WB_SYNC_ALL writeback\n\nWhen wb_writeback() is called in WB_SYNC_ALL mode, work-\u003enr_to_write is\nusually set to LONG_MAX.  The logic in wb_writeback() then calls\n__writeback_inodes_sb() with nr_to_write \u003d\u003d MAX_WRITEBACK_PAGES and we\neasily end up with non-positive nr_to_write after the function returns, if\nthe inode has more than MAX_WRITEBACK_PAGES dirty pages at the moment.\n\nWhen nr_to_write is \u003c\u003d 0 wb_writeback() decides we need another round of\nwriteback but this is wrong in some cases!  For example when a single\nlarge file is continuously dirtied, we would never finish syncing it\nbecause each pass would be able to write MAX_WRITEBACK_PAGES and inode\ndirty timestamp never gets updated (as inode is never completely clean).\nThus __writeback_inodes_sb() would write the redirtied inode again and\nagain.\n\nFix the issue by setting nr_to_write to LONG_MAX in WB_SYNC_ALL mode.  We\ndo not need nr_to_write in WB_SYNC_ALL mode anyway since\nwrite_cache_pages() does livelock avoidance using page tagging in\nWB_SYNC_ALL mode.\n\nThis makes wb_writeback() call __writeback_inodes_sb() only once on\nWB_SYNC_ALL.  The latter function won\u0027t livelock because it works on\n\n- a finite set of files by doing queue_io() once at the beginning\n- a finite set of pages by PAGECACHE_TAG_TOWRITE page tagging\n\nAfter this patch, program from http://lkml.org/lkml/2010/10/24/154 is no\nlonger able to stall sync forever.\n\n[fengguang.wu@intel.com: fix locking comment]\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aa373cf550994623efb5d49a4d8775bafd10bbc1",
      "tree": "64b14d1f5491f436a8b3ea5c32edecde5c255285",
      "parents": [
        "71927e84e0aebfbe5a91565c3b207af25a4e9162"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Jan 13 15:45:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:32 2011 -0800"
      },
      "message": "writeback: stop background/kupdate works from livelocking other works\n\nBackground writeback is easily livelockable in a loop in wb_writeback() by\na process continuously re-dirtying pages (or continuously appending to a\nfile).  This is in fact intended as the target of background writeback is\nto write dirty pages it can find as long as we are over\ndirty_background_threshold.\n\nBut the above behavior gets inconvenient at times because no other work\nqueued in the flusher thread\u0027s queue gets processed.  In particular, since\ne.g.  sync(1) relies on flusher thread to do all the IO for it, sync(1)\ncan hang forever waiting for flusher thread to do the work.\n\nGenerally, when a flusher thread has some work queued, someone submitted\nthe work to achieve a goal more specific than what background writeback\ndoes.  Moreover by working on the specific work, we also reduce amount of\ndirty pages which is exactly the target of background writeout.  So it\nmakes sense to give specific work a priority over a generic page cleaning.\n\nThus we interrupt background writeback if there is some other work to do.\nWe return to the background writeback after completing all the queued\nwork.\n\nThis may delay the writeback of expired inodes for a while, however the\nexpired inodes will eventually be flushed to disk as long as the other\nworks won\u0027t livelock.\n\n[fengguang.wu@intel.com: update comment]\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\n\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "71927e84e0aebfbe5a91565c3b207af25a4e9162",
      "tree": "8271f6d2008405bd392893ab0f7a4bd25653dc90",
      "parents": [
        "6585027a5e8cb490e3a761b2f3f3c3acf722aff2"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Thu Jan 13 15:45:46 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:32 2011 -0800"
      },
      "message": "writeback: trace wakeup event for background writeback\n\nThis tracks when balance_dirty_pages() tries to wakeup the flusher thread\nfor background writeback (if it was not started already).\n\nSuggested-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6585027a5e8cb490e3a761b2f3f3c3acf722aff2",
      "tree": "ac856c00c148d590d6b7632cc11bc23be6a9ccc2",
      "parents": [
        "b44129b30652c8771db2265939bb8b463724043d"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Jan 13 15:45:44 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:32 2011 -0800"
      },
      "message": "writeback: integrated background writeback work\n\nCheck whether background writeback is needed after finishing each work.\n\nWhen bdi flusher thread finishes doing some work check whether any kind of\nbackground writeback needs to be done (either because\ndirty_background_ratio is exceeded or because we need to start flushing\nold inodes).  If so, just do background write back.\n\nThis way, bdi_start_background_writeback() just needs to wake up the\nflusher thread.  It will do background writeback as soon as there is no\nother work.\n\nThis is a preparatory patch for the next patch which stops background\nwriteback as soon as there is other work to do.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "925d169f5b86fe57e2f5264ea574cce9a89b719d",
      "tree": "241d3156b427c6398bd3fc5efa9108635d0e189b",
      "parents": [
        "cdf01dd5443d0befc8c6a32cb2e3d2f568fd2558",
        "6418c96107a2b399848bb8cfc6e29f11ca74fb94"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 30 09:05:48 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 30 09:05:48 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (39 commits)\n  Btrfs: deal with errors from updating the tree log\n  Btrfs: allow subvol deletion by unprivileged user with -o user_subvol_rm_allowed\n  Btrfs: make SNAP_DESTROY async\n  Btrfs: add SNAP_CREATE_ASYNC ioctl\n  Btrfs: add START_SYNC, WAIT_SYNC ioctls\n  Btrfs: async transaction commit\n  Btrfs: fix deadlock in btrfs_commit_transaction\n  Btrfs: fix lockdep warning on clone ioctl\n  Btrfs: fix clone ioctl where range is adjacent to extent\n  Btrfs: fix delalloc checks in clone ioctl\n  Btrfs: drop unused variable in block_alloc_rsv\n  Btrfs: cleanup warnings from gcc 4.6 (nonbugs)\n  Btrfs: Fix variables set but not read (bugs found by gcc 4.6)\n  Btrfs: Use ERR_CAST helpers\n  Btrfs: use memdup_user helpers\n  Btrfs: fix raid code for removing missing drives\n  Btrfs: Switch the extent buffer rbtree into a radix tree\n  Btrfs: restructure try_release_extent_buffer()\n  Btrfs: use the flusher threads for delalloc throttling\n  Btrfs: tune the chunk allocation to 5% of the FS as metadata\n  ...\n\nFix up trivial conflicts in fs/btrfs/super.c and fs/fs-writeback.c, and\nremove use of INIT_RCU_HEAD in fs/btrfs/extent_io.c (that init macro was\nuseless and removed in commit 5e8067adfdba: \"rcu head remove init\")\n"
    },
    {
      "commit": "cdf01dd5443d0befc8c6a32cb2e3d2f568fd2558",
      "tree": "97ff92f14a00146ad20b168559bb13f11db7fafb",
      "parents": [
        "847f877600313e65c5659476b30d74a6f66e388e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 30 08:55:52 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 30 08:55:52 2010 -0700"
      },
      "message": "fs-writeback.c: unify some common code\n\nThe btrfs merge looks like hell, because it changes fs-writeback.c, and\nthe crazy code has this repeated \"estimate number of dirty pages\"\ncounting that involves three different helper functions.  And it\u0027s done\nin two different places.\n\nJust unify that whole calculation as a \"get_nr_dirty_pages()\" helper\nfunction, and the merge result will look half-way decent.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3259f8bed2f0f57c2fdcdac1b510c3fa319ef97e",
      "tree": "5f06f6c83413ca2fc7aec85ba0811a8c91904097",
      "parents": [
        "cb44921a09221f0a90217b44044448f63190f3e5"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 11:16:17 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 29 11:25:29 2010 -0400"
      },
      "message": "Add new functions for triggering inode writeback\n\nWhen btrfs is running low on metadata space, it needs to force delayed\nallocation pages to disk.  It currently does this with a suboptimal walk\nof a private list of inodes with delayed allocation, and it would be\nmuch better if we used the generic flusher threads.\n\nwriteback_inodes_sb_if_idle would be ideal, but it waits for the flusher\nthread to start IO on all the dirty pages in the FS before it returns.\nThis adds variants of writeback_inodes_sb* that allow the caller to\ncontrol how many pages get sent down.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "426e1f5cec4821945642230218876b0e89aafab1",
      "tree": "2728ace018d0698886989da586210ef1543a7098",
      "parents": [
        "9e5fca251f44832cb996961048ea977f80faf6ea",
        "63997e98a3be68d7cec806d22bf9b02b2e1daabb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 17:58:44 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 17:58:44 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (52 commits)\n  split invalidate_inodes()\n  fs: skip I_FREEING inodes in writeback_sb_inodes\n  fs: fold invalidate_list into invalidate_inodes\n  fs: do not drop inode_lock in dispose_list\n  fs: inode split IO and LRU lists\n  fs: switch bdev inode bdi\u0027s correctly\n  fs: fix buffer invalidation in invalidate_list\n  fsnotify: use dget_parent\n  smbfs: use dget_parent\n  exportfs: use dget_parent\n  fs: use RCU read side protection in d_validate\n  fs: clean up dentry lru modification\n  fs: split __shrink_dcache_sb\n  fs: improve DCACHE_REFERENCED usage\n  fs: use percpu counter for nr_dentry and nr_dentry_unused\n  fs: simplify __d_free\n  fs: take dcache_lock inside __d_path\n  fs: do not assign default i_ino in new_inode\n  fs: introduce a per-cpu last_ino allocator\n  new helper: ihold()\n  ...\n"
    },
    {
      "commit": "766f9164193f6dda1497bbf3861060198421fb92",
      "tree": "a2fd9a8231d12b822721a4306b614dd0e2e0d9c0",
      "parents": [
        "4ce6494dbd8909718840bb88d5a699ef6ce5c212"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Oct 26 14:22:45 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:15 2010 -0700"
      },
      "message": "kernel: remove PF_FLUSHER\n\nPF_FLUSHER is only ever set, not tested, remove it.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "74ce002d9aee23031b4967e1dd1c1966ddc60749",
      "tree": "797e998b3c8661d8e6884de4228928d6cda74047",
      "parents": [
        "16b56cf4b8a0fa9acc21bd2ad19839b917999b96"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Oct 26 14:22:05 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:10 2010 -0700"
      },
      "message": "fs/fs-writeback.c: restore lost comment\n\nI had to go back to a 2.6.20 tree to work out why we\u0027re adding a\nnumber-of-inodes into a number-of-pages count.  Restore the lost comment.\n\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4cbec4c8b9fda9ec784086fe7f74cd32a8adda95",
      "tree": "669c3df27982345b52d0bfca8026e3f275e64a03",
      "parents": [
        "0e093d99763eb4cea09f8ca4f1d01f34e121d10b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Oct 26 14:21:45 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:08 2010 -0700"
      },
      "message": "writeback: remove the internal 5% low bound on dirty_ratio\n\nThe dirty_ratio was silently limited in global_dirty_limits() to \u003e\u003d 5%.\nThis is not a user expected behavior.  And it\u0027s inconsistent with\ncalc_period_shift(), which uses the plain vm_dirty_ratio value.\n\nLet\u0027s remove the internal bound.\n\nAt the same time, fix balance_dirty_pages() to work with the\ndirty_thresh\u003d0 case.  This allows applications to proceed when\ndirty+writeback pages are all cleaned.\n\nAnd \"\u003e\" fits with the name \"exceeded\" better than \"\u003e\u003d\" does.  Neil thinks\nit is an aesthetic improvement as well as a functional one :)\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nProposed-by: Con Kolivas \u003ckernel@kolivas.org\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Neil Brown \u003cneilb@suse.de\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Michael Rubin \u003cmrubin@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9843b76aae80293f5b5a0e275360627508595ce5",
      "tree": "522fc7b8435d13e2a6c329d93a597173ce6956a7",
      "parents": [
        "a031878670ac8fe466859d4c1506bd91ae48678c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sun Oct 24 19:40:46 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:16 2010 -0400"
      },
      "message": "fs: skip I_FREEING inodes in writeback_sb_inodes\n\nSkip I_FREEING inodes just like I_WILL_FREE and I_NEW when walking the\nwriteback lists.  Currenly this can\u0027t happen, but once we move from\ninode_lock to more fine grained locking we can have an inode that\u0027s\nstill on the writeback lists but has I_FREEING set, and we absolutely\nneed to skip it here, just like we do for all other inode list walks.\n\nBased on a patch from Dave Chinner.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7ccf19a8042e343f8159f8a5fdd6a9422aa90c78",
      "tree": "9a69aaad6eb8992cae06f44dfea8c1d94f2a7f99",
      "parents": [
        "a5491e0c7bb7387e3e6ff9994d6dc2efc78af56c"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Thu Oct 21 11:49:30 2010 +1100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:15 2010 -0400"
      },
      "message": "fs: inode split IO and LRU lists\n\nThe use of the same inode list structure (inode-\u003ei_list) for two\ndifferent list constructs with different lifecycles and purposes\nmakes it impossible to separate the locking of the different\noperations. Therefore, to enable the separation of the locking of\nthe writeback and reclaim lists, split the inode-\u003ei_list into two\nseparate lists dedicated to their specific tracking functions.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9e38d86ff2d8a8db99570e982230861046df32b5",
      "tree": "7ea2ceea24a4e070259a4585b2748c9e2c070ee0",
      "parents": [
        "cffbc8aa334f55c9ed42d25202eb3ebf3a97c195"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Sat Oct 23 06:55:17 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:09 2010 -0400"
      },
      "message": "fs: Implement lazy LRU updates for inodes\n\nConvert the inode LRU to use lazy updates to reduce lock and\ncacheline traffic.  We avoid moving inodes around in the LRU list\nduring iget/iput operations so these frequent operations don\u0027t need\nto access the LRUs. Instead, we defer the refcount checks to\nreclaim-time and use a per-inode state flag, I_REFERENCED, to tell\nreclaim that iget has touched the inode in the past. This means that\nonly reclaim should be touching the LRU with any frequency, hence\nsignificantly reducing lock acquisitions and the amount contention\non LRU updates.\n\nThis also removes the inode_in_use list, which means we now only\nhave one list for tracking the inode LRU status. This makes it much\nsimpler to split out the LRU list operations under it\u0027s own lock.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cffbc8aa334f55c9ed42d25202eb3ebf3a97c195",
      "tree": "dab046695754e2cec1a7ab7a64b236e976d94360",
      "parents": [
        "be1a16a0ae29a7c90081a657b64aa51cb1a65a27"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Sat Oct 23 05:03:02 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:26:09 2010 -0400"
      },
      "message": "fs: Convert nr_inodes and nr_unused to per-cpu counters\n\nThe number of inodes allocated does not need to be tied to the\naddition or removal of an inode to/from a list. If we are not tied\nto a list lock, we could update the counters when inodes are\ninitialised or destroyed, but to do that we need to convert the\ncounters to be per-cpu (i.e. independent of a lock). This means that\nwe have the freedom to change the list/locking implementation\nwithout needing to care about the counters.\n\nBased on a patch originally from Eric Dumazet.\n\n[AV: cleaned up a bit, fixed build breakage on weird configs\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1d3382cbf02986e4833849f528d451367ea0b4cb",
      "tree": "b754f9903c0f77ce40dcff18030b49d0ce213eab",
      "parents": [
        "a8dade34e3df581bc36ca2afe6e27055e178801c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Oct 23 15:19:20 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:24:15 2010 -0400"
      },
      "message": "new helper: inode_unhashed()\n\nnote: for race-free uses you inode_lock held\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c37650161a53c01ddd88587675f9a4adc909a73e",
      "tree": "85821998de9a6723dedc42488b9491db9692d1e3",
      "parents": [
        "81fca444001e5a41ab80ce8cf9a5734c00ec6546"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Oct 06 10:48:20 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:18:19 2010 -0400"
      },
      "message": "fs: add sync_inode_metadata\n\nAdd a new helper to write out the inode using the writeback code,\nthat is including the correct dirty bit and list manipulation.  A few\nof filesystems already opencode this, and a lot of others should be\nusing it instead of using write_inode_now which also writes out the\ndata.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "aaead25b954879e1a708ff2f3602f494c18d20b5",
      "tree": "85c42d7c603bba80035079400764bffd27b2ff0e",
      "parents": [
        "c6ea21e35bf3691cad59647c771e6606067f627d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Oct 04 14:25:33 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Oct 04 14:25:33 2010 +0200"
      },
      "message": "writeback: always use sb-\u003es_bdi for writeback purposes\n\nWe currently use struct backing_dev_info for various different purposes.\nOriginally it was introduced to describe a backing device which includes\nan unplug and congestion function and various bits of readahead information\nand VM-relevant flags.  We\u0027re also using for tracking dirty inodes for\nwriteback.\n\nTo make writeback properly find all inodes we need to only access the\nper-filesystem backing_device pointed to by the superblock in -\u003es_bdi\ninside the writeback code, and not the instances pointeded to by\ninode-\u003ei_mapping-\u003ebacking_dev which can be overriden by special devices\nor might not be set at all by some filesystems.\n\nLong term we should split out the writeback-relevant bits of struct\nbacking_device_info (which includes more than the current bdi_writeback)\nand only point to it from the superblock while leaving the traditional\nbacking device as a separate structure that can be overriden by devices.\n\nThe one exception for now is the block device filesystem which really\nwants different writeback contexts for it\u0027s different (internal) inodes\nto handle the writeout more efficiently.  For now we do this with\na hack in fs-writeback.c because we\u0027re so late in the cycle, but in\nthe future I plan to replace this with a superblock method that allows\nfor multiple writeback contexts per filesystem.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "692ebd17c2905313fff3c504c249c6a0faad16ec",
      "tree": "656c80512505d5b117bd01e25d66d88d7cfe9851",
      "parents": [
        "371d217ee1ff8b418b8f73fb2a34990f951ec2d4"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Sep 21 11:51:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Sep 22 09:48:47 2010 +0200"
      },
      "message": "bdi: Fix warnings in __mark_inode_dirty for /dev/zero and friends\n\nInodes of devices such as /dev/zero can get dirty for example via\nutime(2) syscall or due to atime update. Backing device of such inodes\n(zero_bdi, etc.) is however unable to handle dirty inodes and thus\n__mark_inode_dirty complains.  In fact, inode should be rather dirtied\nagainst backing device of the filesystem holding it. This is generally a\ngood rule except for filesystems such as \u0027bdev\u0027 or \u0027mtd_inodefs\u0027. Inodes\nin these pseudofilesystems are referenced from ordinary filesystem\ninodes and carry mapping with real data of the device. Thus for these\ninodes we have to use inode-\u003ei_mapping-\u003ebacking_dev_info as we did so\nfar. We distinguish these filesystems by checking whether sb-\u003es_bdi\npoints to a non-trivial backing device or not.\n\nExample: Assume we have an ext3 filesystem on /dev/sda1 mounted on /.\nThere\u0027s a device inode A described by a path \"/dev/sdb\" on this\nfilesystem. This inode will be dirtied against backing device \"8:0\"\nafter this patch. bdev filesystem contains block device inode B coupled\nwith our inode A. When someone modifies a page of /dev/sdb, it\u0027s B that\ngets dirtied and the dirtying happens against the backing device \"8:16\".\nThus both inodes get filed to a correct bdi list.\n\nCc: stable@kernel.org\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b76b4014f9d988d2412b873e4d4c13c7f9afc4e4",
      "tree": "25493858be740a5cb558e594e6af61971758a94a",
      "parents": [
        "6628bc74f1aa9c35dd386320bf7ec04f12edb1b3"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Sat Aug 28 08:52:10 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 28 08:52:10 2010 +0200"
      },
      "message": "writeback: Fix lost wake-up shutting down writeback thread\n\nSetting the task state here may cause us to miss the wake up from\nkthread_stop(), so we need to recheck kthread_should_stop() or risk\nsleeping forever in the following schedule().\n\nSymptom was an indefinite hang on an NFSv4 mount.  (NFSv4 may create\nmultiple mounts in a temporary namespace while traversing the mount\npath, and since the temporary namespace is immediately destroyed, it may\nend up destroying a mount very soon after it was created, possibly\nmaking this race more likely.)\n\nINFO: task mount.nfs4:4314 blocked for more than 120 seconds.\n\"echo 0 \u003e /proc/sys/kernel/hung_task_timeout_secs\" disables this message.\nmount.nfs4    D 0000000000000000  2880  4314   4313 0x00000000\n ffff88001ed6da28 0000000000000046 ffff88001ed6dfd8 ffff88001ed6dfd8\n ffff88001ed6c000 ffff88001ed6c000 ffff88001ed6c000 ffff88001e5003a0\n ffff88001ed6dfd8 ffff88001e5003a8 ffff88001ed6c000 ffff88001ed6dfd8\nCall Trace:\n [\u003cffffffff8196090d\u003e] schedule_timeout+0x1cd/0x2e0\n [\u003cffffffff8106a31c\u003e] ? mark_held_locks+0x6c/0xa0\n [\u003cffffffff819639a0\u003e] ? _raw_spin_unlock_irq+0x30/0x60\n [\u003cffffffff8106a5fd\u003e] ? trace_hardirqs_on_caller+0x14d/0x190\n [\u003cffffffff819671fe\u003e] ? sub_preempt_count+0xe/0xd0\n [\u003cffffffff8195fc80\u003e] wait_for_common+0x120/0x190\n [\u003cffffffff81033c70\u003e] ? default_wake_function+0x0/0x20\n [\u003cffffffff8195fdcd\u003e] wait_for_completion+0x1d/0x20\n [\u003cffffffff810595fa\u003e] kthread_stop+0x4a/0x150\n [\u003cffffffff81061a60\u003e] ? thaw_process+0x70/0x80\n [\u003cffffffff810cc68a\u003e] bdi_unregister+0x10a/0x1a0\n [\u003cffffffff81229dc9\u003e] nfs_put_super+0x19/0x20\n [\u003cffffffff810ee8c4\u003e] generic_shutdown_super+0x54/0xe0\n [\u003cffffffff810ee9b6\u003e] kill_anon_super+0x16/0x60\n [\u003cffffffff8122d3b9\u003e] nfs4_kill_super+0x39/0x90\n [\u003cffffffff810eda45\u003e] deactivate_locked_super+0x45/0x60\n [\u003cffffffff810edfb9\u003e] deactivate_super+0x49/0x70\n [\u003cffffffff81108294\u003e] mntput_no_expire+0x84/0xe0\n [\u003cffffffff811084ef\u003e] release_mounts+0x9f/0xc0\n [\u003cffffffff81108575\u003e] put_mnt_ns+0x65/0x80\n [\u003cffffffff8122cc56\u003e] nfs_follow_remote_path+0x1e6/0x420\n [\u003cffffffff8122cfbf\u003e] nfs4_try_mount+0x6f/0xd0\n [\u003cffffffff8122d0c2\u003e] nfs4_get_sb+0xa2/0x360\n [\u003cffffffff810edcb8\u003e] vfs_kern_mount+0x88/0x1f0\n [\u003cffffffff810ede92\u003e] do_kern_mount+0x52/0x130\n [\u003cffffffff81963d9a\u003e] ? _lock_kernel+0x6a/0x170\n [\u003cffffffff81108e9e\u003e] do_mount+0x26e/0x7f0\n [\u003cffffffff81106b3a\u003e] ? copy_mount_options+0xea/0x190\n [\u003cffffffff811094b8\u003e] sys_mount+0x98/0xf0\n [\u003cffffffff810024d8\u003e] system_call_fastpath+0x16/0x1b\n1 lock held by mount.nfs4/4314:\n #0:  (\u0026type-\u003es_umount_key#24){+.+...}, at: [\u003cffffffff810edfb1\u003e] deactivate_super+0x41/0x70\n\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nAcked-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\n"
    },
    {
      "commit": "81d73a32d775ae9674ea6edf0b5b721fc3bc57d9",
      "tree": "c4097c3c7715a128cf54252b2ff906d3d8946ae0",
      "parents": [
        "a50aeb40144982eb766053309b6fc33e14ca46f0"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Aug 11 14:17:44 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:30 2010 -0700"
      },
      "message": "mm: fix writeback_in_progress()\n\nCommit 83ba7b071f3 (\"writeback: simplify the write back thread queue\")\nbroke writeback_in_progress() as in that commit we started to remove work\nitems from the list at the moment we start working on them and not at the\nmoment they are finished.  Thus if the flusher thread was doing some work\nbut there was no other work queued, writeback_in_progress() returned\nfalse.  This could in particular cause unnecessary queueing of background\nwriteback from balance_dirty_pages() or writeout work from\nwriteback_sb_if_idle().\n\nThis patch fixes the problem by introducing a bit in the bdi state which\nindicates that the flusher thread is processing some work and uses this\nbit for writeback_in_progress() test.\n\nNOTE: Both callsites of writeback_in_progress() (namely,\nwriteback_inodes_sb_if_idle() and balance_dirty_pages()) would actually\nneed a different information than what writeback_in_progress() provides.\nThey would need to know whether *the kind of writeback they are going to\nsubmit* is already queued.  But this information isn\u0027t that simple to\nprovide so let\u0027s fix writeback_in_progress() for the time being.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a50aeb40144982eb766053309b6fc33e14ca46f0",
      "tree": "15837ddb24c356b910a9af3e06f47937c0716027",
      "parents": [
        "4ea879b96d437693485d21f4b7e1eb72f7615fc2"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Aug 11 14:17:43 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:30 2010 -0700"
      },
      "message": "writeback: merge for_kupdate and !for_kupdate cases\n\nUnify the logic for kupdate and non-kupdate cases.  There won\u0027t be\nstarvation because the inodes requeued into b_more_io will later be\nspliced _after_ the remaining inodes in b_io, hence won\u0027t stand in the way\nof other inodes in the next run.\n\nIt avoids unnecessary redirty_tail() calls, hence the update of\ni_dirtied_when.  The timestamp update is undesirable because it could\nlater delay the inode\u0027s periodic writeback, or may exclude the inode from\nthe data integrity sync operation (which checks timestamp to avoid extra\nwork and livelock).\n\n\u003d\u003d\u003d\nHow the redirty_tail() comes about:\n\nIt was a long story..  This redirty_tail() was introduced with\nwbc.more_io.  The initial patch for more_io actually does not have the\nredirty_tail(), and when it\u0027s merged, several 100% iowait bug reports\narised:\n\nreiserfs:\n        http://lkml.org/lkml/2007/10/23/93\n\njfs:\n        commit 29a424f28390752a4ca2349633aaacc6be494db5\n        JFS: clear PAGECACHE_TAG_DIRTY for no-write pages\n\next2:\n        http://www.spinics.net/linux/lists/linux-ext4/msg04762.html\n\nThey are all old bugs hidden in various filesystems that become \"visible\"\nwith the more_io patch.  At the time, the ext2 bug is thought to be\n\"trivial\", so not fixed.  Instead the following updated more_io patch with\nredirty_tail() is merged:\n\n\thttp://www.spinics.net/linux/lists/linux-ext4/msg04507.html\n\nThis will in general prevent 100% on ext2 and possibly other unknown FS bugs.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Martin Bligh \u003cmbligh@google.com\u003e\nCc: Michael Rubin \u003cmrubin@google.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4ea879b96d437693485d21f4b7e1eb72f7615fc2",
      "tree": "142899843f2ce27334dbd134cd1bab3058cc8028",
      "parents": [
        "23539afc71937dbaca7de2229669f4475ff4ea7b"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Aug 11 14:17:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:30 2010 -0700"
      },
      "message": "writeback: fix queue_io() ordering\n\nThis was not a bug, since b_io is empty for kupdate writeback.  The next\npatch will do requeue_io() for non-kupdate writeback, so let\u0027s fix it.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Martin Bligh \u003cmbligh@google.com\u003e\nCc: Michael Rubin \u003cmrubin@google.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "23539afc71937dbaca7de2229669f4475ff4ea7b",
      "tree": "1a37d78bc4d387c6cbdc201755dce09297ebe308",
      "parents": [
        "1babe18385d3976043c04237ce837f3736197eb4"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Aug 11 14:17:41 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:30 2010 -0700"
      },
      "message": "writeback: don\u0027t redirty tail an inode with dirty pages\n\nAvoid delaying writeback for an expire inode with lots of dirty pages, but\nno active dirtier at the moment.  Previously we only do that for the\nkupdate case.\n\nAny filesystem that does delayed allocation or unwritten extent conversion\nafter IO completion will cause this - for example, XFS.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "16c4042f08919f447d6b2a55679546c9b97c7264",
      "tree": "0248b64d46237854ebe67efe8c742cb5878d8611",
      "parents": [
        "e50e37201ae2e7d6a52e87815759e6481f0bcfb9"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Aug 11 14:17:39 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:29 2010 -0700"
      },
      "message": "writeback: avoid unnecessary calculation of bdi dirty thresholds\n\nSplit get_dirty_limits() into global_dirty_limits()+bdi_dirty_limit(), so\nthat the latter can be avoided when under global dirty background\nthreshold (which is the normal state for most systems).\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2f9e825d3e0e2b407ae8f082de5c00afcf7378fb",
      "tree": "f8b3ee40674ce4acd5508a0a0bf52a30904caf6c",
      "parents": [
        "7ae0dea900b027cd90e8a3e14deca9a19e17638b",
        "de75d60d5ea235e6e09f4962ab22541ce0fe176a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 15:22:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 15:22:42 2010 -0700"
      },
      "message": "Merge branch \u0027for-2.6.36\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.36\u0027 of git://git.kernel.dk/linux-2.6-block: (149 commits)\n  block: make sure that REQ_* types are seen even with CONFIG_BLOCK\u003dn\n  xen-blkfront: fix missing out label\n  blkdev: fix blkdev_issue_zeroout return value\n  block: update request stacking methods to support discards\n  block: fix missing export of blk_types.h\n  writeback: fix bad _bh spinlock nesting\n  drbd: revert \"delay probes\", feature is being re-implemented differently\n  drbd: Initialize all members of sync_conf to their defaults [Bugz 315]\n  drbd: Disable delay probes for the upcomming release\n  writeback: cleanup bdi_register\n  writeback: add new tracepoints\n  writeback: remove unnecessary init_timer call\n  writeback: optimize periodic bdi thread wakeups\n  writeback: prevent unnecessary bdi threads wakeups\n  writeback: move bdi threads exiting logic to the forker thread\n  writeback: restructure bdi forker loop a little\n  writeback: move last_active to bdi\n  writeback: do not remove bdi from bdi_list\n  writeback: simplify bdi code a little\n  writeback: do not lose wake-ups in bdi threads\n  ...\n\nFixed up pretty trivial conflicts in drivers/block/virtio_blk.c and\ndrivers/scsi/scsi_error.c as per Jens.\n"
    },
    {
      "commit": "5f248c9c251c60af3403902b26e08de43964ea0b",
      "tree": "6d3328e72a7e4015a64017eb30be18095c6a3c64",
      "parents": [
        "f6cec0ae58c17522a7bc4e2f39dae19f199ab534",
        "dca332528bc69e05f67161e1ed59929633d5e63d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 11:26:52 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (96 commits)\n  no need for list_for_each_entry_safe()/resetting with superblock list\n  Fix sget() race with failing mount\n  vfs: don\u0027t hold s_umount over close_bdev_exclusive() call\n  sysv: do not mark superblock dirty on remount\n  sysv: do not mark superblock dirty on mount\n  btrfs: remove junk sb_dirt change\n  BFS: clean up the superblock usage\n  AFFS: wait for sb synchronization when needed\n  AFFS: clean up dirty flag usage\n  cifs: truncate fallout\n  mbcache: fix shrinker function return value\n  mbcache: Remove unused features\n  add f_flags to struct statfs(64)\n  pass a struct path to vfs_statfs\n  update VFS documentation for method changes.\n  All filesystems that need invalidate_inode_buffers() are doing that explicitly\n  convert remaining -\u003eclear_inode() to -\u003eevict_inode()\n  Make -\u003edrop_inode() just return whether inode needs to be dropped\n  fs/inode.c:clear_inode() is gone\n  fs/inode.c:evict() doesn\u0027t care about delete vs. non-delete paths now\n  ...\n\nFix up trivial conflicts in fs/nilfs2/super.c\n"
    },
    {
      "commit": "7624ee72aa09334af072853457a5d46d9901c3f8",
      "tree": "046321fdf7f46c38a6e6d686c1cd962e70149c94",
      "parents": [
        "d9f8984c2c23b91e202a764fe4b15041a29a201a"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Aug 09 17:20:03 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:45:03 2010 -0700"
      },
      "message": "mm: avoid resetting wb_start after each writeback round\n\nWB_SYNC_NONE writeback is done in rounds of 1024 pages so that we don\u0027t\nwrite out some huge inode for too long while starving writeout of other\ninodes.  To avoid livelocks, we record time we started writeback in\nwbc-\u003ewb_start and do not write out inodes which were dirtied after this\ntime.  But currently, writeback_inodes_wb() resets wb_start each time it\nis called thus effectively invalidating this logic and making any\nWB_SYNC_NONE writeback prone to livelocks.\n\nThis patch makes sure wb_start is set only once when we start writeback.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nReviewed-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a4ffdde6e56fdf8c34ddadc2674d6eb978083369",
      "tree": "0fa07df92d804cb7d0482135195e4835cb16403a",
      "parents": [
        "b5fc510c48f631882ccec3c0f02a25d5b67de09f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jun 02 17:38:30 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Aug 09 16:47:44 2010 -0400"
      },
      "message": "simplify checks for I_CLEAR/I_FREEING\n\nadd I_CLEAR instead of replacing I_FREEING with it.  I_CLEAR is\nequivalent to I_FREEING for almost all code looking at either;\nit\u0027s there to keep track of having called clear_inode() exactly\nonce per inode lifetime, at some point after having set I_FREEING.\nI_CLEAR and I_FREEING never get set at the same time with the\ncurrent code, so we can switch to setting i_flags to I_FREEING | I_CLEAR\ninstead of I_CLEAR without loss of information.  As the result of\nsuch change, checks become simpler and the amount of code that needs\nto know about I_CLEAR shrinks a lot.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6467716a37673e8d47b4984eb19839bdad0a8353",
      "tree": "8b2bfd38d53e31c47654162d4ce9220c4424a31d",
      "parents": [
        "253c34e9b10c30d3064be654b5b78fbc1a8b1896"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:22 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: optimize periodic bdi thread wakeups\n\nWhe the first inode for a bdi is marked dirty, we wake up the bdi thread which\nshould take care of the periodic background write-out. However, the write-out\nwill actually start only \u0027dirty_writeback_interval\u0027 centisecs later, so we can\ndelay the wake-up.\n\nThis change was requested by Nick Piggin who pointed out that if we delay the\nwake-up, we weed out 2 unnecessary contex switches, which matters because\n\u0027__mark_inode_dirty()\u0027 is a hot-path function.\n\nThis patch introduces a new function - \u0027bdi_wakeup_thread_delayed()\u0027, which\nsets up a timer to wake-up the bdi thread and returns. So the wake-up is\ndelayed.\n\nWe also delete the timer in bdi threads just before writing-back. And\nsynchronously delete it when unregistering bdi. At the unregister point the bdi\ndoes not have any users, so no one can arm it again.\n\nSince now we take \u0027bdi-\u003ewb_lock\u0027 in the timer, which can execute in softirq\ncontext, we have to use \u0027spin_lock_bh()\u0027 for \u0027bdi-\u003ewb_lock\u0027. This patch makes\nthis change as well.\n\nThis patch also moves the \u0027bdi_wb_init()\u0027 function down in the file to avoid\nforward-declaration of \u0027bdi_wakeup_thread_delayed()\u0027.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "253c34e9b10c30d3064be654b5b78fbc1a8b1896",
      "tree": "1ee077a52fd1036fe26ddfe8cabd5a5315dc1285",
      "parents": [
        "fff5b85aa4225a7be157f208277a055822039a9e"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:21 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: prevent unnecessary bdi threads wakeups\n\nFinally, we can get rid of unnecessary wake-ups in bdi threads, which are very\nbad for battery-driven devices.\n\nThere are two types of activities bdi threads do:\n1. process bdi works from the \u0027bdi-\u003ework_list\u0027\n2. periodic write-back\n\nSo there are 2 sources of wake-up events for bdi threads:\n\n1. \u0027bdi_queue_work()\u0027 - submits bdi works\n2. \u0027__mark_inode_dirty()\u0027 - adds dirty I/O to bdi\u0027s\n\nThe former already has bdi wake-up code. The latter does not, and this patch\nadds it.\n\n\u0027__mark_inode_dirty()\u0027 is hot-path function, but this patch adds another\n\u0027spin_lock(\u0026bdi-\u003ewb_lock)\u0027 there. However, it is taken only in rare cases when\nthe bdi has no dirty inodes. So adding this spinlock should be fine and should\nnot affect performance.\n\nThis patch makes sure bdi threads and the forker thread do not wake-up if there\nis nothing to do. The forker thread will nevertheless wake up at least every\n5 min. to check whether it has to kill a bdi thread. This can also be optimized,\nbut is not worth it.\n\nThis patch also tidies up the warning about unregistered bid, and turns it from\nan ugly crocodile to a simple \u0027WARN()\u0027 statement.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "fff5b85aa4225a7be157f208277a055822039a9e",
      "tree": "f4310bf188ef0a1dac52da39b61968aa566a717e",
      "parents": [
        "adf392407076b85816d48714fb8eeaedb2157884"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:20 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: move bdi threads exiting logic to the forker thread\n\nCurrently, bdi threads can decide to exit if there were no useful activities\nfor 5 minutes. However, this causes nasty races: we can easily oops in the\n\u0027bdi_queue_work()\u0027 if the bdi thread decides to exit while we are waking it up.\n\nAnd even if we do not oops, but the bdi tread exits immediately after we wake\nit up, we\u0027d lose the wake-up event and have an unnecessary delay (up to 5 secs)\nin the bdi work processing.\n\nThis patch makes the forker thread to be the central place which not only\ncreates bdi threads, but also kills them if they were inactive long enough.\nThis better design-wise.\n\nAnother reason why this change was done is to prepare for the further changes\nwhich will prevent the bdi threads from waking up every 5 sec and wasting\npower. Indeed, when the task does not wake up periodically anymore, it won\u0027t be\nable to exit either.\n\nThis patch also moves the the \u0027wake_up_bit()\u0027 call from the bdi thread to the\nforker thread as well. So now the forker thread sets the BDI_pending bit, then\nforks the task or kills it, then clears the bit and wakes up the waiting\nprocess.\n\nThe only process which may wain on the bit is \u0027bdi_wb_shutdown()\u0027. This\nfunction was changed as well - now it first removes the bdi from the\n\u0027bdi_list\u0027, then waits on the \u0027BDI_pending\u0027 bit. Once it wakes up, it is\nguaranteed that the forker thread won\u0027t race with it, because the bdi is not\nvisible. Note, the forker thread sets the \u0027BDI_pending\u0027 bit under the\n\u0027bdi-\u003ewb_lock\u0027 which is essential for proper serialization.\n\nAnd additionally, when we change \u0027bdi-\u003ewb.task\u0027, we now take the\n\u0027bdi-\u003ework_lock\u0027, to make sure that we do not lose wake-ups which we otherwise\nwould when raced with, say, \u0027bdi_queue_work()\u0027.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ecd584030da67ede1bf17955746a6ce834d9fc6b",
      "tree": "3f26260102a84e8cb047249e65cdde6b9aadcb96",
      "parents": [
        "78c40cb6581a74adc48821f3de6b864a54d4c34d"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:18 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: move last_active to bdi\n\nCurrently bdi threads use local variable \u0027last_active\u0027 which stores last time\nwhen the bdi thread did some useful work. Move this local variable to \u0027struct\nbdi_writeback\u0027. This is just a preparation for the further patches which will\nmake the forker thread decide when bdi threads should be killed.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "78c40cb6581a74adc48821f3de6b864a54d4c34d",
      "tree": "9ef19e68f6c28ded34f42de8a21b139006bfceaa",
      "parents": [
        "080dcec41709be72613133f695be75b98dd43e88"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:17 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: do not remove bdi from bdi_list\n\nThe forker thread removes bdis from \u0027bdi_list\u0027 before forking the bdi thread.\nBut this is wrong for at least 2 reasons.\n\nReason #1: if we temporary remove a bdi from the list, we may miss works which\n           would otherwise be given to us.\n\nReason #2: this is racy; indeed, \u0027bdi_wb_shutdown()\u0027 expects that bdis are\n           always in the \u0027bdi_list\u0027 (see \u0027bdi_remove_from_list()\u0027), and when\n           it races with the forker thread, it can shut down the bdi thread\n           at the same time as the forker creates it.\n\nThis patch makes sure the forker thread never removes bdis from \u0027bdi_list\u0027\n(which was suggested by Christoph Hellwig).\n\nIn order to make sure that we do not race with \u0027bdi_wb_shutdown()\u0027, we have to\nhold the \u0027bdi_lock\u0027 while walking the \u0027bdi_list\u0027 and setting the \u0027BDI_pending\u0027\nflag.\n\nNOTE! The error path is interesting. Currently, when we fail to create a bdi\nthread, we move the bdi to the tail of \u0027bdi_list\u0027. But if we never remove the\nbdi from the list, we cannot move it to the tail either, because then we can\nmess up the RCU readers which walk the list. And also, we\u0027ll have the race\ndescribed above in \"Reason #2\".\n\nBut I not think that adding to the tail is any important so I just do not do\nthat.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "297252c81de8043ca6c36e5984c24fdb5aab9013",
      "tree": "d94a35abcd3b227b072955622f703a2cdc3c309d",
      "parents": [
        "c4ec7908c2c5125f75fabd100e7a95626a6883ee"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:15 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:55 2010 +0200"
      },
      "message": "writeback: do not lose wake-ups in bdi threads\n\nCurrently, bdi threads (\u0027bdi_writeback_thread()\u0027) can lose wake-ups. For\nexample, if \u0027bdi_queue_work()\u0027 is executed after the bdi thread have had\nfinished \u0027wb_do_writeback()\u0027 but before it called\n\u0027schedule_timeout_interruptible()\u0027.\n\nTo fix this issue, we have to check whether we have works to process after we\nhave changed the task state to \u0027TASK_INTERRUPTIBLE\u0027.\n\nThis patch also clean-ups handling of the cases when \u0027dirty_writeback_interval\u0027\nis zero or non-zero.\n\nAdditionally, this patch also removes unneeded \u0027list_empty_careful()\u0027 call.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6f904ff0e39ea88f81eb77e8dfb4e1238492f0a8",
      "tree": "8a22ff5ffe31e221554915ac9135da15d3adad8d",
      "parents": [
        "4aeefdc69f7b6f3f287e6fd8d4b213953b9e92d8"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:11 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:16 2010 +0200"
      },
      "message": "writeback: harmonize writeback threads naming\n\nThe write-back code mixes words \"thread\" and \"task\" for the same things. This\nis not a big deal, but still an inconsistency.\n\nhch: a convention I tend to use and I\u0027ve seen in various places\nis to always use _task for the storage of the task_struct pointer,\nand thread everywhere else.  This especially helps with having\nfoo_thread for the actual thread and foo_task for a global\nvariable keeping the task_struct pointer\n\nThis patch renames:\n* \u0027bdi_add_default_flusher_task()\u0027 -\u003e \u0027bdi_add_default_flusher_thread()\u0027\n* \u0027bdi_forker_task()\u0027              -\u003e \u0027bdi_forker_thread()\u0027\n\nbecause bdi threads are \u0027bdi_writeback_thread()\u0027, so these names are more\nconsistent.\n\nThis patch also amends commentaries and makes them refer the forker and bdi\nthreads as \"thread\", not \"task\".\n\nAlso, while on it, make \u0027bdi_add_default_flusher_thread()\u0027 declaration use\n\u0027static void\u0027 instead of \u0027void static\u0027 and make checkpatch.pl happy.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "08852b6d6c40f387f2b75e199e2ca1df68970f4c",
      "tree": "a5c10224444a93e014337e577dbd5a8aacc50e59",
      "parents": [
        "6965031d331a642e31278fa1b5bd47f372ffdd5d"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Aug 03 12:51:16 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:01 2010 +0200"
      },
      "message": "writeback: remove wb in get_next_work_item\n\n83ba7b07 cleans up the writeback.\nSo we don\u0027t use wb any more in get_next_work_item.\nLet\u0027s remove unnecessary argument.\n\nCC: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "028c2dd184c097809986684f2f0627eea5529fea",
      "tree": "f6eb9e30a24d73597e5ce2a65b4638e9d1947504",
      "parents": [
        "455b2864686d3591b3b2f39eb46290c95f76471f"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "dchinner@redhat.com",
        "time": "Wed Jul 07 13:24:07 2010 +1000"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:24:25 2010 +0200"
      },
      "message": "writeback: Add tracing to balance_dirty_pages\n\nTracing high level background writeback events is good, but it doesn\u0027t\ngive the entire picture. Add visibility into write throttling to catch IO\ndispatched by foreground throttling of processing dirtying lots of pages.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "455b2864686d3591b3b2f39eb46290c95f76471f",
      "tree": "b88059e3691fc5ad4491518e9eb1f1f2ba21711a",
      "parents": [
        "a89f5c899db3c6be4bb426e4efb72ecee29a93b5"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Wed Jul 07 13:24:06 2010 +1000"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:24:23 2010 +0200"
      },
      "message": "writeback: Initial tracing support\n\nTrace queue/sched/exec parts of the writeback loop. This provides\ninsight into when and why flusher threads are scheduled to run. e.g\na sync invocation leaves traces like:\n\n     sync-[...]: writeback_queue: bdi 8:0: sb_dev 8:1 nr_pages\u003d7712 sync_mode\u003d0 kupdate\u003d0 range_cyclic\u003d0 background\u003d0\nflush-8:0-[...]: writeback_exec: bdi 8:0: sb_dev 8:1 nr_pages\u003d7712 sync_mode\u003d0 kupdate\u003d0 range_cyclic\u003d0 background\u003d0\n\nThis also lays the foundation for adding more writeback tracing to\nprovide deeper insight into the whole writeback path.\n\nThe original tracing code is from Jens Axboe, though this version is\na rewrite as a result of the code being traced changing\nsignificantly.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "082439004b31adc146e96e5f1c574dd2b57dcd93",
      "tree": "19ef2ccab9588c2aa77d0b09c2bae760b23ae110",
      "parents": [
        "c1955ce32fdb0877b7a1b22feb2669358f65be76"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jun 19 23:08:22 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:23:06 2010 +0200"
      },
      "message": "writeback: merge bdi_writeback_task and bdi_start_fn\n\nMove all code for the writeback thread into fs/fs-writeback.c instead of\nsplitting it over two functions in two files.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c1955ce32fdb0877b7a1b22feb2669358f65be76",
      "tree": "805b4da7168b0b16de890ea248323f3cdf5dc0b7",
      "parents": [
        "4c4762d10faf93167b84ee03e4b58dd62012b06f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jun 19 23:08:06 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:23:03 2010 +0200"
      },
      "message": "writeback: remove wb_list\n\nThe wb_list member of struct backing_device_info always has exactly one\nelement.  Just use the direct bdi-\u003ewb pointer instead and simplify some\ncode.\n\nAlso remove bdi_task_init which is now trivial to prepare for the next\npatch.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "83ba7b071f30f7c01f72518ad72d5cd203c27502",
      "tree": "4737320dcce72cfff4d87d835e4f78428eca7ef5",
      "parents": [
        "edadfb10ba35da7253541e4155aa92eff758ebe6"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jul 06 08:59:53 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 06 08:59:53 2010 +0200"
      },
      "message": "writeback: simplify the write back thread queue\n\nFirst remove items from work_list as soon as we start working on them.  This\nmeans we don\u0027t have to track any pending or visited state and can get\nrid of all the RCU magic freeing the work items - we can simply free\nthem once the operation has finished.  Second use a real completion for\ntracking synchronous requests - if the caller sets the completion pointer\nwe complete it, otherwise use it as a boolean indicator that we can free\nthe work item directly.  Third unify struct wb_writeback_args and struct\nbdi_work into a single data structure, wb_writeback_work.  Previous we\nset all parameters into a struct wb_writeback_args, copied it into\nstruct bdi_work, copied it again on the stack to use it there.  Instead\nof just allocate one structure dynamically or on the stack and use it\nall the way through the stack.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "edadfb10ba35da7253541e4155aa92eff758ebe6",
      "tree": "a3c676f7b2c9b301d7e1948febeaba76ea1c5850",
      "parents": [
        "9c3a8ee8a1d72c5c0d7fbdf426d80e270ddfa54c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Jun 10 12:07:54 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 06 08:54:08 2010 +0200"
      },
      "message": "writeback: split writeback_inodes_wb\n\nThe case where we have a superblock doesn\u0027t require a loop here as we scan\nover all inodes in writeback_sb_inodes. Split it out into a separate helper\nto make the code simpler.  This also allows to get rid of the sb member in\nstruct writeback_control, which was rather out of place there.\n\nAlso update the comments in writeback_sb_inodes that explain the handling\nof inodes from wrong superblocks.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9c3a8ee8a1d72c5c0d7fbdf426d80e270ddfa54c",
      "tree": "fa131760a61f66afeede852622ede0d716965489",
      "parents": [
        "06d738fa9155ff16dba3d7e501ba4581d01a98cb"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Jun 10 12:07:27 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 06 08:54:03 2010 +0200"
      },
      "message": "writeback: remove writeback_inodes_wbc\n\nThis was just an odd wrapper around writeback_inodes_wb.  Removing this\nalso allows to get rid of the bdi member of struct writeback_control\nwhich was rather out of place there.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "06d738fa9155ff16dba3d7e501ba4581d01a98cb",
      "tree": "ea1e3a1632207c9b0ad7fedc47eaeb1c35e5d8bc",
      "parents": [
        "19c9a49b432f245c6293508d164a4350f1f2c601"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Thu Jul 01 08:26:34 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jul 01 08:26:34 2010 +0200"
      },
      "message": "fs-writeback: fix kernel-doc warnings\n\nFix kernel-doc to match the function\u0027s changed args.\n\nWarning(fs/fs-writeback.c:190): No description found for parameter \u0027args\u0027\nWarning(fs/fs-writeback.c:190): Excess function parameter \u0027sb\u0027 description in \u0027bdi_queue_work_onstack\u0027\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "29cb48594b873f6193d6327097e504bd3e2314de",
      "tree": "1c93364fd70d93d42c6749c261f96f84a66d71e2",
      "parents": [
        "334132ae921a14ac2b2ba48e174136f7f2c9aae1"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Jun 09 15:31:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:08 2010 +0200"
      },
      "message": "writeback: fix pin_sb_for_writeback\n\nWe need to check for s_instances to make sure we don\u0027t bother working\nagainst a filesystem that is beeing unmounted, and we need to call\nput_super to make sure a superblock is freed when we race against\numount.  Also no need to keep sb_lock after we got a reference on it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "334132ae921a14ac2b2ba48e174136f7f2c9aae1",
      "tree": "4367a78d60365cc4d8c751c81c06d0b6d736bdbf",
      "parents": [
        "c5444198ca210498e8ac0ba121b4cd3537aa12f7"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Jun 09 14:28:43 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:08 2010 +0200"
      },
      "message": "writeback: add missing requeue_io in writeback_inodes_wb\n\nIn \"writeback: fix writeback_inodes_wb from writeback_inodes_sb\" I\naccidentally removed the requeue_io if we need to skip a superblock\nbecause we can\u0027t pin it.  Add it back, otherwise we\u0027re getting spurious\nlockups after multiple xfstests runs.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c5444198ca210498e8ac0ba121b4cd3537aa12f7",
      "tree": "c423d38fe1ac7f51a48e455a19ecbe2354811fca",
      "parents": [
        "b8c2f3474f1077599ec6e90c2f263f17055cc3d8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:15:15 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:08 2010 +0200"
      },
      "message": "writeback: simplify and split bdi_start_writeback\n\nbdi_start_writeback now never gets a superblock passed, so we can just remove\nthat case.  And to further untangle the code and flatten the call stack\nsplit it into two trivial helpers for it\u0027s two callers.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b8c2f3474f1077599ec6e90c2f263f17055cc3d8",
      "tree": "aedccfc59c7fd5592311534395eacf8afd1c956f",
      "parents": [
        "d19de7edf59cdd586777b009e0e8fbe5412dd35f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:15:07 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:07 2010 +0200"
      },
      "message": "writeback: simplify wakeup_flusher_threads\n\nbdi_writeback_all only has one caller, so fold it to simplify the code and\nflatten the call stack.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d19de7edf59cdd586777b009e0e8fbe5412dd35f",
      "tree": "8b6b56c705d7ed6fc22fe53b4d49b41372874afa",
      "parents": [
        "cf37e972478ec58a8a54a6b4f951815f0ae28f78"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:14:58 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:07 2010 +0200"
      },
      "message": "writeback: fix writeback_inodes_wb from writeback_inodes_sb\n\nWhen we call writeback_inodes_wb from writeback_inodes_sb we always have\ns_umount held, which currently makes the whole operation a no-op.\n\nBut if we are called to write out inodes for a specific superblock we always\nhave s_umount held, so replace the incorrect logic checking for WB_SYNC_ALL\nwhich only worked by coincidence with the proper check for an explicit\nsuperblock argument.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "cf37e972478ec58a8a54a6b4f951815f0ae28f78",
      "tree": "b14d75074692ddb213e22e098a64087950f4cf78",
      "parents": [
        "3c4d716538f3eefb1c1f10961a047a6456a2b590"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:14:51 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:07 2010 +0200"
      },
      "message": "writeback: enforce s_umount locking in writeback_inodes_sb\n\nMake sure that not only sync_filesystem but all callers of writeback_inodes_sb\nhave the superblock protected against remount.  As-is this disables all\nfunctionality for these callers, but the next patch relies on this locking to\nfix writeback_inodes_sb for sync_filesystem.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3c4d716538f3eefb1c1f10961a047a6456a2b590",
      "tree": "3cfc50c18cc3d2351ddac4309e8f228e22faed71",
      "parents": [
        "7f0e7bed936a0c422641a046551829a01341dd80"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:14:43 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:07 2010 +0200"
      },
      "message": "writeback: queue work on stack in writeback_inodes_sb\n\nIf we want to rely on s_umount in the caller we need to wait for completion\nof the I/O submission before returning to the caller.  Refactor\nbdi_sync_writeback into a bdi_queue_work_onstack helper and use it for this\ncase.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7f0e7bed936a0c422641a046551829a01341dd80",
      "tree": "6b5fd4a8e11253819c883e409b612fc26c57235e",
      "parents": [
        "7908a9e5fc3f9a679b1777ed231a03636c068446"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jun 08 18:14:34 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jun 11 12:58:07 2010 +0200"
      },
      "message": "writeback: fix writeback completion notifications\n\nThe code dealing with bdi_work-\u003estate and completion of a bdi_work is a\nmajor mess currently.  This patch makes sure we directly use one set of\nflags to deal with it, and use it consistently, which means:\n\n - always notify about completion from the rcu callback.  We only ever\n   wait for it from on-stack callers, so this simplification does not\n   even cause a theoretical slowdown currently.  It also makes sure we\n   don\u0027t miss out on the notification if we ever add other callers to\n   wait for it.\n - make earlier completion notification depending on the on-stack\n   allocation, not the sync mode.  If we introduce new callers that\n   want to do WB_SYNC_NONE writeback from on-stack callers this will\n   be nessecary.\n\nAlso rename bdi_wait_on_work_clear to bdi_wait_on_work_done and inline\na few small functions into their only caller to make the code\nunderstandable.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b4ca761577535b2b4d153689ee97342797dfff05",
      "tree": "29054d55508f1faa22ec32acf7c245751af03348",
      "parents": [
        "28f4197e5d4707311febeec8a0eb97cb5fd93c97",
        "67a3e12b05e055c0415c556a315a3d3eb637e29e"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jun 01 12:42:12 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jun 01 12:42:12 2010 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into for-linus\n\nConflicts:\n\tfs/pipe.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "0e3c9a2284f5417f196e327c254d0b84c9ee8929",
      "tree": "e3fb40ebe7d042b4b3c1042bc7f2edaf7fb6eee0",
      "parents": [
        "f17625b318d9b151e7bd41e31223e9d89b2aaa77"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jun 01 11:08:43 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jun 01 11:08:43 2010 +0200"
      },
      "message": "Revert \"writeback: fix WB_SYNC_NONE writeback from umount\"\n\nThis reverts commit e913fc825dc685a444cb4c1d0f9d32f372f59861.\n\nWe are investigating a hang associated with the WB_SYNC_NONE changes,\nso revert them for now.\n\nConflicts:\n\n\tfs/fs-writeback.c\n\tmm/page-writeback.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f17625b318d9b151e7bd41e31223e9d89b2aaa77",
      "tree": "6b4f04ff35d9bfcc73fc4d3f08120347b0ab4706",
      "parents": [
        "0ae0b5d0557264bad65e22f1e2da4b83a02c4535"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jun 01 11:05:22 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Jun 01 11:05:22 2010 +0200"
      },
      "message": "Revert \"writeback: ensure that WB_SYNC_NONE writeback with sb pinned is sync\"\n\nThis reverts commit 7c8a3554c683f512dbcee26faedb42e4c05f12fa.\n\nWe are investigating a hang associated with the WB_SYNC_NONE changes,\nso revert them for now.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "58a9d3d8db06ca2ec31f64ec49ab0aeb89971b85",
      "tree": "70c695b6473d4d25b32a2946e053742f6c49755e",
      "parents": [
        "ec95f53aa6ed62ba68660cb19c8474ebe9025cce"
      ],
      "author": {
        "name": "Richard Kennedy",
        "email": "richard@rsk.demon.co.uk",
        "time": "Mon May 24 14:32:38 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:07:00 2010 -0700"
      },
      "message": "fs-writeback: check sync bit earlier in inode_wait_for_writeback\n\nWhen wb_writeback() hasn\u0027t written anything it will re-acquire the inode\nlock before calling inode_wait_for_writeback.\n\nThis change tests the sync bit first so that is doesn\u0027t need to drop \u0026\nre-acquire the lock if the inode became available while wb_writeback() was\nwaiting to get the lock.\n\nSigned-off-by: Richard Kennedy \u003crichard@rsk.demon.co.uk\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e8bebe2f71d26871b0970ae1d9cf0ed3cdd9569d",
      "tree": "c0d82cbd11daaf579b74121c6641d58947091094",
      "parents": [
        "6109e2ce2600e2db26cd0424bb9c6ed019723288",
        "82f3952c02add60b15eea9151d4d99b6b82066c6"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 21 19:37:45 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 21 19:37:45 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (69 commits)\n  fix handling of offsets in cris eeprom.c, get rid of fake on-stack files\n  get rid of home-grown mutex in cris eeprom.c\n  switch ecryptfs_write() to struct inode *, kill on-stack fake files\n  switch ecryptfs_get_locked_page() to struct inode *\n  simplify access to ecryptfs inodes in -\u003ereadpage() and friends\n  AFS: Don\u0027t put struct file on the stack\n  Ban ecryptfs over ecryptfs\n  logfs: replace inode uid,gid,mode initialization with helper function\n  ufs: replace inode uid,gid,mode initialization with helper function\n  udf: replace inode uid,gid,mode init with helper\n  ubifs: replace inode uid,gid,mode initialization with helper function\n  sysv: replace inode uid,gid,mode initialization with helper function\n  reiserfs: replace inode uid,gid,mode initialization with helper function\n  ramfs: replace inode uid,gid,mode initialization with helper function\n  omfs: replace inode uid,gid,mode initialization with helper function\n  bfs: replace inode uid,gid,mode initialization with helper function\n  ocfs2: replace inode uid,gid,mode initialization with helper function\n  nilfs2: replace inode uid,gid,mode initialization with helper function\n  minix: replace inode uid,gid,mode init with helper\n  ext4: replace inode uid,gid,mode init with helper\n  ...\n\nTrivial conflict in fs/fs-writeback.c (mark bitfields unsigned)\n"
    },
    {
      "commit": "52957fe1c709d5ca3732456d73f4e4d95492c72c",
      "tree": "c1e1f92cefbc9c03620af6c97ba50d8de1011f8e",
      "parents": [
        "9a2296832c43da93a88e1edd59f3d17acffca36c"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Thu Apr 01 20:36:30 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri May 21 18:31:22 2010 -0400"
      },
      "message": "fs-writeback.c: bitfields should be unsigned\n\nThis fixes sparse noise:\n  error: dubious one-bit signed bitfield\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f9eadbbd424c083b8005c7b738f644611b9ef489",
      "tree": "edc73e0fa56de566af7672f6f80579ec317d373f",
      "parents": [
        "7c8a3554c683f512dbcee26faedb42e4c05f12fa"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue May 18 14:31:45 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 20:00:25 2010 +0200"
      },
      "message": "writeback: bdi_writeback_task() must set task state before calling schedule()\n\nCalling schedule without setting the task state to non-running will\nreturn immediately, so ensure that we set it properly and check our\nsleep conditions after doing so.\n\nThis is a fixup for commit 69b62d01.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "7c8a3554c683f512dbcee26faedb42e4c05f12fa",
      "tree": "ece0d1b79ccc1f596b0ccd0217b584c27a3ff414",
      "parents": [
        "2db4e42eaceabec42f738f3895300632cd375e67"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue May 18 14:29:29 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 20:00:25 2010 +0200"
      },
      "message": "writeback: ensure that WB_SYNC_NONE writeback with sb pinned is sync\n\nEven if the writeout itself isn\u0027t a data integrity operation, we need\nto ensure that the caller doesn\u0027t drop the sb umount sem before we\nhave actually done the writeback.\n\nThis is a fixup for commit e913fc82.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "5547e8aac6f71505d621a612de2fca0dd988b439",
      "tree": "36bb4a62fe5773c5acd43c9e72dca1c2f32b1bff",
      "parents": [
        "e913fc825dc685a444cb4c1d0f9d32f372f59861"
      ],
      "author": {
        "name": "Dmitry Monakhov",
        "email": "dmonakhov@openvz.org",
        "time": "Fri May 07 13:35:44 2010 +0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 17 13:00:41 2010 +0200"
      },
      "message": "writeback: Update dirty flags in two steps\n\nFilesystems with delalloc support may dirty inode during writepages.\nAs result inode will have dirty metadata flags even after write_inode.\nIn fact we have two dedicated functions for proper data and metadata\nwriteback. It is reasonable to separate flags updates in two stages.\n\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d15906\n\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "e913fc825dc685a444cb4c1d0f9d32f372f59861",
      "tree": "e470697e43ffe4028ac81c17d3ef90ee9f30bcfb",
      "parents": [
        "69b62d01ec44fe0d505d89917392347732135a4d"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 17 12:55:07 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 17 12:55:07 2010 +0200"
      },
      "message": "writeback: fix WB_SYNC_NONE writeback from umount\n\nWhen umount calls sync_filesystem(), we first do a WB_SYNC_NONE\nwriteback to kick off writeback of pending dirty inodes, then follow\nthat up with a WB_SYNC_ALL to wait for it. Since umount already holds\nthe sb s_umount mutex, WB_SYNC_NONE ends up doing nothing and all\nwriteback happens as WB_SYNC_ALL. This can greatly slow down umount,\nsince WB_SYNC_ALL writeback is a data integrity operation and thus\na bigger hammer than simple WB_SYNC_NONE. For barrier aware file systems\nit\u0027s a lot slower.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "69b62d01ec44fe0d505d89917392347732135a4d",
      "tree": "da40561f3d87ee1073e92ca925ed3ed36708a1d7",
      "parents": [
        "2395e463fefd4aa8b784787e926e9b84e216d14f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 17 12:51:03 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 17 12:51:03 2010 +0200"
      },
      "message": "writeback: disable periodic old data writeback for !dirty_writeback_centisecs\n\nPrior to 2.6.32, setting /proc/sys/vm/dirty_writeback_centisecs disabled\nperiodic dirty writeback from kupdate. This got broken and now causes\nexcessive sys CPU usage if set to zero, as we\u0027ll keep beating on\nschedule().\n\nCc: stable@kernel.org\nReported-by: Justin Maggard \u003cjmaggard10@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "2f4084209adc77f9a1c9f38db3019a509e167882",
      "tree": "775657114c885505ecc46605e29ea1470e986f76",
      "parents": [
        "2f10ffcfb28beb35137d9e86992c771b4a6c5f2a",
        "3440c49f5c5ecb4f29b0544aa87da71888404f8f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 09 11:50:29 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 09 11:50:29 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block: (34 commits)\n  cfq-iosched: Fix the incorrect timeslice accounting with forced_dispatch\n  loop: Update mtime when writing using aops\n  block: expose the statistics in blkio.time and blkio.sectors for the root cgroup\n  backing-dev: Handle class_create() failure\n  Block: Fix block/elevator.c elevator_get() off-by-one error\n  drbd: lc_element_by_index() never returns NULL\n  cciss: unlock on error path\n  cfq-iosched: Do not merge queues of BE and IDLE classes\n  cfq-iosched: Add additional blktrace log messages in CFQ for easier debugging\n  i2o: Remove the dangerous kobj_to_i2o_device macro\n  block: remove 16 bytes of padding from struct request on 64bits\n  cfq-iosched: fix a kbuild regression\n  block: make CONFIG_BLK_CGROUP visible\n  Remove GENHD_FL_DRIVERFS\n  block: Export max number of segments and max segment size in sysfs\n  block: Finalize conversion of block limits functions\n  block: Fix overrun in lcm() and move it to lib\n  vfs: improve writeback_inodes_wb()\n  paride: fix off-by-one test\n  drbd: fix al-to-on-disk-bitmap for 4k logical_block_size\n  ...\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "f11c9c5c259cb2c3d698548dc3936f773ab1f5b9",
      "tree": "c6461c9d6981122e1507dafa0394901903eb2ca1",
      "parents": [
        "c12ec0a2d94001003dfb929ce14c287fca0522b0"
      ],
      "author": {
        "name": "Edward Shishkin",
        "email": "edward.shishkin@gmail.com",
        "time": "Thu Mar 11 14:09:47 2010 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Mar 12 10:03:42 2010 +0100"
      },
      "message": "vfs: improve writeback_inodes_wb()\n\nDo not pin/unpin superblock for every inode in writeback_inodes_wb(), pin\nit for the whole group of inodes which belong to the same superblock and\ncall writeback_sb_inodes() handler for them.\n\nSigned-off-by: Edward Shishkin \u003cedward.shishkin@gmail.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "a9185b41a4f84971b930c519f0c63bd450c4810d",
      "tree": "268cf4e206cca12fb9e1dd68984e7c190e465b46",
      "parents": [
        "26821ed40b4230259e770c9911180f38fcaa6f59"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Mar 05 09:21:37 2010 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 05 13:25:52 2010 -0500"
      },
      "message": "pass writeback_control to -\u003ewrite_inode\n\nThis gives the filesystem more information about the writeback that\nis happening.  Trond requested this for the NFS unstable write handling,\nand other filesystems might benefit from this too by beeing able to\ndistinguish between the different callers in more detail.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "26821ed40b4230259e770c9911180f38fcaa6f59",
      "tree": "40cd0fed705ec59dd3c909b96452bae1fc532796",
      "parents": [
        "64ba9926759792cf7b95f823402e2781edd1b5d4"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Mar 05 09:21:21 2010 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 05 13:25:10 2010 -0500"
      },
      "message": "make sure data is on disk before calling -\u003ewrite_inode\n\nSimilar to the fsync issue fixed a while ago in commit\n2daea67e966dc0c42067ebea015ddac6834cef88 we need to write for data to\nactually hit the disk before writing out the metadata to guarantee\ndata integrity for filesystems that modify the inode in the data I/O\ncompletion path.  Currently XFS and NFS handle this manually, and AFS\nhas a write_inode method that does nothing but waiting for data, while\nothers are possibly missing out on this.\n\nFortunately this change has a lot less impact than the fsync change\nas none of the write_inode methods starts data writeout of any form\nby itself.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4b6764fa9e25cf628e42bbd192eca1e0b8e59061",
      "tree": "7f583f864daf939a4dcadd50a6119629110943bc",
      "parents": [
        "cd6e125c58ae1561bedb6ea6f70b00d6c2599d62"
      ],
      "author": {
        "name": "Jaswinder Singh Rajput",
        "email": "jaswinderrajput@gmail.com",
        "time": "Fri Jan 01 20:35:23 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 02 10:09:44 2010 -0800"
      },
      "message": "writeback: add missing kernel-doc notation\n\nFix the following htmldocs warning:\n\n  Warning(fs/fs-writeback.c:255): No description found for parameter \u0027sb\u0027\n\nSigned-off-by: Jaswinder Singh Rajput \u003cjaswinderrajput@gmail.com\u003e\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nAcked-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "17bd55d037a02b04d9119511cfd1a4b985d20f63",
      "tree": "ddbc227fffb84d1b95f5f8c48b627f88f3fd56ed",
      "parents": [
        "d3533d72e7478a61a3e1936956fc825289a2acf4"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@redhat.com",
        "time": "Wed Dec 23 07:57:07 2009 -0500"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Dec 23 07:57:07 2009 -0500"
      },
      "message": "fs-writeback: Add helper function to start writeback if idle\n\next4, at least, would like to start pushing on writeback if it starts\nto get close to ENOSPC when reserving worst-case blocks for delalloc\nwrites.  Writing out delalloc data will convert those worst-case\npredictions into usually smaller actual usage, freeing up space\nbefore we hit ENOSPC based on this speculation.\n\nThanks to Jens for the suggestion for the helper function,\n\u0026 the naming help.\n\nI\u0027ve made the helper return status on whether writeback was\nstarted even though I don\u0027t plan to use it in the ext4 patch;\nit seems like it would be potentially useful to test this\nin some cases.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "0d99519efef15fd0cf84a849492c7b1deee1e4b7",
      "tree": "d0f9d922ef73f6b9c4529826878f3cc5567848fd",
      "parents": [
        "b17621fed6aa039387e35f9b4d34d98f213e5673"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@gmail.com",
        "time": "Thu Dec 03 13:54:25 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 13:54:25 2009 +0100"
      },
      "message": "writeback: remove unused nonblocking and congestion checks\n\n- no one is calling wb_writeback and write_cache_pages with\n  wbc.nonblocking\u003d1 any more\n- lumpy pageout will want to do nonblocking writeback without the\n  congestion wait\n\nSo remove the congestion checks as suggested by Chris.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Evgeniy Polyakov \u003czbr@ioremap.net\u003e\nCc: Alex Elder \u003caelder@sgi.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "b17621fed6aa039387e35f9b4d34d98f213e5673",
      "tree": "bc755d1aa204518600a6d82dd51d970c685dc68c",
      "parents": [
        "951c30d135390a108f102b0f6e3cfa6241f2a1aa"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@gmail.com",
        "time": "Thu Dec 03 13:54:25 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 13:54:25 2009 +0100"
      },
      "message": "writeback: introduce wbc.for_background\n\nIt will lower the flush priority for NFS, and maybe more in future.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "951c30d135390a108f102b0f6e3cfa6241f2a1aa",
      "tree": "d3184e177a7b47094ddf5a1e7540214de5b3a5e5",
      "parents": [
        "bf7ec5bb6114b2f086e536e24486fdacd1c0d339"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@gmail.com",
        "time": "Thu Dec 03 13:54:25 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 13:54:25 2009 +0100"
      },
      "message": "writeback: remove the always false bdi_cap_writeback_dirty() test\n\nThis is dead code because no bdi flush thread will be started for\n!bdi_cap_writeback_dirty bdi.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "a72bfd4dea053bb8e2233902c3f1893ef5485802",
      "tree": "1246fc000adfee6d2874b9324eaf7383ad4413bb",
      "parents": [
        "6d7f18f6ea3a13af95bdf507fc54d42b165e1712"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sat Sep 26 00:07:46 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sat Sep 26 00:10:40 2009 +0200"
      },
      "message": "writeback: pass in super_block to bdi_start_writeback()\n\nSometimes we only want to write pages from a specific super_block,\nso allow that to be passed in.\n\nThis fixes a problem with commit 56a131dcf7ed36c3c6e36bea448b674ea85ed5bb\ncausing writeback on all super_blocks on a bdi, where we only really\nwant to sync a specific sb from writeback_inodes_sb().\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "56a131dcf7ed36c3c6e36bea448b674ea85ed5bb",
      "tree": "d62d83e8ef4108753f557f25e8d7e89a42adf227",
      "parents": [
        "b3af9468aebf5fcb573d0a116b31d2be1d43c0e9"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 17:15:03 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:26 2009 +0200"
      },
      "message": "writeback: writeback_inodes_sb() should use bdi_start_writeback()\n\nPointless to iterate other devices looking for a super, when\nwe have a bdi mapping.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "b3af9468aebf5fcb573d0a116b31d2be1d43c0e9",
      "tree": "3af10b5fa82213345ea61d4ee23ba4a550a6077e",
      "parents": [
        "9ecc2738ac2371f88dff5d48914b4e35c45203cd"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Fri Sep 25 06:04:10 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:26 2009 +0200"
      },
      "message": "writeback: don\u0027t delay inodes redirtied by a fast dirtier\n\nDebug traces show that in per-bdi writeback, the inode under writeback\nalmost always get redirtied by a busy dirtier.  We used to call\nredirty_tail() in this case, which could delay inode for up to 30s.\n\nThis is unacceptable because it now happens so frequently for plain cp/dd,\nthat the accumulated delays could make writeback of big files very slow.\n\nSo let\u0027s distinguish between data redirty and metadata only redirty.\nThe first one is caused by a busy dirtier, while the latter one could\nhappen in XFS, NFS, etc. when they are doing delalloc or updating isize.\n\nThe inode being busy dirtied will now be requeued for next io, while\nthe inode being redirtied by fs will continue to be delayed to avoid\nrepeated IO.\n\nCC: Jan Kara \u003cjack@suse.cz\u003e\nCC: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nCC: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCC: Chris Mason \u003cchris.mason@oracle.com\u003e\nCC: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "9ecc2738ac2371f88dff5d48914b4e35c45203cd",
      "tree": "12cd500172561fb43e5cbe1ee1993945a4ac2c5c",
      "parents": [
        "cf137307cd9827495b65e7d74ea2b610daa9898b"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Sep 24 15:25:11 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:26 2009 +0200"
      },
      "message": "writeback: make the super_block pinning more efficient\n\nCurrently we pin the inode-\u003ei_sb for every single inode. This\nincreases cache traffic on sb-\u003es_umount sem. Lets instead\ncache the inode sb pin state and keep the super_block pinned\nfor as long as keep writing out inodes from the same\nsuper_block.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "cf137307cd9827495b65e7d74ea2b610daa9898b",
      "tree": "231053bd1730527ea91133ed923756c67739e71d",
      "parents": [
        "5c03449d34debca0deab58046377e1175c1bcd7e"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Sep 24 15:12:57 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:26 2009 +0200"
      },
      "message": "writeback: don\u0027t resort for a single super_block in move_expired_inodes()\n\nIf we only moved inodes from a single super_block to the temporary\nlist, there\u0027s no point in doing a resort for multiple super_blocks.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "5c03449d34debca0deab58046377e1175c1bcd7e",
      "tree": "ff4dd7b01548dca8602ed9449b8708400e3f47ad",
      "parents": [
        "5b0830cb9085f4b69f9d57d7f3aaff322ffbec26"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Thu Sep 24 14:42:33 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:25 2009 +0200"
      },
      "message": "writeback: move inodes from one super_block together\n\n__mark_inode_dirty adds inode to wb dirty list in random order. If a disk has\nseveral partitions, writeback might keep spindle moving between partitions.\nTo reduce the move, better write big chunk of one partition and then move to\nanother. Inodes from one fs usually are in one partion, so idealy move indoes\nfrom one fs together should reduce spindle move. This patch tries to address\nthis. Before per-bdi writeback is added, the behavior is write indoes\nfrom one fs first and then another, so the patch restores previous behavior.\nThe loop in the patch is a bit ugly, should we add a dirty list for each\nsuperblock in bdi_writeback?\n\nTest in a two partition disk with attached fio script shows about 3% ~ 6%\nimprovement.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "5b0830cb9085f4b69f9d57d7f3aaff322ffbec26",
      "tree": "10040eb359269d4cd05487790b758144a69e8e39",
      "parents": [
        "71fd05a887e0f3f6bfff76ff81b33776177d0606"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 23 19:37:09 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:25 2009 +0200"
      },
      "message": "writeback: get rid to incorrect references to pdflush in comments\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "71fd05a887e0f3f6bfff76ff81b33776177d0606",
      "tree": "74f03e70445425da3cd441392ad72232ab32eb5a",
      "parents": [
        "ae1b7f7d4b9ea587fda95c38301f4e72e8146634"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 23 19:32:26 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:25 2009 +0200"
      },
      "message": "writeback: improve readability of the wb_writeback() continue/break logic\n\nAnd throw some comments in there, too.\n\nReviewed-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ae1b7f7d4b9ea587fda95c38301f4e72e8146634",
      "tree": "7b6861974a64c2251f3f8abd7f4edc4f7434a02c",
      "parents": [
        "7fbdea32328312c65870c397a0a436c3226c8631"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Sep 23 20:33:42 2009 +0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:25 2009 +0200"
      },
      "message": "writeback: cleanup writeback_single_inode()\n\nMake the if-else straight in writeback_single_inode().\nNo behavior change.\n\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Michael Rubin \u003cmrubin@google.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Fengguang Wu \u003cwfg@mail.ustc.edu.cn\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "7fbdea32328312c65870c397a0a436c3226c8631",
      "tree": "a92cbf127bca8925afd7c2b22b372d02b32e48f3",
      "parents": [
        "d3ddec7635b6fb37cb49e3553bdeea59642be653"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Sep 23 20:33:41 2009 +0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:25 2009 +0200"
      },
      "message": "writeback: kupdate writeback shall not stop when more io is possible\n\nFix the kupdate case, which disregards wbc.more_io and stop writeback\nprematurely even when there are more inodes to be synced.\n\nwbc.more_io should always be respected.\n\nAlso remove the pages_skipped check. It will set when some page(s) of some\ninode(s) cannot be written for now. Such inodes will be delayed for a while.\nThis variable has nothing to do with whether there are other writeable inodes.\n\nCC: Jan Kara \u003cjack@suse.cz\u003e\nCC: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCC: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "d3ddec7635b6fb37cb49e3553bdeea59642be653",
      "tree": "662a1ea9c0eac6aa9bb07d4f67b6aad84709600c",
      "parents": [
        "3a2e9a5a2afc1a2d2c548b8987f133235cebe933"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Sep 23 20:33:40 2009 +0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:24 2009 +0200"
      },
      "message": "writeback: stop background writeback when below background threshold\n\nTreat bdi_start_writeback(0) as a special request to do background write,\nand stop such work when we are below the background dirty threshold.\n\nAlso simplify the (nr_pages \u003c\u003d 0) checks. Since we already pass in\nnr_pages\u003dLONG_MAX for WB_SYNC_ALL and background writes, we don\u0027t\nneed to worry about it being decreased to zero.\n\nReported-by: Richard Kennedy \u003crichard@rsk.demon.co.uk\u003e\nCC: Jan Kara \u003cjack@suse.cz\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "a5989bdc981ec85e0734ac22519cc0b780813d7b",
      "tree": "74cc93bd420b7bd044e3fd5451c652b3742015e6",
      "parents": [
        "7fa07729e439a6184bd824746d06a49cca553f15"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Sep 16 19:22:48 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 25 18:08:24 2009 +0200"
      },
      "message": "fs: Fix busyloop in wb_writeback()\n\nIf all inodes are under writeback (e.g. in case when there\u0027s only one inode\nwith dirty pages), wb_writeback() with WB_SYNC_NONE work basically degrades\nto busylooping until I_SYNC flags of the inode is cleared. Fix the problem by\nwaiting on I_SYNC flags of an inode on b_more_io list in case we failed to\nwrite anything.\n\nTested-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1ef7d9aa32a8ee054c4d4fdcd2ea537c04d61b2f",
      "tree": "69c570a78f37760ead0c8cad2eda25991c3fcd4c",
      "parents": [
        "77b9d059cb3ddb8b1246d5878e81d52926550b23"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Sep 15 21:37:55 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:53 2009 +0200"
      },
      "message": "writeback: fix possible bdi writeback refcounting problem\n\nwb_clear_pending AFAIKS should not be called after the item has been\nput on the list, except by the worker threads. It could lead to the\nsituation where the refcount is decremented below 0 and cause lots of\nproblems.\n\nPresumably the !wb_has_dirty_io case is not a common one, so it can\nbe discovered when the thread wakes up to check?\n\nAlso add a comment in bdi_work_clear.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "77b9d059cb3ddb8b1246d5878e81d52926550b23",
      "tree": "6d6a894d91097aec9e589d22f48d7ec387e062d9",
      "parents": [
        "77fad5e625e56eb31a343ae1d489979fdc61a2aa"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Sep 15 21:34:51 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:52 2009 +0200"
      },
      "message": "writeback: Fix bdi use after free in wb_work_complete()\n\nBy the time bdi_work_on_stack gets evaluated again in bdi_work_free, it\ncan already have been deallocated and used for something else in the\n!on stack case, giving a false positive in this test and causing\ncorruption.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "77fad5e625e56eb31a343ae1d489979fdc61a2aa",
      "tree": "e0b881a38be27d0c4d8523289f51b70ffb98c080",
      "parents": [
        "deed62edffe600bc5b379c872d3004116e001b66"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Sep 15 21:34:12 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:52 2009 +0200"
      },
      "message": "writeback: improve scalability of bdi writeback work queues\n\nIf you\u0027re going to do an atomic RMW on each list entry, there\u0027s not much\npoint in all the RCU complexities of the list walking. This is only going\nto help the multi-thread case I guess, but it doesn\u0027t hurt to do now.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "deed62edffe600bc5b379c872d3004116e001b66",
      "tree": "2c1837366be7dac9986a250d8b5cebf6f54fdea0",
      "parents": [
        "49db041430e8a856dbc3af15430bf068f1c74655"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Tue Sep 15 21:32:58 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:52 2009 +0200"
      },
      "message": "writeback: remove smp_mb(), it\u0027s not needed with list_add_tail_rcu()\n\nlist_add_tail_rcu contains required barriers.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "49db041430e8a856dbc3af15430bf068f1c74655",
      "tree": "f6ea57fc200d6584bcaef88b0ac032da0ee5c459",
      "parents": [
        "8010c3b6349b407f8f11b3f4d7e9f94cb00fe528"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Sep 15 21:27:40 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:52 2009 +0200"
      },
      "message": "writeback: use schedule_timeout_interruptible()\n\nGets rid of a manual set_current_state().\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "8010c3b6349b407f8f11b3f4d7e9f94cb00fe528",
      "tree": "eecf594bec286f582c0b9709a87a0edb82dc034b",
      "parents": [
        "ce5f8e7795195edb6f84f74aa9d72e739df38486"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Sep 15 20:04:57 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:52 2009 +0200"
      },
      "message": "writeback: add comments to bdi_work structure\n\nAnd document its retriever, get_next_work_item().\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "b6e51316daede0633e9274e1e30391cfa4747877",
      "tree": "664476bb4e7c05dcce3ad908363b482134c68429",
      "parents": [
        "bcddc3f01c9122882c8b9f12ab94a934e55aef97"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:13:54 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:52 2009 +0200"
      },
      "message": "writeback: separate starting of sync vs opportunistic writeback\n\nbdi_start_writeback() is currently split into two paths, one for\nWB_SYNC_NONE and one for WB_SYNC_ALL. Add bdi_sync_writeback()\nfor WB_SYNC_ALL writeback and let bdi_start_writeback() handle\nonly WB_SYNC_NONE.\n\nPush down the writeback_control allocation and only accept the\nparameters that make sense for each function. This cleans up\nthe API considerably.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "bcddc3f01c9122882c8b9f12ab94a934e55aef97",
      "tree": "db642f05ec083f49c4e32cf8d93c9f14028d8ec5",
      "parents": [
        "cfc4ba5365449cb6b5c9f68d755a142f17da1e47"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Sep 13 20:07:36 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:52 2009 +0200"
      },
      "message": "writeback: inline allocation failure handling in bdi_alloc_queue_work()\n\nThis gets rid of work \u003d\u003d NULL in bdi_queue_work() and puts the\nOOM handling where it belongs.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\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": "f11fcae8401a3175f528e2f7917362645d570111",
      "tree": "1d0cf5d256ab40405582f5b459856cff41938c56",
      "parents": [
        "32a88aa1b6dfb901cec64e1898cac78d0f25028a"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Sep 15 09:53:35 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:51 2009 +0200"
      },
      "message": "writeback: only use bdi_writeback_all() for WB_SYNC_NONE writeout\n\nData integrity writeback must use bdi_start_writeback() and ensure\nthat wbc-\u003esb and wbc-\u003ebdi are set.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c4a77a6c7dcff04a2abc7fe4b6b2ae605be41c5b",
      "tree": "2e0a4097cab5b94249f69fae7ebbcb22d6c8f225",
      "parents": [
        "f0fad8a530e7cbad5f686dbca3079d1a626a3882"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:25 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:25 2009 +0200"
      },
      "message": "writeback: make wb_writeback() take an argument structure\n\nWe need to be able to pass in range_cyclic as well, so instead\nof growing yet another argument, split the arguments into a\nstruct wb_writeback_args structure that we can use internally.\nAlso makes it easier to just copy all members to an on-stack\nstruct, since we can\u0027t access work after clearing the pending\nbit.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f0fad8a530e7cbad5f686dbca3079d1a626a3882",
      "tree": "8e2260cd493a9088c6523dcd0a9f00e34d34a328",
      "parents": [
        "1fe06ad89255c211fe100d7f690d10b161398df8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Fri Sep 11 09:47:56 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:16:18 2009 +0200"
      },
      "message": "writeback: merely wakeup flusher thread if work allocation fails for WB_SYNC_NONE\n\nSince it\u0027s an opportunistic writeback and not a data integrity action,\ndon\u0027t punt to blocking writeback. Just wakeup the thread and it will\nflush old data.\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    }
  ],
  "next": "18f2ee705d98034b0f229a3202d827468d4bffd9"
}
