)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "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": "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": "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": "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"
    }
  ]
}
