)]}'
{
  "log": [
    {
      "commit": "16c4042f08919f447d6b2a55679546c9b97c7264",
      "tree": "0248b64d46237854ebe67efe8c742cb5878d8611",
      "parents": [
        "e50e37201ae2e7d6a52e87815759e6481f0bcfb9"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Wed Aug 11 14:17:39 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 08:43:29 2010 -0700"
      },
      "message": "writeback: avoid unnecessary calculation of bdi dirty thresholds\n\nSplit get_dirty_limits() into global_dirty_limits()+bdi_dirty_limit(), so\nthat the latter can be avoided when under global dirty background\nthreshold (which is the normal state for most systems).\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6bf05d03ea8d00bb53e0642f94a5a6815be2edb6",
      "tree": "d36ea43efb9306fa4ff2fdb8f579fb661cad61e8",
      "parents": [
        "e7f52dfb4f378ea1bbfd4476f4e8ba42f5fb332c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Aug 04 13:34:31 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:57 2010 +0200"
      },
      "message": "writeback: fix bad _bh spinlock nesting\n\nFix a bug where a lock is _bh nested within another _bh lock,\nbut forgets to use the _bh variant for unlock.\n\nFurther more, it\u0027s not necessary to test _bh locks, the inner lock\ncan just use spin_lock(). So fix up the bug by making that change.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c284de61db31669cce547ffc99efda971146719d",
      "tree": "d4b05dd00d1e33dd34917f3d2a9476f69ca9ac99",
      "parents": [
        "603320239fb436f175c8b6bfa43d5023c47a6dc2"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:25 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:57 2010 +0200"
      },
      "message": "writeback: cleanup bdi_register\n\nThis patch makes sure we first initialize everything and set the BDI_registered\nflag, and only after this we add the bdi to \u0027bdi_list\u0027. Current code adds the\nbdi to the list too early, and as a result I the\n\nWARN(!test_bit(BDI_registered, \u0026bdi-\u003estate)\n\nin bdi forker is triggered. Also, it is in general good practice to make things\nvisible only when they are fully initialized.\n\nAlso, this patch does few micro clean-ups:\n1. Removes the \u0027exit\u0027 label which does not do anything, just returns. This\n   allows to get rid of few braces and \u0027ret\u0027 variable and make the code smaller.\n2. If \u0027kthread_run()\u0027 fails, remove the error code it returns, not hard-coded\n   \u0027-ENOMEM\u0027. Theoretically, some day \u0027kthread_run()\u0027 can return something\n   else. Also, in case of failure it is not necessary to set \u0027bdi-\u003ewb.task\u0027 to\n   NULL.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "603320239fb436f175c8b6bfa43d5023c47a6dc2",
      "tree": "efe1e78de6c2b8029cdcdcad2e98e3ef6c017900",
      "parents": [
        "b5048a6cb5455a16bdff26a4c5ae9534f070d94c"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:24 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: add new tracepoints\n\nAdd 2 new trace points to the periodic write-back wake up case, just like we do\nin the \u0027bdi_queue_work()\u0027 function. Namely, introduce:\n\n1. trace_writeback_wake_thread(bdi)\n2. trace_writeback_wake_forker_thread(bdi)\n\nThe first event is triggered every time we wake up a bdi thread to start\nperiodic background write-out. The second event is triggered only when the bdi\nthread does not exist and should be created by the forker thread.\n\nThis patch was suggested by Dave Chinner and Christoph Hellwig.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b5048a6cb5455a16bdff26a4c5ae9534f070d94c",
      "tree": "fe66278b6ff27a6ef9dbef0cd3db1d8640e10bbd",
      "parents": [
        "6467716a37673e8d47b4984eb19839bdad0a8353"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:23 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: remove unnecessary init_timer call\n\nThe \u0027setup_timer()\u0027 function also calls \u0027init_timer()\u0027, so the extra\n\u0027init_timer()\u0027 call is not needed. Indeed, \u0027setup_timer()\u0027 is basically\n\u0027init_timer()\u0027 plus callback function and data pointers initialization.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6467716a37673e8d47b4984eb19839bdad0a8353",
      "tree": "8b2bfd38d53e31c47654162d4ce9220c4424a31d",
      "parents": [
        "253c34e9b10c30d3064be654b5b78fbc1a8b1896"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:22 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: optimize periodic bdi thread wakeups\n\nWhe the first inode for a bdi is marked dirty, we wake up the bdi thread which\nshould take care of the periodic background write-out. However, the write-out\nwill actually start only \u0027dirty_writeback_interval\u0027 centisecs later, so we can\ndelay the wake-up.\n\nThis change was requested by Nick Piggin who pointed out that if we delay the\nwake-up, we weed out 2 unnecessary contex switches, which matters because\n\u0027__mark_inode_dirty()\u0027 is a hot-path function.\n\nThis patch introduces a new function - \u0027bdi_wakeup_thread_delayed()\u0027, which\nsets up a timer to wake-up the bdi thread and returns. So the wake-up is\ndelayed.\n\nWe also delete the timer in bdi threads just before writing-back. And\nsynchronously delete it when unregistering bdi. At the unregister point the bdi\ndoes not have any users, so no one can arm it again.\n\nSince now we take \u0027bdi-\u003ewb_lock\u0027 in the timer, which can execute in softirq\ncontext, we have to use \u0027spin_lock_bh()\u0027 for \u0027bdi-\u003ewb_lock\u0027. This patch makes\nthis change as well.\n\nThis patch also moves the \u0027bdi_wb_init()\u0027 function down in the file to avoid\nforward-declaration of \u0027bdi_wakeup_thread_delayed()\u0027.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "253c34e9b10c30d3064be654b5b78fbc1a8b1896",
      "tree": "1ee077a52fd1036fe26ddfe8cabd5a5315dc1285",
      "parents": [
        "fff5b85aa4225a7be157f208277a055822039a9e"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:21 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: prevent unnecessary bdi threads wakeups\n\nFinally, we can get rid of unnecessary wake-ups in bdi threads, which are very\nbad for battery-driven devices.\n\nThere are two types of activities bdi threads do:\n1. process bdi works from the \u0027bdi-\u003ework_list\u0027\n2. periodic write-back\n\nSo there are 2 sources of wake-up events for bdi threads:\n\n1. \u0027bdi_queue_work()\u0027 - submits bdi works\n2. \u0027__mark_inode_dirty()\u0027 - adds dirty I/O to bdi\u0027s\n\nThe former already has bdi wake-up code. The latter does not, and this patch\nadds it.\n\n\u0027__mark_inode_dirty()\u0027 is hot-path function, but this patch adds another\n\u0027spin_lock(\u0026bdi-\u003ewb_lock)\u0027 there. However, it is taken only in rare cases when\nthe bdi has no dirty inodes. So adding this spinlock should be fine and should\nnot affect performance.\n\nThis patch makes sure bdi threads and the forker thread do not wake-up if there\nis nothing to do. The forker thread will nevertheless wake up at least every\n5 min. to check whether it has to kill a bdi thread. This can also be optimized,\nbut is not worth it.\n\nThis patch also tidies up the warning about unregistered bid, and turns it from\nan ugly crocodile to a simple \u0027WARN()\u0027 statement.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "fff5b85aa4225a7be157f208277a055822039a9e",
      "tree": "f4310bf188ef0a1dac52da39b61968aa566a717e",
      "parents": [
        "adf392407076b85816d48714fb8eeaedb2157884"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:20 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: move bdi threads exiting logic to the forker thread\n\nCurrently, bdi threads can decide to exit if there were no useful activities\nfor 5 minutes. However, this causes nasty races: we can easily oops in the\n\u0027bdi_queue_work()\u0027 if the bdi thread decides to exit while we are waking it up.\n\nAnd even if we do not oops, but the bdi tread exits immediately after we wake\nit up, we\u0027d lose the wake-up event and have an unnecessary delay (up to 5 secs)\nin the bdi work processing.\n\nThis patch makes the forker thread to be the central place which not only\ncreates bdi threads, but also kills them if they were inactive long enough.\nThis better design-wise.\n\nAnother reason why this change was done is to prepare for the further changes\nwhich will prevent the bdi threads from waking up every 5 sec and wasting\npower. Indeed, when the task does not wake up periodically anymore, it won\u0027t be\nable to exit either.\n\nThis patch also moves the the \u0027wake_up_bit()\u0027 call from the bdi thread to the\nforker thread as well. So now the forker thread sets the BDI_pending bit, then\nforks the task or kills it, then clears the bit and wakes up the waiting\nprocess.\n\nThe only process which may wain on the bit is \u0027bdi_wb_shutdown()\u0027. This\nfunction was changed as well - now it first removes the bdi from the\n\u0027bdi_list\u0027, then waits on the \u0027BDI_pending\u0027 bit. Once it wakes up, it is\nguaranteed that the forker thread won\u0027t race with it, because the bdi is not\nvisible. Note, the forker thread sets the \u0027BDI_pending\u0027 bit under the\n\u0027bdi-\u003ewb_lock\u0027 which is essential for proper serialization.\n\nAnd additionally, when we change \u0027bdi-\u003ewb.task\u0027, we now take the\n\u0027bdi-\u003ework_lock\u0027, to make sure that we do not lose wake-ups which we otherwise\nwould when raced with, say, \u0027bdi_queue_work()\u0027.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "adf392407076b85816d48714fb8eeaedb2157884",
      "tree": "e926a18b55e67724e0267fe359caf51d530d5b09",
      "parents": [
        "ecd584030da67ede1bf17955746a6ce834d9fc6b"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:19 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: restructure bdi forker loop a little\n\nThis patch re-structures the bdi forker a little:\n1. Add \u0027bdi_cap_flush_forker(bdi)\u0027 condition check to the bdi loop. The reason\n   for this is that the forker thread can start _before_ the \u0027BDI_registered\u0027\n   flag is set (see \u0027bdi_register()\u0027), so the WARN() statement will fire for\n   the default bdi. I observed this warning at boot-up.\n\n2. Introduce an enum \u0027action\u0027 and use \"switch\" statement in the outer loop.\n   This is a preparation to the further patch which will teach the forker\n   thread killing bdi threads, so we\u0027ll have another case in the \"switch\"\n   statement. This change was suggested by Christoph Hellwig.\n\nThis patch is just a small step towards the coming change where the forker\nthread will kill the bdi threads. It should simplify reviewing the following\nchanges, which would otherwise be larger.\n\nThis patch also amends comments a little.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "78c40cb6581a74adc48821f3de6b864a54d4c34d",
      "tree": "9ef19e68f6c28ded34f42de8a21b139006bfceaa",
      "parents": [
        "080dcec41709be72613133f695be75b98dd43e88"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:17 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: do not remove bdi from bdi_list\n\nThe forker thread removes bdis from \u0027bdi_list\u0027 before forking the bdi thread.\nBut this is wrong for at least 2 reasons.\n\nReason #1: if we temporary remove a bdi from the list, we may miss works which\n           would otherwise be given to us.\n\nReason #2: this is racy; indeed, \u0027bdi_wb_shutdown()\u0027 expects that bdis are\n           always in the \u0027bdi_list\u0027 (see \u0027bdi_remove_from_list()\u0027), and when\n           it races with the forker thread, it can shut down the bdi thread\n           at the same time as the forker creates it.\n\nThis patch makes sure the forker thread never removes bdis from \u0027bdi_list\u0027\n(which was suggested by Christoph Hellwig).\n\nIn order to make sure that we do not race with \u0027bdi_wb_shutdown()\u0027, we have to\nhold the \u0027bdi_lock\u0027 while walking the \u0027bdi_list\u0027 and setting the \u0027BDI_pending\u0027\nflag.\n\nNOTE! The error path is interesting. Currently, when we fail to create a bdi\nthread, we move the bdi to the tail of \u0027bdi_list\u0027. But if we never remove the\nbdi from the list, we cannot move it to the tail either, because then we can\nmess up the RCU readers which walk the list. And also, we\u0027ll have the race\ndescribed above in \"Reason #2\".\n\nBut I not think that adding to the tail is any important so I just do not do\nthat.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "080dcec41709be72613133f695be75b98dd43e88",
      "tree": "8f453a9fe9b2a144662aad4e06944722610a1056",
      "parents": [
        "297252c81de8043ca6c36e5984c24fdb5aab9013"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:16 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:56 2010 +0200"
      },
      "message": "writeback: simplify bdi code a little\n\nThis patch simplifies bdi code a little by removing the \u0027pending_list\u0027 which is\nredundant. Indeed, currently the forker thread (\u0027bdi_forker_thread()\u0027) is\nworking like this:\n\n1. In a loop, fetch all bdi\u0027s which have works but have no writeback thread and\n   move them to the \u0027pending_list\u0027.\n2. If the list is empty, sleep for 5 sec.\n3. Otherwise, take one bdi from the list, fork the writeback thread for this\n   bdi, and repeat the loop.\n\nIOW, it first moves everything to the \u0027pending_list\u0027, then process only one\nelement, and so on. This patch simplifies the algorithm, which is now as\nfollows.\n\n1. Find the first bdi which has a work and remove it from the global list of\n   bdi\u0027s (bdi_list).\n2. If there was not such bdi, sleep 5 sec.\n3. Fork the writeback thread for this bdi and repeat the loop.\n\nIOW, now we find the first bdi to process, process it, and so on. This is\nsimpler and involves less lists.\n\nThe bonus now is that we can get rid of a couple of functions, as well as\nremove complications which involve \u0027rcu_call()\u0027 and \u0027bdi-\u003ercu_head\u0027.\n\nThis patch also makes sure we use \u0027list_add_tail_rcu()\u0027, instead of plain\n\u0027list_add_tail()\u0027, but this piece of code is going to be removed in the next\npatch anyway.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c4ec7908c2c5125f75fabd100e7a95626a6883ee",
      "tree": "d58ee401205de8385c74a04e9b66101fc9a6e22b",
      "parents": [
        "c5f7ad233b8805dae06e694538d8095b19f3c560"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:14 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:55 2010 +0200"
      },
      "message": "writeback: do not lose wake-ups in the forker thread - 2\n\nCurrently, if someone submits jobs for the default bdi, we can lose wake-up\nevents. E.g., this can happen if \u0027bdi_queue_work()\u0027 is called when\n\u0027bdi_forker_thread()\u0027 is executing code after \u0027wb_do_writeback(me, 0)\u0027, but\nbefore \u0027set_current_state(TASK_INTERRUPTIBLE)\u0027.\n\nThis situation is unlikely, and the result is not very severe - we\u0027ll just\ndelay the execution of the work, but this is still not very nice.\n\nThis patch fixes the issue by checking whether the default bdi has works before\nthe forker thread goes sleep.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c5f7ad233b8805dae06e694538d8095b19f3c560",
      "tree": "c47a1991fe1de055cfd06f5cecb8cfaa9f497ed7",
      "parents": [
        "94eac5e62364df4e605e451218ee6024a7ba664f"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:13 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:55 2010 +0200"
      },
      "message": "writeback: do not lose wake-ups in the forker thread - 1\n\nCurrently the forker thread can lose wake-ups which may lead to unnecessary\ndelays in processing bdi works. E.g., consider the following scenario.\n\n1. \u0027bdi_forker_thread()\u0027 walks the \u0027bdi_list\u0027, finds out there is nothing to\n   do, and is about to finish the loop.\n2. A bdi thread decides to exit because it was inactive for long time.\n3. \u0027bdi_queue_work()\u0027 adds a work to the bdi which just exited, so it wakes up\n   the forker thread.\n4. but \u0027bdi_forker_thread()\u0027 executes \u0027set_current_state(TASK_INTERRUPTIBLE)\u0027\n   and goes sleep. We lose a wake-up.\n\nLosing the wake-up is not fatal, but this means that the bdi work processing\nwill be delayed by up to 5 sec. This race is theoretical, I never hit it, but\nit is worth fixing.\n\nThe fix is to execute \u0027set_current_state(TASK_INTERRUPTIBLE)\u0027 _before_ walking\n\u0027bdi_list\u0027, not after.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "94eac5e62364df4e605e451218ee6024a7ba664f",
      "tree": "5e4b7d85361ad20821ba3371acc1536262846f22",
      "parents": [
        "6f904ff0e39ea88f81eb77e8dfb4e1238492f0a8"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:12 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:19 2010 +0200"
      },
      "message": "writeback: fix possible race when creating bdi threads\n\nThis patch fixes a very unlikely race condition on the bdi forker thread error\npath: when bdi thread creation fails, \u0027bdi-\u003ewb.task\u0027 may contain the error code\nfor a short period of time. If at the same time someone submits a work to this\nbdi, we can end up with an oops \u0027bdi_queue_work()\u0027 while executing\n\u0027wake_up_process(wb-\u003etask)\u0027.\n\nThis patch fixes the issue by introducing a temporary variable \u0027task\u0027 and\nstoring the possible error code there, so that \u0027wb-\u003etask\u0027 would never take\nerroneous values.\n\nNote, this race is very unlikely and I never hit it, so it is theoretical, but\nnevertheless worth fixing.\n\nThis patch also merges 2 comments which were previously separate.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6f904ff0e39ea88f81eb77e8dfb4e1238492f0a8",
      "tree": "8a22ff5ffe31e221554915ac9135da15d3adad8d",
      "parents": [
        "4aeefdc69f7b6f3f287e6fd8d4b213953b9e92d8"
      ],
      "author": {
        "name": "Artem Bityutskiy",
        "email": "Artem.Bityutskiy@nokia.com",
        "time": "Sun Jul 25 14:29:11 2010 +0300"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:53:16 2010 +0200"
      },
      "message": "writeback: harmonize writeback threads naming\n\nThe write-back code mixes words \"thread\" and \"task\" for the same things. This\nis not a big deal, but still an inconsistency.\n\nhch: a convention I tend to use and I\u0027ve seen in various places\nis to always use _task for the storage of the task_struct pointer,\nand thread everywhere else.  This especially helps with having\nfoo_thread for the actual thread and foo_task for a global\nvariable keeping the task_struct pointer\n\nThis patch renames:\n* \u0027bdi_add_default_flusher_task()\u0027 -\u003e \u0027bdi_add_default_flusher_thread()\u0027\n* \u0027bdi_forker_task()\u0027              -\u003e \u0027bdi_forker_thread()\u0027\n\nbecause bdi threads are \u0027bdi_writeback_thread()\u0027, so these names are more\nconsistent.\n\nThis patch also amends commentaries and makes them refer the forker and bdi\nthreads as \"thread\", not \"task\".\n\nAlso, while on it, make \u0027bdi_add_default_flusher_thread()\u0027 declaration use\n\u0027static void\u0027 instead of \u0027void static\u0027 and make checkpatch.pl happy.\n\nSigned-off-by: Artem Bityutskiy \u003cArtem.Bityutskiy@nokia.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "455b2864686d3591b3b2f39eb46290c95f76471f",
      "tree": "b88059e3691fc5ad4491518e9eb1f1f2ba21711a",
      "parents": [
        "a89f5c899db3c6be4bb426e4efb72ecee29a93b5"
      ],
      "author": {
        "name": "Dave Chinner",
        "email": "david@fromorbit.com",
        "time": "Wed Jul 07 13:24:06 2010 +1000"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:24:23 2010 +0200"
      },
      "message": "writeback: Initial tracing support\n\nTrace queue/sched/exec parts of the writeback loop. This provides\ninsight into when and why flusher threads are scheduled to run. e.g\na sync invocation leaves traces like:\n\n     sync-[...]: writeback_queue: bdi 8:0: sb_dev 8:1 nr_pages\u003d7712 sync_mode\u003d0 kupdate\u003d0 range_cyclic\u003d0 background\u003d0\nflush-8:0-[...]: writeback_exec: bdi 8:0: sb_dev 8:1 nr_pages\u003d7712 sync_mode\u003d0 kupdate\u003d0 range_cyclic\u003d0 background\u003d0\n\nThis also lays the foundation for adding more writeback tracing to\nprovide deeper insight into the whole writeback path.\n\nThe original tracing code is from Jens Axboe, though this version is\na rewrite as a result of the code being traced changing\nsignificantly.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "082439004b31adc146e96e5f1c574dd2b57dcd93",
      "tree": "19ef2ccab9588c2aa77d0b09c2bae760b23ae110",
      "parents": [
        "c1955ce32fdb0877b7a1b22feb2669358f65be76"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jun 19 23:08:22 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:23:06 2010 +0200"
      },
      "message": "writeback: merge bdi_writeback_task and bdi_start_fn\n\nMove all code for the writeback thread into fs/fs-writeback.c instead of\nsplitting it over two functions in two files.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c1955ce32fdb0877b7a1b22feb2669358f65be76",
      "tree": "805b4da7168b0b16de890ea248323f3cdf5dc0b7",
      "parents": [
        "4c4762d10faf93167b84ee03e4b58dd62012b06f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Jun 19 23:08:06 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:23:03 2010 +0200"
      },
      "message": "writeback: remove wb_list\n\nThe wb_list member of struct backing_device_info always has exactly one\nelement.  Just use the direct bdi-\u003ewb pointer instead and simplify some\ncode.\n\nAlso remove bdi_task_init which is now trivial to prepare for the next\npatch.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "83ba7b071f30f7c01f72518ad72d5cd203c27502",
      "tree": "4737320dcce72cfff4d87d835e4f78428eca7ef5",
      "parents": [
        "edadfb10ba35da7253541e4155aa92eff758ebe6"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Jul 06 08:59:53 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 06 08:59:53 2010 +0200"
      },
      "message": "writeback: simplify the write back thread queue\n\nFirst remove items from work_list as soon as we start working on them.  This\nmeans we don\u0027t have to track any pending or visited state and can get\nrid of all the RCU magic freeing the work items - we can simply free\nthem once the operation has finished.  Second use a real completion for\ntracking synchronous requests - if the caller sets the completion pointer\nwe complete it, otherwise use it as a boolean indicator that we can free\nthe work item directly.  Third unify struct wb_writeback_args and struct\nbdi_work into a single data structure, wb_writeback_work.  Previous we\nset all parameters into a struct wb_writeback_args, copied it into\nstruct bdi_work, copied it again on the stack to use it there.  Instead\nof just allocate one structure dynamically or on the stack and use it\nall the way through the stack.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9c3a8ee8a1d72c5c0d7fbdf426d80e270ddfa54c",
      "tree": "fa131760a61f66afeede852622ede0d716965489",
      "parents": [
        "06d738fa9155ff16dba3d7e501ba4581d01a98cb"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Jun 10 12:07:27 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 06 08:54:03 2010 +0200"
      },
      "message": "writeback: remove writeback_inodes_wbc\n\nThis was just an odd wrapper around writeback_inodes_wb.  Removing this\nalso allows to get rid of the bdi member of struct writeback_control\nwhich was rather out of place there.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6423104b6a1e6f0c18be60e8c33f02d263331d5e",
      "tree": "e22957400e9679bf82b62e03d6bd831181053945",
      "parents": [
        "f9eadbbd424c083b8005c7b738f644611b9ef489"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 20:00:35 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 21 20:00:35 2010 +0200"
      },
      "message": "writeback: fixups for !dirty_writeback_centisecs\n\nCommit 69b62d01 fixed up most of the places where we would enter\nbusy schedule() spins when disabling the periodic background\nwriteback. This fixes up the sb timer so that it doesn\u0027t get\nhammered on with the delay disabled, and ensures that it gets\nrearmed if needed when /proc/sys/vm/dirty_writeback_centisecs\ngets modified.\n\nbdi_forker_task() also needs to check for !dirty_writeback_centisecs\nand use schedule() appropriately, fix that up too.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "5129a469a91a91427334c40e29e64c6d0ab68caf",
      "tree": "141a17cbea94c7c9c038187cc7081e1c688eac55",
      "parents": [
        "7e2455c1a123ceadbb35150a610d61e8443fd340"
      ],
      "author": {
        "name": "Jörn Engel",
        "email": "joern@logfs.org",
        "time": "Sun Apr 25 08:54:42 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Sun Apr 25 08:54:42 2010 +0200"
      },
      "message": "Catch filesystems lacking s_bdi\n\nnoop_backing_dev_info is used only as a flag to mark filesystems that\ndon\u0027t have any backing store, like tmpfs, procfs, spufs, etc.\n\nSigned-off-by: Joern Engel \u003cjoern@logfs.org\u003e\n\nChanged the BUG_ON() to a WARN_ON(). Note that adding dirty inodes\nto the noop_backing_dev_info is not legal and will not result in\nthem being flushed, but we already catch this condition in\n__mark_inode_dirty() when checking for a registered bdi.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c3c532061e46156e8aab1268f38d66cfb63aeb2d",
      "tree": "8c5b027873b823b04f5564d442477e80e82e8edb",
      "parents": [
        "a534dbe96e9929c7245924d8252d89048c23d569"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Apr 22 11:37:01 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Apr 22 11:39:36 2010 +0200"
      },
      "message": "bdi: add helper function for doing init and register of a bdi for a file system\n\nPretty trivial helper, just sets up the bdi and registers it. An atomic\nsequence count is used to ensure that the registered sysfs names are\nunique.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "144214537370b4f133a735446ebe86e90cfb2501",
      "tree": "840f26c5a83d4730c28b5c46ec000a76e89adcc9",
      "parents": [
        "a506aedc51093544ff0f9610af6066d18cb6abbe"
      ],
      "author": {
        "name": "Anton Blanchard",
        "email": "anton@samba.org",
        "time": "Fri Apr 02 09:46:55 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Apr 02 09:46:55 2010 +0200"
      },
      "message": "backing-dev: Handle class_create() failure\n\nI hit this when we had a bug in IDR for a few days. Basically sysfs would\nfail to create new inodes since it uses an IDR and therefore class_create would\nfail.\n\nWhile we are unlikely to see this fail we may as well handle it instead of\noopsing.\n\nSigned-off-by: Anton Blanchard \u003canton@samba.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "bf7ec5bb6114b2f086e536e24486fdacd1c0d339",
      "tree": "8f42b40fed799332e94142a084fed158f56a4d1a",
      "parents": [
        "220d0b1dbf78c6417a658c96e571415552d3abac"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Dec 03 13:49:43 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Dec 03 13:49:43 2009 +0100"
      },
      "message": "flusher: Fix PF_FROZEN race\n\nTo touch task-\u003eflags directly is racy. thaw_process() still has race\n(changing non_current-\u003eflags, but this is another issue) though, I think\nit\u0027s much better off.\n\nSo, use thaw_process() instead.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c62b17a58ab5e97534ff6487241addd5fcc606de",
      "tree": "577c41e145d934d5fc39b6bd0b623ff508a6159d",
      "parents": [
        "aa021baa3295fa6e3f367d80f8955dd5176656eb"
      ],
      "author": {
        "name": "Romit Dasgupta",
        "email": "romit@ti.com",
        "time": "Thu Nov 12 13:08:11 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Nov 12 13:08:11 2009 +0100"
      },
      "message": "Thaw refrigerated bdi flusher threads before invoking kthread_stop on them\n\nUnfreezes the bdi flusher task when the said task needs to exit.\n\nSteps to reproduce this.\n1) Mount a file system from MMC/SD card.\n2) Unmount the file system. This creates a flusher task.\n3) Attempt suspend to RAM. System is unresponsive.\n\nThis is because the bdi flusher thread is already in the refrigerator and will\nremain so until it is thawed. The MMC driver suspend routine call stack will\nultimately issue a \u0027kthread_stop\u0027 on the bdi flusher thread and will block\nuntil the flusher thread is exited. Since the bdi flusher thread is in the\nrefrigerator it never cleans up until thawed.\n\nSigned-off-by: Romit Dasgupta \u003cromit@ti.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "8c4db3355b0fcc9ad77431f15b955efa0645b5d0",
      "tree": "59182683545e9ca548d0e17e52d6326bb24b44cf",
      "parents": [
        "5f04eeb8a76521dec371ceb05e8263889a8af2bc"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Nov 03 20:18:44 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Nov 03 20:18:44 2009 +0100"
      },
      "message": "backing-dev: bdi sb prune should be in the unregister path, not destroy\n\nCommit 592b09a42fc3ae6737a0f3ecf4fee42ecd0296f8 was different from\nthe tested path, in that it moved the bdi super_block prune from\nunregister to destroy context. This doesn\u0027t fully fix the sync hang\nbug on unexpected device removal, as need to prune the bdi cache\npointer before killing flusher thread.\n\nTested-by: Artur Skawina \u003cart.08.09@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "592b09a42fc3ae6737a0f3ecf4fee42ecd0296f8",
      "tree": "d06ca7165c5dfc5224910993b36a50e54a896831",
      "parents": [
        "960cc0f4fef607baabc2232fbd7cce5368a9dcfd"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 29 11:46:12 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 29 11:46:12 2009 +0100"
      },
      "message": "backing-dev: ensure that a removed bdi no longer has super_block referencing it\n\nWhen the bdi is being removed, we have to ensure that no super_blocks\ncurrently have that cached in sb-\u003es_bdi. Normally this is ensured by\nthe sb having a longer life span than the bdi, but if the device is\nsuddenly yanked, we have to kill this reference. sb-\u003es_bdi is pointed\nto freed memory at that point.\n\nThis fixes a problem with sync(1) hanging when a USB stick is pulled\nwithout cleanly umounting it first.\n\nReported-by: Pavel Machek \u003cpavel@ucw.cz\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "961515f613f26b7958c56c5c71061a8231e02be7",
      "tree": "136d6cc71141a66368bfd121f4ab84a47ad715cc",
      "parents": [
        "d25105e8911bff1dbd68e387f12901c5b1a15fe8"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Fri Oct 09 13:01:27 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Oct 09 13:01:27 2009 +0200"
      },
      "message": "writeback: kill space in debugfs item name\n\nThe space is not script friendly, kill it.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ce5f8e7795195edb6f84f74aa9d72e739df38486",
      "tree": "f8d5a3a18d70b49b2c9bbe47f62c908e8eda9c64",
      "parents": [
        "b6e51316daede0633e9274e1e30391cfa4747877"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Sep 14 12:57:56 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:52 2009 +0200"
      },
      "message": "writeback: splice dirty inode entries to default bdi on bdi_destroy()\n\nWe cannot safely ensure that the inodes are all gone at this point\nin time, and we must not destroy this bdi with inodes having off it.\nSo just splice our entries to the default bdi since that one will\nalways persist.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "cfc4ba5365449cb6b5c9f68d755a142f17da1e47",
      "tree": "08770de9bb0e658f2e65abd4d10187b3e9f6bb1b",
      "parents": [
        "f11fcae8401a3175f528e2f7917362645d570111"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Sep 14 13:12:40 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 16 15:18:51 2009 +0200"
      },
      "message": "writeback: use RCU to protect bdi_list\n\nNow that bdi_writeback_all() no longer handles integrity writeback,\nit doesn\u0027t have to block anymore. This means that we can switch\nbdi_list reader side protection to RCU.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "500b067c5e6ceea49cf280a02597b1169320e08c",
      "tree": "5e2e9bfd66f825f845fdf395b6303b884769ff6d",
      "parents": [
        "d993831fa7ffeb89e994f046f93eeb09ec91df08"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 09 09:10:25 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:26 2009 +0200"
      },
      "message": "writeback: check for registered bdi in flusher add and inode dirty\n\nAlso a debugging aid. We want to catch dirty inodes being added to\nbacking devices that don\u0027t do writeback.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "d993831fa7ffeb89e994f046f93eeb09ec91df08",
      "tree": "da4f94bbf022c83988bda71adf1f1b3a88cb4592",
      "parents": [
        "f09b00d3e789a88fa6c7c03cedc62cb65c1de0cb"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Jun 12 14:45:52 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:26 2009 +0200"
      },
      "message": "writeback: add name to backing_dev_info\n\nThis enables us to track who does what and print info. Its main use\nis catching dirty inodes on the default_backing_dev_info, so we can\nfix that up.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f09b00d3e789a88fa6c7c03cedc62cb65c1de0cb",
      "tree": "9451d5cfb8d52f2aa9987d93e420ecb505d09ba5",
      "parents": [
        "d0bceac747b547c0b4769b91fec7d3c15600153f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon May 25 09:08:21 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:26 2009 +0200"
      },
      "message": "writeback: add some debug inode list counters to bdi stats\n\nAdd some debug entries to be able to inspect the internal state of\nthe writeback details.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "03ba3782e8dcc5b0e1efe440d33084f066e38cae",
      "tree": "e5a6513b411de16a46199530ec98ef9b7f1efc50",
      "parents": [
        "66f3b8e2e103a0b93b945764d98e9ba46cb926dd"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 09 09:08:54 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:25 2009 +0200"
      },
      "message": "writeback: switch to per-bdi threads for flushing data\n\nThis gets rid of pdflush for bdi writeout and kupdated style cleaning.\npdflush writeout suffers from lack of locality and also requires more\nthreads to handle the same workload, since it has to work in a\nnon-blocking fashion against each queue. This also introduces lumpy\nbehaviour and potential request starvation, since pdflush can be starved\nfor queue access if others are accessing it. A sample ffsb workload that\ndoes random writes to files is about 8% faster here on a simple SATA drive\nduring the benchmark phase. File layout also seems a LOT more smooth in\nvmstat:\n\n r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa\n 0  1      0 608848   2652 375372    0    0     0 71024  604    24  1 10 48 42\n 0  1      0 549644   2712 433736    0    0     0 60692  505    27  1  8 48 44\n 1  0      0 476928   2784 505192    0    0     4 29540  553    24  0  9 53 37\n 0  1      0 457972   2808 524008    0    0     0 54876  331    16  0  4 38 58\n 0  1      0 366128   2928 614284    0    0     4 92168  710    58  0 13 53 34\n 0  1      0 295092   3000 684140    0    0     0 62924  572    23  0  9 53 37\n 0  1      0 236592   3064 741704    0    0     4 58256  523    17  0  8 48 44\n 0  1      0 165608   3132 811464    0    0     0 57460  560    21  0  8 54 38\n 0  1      0 102952   3200 873164    0    0     4 74748  540    29  1 10 48 41\n 0  1      0  48604   3252 926472    0    0     0 53248  469    29  0  7 47 45\n\nwhere vanilla tends to fluctuate a lot in the creation phase:\n\n r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa\n 1  1      0 678716   5792 303380    0    0     0 74064  565    50  1 11 52 36\n 1  0      0 662488   5864 319396    0    0     4   352  302   329  0  2 47 51\n 0  1      0 599312   5924 381468    0    0     0 78164  516    55  0  9 51 40\n 0  1      0 519952   6008 459516    0    0     4 78156  622    56  1 11 52 37\n 1  1      0 436640   6092 541632    0    0     0 82244  622    54  0 11 48 41\n 0  1      0 436640   6092 541660    0    0     0     8  152    39  0  0 51 49\n 0  1      0 332224   6200 644252    0    0     4 102800  728    46  1 13 49 36\n 1  0      0 274492   6260 701056    0    0     4 12328  459    49  0  7 50 43\n 0  1      0 211220   6324 763356    0    0     0 106940  515    37  1 10 51 39\n 1  0      0 160412   6376 813468    0    0     0  8224  415    43  0  6 49 45\n 1  1      0  85980   6452 886556    0    0     4 113516  575    39  1 11 54 34\n 0  2      0  85968   6452 886620    0    0     0  1640  158   211  0  0 46 54\n\nA 10 disk test with btrfs performs 26% faster with per-bdi flushing. A\nSSD based writeback test on XFS performs over 20% better as well, with\nthe throughput being very stable around 1GB/sec, where pdflush only\nmanages 750MB/sec and fluctuates wildly while doing so. Random buffered\nwrites to many files behave a lot better as well, as does random mmap\u0027ed\nwrites.\n\nA separate thread is added to sync the super blocks. In the long term,\nadding sync_supers_bdi() functionality could get rid of this thread again.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "66f3b8e2e103a0b93b945764d98e9ba46cb926dd",
      "tree": "442bf5664214f0a1448e4010b09868cc58fdd3d1",
      "parents": [
        "d8a8559cd7a9ccac98d5f6f13297a2ff68a43627"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Sep 02 09:19:46 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Sep 11 09:20:25 2009 +0200"
      },
      "message": "writeback: move dirty inodes from super_block to backing_dev_info\n\nThis is a first step at introducing per-bdi flusher threads. We should\nhave no change in behaviour, although sb_has_dirty_inodes() is now\nridiculously expensive, as there\u0027s no easy way to answer that question.\nNot a huge problem, since it\u0027ll be deleted in subsequent patches.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "8aa7e847d834ed937a9ad37a0f2ad5b8584c1ab0",
      "tree": "76c8b4f1362a928d426f2201790ab5d128f57724",
      "parents": [
        "c2cc49a2f8a479dde96a599646d30b6cc9dbed78"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Jul 09 14:52:32 2009 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@carl.(none)",
        "time": "Fri Jul 10 20:31:53 2009 +0200"
      },
      "message": "Fix congestion_wait() sync/async vs read/write confusion\n\nCommit 1faa16d22877f4839bd433547d770c676d1d964c accidentally broke\nthe bdi congestion wait queue logic, causing us to wait on congestion\nfor WRITE (\u003d\u003d 1) when we really wanted BLK_RW_ASYNC (\u003d\u003d 0) instead.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "1faa16d22877f4839bd433547d770c676d1d964c",
      "tree": "9a0d50be1ef0358c1f53d7107413100904e7d526",
      "parents": [
        "0221c81b1b8eb0cbb6b30a0ced52ead32d2b4e4c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Apr 06 14:48:01 2009 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 06 08:04:53 2009 -0700"
      },
      "message": "block: change the request allocation/congestion logic to be sync/async based\n\nThis makes sure that we never wait on async IO for sync requests, instead\nof doing the split on writes vs reads.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "26160158d3d3df548f4ee046cc6147fe048cfa9c",
      "tree": "19affc0b08f00ac22e8881d6ec73061a8764cc5d",
      "parents": [
        "07e86f405addc6436eb969b8279bb14a6dcacce4"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Tue Mar 17 09:35:06 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Mar 26 11:01:33 2009 +0100"
      },
      "message": "Move the default_backing_dev_info out of readahead.c and into backing-dev.c\n\nIt really makes no sense to have it in readahead.c, so move it where\nit belongs.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f94181da7192f4ed8ccb1b633ea4ce56954df130",
      "tree": "2e28785f2df447573a11fbdd611dc19eb3fcb794",
      "parents": [
        "932adbed6d99cc373fc3433d701b3a594fea872c",
        "fdbc0450df12cc9cb397f3497db4b0cad7c1a8ff"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 17:10:04 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 17:10:04 2009 -0800"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  rcu: fix rcutorture bug\n  rcu: eliminate synchronize_rcu_xxx macro\n  rcu: make treercu safe for suspend and resume\n  rcu: fix rcutree grace-period-latency bug on small systems\n  futex: catch certain assymetric (get|put)_futex_key calls\n  futex: make futex_(get|put)_key() calls symmetric\n  locking, percpu counters: introduce separate lock classes\n  swiotlb: clean up EXPORT_SYMBOL usage\n  swiotlb: remove unnecessary declaration\n  swiotlb: replace architecture-specific swiotlb.h with linux/swiotlb.h\n  swiotlb: add support for systems with highmem\n  swiotlb: store phys address in io_tlb_orig_addr array\n  swiotlb: add hwdev to swiotlb_phys_to_bus() / swiotlb_sg_to_bus()\n"
    },
    {
      "commit": "364aeb2849789b51bf4b9af2ddd02fee7285c54e",
      "tree": "4a24ea43a2a76ae744571f3c7b5022aa1107599e",
      "parents": [
        "58a01a45721bf7bd3a41a86248c3cb02a6b0c501"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Jan 06 14:39:29 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:02 2009 -0800"
      },
      "message": "mm: change dirty limit type specifiers to unsigned long\n\nThe background dirty and dirty limits are better defined with type\nspecifiers of unsigned long since negative writeback thresholds are not\npossible.\n\nThese values, as returned by get_dirty_limits(), are normally compared\nwith ZVC values to determine whether writeback shall commence or be\nthrottled.  Such page counts cannot be negative, so declaring the page\nlimits as signed is unnecessary.\n\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Dave Chinner \u003cdavid@fromorbit.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Andrea Righi \u003crighi.andrea@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fdbc0450df12cc9cb397f3497db4b0cad7c1a8ff",
      "tree": "3d266bd156f140f06b22f27784a7487bba6d6da5",
      "parents": [
        "46483d10e5123d78cf9abf37577aa8e75f18b8a4",
        "90621c40cc4ab7b0a414311ce37e7cc7173403b6",
        "ea319518ba3de282c13ae1cf4bf2215c5e03e67e",
        "238c6d54830c624f34ac9cf123ac04aebfca5013"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jan 06 09:32:11 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jan 06 09:32:11 2009 +0100"
      },
      "message": "Merge branches \u0027core/futexes\u0027, \u0027core/locking\u0027, \u0027core/rcu\u0027 and \u0027linus\u0027 into core/urgent\n"
    },
    {
      "commit": "ea319518ba3de282c13ae1cf4bf2215c5e03e67e",
      "tree": "72eea2b8e5d8926e95ade18d610d59b13df5dae5",
      "parents": [
        "00ef9f7348dfd2fc223ec42aceb30836e86b367f"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Fri Dec 26 15:08:55 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Dec 29 13:43:00 2008 +0100"
      },
      "message": "locking, percpu counters: introduce separate lock classes\n\nImpact: fix lockdep false positives\n\nClassify percpu_counter instances similar to regular lock objects --\nthat is, per instantiation site.\n\nThe networking code has increased its use of percpu_counters, which\nleads to false positives if they are treated as a single class.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "69fc208be5b7eb18d22d1eca185b201400fd5ffc",
      "tree": "2f3961f9f74ed8b136d7550291367fa80f4b54ea",
      "parents": [
        "437f2f91d6597c67662f847d9ed4c99cb3c440cd"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Dec 09 13:14:06 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 10 08:01:52 2008 -0800"
      },
      "message": "mm/backing-dev.c: remove recently-added WARN_ON()\n\nOn second thoughts, this is just going to disturb people while telling us\nthings which we already knew.\n\nCc: Peter Korsgaard \u003cjacmet@sunsite.dk\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f1d0b063d993527754f062c589b73f125024d216",
      "tree": "65abf0c262ea1c8cf3931ea328329c82a049d341",
      "parents": [
        "1b79cd04fab80be61dcd2732e2423aafde9a4c1c"
      ],
      "author": {
        "name": "Kay Sievers",
        "email": "kay.sievers@vrfy.org",
        "time": "Tue Dec 02 10:31:50 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 02 15:50:40 2008 -0800"
      },
      "message": "bdi: register sysfs bdi device only once per queue\n\nDevices which share the same queue, like floppies and mtd devices, get\nregistered multiple times in the bdi interface, but bdi accounts only the\nlast registered device of the devices sharing one queue.\n\nOn remove, all earlier registered devices leak, stay around in sysfs, and\ncause \"duplicate filename\" errors if the devices are re-created.\n\nThis prevents the creation of multiple bdi interfaces per queue, and the\nbdi device will carry the dev_t name of the block device which is the\nfirst one registered, of the pool of devices using the same queue.\n\n[akpm@linux-foundation.org: add a WARN_ON so we know which drivers are misbehaving]\nTested-by: Peter Korsgaard \u003cjacmet@sunsite.dk\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "19051c5035d217e572672a2ca9db06c1cef50e9b",
      "tree": "9fef0047e070c977463a85d5cbd0f9479694d286",
      "parents": [
        "8882b39421bae317e3ee864edd845e994307ce16"
      ],
      "author": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu May 15 13:44:08 2008 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Tue May 20 13:31:53 2008 -0700"
      },
      "message": "mm: bdi: fix race in bdi_class device creation\n\nThere is a race from when a device is created with device_create() and\nthen the drvdata is set with a call to dev_set_drvdata() in which a\nsysfs file could be open, yet the drvdata will be NULL, causing all\nsorts of bad things to happen.\n\nThis patch fixes the problem by using the new function,\ndevice_create_vargs().\n\nMany thanks to Arthur Jones \u003cajones@riverbed.com\u003e for reporting the bug,\nand testing patches out.\n\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: Arthur Jones \u003cajones@riverbed.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "76f1418b485da2707531178e517bbb5cf06b3c76",
      "tree": "138a012d965ebc284163f42e0ff5786c6de1cda5",
      "parents": [
        "a42dde04152750426cc620fd277e80fffae2f65a"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Wed Apr 30 00:54:36 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:50 2008 -0700"
      },
      "message": "mm: bdi: move statistics to debugfs\n\nMove BDI statistics to debugfs:\n\n   /sys/kernel/debug/bdi/\u003cbdi\u003e/stats\n\nUse postcore_initcall() to initialize the sysfs class and debugfs,\nbecause debugfs is initialized in core_initcall().\n\nUpdate descriptions in ABI documentation.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a42dde04152750426cc620fd277e80fffae2f65a",
      "tree": "98cdf246280c59e0bf044ae6d2c229fc27b73203",
      "parents": [
        "189d3c4a94ef19fca2a71a6a336e9fda900e25e7"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Apr 30 00:54:36 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:50 2008 -0700"
      },
      "message": "mm: bdi: allow setting a maximum for the bdi dirty limit\n\nAdd \"max_ratio\" to /sys/class/bdi.  This indicates the maximum percentage of\nthe global dirty threshold allocated to this bdi.\n\n[mszeredi@suse.cz]\n\n - fix parsing in max_ratio_store().\n - export bdi_set_max_ratio() to modules\n - limit bdi_dirty with bdi-\u003emax_ratio\n - document new sysfs attribute\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "189d3c4a94ef19fca2a71a6a336e9fda900e25e7",
      "tree": "75c0de871fe9922885a2fa073f15806d829342fa",
      "parents": [
        "b6f2fcbcfca9db2bd7aa24940224fcd3bbdbb8aa"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Apr 30 00:54:35 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:50 2008 -0700"
      },
      "message": "mm: bdi: allow setting a minimum for the bdi dirty limit\n\nUnder normal circumstances each device is given a part of the total write-back\ncache that relates to its current avg writeout speed in relation to the other\ndevices.\n\nmin_ratio - allows one to assign a minimum portion of the write-back cache to\na particular device.  This is useful in situations where you might want to\nprovide a minimum QoS.  (One request for this feature came from flash based\nstorage people who wanted to avoid writing out at all costs - they of course\nneeded some pdflush hacks as well)\n\nmax_ratio - allows one to assign a maximum portion of the dirty limit to a\nparticular device.  This is useful in situations where you want to avoid one\ndevice taking all or most of the write-back cache.  Eg.  an NFS mount that is\nprone to get stuck, or a FUSE mount which you don\u0027t trust to play fair.\n\nAdd \"min_ratio\" to /sys/class/bdi.  This indicates the minimum percentage of\nthe global dirty threshold allocated to this bdi.\n\n[mszeredi@suse.cz]\n\n - fix parsing in min_ratio_store()\n - document new sysfs attribute\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cf0ca9fe5dd9e3693d935757a7b2fc50fc576554",
      "tree": "c795c5271eda9fc67579fa3176c646b892dfdb41",
      "parents": [
        "caafa4324335aeb11bc233d5f87aca8cce30beba"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Apr 30 00:54:32 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:49 2008 -0700"
      },
      "message": "mm: bdi: export BDI attributes in sysfs\n\nProvide a place in sysfs (/sys/class/bdi) for the backing_dev_info object.\nThis allows us to see and set the various BDI specific variables.\n\nIn particular this properly exposes the read-ahead window for all relevant\nusers and /sys/block/\u003cblock\u003e/queue/read_ahead_kb should be deprecated.\n\nWith patient help from Kay Sievers and Greg KH\n\n[mszeredi@suse.cz]\n\n - split off NFS and FUSE changes into separate patches\n - document new sysfs attributes under Documentation/ABI\n - do bdi_class_init as a core_initcall, otherwise the \"default\" BDI\n   won\u0027t be initialized\n - remove bdi_init_fmt macro, it\u0027s not used very much\n\n[akpm@linux-foundation.org: fix ia64 warning]\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nAcked-by: Greg KH \u003cgreg@kroah.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4b01a0b1613beeb01e12c78feb69e98f0da0a69a",
      "tree": "d92ae6d43c8f3b18c8ae785dc322ad9e2e3fae36",
      "parents": [
        "0c664f974269bb4c3d38ba900c91a9a5d4cee5b1"
      ],
      "author": {
        "name": "Denis Cheng",
        "email": "crquan@gmail.com",
        "time": "Tue Dec 04 23:45:07 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Dec 05 09:21:18 2007 -0800"
      },
      "message": "mm/backing-dev.c: fix percpu_counter_destroy call bug in bdi_init\n\nthis call should use the array index j, not i.  But with this approach, just\none int i is enough, int j is not needed.\n\nSigned-off-by: Denis Cheng \u003ccrquan@gmail.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "04fbfdc14e5f48463820d6b9807daa5e9c92c51f",
      "tree": "c62905212c8c6373b2258c7f528398d3c831b075",
      "parents": [
        "145ca25eb2fbd20d4faf1bad4628c7650332058f"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Oct 16 23:25:50 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:42:45 2007 -0700"
      },
      "message": "mm: per device dirty threshold\n\nScale writeback cache per backing device, proportional to its writeout speed.\n\nBy decoupling the BDI dirty thresholds a number of problems we currently have\nwill go away, namely:\n\n - mutual interference starvation (for any number of BDIs);\n - deadlocks with stacked BDIs (loop, FUSE and local NFS mounts).\n\nIt might be that all dirty pages are for a single BDI while other BDIs are\nidling. By giving each BDI a \u0027fair\u0027 share of the dirty limit, each one can have\ndirty pages outstanding and make progress.\n\nA global threshold also creates a deadlock for stacked BDIs; when A writes to\nB, and A generates enough dirty pages to get throttled, B will never start\nwriteback until the dirty pages go away. Again, by giving each BDI its own\n\u0027independent\u0027 dirty limit, this problem is avoided.\n\nSo the problem is to determine how to distribute the total dirty limit across\nthe BDIs fairly and efficiently. A DBI that has a large dirty limit but does\nnot have any dirty pages outstanding is a waste.\n\nWhat is done is to keep a floating proportion between the DBIs based on\nwriteback completions. This way faster/more active devices get a larger share\nthan slower/idle devices.\n\n[akpm@linux-foundation.org: fix warnings]\n[hugh@veritas.com: Fix occasional hang when a task couldn\u0027t get out of balance_dirty_pages]\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b2e8fb6efa209c82203c79b491b5bc952d44aa57",
      "tree": "e4c82e3f2c70a188ced7126435bf153f5f6c4a1c",
      "parents": [
        "e0bf68ddec4f4f90e5871404be4f1854c17f3120"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Oct 16 23:25:47 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:42:45 2007 -0700"
      },
      "message": "mm: scalable bdi statistics counters\n\nProvide scalable per backing_dev_info statistics counters.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c4dc4beed23827e155d7cbc2a1ffa3949eddd194",
      "tree": "b7f115c159fe26b90b7e5b7d5dcf2f9318b69bf1",
      "parents": [
        "1f7d6668c29b1dfa307a44844f9bb38356fc989b"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Oct 16 23:25:41 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:42:44 2007 -0700"
      },
      "message": "nfs: remove congestion_end()\n\nThese patches aim to improve balance_dirty_pages() and directly address three\nissues:\n  1) inter device starvation\n  2) stacked device deadlocks\n  3) inter process starvation\n\n1 and 2 are a direct result from removing the global dirty limit and using\nper device dirty limits. By giving each device its own dirty limit is will\nno longer starve another device, and the cyclic dependancy on the dirty limit\nis broken.\n\nIn order to efficiently distribute the dirty limit across the independant\ndevices a floating proportion is used, this will allocate a share of the total\nlimit proportional to the device\u0027s recent activity.\n\n3 is done by also scaling the dirty limit proportional to the current task\u0027s\nrecent dirty rate.\n\nThis patch:\n\nnfs: remove congestion_end().  It\u0027s redundant, clear_bdi_congested() already\nwakes the waiters.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: \"J. Bruce Fields\" \u003cbfields@fieldses.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8f8a68ee486e1c81eaead3c521822bf86142d380",
      "tree": "8435b491a52ea22918f621892970536957352fa0",
      "parents": [
        "1492192b4a0bb84dd9b792cc0bd30583220a28a7"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Sun Jul 15 23:41:52 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Jul 16 09:05:52 2007 -0700"
      },
      "message": "remove mm/backing-dev.c:congestion_wait_interruptible()\n\ncongestion_wait_interruptible() is no longer used.\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nAcked-by: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "89a09141df6ac1c3821fbe44ca8384eb37692965",
      "tree": "ccb21055fca86ac2657b3262ac37eb3e5c44bea0",
      "parents": [
        "b74a2f0913694556a027795d2954d30523fac4c5"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Fri Mar 16 13:38:26 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Mar 16 19:25:05 2007 -0700"
      },
      "message": "[PATCH] nfs: fix congestion control\n\nThe current NFS client congestion logic is severly broken, it marks the\nbacking device congested during each nfs_writepages() call but doesn\u0027t\nmirror this in nfs_writepage() which makes for deadlocks.  Also it\nimplements its own waitqueue.\n\nReplace this by a more regular congestion implementation that puts a cap on\nthe number of active writeback pages and uses the bdi congestion waitqueue.\n\nAlso always use an interruptible wait since it makes sense to be able to\nSIGKILL the process even for mounts without \u0027intr\u0027.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3fcfab16c5b86eaa3db3a9a31adba550c5b67141",
      "tree": "bd348fa081b8fbec2c79fbf8f173a306d70b2b2c",
      "parents": [
        "79e2de4bc53d7ca2a8eedee49e4a92479b4b530e"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Thu Oct 19 23:28:16 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 20 10:26:35 2006 -0700"
      },
      "message": "[PATCH] separate bdi congestion functions from queue congestion functions\n\nSeparate out the concept of \"queue congestion\" from \"backing-dev congestion\".\nCongestion is a backing-dev concept, not a queue concept.\n\nThe blk_* congestion functions are retained, as wrappers around the core\nbacking-dev congestion functions.\n\nThis proper layering is needed so that NFS can cleanly use the congestion\nfunctions, and so that CONFIG_BLOCK\u003dn actually links.\n\nCc: \"Thomas Maier\" \u003cbalagi@justmail.de\u003e\nCc: \"Jens Axboe\" \u003cjens.axboe@oracle.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Peter Osterlund \u003cpetero2@telia.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    }
  ]
}
