)]}'
{
  "log": [
    {
      "commit": "ed3b3d314cd2f16fac42676839854a68cab2e22b",
      "tree": "a38462cdfbaa0dce3bbd26fe7167fe7368439a47",
      "parents": [
        "11c65dccf70be9ace5dbd3906778e1a099b1fee1"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:12:41 2010 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue May 25 10:34:58 2010 -0400"
      },
      "message": "Btrfs: don\u0027t walk around with task-\u003estate !\u003d TASK_RUNNING\n\nYan Zheng noticed two places we were doing a lot of work\nwithout task-\u003estate set to TASK_RUNNING.  This sets the state\nproperly after we get ready to sleep but decide not to.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\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": "61d92c328c16419fc96dc50dd16f8b8c695409ec",
      "tree": "e9cd82eb56ff5f38f64d9f35229d15496e5d53de",
      "parents": [
        "fbf190874407f23d2891b53ffdf7d3c6be8d47ff"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Oct 02 19:11:56 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Oct 05 09:44:45 2009 -0400"
      },
      "message": "Btrfs: fix deadlock on async thread startup\n\nThe btrfs async worker threads are used for a wide variety of things,\nincluding processing bio end_io functions.  This means that when\nthe endio threads aren\u0027t running, the rest of the FS isn\u0027t\nable to do the final processing required to clear PageWriteback.\n\nThe endio threads also try to exit as they become idle and\nstart more as the work piles up.  The problem is that starting more\nthreads means kthreadd may need to allocate ram, and that allocation\nmay wait until the global number of writeback pages on the system is\nbelow a certain limit.\n\nThe result of that throttling is that end IO threads wait on\nkthreadd, who is waiting on IO to end, which will never happen.\n\nThis commit fixes the deadlock by handing off thread startup to a\ndedicated thread.  It also fixes a bug where the on-demand thread\ncreation was creating far too many threads because it didn\u0027t take into\naccount threads being started by other procs.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "6e74057c4686dc12ea767b4bdc50a63876056e1c",
      "tree": "e7c70b8e08ab9e5363be28bcbcc72348122ae6e4",
      "parents": [
        "627e421a3f35ad6b52dc58982fb6f8a97c30dcd7"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Sep 15 20:02:33 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Sep 15 20:20:17 2009 -0400"
      },
      "message": "Btrfs: Fix async thread shutdown race\n\nIt was possible for an async worker thread to be selected to\nreceive a new work item, but exit before the work item was\nactually placed into that thread\u0027s work list.\n\nThis commit fixes the race by incrementing the num_pending\ncounter earlier, and making sure to check the number of pending\nwork items before a thread exits.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "627e421a3f35ad6b52dc58982fb6f8a97c30dcd7",
      "tree": "9f1175835fe7b142b554fc66ea2367b7ec4ea1d3",
      "parents": [
        "3e99d8eb347c93a5d38081380b8c9e69b203212e"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Sep 15 20:00:36 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Sep 15 20:20:17 2009 -0400"
      },
      "message": "Btrfs: fix worker thread double spin_lock_irq\n\nThe exit-on-idle code for async worker threads was incorrectly\ncalling spin_lock_irq with interrupts already off.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "3e99d8eb347c93a5d38081380b8c9e69b203212e",
      "tree": "1fde8df76b399c12827c2e2bd989e29e83d9994f",
      "parents": [
        "83ebade34bc1a90d0c3f77b87b940f336d075fda"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Sep 15 19:57:42 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Sep 15 20:20:16 2009 -0400"
      },
      "message": "Btrfs: fix async worker startup race\n\nAfter a new worker thread starts, it is placed into the\nlist of idle threads.  But, this may race with a\ncheck for idle done by the worker thread itself, resulting\nin a double list_add operation.\n\nThis fix adds a check to make sure the idle thread addition\nis done properly.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4f878e8475a465ddbd951e06a23317303f1b5b30",
      "tree": "7e1811794d3f6eaf455a3e26afd49ba06a0db554",
      "parents": [
        "4e3f9c5042b43301d70781aee4a164a20878066b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Aug 07 09:27:38 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:04 2009 -0400"
      },
      "message": "Btrfs: reduce worker thread spin_lock_irq hold times\n\nThis changes the btrfs worker threads to batch work items\ninto a local list.  It allows us to pull work items in\nlarge chunks and significantly reduces the number of times we\nneed to take the worker thread spinlock.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4e3f9c5042b43301d70781aee4a164a20878066b",
      "tree": "b2ace00c27553ec2a10958e17d6b90ea264d5886",
      "parents": [
        "40431d6c1288793a682fc6f5e5b5c9d5cac34608"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Aug 05 16:36:45 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:31:04 2009 -0400"
      },
      "message": "Btrfs: keep irqs on more often in the worker threads\n\nThe btrfs worker thread spinlock was being used both for the\nqueueing of IO and for the processing of ordered events.\n\nThe ordered events never happen from end_io handlers, and so they\ndon\u0027t need to use the _irq version of spinlocks.  This adds a\ndedicated lock to the ordered lists so they don\u0027t have to run\nwith irqs off.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "9042846bc7ae69cc3288d85af6bad16208d93a95",
      "tree": "d46077d217d31ce5600ef870c92fcdf330922b41",
      "parents": [
        "ceab36edd3d3ad3ffd01d41d6d1e05ac1ff8357e"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Aug 04 16:56:34 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Sep 11 13:30:56 2009 -0400"
      },
      "message": "Btrfs: Allow worker threads to exit when idle\n\nThe Btrfs worker threads don\u0027t currently die off after they have\nbeen idle for a while, leading to a lot of threads sitting around\ndoing nothing for each mount.\n\nAlso, they are unable to start atomically (from end_io hanlders).\n\nThis commit reworks the worker threads so they can be started\nfrom end_io handlers (just setting a flag that asks for a thread\nto be added at a later date) and so they can exit if they\nhave been idle for a long time.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "29c5e8ce01f9dad7e24b99c21e4f836d6b0289e0",
      "tree": "ca5628ea861a4fdb875e6cc90878853ad74091f2",
      "parents": [
        "4a8c9a62d7f7f058eed4b8a6f2c890a887778093"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Wed Jul 22 16:49:00 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jul 22 16:49:00 2009 -0400"
      },
      "message": "Btrfs: convert nested spin_lock_irqsave to spin_lock\n\nIf spin_lock_irqsave is called twice in a row with the same second\nargument, the interrupt state at the point of the second call overwrites\nthe value saved by the first call.  Indeed, the second call does not need\nto save the interrupt state, so it is changed to a simple spin_lock.\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "9b627e9bf49ebfeb060dfae0435bdba06cf27cb8",
      "tree": "cbd6255b5dd72f7b17c08ac5bfab9a95819008ee",
      "parents": [
        "9427216476d4fa75103f39d4b228c47d56ba20da"
      ],
      "author": {
        "name": "Jiri Slaby",
        "email": "jirislaby@gmail.com",
        "time": "Thu Jul 02 13:50:58 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jul 02 13:50:58 2009 -0400"
      },
      "message": "Btrfs: fix use after free in btrfs_start_workers fail path\n\nworker memory is already freed on one fail path in btrfs_start_workers,\nbut is still dereferenced. Switch the dereference and kfree.\n\nSigned-off-by: Jiri Slaby \u003cjirislaby@gmail.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "fd0fb038d5a308c7faddd1701be5e70aaffec98b",
      "tree": "50b0f3cda5a957bad1090ec4d7bd4e49f43171da",
      "parents": [
        "4eedeb75e7f15ffdb12d1ad559b565e7505bdbaf"
      ],
      "author": {
        "name": "Shin Hong",
        "email": "hongshin@gmail.com",
        "time": "Wed Jun 10 20:11:29 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 10 20:11:29 2009 -0400"
      },
      "message": "Btrfs: init worker struct fields before kthread-run\n\nThis patch fixes a bug which may result race condition\nbetween btrfs_start_workers() and worker_loop().\n\nbtrfs_start_workers() executed in a parent thread writes\non workers-\u003eworker and worker_loop() in a child thread\nreads workers-\u003eworker. However, there is no synchronization\nenforcing the order of two operations.\n\nThis patch makes btrfs_start_workers() fill workers-\u003eworker\nbefore it starts a child thread with worker_loop()\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d313d7a31a752c88f7288692bd98e66d0789779b",
      "tree": "e26f332abd22d3bf5a57f09f94ad883d0f0c54c2",
      "parents": [
        "ffbd517d5a8c8e93ddd11046434fb029f3df73aa"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:50:09 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Apr 20 15:53:08 2009 -0400"
      },
      "message": "Btrfs: add a priority queue to the async thread helpers\n\nBtrfs is using WRITE_SYNC_PLUG to send down synchronous IOs with a\nhigher priority.  But, the checksumming helper threads prevent it\nfrom being fully effective.\n\nThere are two problems.  First, a big queue of pending checksumming\nwill delay the synchronous IO behind other lower priority writes.  Second,\nthe checksumming uses an ordered async work queue.  The ordering makes sure\nthat IOs are sent to the block layer in the same order they are sent\nto the checksumming threads.  Usually this gives us less seeky IO.\n\nBut, when we start mixing IO priorities, the lower priority IO can delay\nthe higher priority IO.\n\nThis patch solves both problems by adding a high priority list to the async\nhelper threads, and a new btrfs_set_work_high_prio(), which is used\nto make put a new async work item onto the higher priority list.\n\nThe ordering is still done on high priority IO, but all of the high\npriority bios are ordered separately from the low priority bios.  This\nordering is purely an IO optimization, it is not involved in data\nor metadata integrity.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2e966ed22c3c56227f8a7322d7b008945352e6ab",
      "tree": "101bb798295de6a299d7f6febd437887134f5e43",
      "parents": [
        "93dbfad7ac647d4f00354893fe93e8a55be114d5"
      ],
      "author": {
        "name": "Jim Owens",
        "email": "jowens@hp.com",
        "time": "Thu Apr 02 17:02:55 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 17:02:55 2009 -0400"
      },
      "message": "Btrfs: remove unused ftrace include\n\nSigned-off-by: jim owens \u003cjowens@hp.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "b5555f77115bfba3630fefff2d4e68140b644171",
      "tree": "5a2712105e9e5e493ebf01b9b382828d91e046b8",
      "parents": [
        "dccae99995089641fbac452ebc7f0cab18751ddb"
      ],
      "author": {
        "name": "Amit Gud",
        "email": "amitgud@gmail.com",
        "time": "Thu Apr 02 17:01:27 2009 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Apr 02 17:01:27 2009 -0400"
      },
      "message": "Btrfs: fix race in worker_loop\n\nNeed to check kthread_should_stop after schedule_timeout() before calling\nschedule(). This causes threads to sleep with potentially no one to wake them\nup causing mount(2) to hang in btrfs_stop_workers waiting for threads to stop.\n\nSigned-off-by: Amit Gud \u003cgud@ksu.edu\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "b51912c91fcf7581cc7b4550f1bb96422809d9ed",
      "tree": "3738e358e75088d300b289e013beccffe0af8e05",
      "parents": [
        "0279b4cd86685b5eea467c1b74ce94f0add2c0a3"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:23:24 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:23:24 2009 -0500"
      },
      "message": "Btrfs: async threads should try harder to find work\n\nTracing shows the delay between when an async thread goes to sleep\nand when more work is added is often very short.  This commit adds\na little bit of delay and extra checking to the code right before\nwe schedule out.\n\nIt allows more work to be added to the worker\nwithout requiring notifications from other procs.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "a68370515356a3eddbfaf7f56418b3cf85d76c2c",
      "tree": "362cfc618cc2eee50f43d91600b9e829539976c5",
      "parents": [
        "89f135d8b53bcccafd91a075366d2704ba257cf3"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:19:41 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Feb 04 09:19:41 2009 -0500"
      },
      "message": "Btrfs: Catch missed bios in the async bio submission thread\n\nThe async bio submission thread was missing some bios that were\nadded after it had decided there was no work left to do.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "7eaebe7d503c3ef240ac7b3efc5433fe647c0298",
      "tree": "6e54b7766559555d3a4e205a0524a4df02f6cf5b",
      "parents": [
        "070604040b86511cc2df0f25f98e26c5529bd928"
      ],
      "author": {
        "name": "Huang Weiyi",
        "email": "weiyi.huang@gmail.com",
        "time": "Wed Jan 21 10:49:16 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jan 21 10:49:16 2009 -0500"
      },
      "message": "Btrfs: removed unused #include \u003cversion.h\u003e\u0027s\n\nRemoved unused #include \u003cversion.h\u003e\u0027s in btrfs\n\nSigned-off-by: Huang Weiyi \u003cweiyi.huang@gmail.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "d397712bcc6a759a560fd247e6053ecae091f958",
      "tree": "9da8daebb870d8b8b1843507c4621715e23dd31a",
      "parents": [
        "1f3c79a28c8837e8572b98f6d14142d9a6133c56"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 05 21:25:51 2009 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Jan 05 21:25:51 2009 -0500"
      },
      "message": "Btrfs: Fix checkpatch.pl warnings\n\nThere were many, most are fixed now.  struct-funcs.c generates some warnings\nbut these are bogus.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "0df49b911db2b22ea808b596070b1cc65c23d148",
      "tree": "0750dd5ad6cfccff98f3c44c7ef120378cf42eb6",
      "parents": [
        "c36047d729a3fa080dd194b20b684cc9fe73e90c"
      ],
      "author": {
        "name": "yanhai zhu",
        "email": "zhu.yanhai@gmail.com",
        "time": "Wed Nov 12 14:36:58 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Nov 12 14:36:58 2008 -0500"
      },
      "message": "Btrfs: Check kthread_should_stop() before schedule() in worker_loop\n\nIn worker_loop(), the func should check whether it has been requested to stop\nbefore it decides to schedule out.\n\nOtherwise if the stop request(also the last wake_up()) sent by\nbtrfs_stop_workers() happens when worker_loop() running after the \"while\"\njudgement and before schedule(), woker_loop() will schedule away and never be\nwoken up, which will also cause btrfs_stop_workers() wait forever.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n\n"
    },
    {
      "commit": "4a69a41009c4ac691f7d9c289f5f37fabeddce46",
      "tree": "1dac90d2f8e4ad4114fb1f4c168925daf2769d28",
      "parents": [
        "537fb0671549a9a6457ce42a25ab34b29d97a256"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Nov 06 22:03:00 2008 -0500"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Nov 06 22:03:00 2008 -0500"
      },
      "message": "Btrfs: Add ordered async work queues\n\nBtrfs uses kernel threads to create async work queues for cpu intensive\noperations such as checksumming and decompression.  These work well,\nbut they make it difficult to keep IO order intact.\n\nA single writepages call from pdflush or fsync will turn into a number\nof bios, and each bio is checksummed in parallel.  Once the checksum is\ncomputed, the bio is sent down to the disk, and since we don\u0027t control\nthe order in which the parallel operations happen, they might go down to\nthe disk in almost any order.\n\nThe code deals with this somewhat by having deep work queues for a single\nkernel thread, making it very likely that a single thread will process all\nthe bios for a single inode.\n\nThis patch introduces an explicitly ordered work queue.  As work structs\nare placed into the queue they are put onto the tail of a list.  They have\nthree callbacks:\n\n-\u003efunc (cpu intensive processing here)\n-\u003eordered_func (order sensitive processing here)\n-\u003eordered_free (free the work struct, all processing is done)\n\nThe work struct has three callbacks.  The func callback does the cpu intensive\nwork, and when it completes the work struct is marked as done.\n\nEvery time a work struct completes, the list is checked to see if the head\nis marked as done.  If so the ordered_func callback is used to do the\norder sensitive processing and the ordered_free callback is used to do\nany cleanup.  Then we loop back and check the head of the list again.\n\nThis patch also changes the checksumming code to use the ordered workqueues.\nOne a 4 drive array, it increases streaming writes from 280MB/s to 350MB/s.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "75ccf47d13bfb66de7faf596bfe497b9af7aaa40",
      "tree": "e1b06bc9afec8f6b48cc2fb00c5e1e4d4dda2e0b",
      "parents": [
        "45b8c9a8b1e15bf79c2c17ec217adf96785f8011"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Sep 30 19:24:06 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Tue Sep 30 19:36:34 2008 -0400"
      },
      "message": "Btrfs: fix multi-device code to use raid policies set by mkfs\n\nWhen reading in block groups, a global mask of the available raid policies\nshould be adjusted based on the types of block groups found on disk.  This\nglobal mask is then used to decide which raid policy to use for new\nblock groups.\n\nThe recent allocator changes dropped the call that updated the global\nmask, making all the block groups allocated at run time single striped\nonto a single drive.\n\nThis also fixes the async worker threads to set any thread that uses\nthe requeue mechanism as busy.  This allows us to avoid blocking\non get_request_wait for the async bio submission threads.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d352ac68148b69937d39ca5d48bcc4478e118dbf",
      "tree": "7951dd7311999d9e77766acdc7f8e93de97874d8",
      "parents": [
        "9a5e1ea1e1e539e244a54afffc330fc368376ab9"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 29 15:18:18 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Mon Sep 29 15:18:18 2008 -0400"
      },
      "message": "Btrfs: add and improve comments\n\nThis improves the comments at the top of many functions.  It didn\u0027t\ndive into the guts of functions because I was trying to\navoid merging problems with the new allocator and back reference work.\n\nextent-tree.c and volumes.c were both skipped, and there is definitely\nmore work todo in cleaning and commenting the code.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "2b1f55b0f0d0d1a66470ef4ea2696cd5dd741a12",
      "tree": "980019fac9b0891e682bc7d9a8c8a58284b467fc",
      "parents": [
        "9b49c9b9f93e148815f2544d0c91f43b6d72eea9"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Sep 24 11:48:04 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 15:41:59 2008 -0400"
      },
      "message": "Remove Btrfs compat code for older kernels\n\nBtrfs had compatibility code for kernels back to 2.6.18.  These have\nbeen removed, and will be maintained in a separate backport\ngit tree from now on.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "53863232ef961778aa414b700ed88a48e8e871e6",
      "tree": "05a74ac264a5fb4f6b8824771f5820ca5907afe5",
      "parents": [
        "4854ddd0ed0a687fc2d7c45a529c406232e31e7b"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Aug 15 15:34:18 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:06 2008 -0400"
      },
      "message": "Btrfs: Lower contention on the csum mutex\n\nThis takes the csum mutex deeper in the call chain and releases it\nmore often.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "4854ddd0ed0a687fc2d7c45a529c406232e31e7b",
      "tree": "6de9774969875cc30c21c96e145294727c56e73b",
      "parents": [
        "5443be45f5cb57d02fd895a0bcaf7e7d9890b1df"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Aug 15 15:34:17 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:06 2008 -0400"
      },
      "message": "Btrfs: Wait for kernel threads to make progress during async submission\n\nBefore this change, btrfs would use a bdi congestion function to make\nsure there weren\u0027t too many pending async checksum work items.\n\nThis change makes the process creating async work items wait instead,\nleading to fewer congestion returns from the bdi.  This improves\npdflush background_writeout scanning.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "5443be45f5cb57d02fd895a0bcaf7e7d9890b1df",
      "tree": "88666dedb8b6e3fa0f693d76a11a05cba29ec13e",
      "parents": [
        "777e6bd706ee40897545463871de5b456fbc46dc"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Fri Aug 15 15:34:16 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:06 2008 -0400"
      },
      "message": "Btrfs: Give all the worker threads descriptive names\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "61b4944018449003ac5f9757f4d125dce519cf51",
      "tree": "553855996c641a945344db870b6dfd0d2d02086e",
      "parents": [
        "37d1aeee3990385e9bb436c50c2f7e120a668df6"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Jul 31 15:42:53 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:05 2008 -0400"
      },
      "message": "Btrfs: Fix streaming read performance with checksumming on\n\nLarge streaming reads make for large bios, which means each entry on the\nlist async work queues represents a large amount of data.  IO\ncongestion throttling on the device was kicking in before the async\nworker threads decided a single thread was busy and needed some help.\n\nThe end result was that a streaming read would result in a single CPU\nrunning at 100% instead of balancing the work off to other CPUs.\n\nThis patch also changes the pre-IO checksum lookup done by reads to\nwork on a per-bio basis instead of a per-page.  This results in many\nextra btree lookups on large streaming reads.  Doing the checksum lookup\nright before bio submit allows us to reuse searches while processing\nadjacent offsets.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "3bf10418675cb424724b5cb9d7725b234defe1fd",
      "tree": "da427247ddd1dec91b4c617757bddd926abca997",
      "parents": [
        "ab78c84de1ce4db1b2a2cef361625ad80abbab3f"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Wed Jul 30 09:24:37 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:05 2008 -0400"
      },
      "message": "Btrfs: async-thread: fix possible memory leak\n\nWhen kthread_run() returns failure, this worker hasn\u0027t been\nadded to the list, so btrfs_stop_workers() won\u0027t free it.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "35d8ba66294ff2a53c17337a1aa1ff6739492f41",
      "tree": "40297c7917bb0425e76030e54418a934b1225299",
      "parents": [
        "d05e5a4dad985acc938e62d9752c813647dedd9d"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 11 20:21:24 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:03 2008 -0400"
      },
      "message": "Btrfs: Worker thread optimizations\n\nThis changes the worker thread pool to maintain a list of idle threads,\navoiding a complex search for a good thread to wake up.\n\nThreads have two states:\n\nidle - we try to reuse the last thread used in hopes of improving the batching\nratios\n\nbusy - each time a new work item is added to a busy task, the task is\nrotated to the end of the line.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "d05e5a4dad985acc938e62d9752c813647dedd9d",
      "tree": "05d7f372b6b7a63df97b177d5b380a63d31af87a",
      "parents": [
        "15ada040d7cd68d7853938a92b116292cc16a2f3"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 11 17:09:48 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:03 2008 -0400"
      },
      "message": "Btrfs: Add backport for the kthread work on kernels older than 2.6.20\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    },
    {
      "commit": "8b7128429235d9bd72cfd5ed20c77c4f3118f744",
      "tree": "982eda13094af1ccd46e8c3853559a0eb6e298f6",
      "parents": [
        "43e570b08a6c6b1d75f218566a6240542a386fd9"
      ],
      "author": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Wed Jun 11 16:50:36 2008 -0400"
      },
      "committer": {
        "name": "Chris Mason",
        "email": "chris.mason@oracle.com",
        "time": "Thu Sep 25 11:04:03 2008 -0400"
      },
      "message": "Btrfs: Add async worker threads for pre and post IO checksumming\n\nBtrfs has been using workqueues to spread the checksumming load across\nother CPUs in the system.  But, workqueues only schedule work on the\nsame CPU that queued the work, giving them a limited benefit for systems with\nhigher CPU counts.\n\nThis code adds a generic facility to schedule work with pools of kthreads,\nand changes the bio submission code to queue bios up.  The queueing is\nimportant to make sure large numbers of procs on the system don\u0027t\nturn streaming workloads into random workloads by sending IO down\nconcurrently.\n\nThe end result of all of this is much higher performance (and CPU usage) when\ndoing checksumming on large machines.  Two worker pools are created,\none for writes and one for endio processing.  The two could deadlock if\nwe tried to service both from a single pool.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n"
    }
  ]
}
