)]}'
{
  "log": [
    {
      "commit": "a5e0d73163a848060ac0c2c054274e84a654986e",
      "tree": "708ab200af3653090d3cad95228fae21aa6c52cd",
      "parents": [
        "6dbe51c251a327e012439c4772097a13df43c5b8",
        "f3378b48705154b9089affb2d2e939622aea68f1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 05 17:22:08 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 05 17:22:08 2013 -0800"
      },
      "message": "Merge tag \u0027md-3.9\u0027 of git://neil.brown.name/md\n\nPull md updates from NeilBrown:\n \"Mostly little bugfixes.\n\n  Only \"feature\" is a new RAID10 layout which slightly improves the\n  number of sets of devices that can concurrently fail, without data\n  loss.\"\n\n* tag \u0027md-3.9\u0027 of git://neil.brown.name/md:\n  md: expedite metadata update when switching  read-auto -\u003e active\n  md: remove CONFIG_MULTICORE_RAID456\n  md/raid1,raid10: fix deadlock with freeze_array()\n  md/raid0: improve error message when converting RAID4-with-spares to RAID0\n  md: raid0: fix error return from create_stripe_zones.\n  md: fix two bugs when attempting to resize RAID0 array.\n  DM RAID: Add support for MD\u0027s RAID10 \"far\" and \"offset\" algorithms\n  MD RAID10: Improve redundancy for \u0027far\u0027 and \u0027offset\u0027 algorithms (part 2)\n  MD RAID10: Improve redundancy for \u0027far\u0027 and \u0027offset\u0027 algorithms (part 1)\n  MD RAID10: Minor non-functional code changes\n  md: raid1,10: Handle REQ_WRITE_SAME flag in write bios\n  md: protect against crash upon fsync on ro array\n"
    },
    {
      "commit": "ee89f81252179dcbf6cd65bd48299f5e52292d88",
      "tree": "805846cd12821f84cfe619d44c9e3e36e0b0f9e6",
      "parents": [
        "21f3b24da9328415792efc780f50b9f434c12465",
        "de33127d8d3f1d570aad8c2223cd81b206636bc1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 28 12:52:24 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 28 12:52:24 2013 -0800"
      },
      "message": "Merge branch \u0027for-3.9/core\u0027 of git://git.kernel.dk/linux-block\n\nPull block IO core bits from Jens Axboe:\n \"Below are the core block IO bits for 3.9.  It was delayed a few days\n  since my workstation kept crashing every 2-8h after pulling it into\n  current -git, but turns out it is a bug in the new pstate code (divide\n  by zero, will report separately).  In any case, it contains:\n\n   - The big cfq/blkcg update from Tejun and and Vivek.\n\n   - Additional block and writeback tracepoints from Tejun.\n\n   - Improvement of the should sort (based on queues) logic in the plug\n     flushing.\n\n   - _io() variants of the wait_for_completion() interface, using\n     io_schedule() instead of schedule() to contribute to io wait\n     properly.\n\n   - Various little fixes.\n\n  You\u0027ll get two trivial merge conflicts, which should be easy enough to\n  fix up\"\n\nFix up the trivial conflicts due to hlist traversal cleanups (commit\nb67bfe0d42ca: \"hlist: drop the node parameter from iterators\").\n\n* \u0027for-3.9/core\u0027 of git://git.kernel.dk/linux-block: (39 commits)\n  block: remove redundant check to bd_openers()\n  block: use i_size_write() in bd_set_size()\n  cfq: fix lock imbalance with failed allocations\n  drivers/block/swim3.c: fix null pointer dereference\n  block: don\u0027t select PERCPU_RWSEM\n  block: account iowait time when waiting for completion of IO request\n  sched: add wait_for_completion_io[_timeout]\n  writeback: add more tracepoints\n  block: add block_{touch|dirty}_buffer tracepoint\n  buffer: make touch_buffer() an exported function\n  block: add @req to bio_{front|back}_merge tracepoints\n  block: add missing block_bio_complete() tracepoint\n  block: Remove should_sort judgement when flush blk_plug\n  block,elevator: use new hashtable implementation\n  cfq-iosched: add hierarchical cfq_group statistics\n  cfq-iosched: collect stats from dead cfqgs\n  cfq-iosched: separate out cfqg_stats_reset() from cfq_pd_reset_stats()\n  blkcg: make blkcg_print_blkgs() grab q locks instead of blkcg lock\n  block: RCU free request_queue\n  blkcg: implement blkg_[rw]stat_recursive_sum() and blkg_[rw]stat_merge()\n  ...\n"
    },
    {
      "commit": "b67bfe0d42cac56c512dd5da4b1b347a23f4b70a",
      "tree": "3d465aea12b97683f26ffa38eba8744469de9997",
      "parents": [
        "1e142b29e210b5dfb2deeb6ce2210b60af16d2a6"
      ],
      "author": {
        "name": "Sasha Levin",
        "email": "sasha.levin@oracle.com",
        "time": "Wed Feb 27 17:06:00 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 27 19:10:24 2013 -0800"
      },
      "message": "hlist: drop the node parameter from iterators\n\nI\u0027m not sure why, but the hlist for each entry iterators were conceived\n\n        list_for_each_entry(pos, head, member)\n\nThe hlist ones were greedy and wanted an extra parameter:\n\n        hlist_for_each_entry(tpos, pos, head, member)\n\nWhy did they need an extra pos parameter? I\u0027m not quite sure. Not only\nthey don\u0027t really need it, it also prevents the iterator from looking\nexactly like the list iterator, which is unfortunate.\n\nBesides the semantic patch, there was some manual work required:\n\n - Fix up the actual hlist iterators in linux/list.h\n - Fix up the declaration of other iterators based on the hlist ones.\n - A very small amount of places were using the \u0027node\u0027 parameter, this\n was modified to use \u0027obj-\u003emember\u0027 instead.\n - Coccinelle didn\u0027t handle the hlist_for_each_entry_safe iterator\n properly, so those had to be fixed up manually.\n\nThe semantic patch which is mostly the work of Peter Senna Tschudin is here:\n\n@@\niterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;\n\ntype T;\nexpression a,c,d,e;\nidentifier b;\nstatement S;\n@@\n\n-T b;\n    \u003c+... when !\u003d b\n(\nhlist_for_each_entry(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_continue(a,\n- b,\nc) S\n|\nhlist_for_each_entry_from(a,\n- b,\nc) S\n|\nhlist_for_each_entry_rcu(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_rcu_bh(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_continue_rcu_bh(a,\n- b,\nc) S\n|\nfor_each_busy_worker(a, c,\n- b,\nd) S\n|\nax25_uid_for_each(a,\n- b,\nc) S\n|\nax25_for_each(a,\n- b,\nc) S\n|\ninet_bind_bucket_for_each(a,\n- b,\nc) S\n|\nsctp_for_each_hentry(a,\n- b,\nc) S\n|\nsk_for_each(a,\n- b,\nc) S\n|\nsk_for_each_rcu(a,\n- b,\nc) S\n|\nsk_for_each_from\n-(a, b)\n+(a)\nS\n+ sk_for_each_from(a) S\n|\nsk_for_each_safe(a,\n- b,\nc, d) S\n|\nsk_for_each_bound(a,\n- b,\nc) S\n|\nhlist_for_each_entry_safe(a,\n- b,\nc, d, e) S\n|\nhlist_for_each_entry_continue_rcu(a,\n- b,\nc) S\n|\nnr_neigh_for_each(a,\n- b,\nc) S\n|\nnr_neigh_for_each_safe(a,\n- b,\nc, d) S\n|\nnr_node_for_each(a,\n- b,\nc) S\n|\nnr_node_for_each_safe(a,\n- b,\nc, d) S\n|\n- for_each_gfn_sp(a, c, d, b) S\n+ for_each_gfn_sp(a, c, d) S\n|\n- for_each_gfn_indirect_valid_sp(a, c, d, b) S\n+ for_each_gfn_indirect_valid_sp(a, c, d) S\n|\nfor_each_host(a,\n- b,\nc) S\n|\nfor_each_host_safe(a,\n- b,\nc, d) S\n|\nfor_each_mesh_entry(a,\n- b,\nc, d) S\n)\n    ...+\u003e\n\n[akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]\n[akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]\n[akpm@linux-foundation.org: checkpatch fixes]\n[akpm@linux-foundation.org: fix warnings]\n[akpm@linux-foudnation.org: redo intrusive kvm changes]\nTested-by: Peter Senna Tschudin \u003cpeter.senna@gmail.com\u003e\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Sasha Levin \u003csasha.levin@oracle.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Gleb Natapov \u003cgleb@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "51acbcec6c42b24482bac18e42befc822524535d",
      "tree": "8677d949a7fb1d398b5ace9c5554e9e14a0c00d2",
      "parents": [
        "ee0b0244030434cdda26777bfb98962447e080cd"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Feb 28 09:08:34 2013 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Feb 28 09:08:34 2013 +1100"
      },
      "message": "md: remove CONFIG_MULTICORE_RAID456\n\nThis doesn\u0027t seem to actually help and we have an alternate\nmulti-threading approach waiting in the wings, so just get\nrid of this config option and associated code.\n\nAs a bonus, we remove one use of CONFIG_EXPERIMENTAL\n\nCc: Dan Williams \u003cdjbw@fb.com\u003e\nCc: Kees Cook \u003ckeescook@chromium.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3a366e614d0837d9fc23f78cdb1a1186ebc3387f",
      "tree": "5be6ec716687234ac1e6202db62c84ee1d2246be",
      "parents": [
        "ac9a19745196388ae5d828c0be7a1d6e472101f3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jan 11 13:06:33 2013 -0800"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Jan 14 15:00:36 2013 +0100"
      },
      "message": "block: add missing block_bio_complete() tracepoint\n\nbio completion didn\u0027t kick block_bio_complete TP.  Only dm was\nexplicitly triggering the TP on IO completion.  This makes\nblock_bio_complete TP useless for tracers which want to know about\nbios, and all other bio based drivers skip generating blktrace\ncompletion events.\n\nThis patch makes all bio completions via bio_endio() generate\nblock_bio_complete TP.\n\n* Explicit trace_block_bio_complete() invocation removed from dm and\n  the trace point is unexported.\n\n* @rq dropped from trace_block_bio_complete().  bios may fly around\n  w/o queue associated.  Verifying and accessing the assocaited queue\n  belongs to TP probes.\n\n* blktrace now gets both request and bio completions.  Make it ignore\n  bio completions if request completion path is happening.\n\nThis makes all bio based drivers generate blktrace completion events\nproperly and makes the block_bio_complete TP actually useful.\n\nv2: With this change, block_bio_complete TP could be invoked on sg\n    commands which have bio\u0027s with %NULL bi_bdev.  Update TP\n    assignment code to check whether bio-\u003ebi_bdev is %NULL before\n    dereferencing.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nOriginal-patch-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Alasdair Kergon \u003cagk@redhat.com\u003e\nCc: dm-devel@redhat.com\nCc: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "ea88eeac0cb8328014b53d80ca631e8dc0dc18dc",
      "tree": "de605c1d0e7ab1e342eedad47c56061b65a6b790",
      "parents": [
        "848b81415c42ff3dc9a4204749087b015c37ef66",
        "a9add5d92b64ea57fb4c3b557c3891cdeb15fa0c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 18 09:32:44 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 18 09:32:44 2012 -0800"
      },
      "message": "Merge tag \u0027md-3.8\u0027 of git://neil.brown.name/md\n\nPull md update from Neil Brown:\n \"Mostly just little fixes.  Probably biggest part is AVX accelerated\n  RAID6 calculations.\"\n\n* tag \u0027md-3.8\u0027 of git://neil.brown.name/md:\n  md/raid5: add blktrace calls\n  md/raid5: use async_tx_quiesce() instead of open-coding it.\n  md: Use -\u003ecurr_resync as last completed request when cleanly aborting resync.\n  lib/raid6: build proper files on corresponding arch\n  lib/raid6: Add AVX2 optimized gen_syndrome functions\n  lib/raid6: Add AVX2 optimized recovery functions\n  md: Update checkpoint of resync/recovery based on time.\n  md:Add place to update -\u003erecovery_cp.\n  md.c: re-indent various \u0027switch\u0027 statements.\n  md: close race between removing and adding a device.\n  md: removed unused variable in calc_sb_1_csm.\n"
    },
    {
      "commit": "a9add5d92b64ea57fb4c3b557c3891cdeb15fa0c",
      "tree": "d025f0fbba2389550acadc4489c3c9c59cd12d97",
      "parents": [
        "749586b7d34df910118bff2c248d08877d772e81"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 31 11:59:09 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Dec 18 10:22:21 2012 +1100"
      },
      "message": "md/raid5: add blktrace calls\n\nThis makes it easier to trace what raid5 is doing.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9228ff90387e276ad67b10c0eb525c9d6a57d5e9",
      "tree": "e7c87b68daba7cf7ca4c342c6b52165bd78fbe16",
      "parents": [
        "9360b53661a2c7754517b2925580055bacc8ec38",
        "d2ec180c23a5a1bfe34d8638b0342a47c00cf70f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 13:39:11 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 13:39:11 2012 -0800"
      },
      "message": "Merge branch \u0027for-3.8/drivers\u0027 of git://git.kernel.dk/linux-block\n\nPull block driver update from Jens Axboe:\n \"Now that the core bits are in, here are the driver bits for 3.8.  The\n  branch contains:\n\n   - A huge pile of drbd bits that were dumped from the 3.7 merge\n     window.  Following that, it was both made perfectly clear that\n     there is going to be no more over-the-wall pulls and how the\n     situation on individual pulls can be improved.\n\n   - A few cleanups from Akinobu Mita for drbd and cciss.\n\n   - Queue improvement for loop from Lukas.  This grew into adding a\n     generic interface for waiting/checking an even with a specific\n     lock, allowing this to be pulled out of md and now loop and drbd is\n     also using it.\n\n   - A few fixes for xen back/front block driver from Roger Pau Monne.\n\n   - Partition improvements from Stephen Warren, allowing partiion UUID\n     to be used as an identifier.\"\n\n* \u0027for-3.8/drivers\u0027 of git://git.kernel.dk/linux-block: (609 commits)\n  drbd: update Kconfig to match current dependencies\n  drbd: Fix drbdsetup wait-connect, wait-sync etc... commands\n  drbd: close race between drbd_set_role and drbd_connect\n  drbd: respect no-md-barriers setting also when changed online via disk-options\n  drbd: Remove obsolete check\n  drbd: fixup after wait_even_lock_irq() addition to generic code\n  loop: Limit the number of requests in the bio list\n  wait: add wait_event_lock_irq() interface\n  xen-blkfront: free allocated page\n  xen-blkback: move free persistent grants code\n  block: partition: msdos: provide UUIDs for partitions\n  init: reduce PARTUUID min length to 1 from 36\n  block: store partition_meta_info.uuid as a string\n  cciss: use check_signature()\n  cciss: cleanup bitops usage\n  drbd: use copy_highpage\n  drbd: if the replication link breaks during handshake, keep retrying\n  drbd: check return of kmalloc in receive_uuids\n  drbd: Broadcast sync progress no more often than once per second\n  drbd: don\u0027t try to clear bits once the disk has failed\n  ...\n"
    },
    {
      "commit": "a2013a13e68354e0c8f3696b69701803e13fb737",
      "tree": "a7e1da6bfad1aa2afd83f401874d606269ce90b4",
      "parents": [
        "dadfab4873256d2145640c0ce468fcbfb48977fe",
        "106f9d9337f65bd428c0c79f650e3489e458d771"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 13 12:00:02 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 13 12:00:02 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\nPull trivial branch from Jiri Kosina:\n \"Usual stuff -- comment/printk typo fixes, documentation updates, dead\n  code elimination.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (39 commits)\n  HOWTO: fix double words typo\n  x86 mtrr: fix comment typo in mtrr_bp_init\n  propagate name change to comments in kernel source\n  doc: Update the name of profiling based on sysfs\n  treewide: Fix typos in various drivers\n  treewide: Fix typos in various Kconfig\n  wireless: mwifiex: Fix typo in wireless/mwifiex driver\n  messages: i2o: Fix typo in messages/i2o\n  scripts/kernel-doc: check that non-void fcts describe their return value\n  Kernel-doc: Convention: Use a \"Return\" section to describe return values\n  radeon: Fix typo and copy/paste error in comments\n  doc: Remove unnecessary declarations from Documentation/accounting/getdelays.c\n  various: Fix spelling of \"asynchronous\" in comments.\n  Fix misspellings of \"whether\" in comments.\n  eisa: Fix spelling of \"asynchronous\".\n  various: Fix spelling of \"registered\" in comments.\n  doc: fix quite a few typos within Documentation\n  target: iscsi: fix comment typos in target/iscsi drivers\n  treewide: fix typo of \"suport\" in various comments and Kconfig\n  treewide: fix typo of \"suppport\" in various comments\n  ...\n"
    },
    {
      "commit": "749586b7d34df910118bff2c248d08877d772e81",
      "tree": "2785d1a7601ff4d717545b43ab60c32b45d683ba",
      "parents": [
        "0a19caabf01ac138bf3668786939e50ea4d9c8ac"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 20 14:11:15 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 13 19:52:32 2012 +1100"
      },
      "message": "md/raid5: use async_tx_quiesce() instead of open-coding it.\n\nhandle_stripe_expansion contains:\n\n        if (tx) {\n                async_tx_ack(tx);\n                dma_wait_for_async_tx(tx);\n        }\n\nwhich is very similar to the body of async_tx_quiesce(),\nexcept that the later handles an error from dma_wait_for_async_tx()\n(admittedly by panicing, but that decision belongs in the dma\ncode, not the md code).\n\nSo just us async_tx_quiesce().\n\nAcked-by: Dan Williams \u003cdjbw@fb.com\u003e\nReported-by: Bartlomiej Zolnierkiewicz \u003cb.zolnierkie@samsung.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n\n"
    },
    {
      "commit": "eed8c02e680c04cd737e0a9cef74e68d8eb0cefa",
      "tree": "8bd2bd10b0c02bb8a579ca3fd4f1482e5335c747",
      "parents": [
        "d33b98fc82b0908e91fb05ae081acaed7323f9d2"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Fri Nov 30 11:42:40 2012 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Fri Nov 30 11:47:57 2012 +0100"
      },
      "message": "wait: add wait_event_lock_irq() interface\n\nNew wait_event{_interruptible}_lock_irq{_cmd} macros added. This commit\nmoves the private wait_event_lock_irq() macro from MD to regular wait\nincludes, introduces new macro wait_event_lock_irq_cmd() instead of using\nthe old method with omitting cmd parameter which is ugly and makes a use\nof new macros in the MD. It also introduces the _interruptible_ variant.\n\nThe use of new interface is when one have a special lock to protect data\nstructures used in the condition, or one also needs to invoke \"cmd\"\nbefore putting it to sleep.\n\nAll new macros are expected to be called with the lock taken. The lock\nis released before sleep and is reacquired afterwards. We will leave the\nmacro with the lock held.\n\nNote to DM: IMO this should also fix theoretical race on waitqueue while\nusing simultaneously wait_event_lock_irq() and wait_event() because of\nlack of locking around current state setting and wait queue removal.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "ca64cae96037de16e4af92678814f5d4bf0c1c65",
      "tree": "b789332f018682bbab38981d3bd95b8a0129f5e9",
      "parents": [
        "ef5b7c69b7a1b8b8744a6168b6ff02900f81b6ca"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Nov 21 16:33:40 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 22 09:14:13 2012 +1100"
      },
      "message": "md/raid5: Make sure we clear R5_Discard when discard is finished.\n\ncommit 9e44476851e91c86c98eb92b9bc27fb801f89072\n    MD: raid5 avoid unnecessary zero page for trim\n\nchange raid5 to clear R5_Discard when the complete request is\nhandled rather than when submitting the per-device discard request.\nHowever it did not clear R5_Discard for the parity device.\n\nThis means that if the stripe_head was reused before it expired from\nthe cache, the setting would be wrong and a hang would result.\n\nAlso if the R5_Uptodate bit happens to be set, R5_Discard again\nwon\u0027t be cleared.  But R5_Uptodate really should be clear at this point.\n\nSo make sure R5_Discard is cleared in all cases, and clear\nR5_Uptodate when a \u0027discard\u0027 completes.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ef5b7c69b7a1b8b8744a6168b6ff02900f81b6ca",
      "tree": "e1be4e404f7a60002ed447cf017f90c3e23b4565",
      "parents": [
        "4ac6875eeb97a49bad7bc8d56b5ec935904fc6e7"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 22 09:13:36 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 22 09:14:09 2012 +1100"
      },
      "message": "md/raid5: move resolving of reconstruct_state earlier in\nstripe_handle.\n\nThe chunk of code in stripe_handle which responds to a\n*_result value in reconstruct_state is really the completion\nof some processing that happened outside of handle_stripe\n(possibly asynchronously) and so should be one of the first\nthings done in handle_stripe().\n\nAfter the next patch it will be important that it happens before\nhandle_stripe_clean_event(), as that will clear some dev-\u003eflags\nbit that this code tests.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4ac6875eeb97a49bad7bc8d56b5ec935904fc6e7",
      "tree": "3443bf90a75f43f118487bcb822ff5e511ee3e3b",
      "parents": [
        "5eff3c439d3478ba9e8ba5f8c0aaf6e6fadb6e58"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Nov 19 13:11:26 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 20 19:42:56 2012 +1100"
      },
      "message": "md/raid5: round discard alignment up to power of 2.\n\nblkdev_issue_discard currently assumes that the granularity\nis a power of 2.  So in raid5, round the chosen number up to\navoid embarrassment.\n\nCc: Shaohua Li \u003cshli@kernel.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "83f0d77a7f336130a0ae1290d6bcfa606abaad66",
      "tree": "96a9f3396eb7737a195ce0a14025c96f394b71af",
      "parents": [
        "54d00f6069d921bfe83344cb94e2dd7cb54531ef"
      ],
      "author": {
        "name": "Masanari Iida",
        "email": "standby24x7@gmail.com",
        "time": "Tue Oct 30 00:18:08 2012 +0900"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Oct 29 22:57:50 2012 +0100"
      },
      "message": "md: Fix typo in drivers/md\n\nCorrect spelling typo in drivers/md.\n\nSigned-off-by: Masanari Iida \u003cstandby24x7@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "9db908806b85c1430150fbafe269a7b21b07d15d",
      "tree": "3911759c93e0be26b6771e1a92b75612b206ffa5",
      "parents": [
        "4d7127dace8cf4b05eb7c8c8531fc204fbb195f4",
        "72f36d5972a166197036c1281963f6863c429bf2"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 13 13:22:01 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 13 13:22:01 2012 -0700"
      },
      "message": "Merge tag \u0027md-3.7\u0027 of git://neil.brown.name/md\n\nPull md updates from NeilBrown:\n - \"discard\" support, some dm-raid improvements and other assorted bits\n   and pieces.\n\n* tag \u0027md-3.7\u0027 of git://neil.brown.name/md: (29 commits)\n  md: refine reporting of resync/reshape delays.\n  md/raid5: be careful not to resize_stripes too big.\n  md: make sure manual changes to recovery checkpoint are saved.\n  md/raid10: use correct limit variable\n  md: writing to sync_action should clear the read-auto state.\n  Subject: [PATCH] md:change resync_mismatches to atomic64_t to avoid races\n  md/raid5: make sure to_read and to_write never go negative.\n  md: When RAID5 is dirty, force reconstruct-write instead of read-modify-write.\n  md/raid5: protect debug message against NULL derefernce.\n  md/raid5: add some missing locking in handle_failed_stripe.\n  MD: raid5 avoid unnecessary zero page for trim\n  MD: raid5 trim support\n  md/bitmap:Don\u0027t use IS_ERR to judge alloc_page().\n  md/raid1: Don\u0027t release reference to device while handling read error.\n  raid: replace list_for_each_continue_rcu with new interface\n  add further __init annotations to crypto/xor.c\n  DM RAID: Fix for \"sync\" directive ineffectiveness\n  DM RAID: Fix comparison of index and quantity for \"rebuild\" parameter\n  DM RAID: Add rebuild capability for RAID10\n  DM RAID: Move \u0027rebuild\u0027 checking code to its own function\n  ...\n"
    },
    {
      "commit": "e56108d65f8705170d238858616728359542aebb",
      "tree": "ebb300a8d901cdad3c160575a72e813dc5709728",
      "parents": [
        "db07d85ef6395d4768c6cdceeb2ea4878bd2a3f4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 14:24:13 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 14:24:13 2012 +1100"
      },
      "message": "md/raid5: be careful not to resize_stripes too big.\n\nWhen a RAID5 is reshaping, conf-\u003eraid_disks is increased\nbefore mddev-\u003edelta_disks becomes zero.\nThis can result in check_reshape calling resize_stripes with a\nnumber that is too large.  This particularly happens\nwhen md_check_recovery calls -\u003echeck_reshape().\n\nIf we use -\u003eprevious_raid_disks, we don\u0027t risk this.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7f7583d420231b9d09897afd57a957011b606a5b",
      "tree": "aa45d88b926bfc8e22f841b9ea83d338afa4c3ae",
      "parents": [
        "1ed850f356a0a422013846b5291acff08815008b"
      ],
      "author": {
        "name": "Jianpeng Ma",
        "email": "majianpeng@gmail.com",
        "time": "Thu Oct 11 14:17:59 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 14:17:59 2012 +1100"
      },
      "message": "Subject: [PATCH] md:change resync_mismatches to atomic64_t to avoid races\n\nNow that multiple threads can handle stripes, it is safer to\nuse an atomic64_t for resync_mismatches, to avoid update races.\n\nSigned-off-by: Jianpeng Ma \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1ed850f356a0a422013846b5291acff08815008b",
      "tree": "9dd66a6b204a385574b7a885b6415e58f26a6780",
      "parents": [
        "a7854487cd7128a30a7f4f5259de9f67d5efb95f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:50:13 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:50:13 2012 +1100"
      },
      "message": "md/raid5: make sure to_read and to_write never go negative.\n\nto_read and to_write are part of the result of analysing\na stripe before handling it.\nTheir use is to avoid some loops and tests if the values are\nknown to be zero.  Thus it is not a problem if they are a\nlittle bit larger than they should be.\n\nSo decrementing them in handle_failed_stripe serves little value, and\ndue to races it could cause some loops to be skipped incorrectly.\n\nSo remove those decrements.\n\nReported-by: \"Jianpeng Ma\" \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a7854487cd7128a30a7f4f5259de9f67d5efb95f",
      "tree": "8eaa70d6fec12a94c75ee023cbf4170789665d5f",
      "parents": [
        "b97390aec4756373168ad2976e1f117b610513ea"
      ],
      "author": {
        "name": "Alexander Lyakas",
        "email": "alex.bolshoy@gmail.com",
        "time": "Thu Oct 11 13:50:12 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:50:12 2012 +1100"
      },
      "message": "md: When RAID5 is dirty, force reconstruct-write instead of read-modify-write.\n\nSigned-off-by: Alex Lyakas \u003calex@zadarastorage.com\u003e\nSuggested-by: Yair Hershko \u003cyair@zadarastorage.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b97390aec4756373168ad2976e1f117b610513ea",
      "tree": "bf800dcf15dd08774d2da161d6317294727d8e2c",
      "parents": [
        "143c4d0573caebe0ae017097614349697e2280eb"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:50:12 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:50:12 2012 +1100"
      },
      "message": "md/raid5: protect debug message against NULL derefernce.\n\nThe pr_debug in add_stripe_bio could race with something\nchanging *bip, so it is best to hold the lock until\nafter the pr_debug.\n\nReported-by: \"Jianpeng Ma\" \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "143c4d0573caebe0ae017097614349697e2280eb",
      "tree": "b5a68ce2a375a8e2617d2f4099b1701b521ddcc8",
      "parents": [
        "9e44476851e91c86c98eb92b9bc27fb801f89072"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:50:12 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:50:12 2012 +1100"
      },
      "message": "md/raid5: add some missing locking in handle_failed_stripe.\n\nWe really should hold the stripe_lock while accessing\n\u0027toread\u0027 else we could race with add_stripe_bio and corrupt\na list.\n\nReported-by: \"Jianpeng Ma\" \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9e44476851e91c86c98eb92b9bc27fb801f89072",
      "tree": "c681fe9b8261f390d60fbbcce060fe6ed958c836",
      "parents": [
        "620125f2bf8ff0c4969b79653b54d7bcc9d40637"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Thu Oct 11 13:49:49 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:49:49 2012 +1100"
      },
      "message": "MD: raid5 avoid unnecessary zero page for trim\n\nWe want to avoid zero discarded dev page, because it\u0027s useless for discard.\nBut if we don\u0027t zero it, another read/write hit such page in the cache and will\nget inconsistent data.\n\nTo avoid zero the page, we don\u0027t set R5_UPTODATE flag after construction is\ndone. In this way, discard write request is still issued and finished, but read\nwill not hit the page. If the stripe gets accessed soon, we need reread the\nstripe, but since the chance is low, the reread isn\u0027t a big deal.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "620125f2bf8ff0c4969b79653b54d7bcc9d40637",
      "tree": "373257b7e9a236e66bc3ad99cd1d158e7430014e",
      "parents": [
        "582e2e056a5c3410174c23f5134e6b00e0db9101"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Thu Oct 11 13:49:05 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:49:05 2012 +1100"
      },
      "message": "MD: raid5 trim support\n\n\nDiscard for raid4/5/6 has limitation. If discard request size is\nsmall, we do discard for one disk, but we need calculate parity and\nwrite parity disk.  To correctly calculate parity, zero_after_discard\nmust be guaranteed. Even it\u0027s true, we need do discard for one disk\nbut write another disks, which makes the parity disks wear out\nfast. This doesn\u0027t make sense. So an efficient discard for raid4/5/6\nshould discard all data disks and parity disks, which requires the\nwrite pattern to be (A, A+chunk_size, A+chunk_size*2...). If A\u0027s size\nis smaller than chunk_size, such pattern is almost impossible in\npractice. So in this patch, I only handle the case that A\u0027s size\nequals to chunk_size. That is discard request should be aligned to\nstripe size and its size is multiple of stripe size.\n\nSince we can only handle request with specific alignment and size (or\npart of the request fitting stripes), we can\u0027t guarantee\nzero_after_discard even zero_after_discard is true in low level\ndrives.\n\nThe block layer doesn\u0027t send down correctly aligned requests even\ncorrect discard alignment is set, so I must filter out.\n\nFor raid4/5/6 parity calculation, if data is 0, parity is 0. So if\nzero_after_discard is true for all disks, data is consistent after\ndiscard.  Otherwise, data might be lost. Let\u0027s consider a scenario:\ndiscard a stripe, write data to one disk and write parity disk. The\nstripe could be still inconsistent till then depending on using data\nfrom other data disks or parity disks to calculate new parity. If the\ndisk is broken, we can\u0027t restore it. So in this patch, we only enable\ndiscard support if all disks have zero_after_discard.\n\nIf discard fails in one disk, we face the similar inconsistent issue\nabove. The patch will make discard follow the same path as normal\nwrite request. If discard fails, a resync will be scheduled to make\nthe data consistent. This isn\u0027t good to have extra writes, but data\nconsistency is important.\n\nIf a subsequent read/write request hits raid5 cache of a discarded\nstripe, the discarded dev page should have zero filled, so the data is\nconsistent. This patch will always zero dev page for discarded request\nstripe. This isn\u0027t optimal because discard request doesn\u0027t need such\npayload. Next patch will avoid it.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4ed8731d8e6bd2a88a30697fbf4f7e6e979a6c46",
      "tree": "3bb77592fa5a89b8e7f0ef84b8d7f53122bbd071",
      "parents": [
        "57c67df48866d57b50d72eb198ffcc0cf7a6232d"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Thu Oct 11 13:34:00 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:34:00 2012 +1100"
      },
      "message": "MD: change the parameter of md thread\n\nChange the thread parameter, so the thread can carry extra info. Next patch\nwill use it.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "cb13ff69d6d61ab06285e3ef652f45ecda73e135",
      "tree": "f214f5611d50aa085f9a78bd9b138a34ae8489cf",
      "parents": [
        "6dafab6b1383e912cd252fa809570b484eb6e0dc"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Sep 24 16:27:20 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Sep 24 16:27:20 2012 +1000"
      },
      "message": "md/raid5: add missing spin_lock_init.\n\ncommit b17459c05000fdbe8d10946570a26510f86ec0f\n   raid5: add a per-stripe lock\n\nadded a spin_lock to the \u0027stripe_head\u0027 struct.\nUnfortunately there are two places where this struct is allocated\nbut the spin lock was only initialised in one of them.\n\nSo add the missing spin_lock_init.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e5c86471f933608db5d43679f84cb4346c32033e",
      "tree": "e596b35a134b9cc4e308f90090ecf9998a5b58a4",
      "parents": [
        "a852d7b8a0cf29499905c9243fa6d3fb93898b82"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 19 12:52:30 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 19 12:52:30 2012 +1000"
      },
      "message": "md/raid5: fix calculate of \u0027degraded\u0027 when a replacement becomes active.\n\nWhen a replacement device becomes active, we mark the device that it\nreplaces as \u0027faulty\u0027 so that it can subsequently get removed.\nHowever \u0027calc_degraded\u0027 only pays attention to the primary device, not\nthe replacement, so the array appears to become degraded, which is\nwrong.\n\nSo teach \u0027calc_degraded\u0027 to consider any replacement if a primary\ndevice is faulty.\n\nThis is suitable for -stable as an incorrect \u0027degraded\u0027 value can\nconfuse md and could lead to data corruption.\nThis is only relevant for 3.3 and later.\n\nCc: stable@vger.kernel.org\nReported-by: Robin Hill \u003crobin@robinhill.me.uk\u003e\nReported-by: John Drescher \u003cdrescherjm@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a852d7b8a0cf29499905c9243fa6d3fb93898b82",
      "tree": "006200722d6313f3ed8680c2fee6bd8d66a9de91",
      "parents": [
        "55d512e245bc7699a8800e23df1a24195dd08217"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 19 12:48:30 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 19 12:48:30 2012 +1000"
      },
      "message": "Revert \"md/raid5: For odirect-write performance, do not set STRIPE_PREREAD_ACTIVE.\"\n\nThis reverts commit 895e3c5c58a80bb9e4e05d9ac38b4f30e0f97d80.\n\nWhile this patch seemed like a good idea and did help some workloads,\nit hurts other workloads.\nLarge sequential O_DIRECT writes were faster,\nSmall random O_DIRECT writes were slower.\n\nOther changes (batching RAID5 writes) have improved the sequential\nwrites using a different mechanism, so the net result of this patch\nis definitely negative.  So revert it.\n\nReported-by: Shaohua Li \u003cshli@kernel.org\u003e\nTested-by: Jianpeng Ma \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "25aa6a7ae46c6a041c46a2d314b9ab7c4f2baa41",
      "tree": "b99c627c269e38450d5d0f9713862d2ed06d6e5e",
      "parents": [
        "c8924234bd9c06fe86bae648c472d56cb10640a5",
        "d9f691c365a83ce2530f0e46b947365c2db44ea0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 02 11:34:40 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 02 11:34:40 2012 -0700"
      },
      "message": "Merge tag \u0027md-3.6\u0027 of git://neil.brown.name/md\n\nPull additional md update from NeilBrown:\n \"This contains a few patches that depend on plugging changes in the\n  block layer so needed to wait for those.\n\n  It also contains a Kconfig fix for the new RAID10 support in dm-raid.\"\n\n* tag \u0027md-3.6\u0027 of git://neil.brown.name/md:\n  md/dm-raid: DM_RAID should select MD_RAID10\n  md/raid1: submit IO from originating thread instead of md thread.\n  raid5: raid5d handle stripe in batch way\n  raid5: make_request use batch stripe release\n"
    },
    {
      "commit": "46a06401f6ba13e59d24746fa9ffa6773b69eee3",
      "tree": "f6d938b79aed14b7a51cda5a607e09f8226feb03",
      "parents": [
        "8811b5968f6216e97ccb9fe7b9883af39e339921"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Thu Aug 02 08:33:15 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Aug 02 08:33:15 2012 +1000"
      },
      "message": "raid5: raid5d handle stripe in batch way\n\nLet raid5d handle stripe in batch way to reduce conf-\u003edevice_lock locking.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8811b5968f6216e97ccb9fe7b9883af39e339921",
      "tree": "9693073f6cb1bcd8743d429d7d3330018bc0ce6d",
      "parents": [
        "74018dc3063a2c729fc73041c0a9f03aac995920"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Thu Aug 02 08:33:00 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Aug 02 08:33:00 2012 +1000"
      },
      "message": "raid5: make_request use batch stripe release\n\nmake_request() does stripe release for every stripe and the stripe usually has\ncount 1, which makes previous release_stripe() optimization not work. In my\ntest, this release_stripe() becomes the heaviest pleace to take\nconf-\u003edevice_lock after previous patches applied.\n\nBelow patch makes stripe release batch. All the stripes will be released in\nunplug. The STRIPE_ON_UNPLUG_LIST bit is to protect concurrent access stripe\nlru.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "eff0d13f3823f35d70228cd151d2a2c89288ff32",
      "tree": "55bff4dbcc43c4b0f38509ac4de585c0c457980c",
      "parents": [
        "8cf1a3fce0b95050b63d451c9d561da0da2aa4d6",
        "10af8138eb6d09d6a768e43ef1aa9b2f16b8c7be"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 01 09:06:47 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 01 09:06:47 2012 -0700"
      },
      "message": "Merge branch \u0027for-3.6/drivers\u0027 of git://git.kernel.dk/linux-block\n\nPull block driver changes from Jens Axboe:\n\n - Making the plugging support for drivers a bit more sane from Neil.\n   This supersedes the plugging change from Shaohua as well.\n\n - The usual round of drbd updates.\n\n - Using a tail add instead of a head add in the request completion for\n   ndb, making us find the most completed request more quickly.\n\n - A few floppy changes, getting rid of a duplicated flag and also\n   running the floppy init async (since it takes forever in boot terms)\n   from Andi.\n\n* \u0027for-3.6/drivers\u0027 of git://git.kernel.dk/linux-block:\n  floppy: remove duplicated flag FD_RAW_NEED_DISK\n  blk: pass from_schedule to non-request unplug functions.\n  block: stack unplug\n  blk: centralize non-request unplug handling.\n  md: remove plug_cnt feature of plugging.\n  block/nbd: micro-optimization in nbd request completion\n  drbd: announce FLUSH/FUA capability to upper layers\n  drbd: fix max_bio_size to be unsigned\n  drbd: flush drbd work queue before invalidate/invalidate remote\n  drbd: fix potential access after free\n  drbd: call local-io-error handler early\n  drbd: do not reset rs_pending_cnt too early\n  drbd: reset congestion information before reporting it in /proc/drbd\n  drbd: report congestion if we are waiting for some userland callback\n  drbd: differentiate between normal and forced detach\n  drbd: cleanup, remove two unused global flags\n  floppy: Run floppy initialization asynchronous\n"
    },
    {
      "commit": "0021b7bc045e4b0b85d8c53614342aaf84ca96a5",
      "tree": "1432761eec4c49bbacea55df083e73599e18ea1c",
      "parents": [
        "01ff5dbc0925d11c8ad76eed3bdd02d0c7e1e0f5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 09:08:14 2012 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Tue Jul 31 09:08:14 2012 +0200"
      },
      "message": "md: remove plug_cnt feature of plugging.\n\nThis seemed like a good idea at the time, but after further thought I\ncannot see it making a difference other than very occasionally and\ntesting to try to exercise the case it is most likely to help did not\nshow any performance difference by removing it.\n\nSo remove the counting of active plugs and allow \u0027pending writes\u0027 to\nbe activated at any time, not just when no plugs are active.\n\nThis is only relevant when there is a write-intent bitmap, and the\nupdating of the bitmap will likely introduce enough delay that\nthe single-threading of bitmap updates will be enough to collect large\nnumbers of updates together.\n\nRemoving this will make it easier to centralise the unplug code, and\nwill clear the other for other unplug enhancements which have a\nmeasurable effect.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "895e3c5c58a80bb9e4e05d9ac38b4f30e0f97d80",
      "tree": "0376aaaaf8166e07a052067e5f825ab5b914d758",
      "parents": [
        "b7219ccb33aa0df9949a60c68b5e9f712615e56f"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Tue Jul 31 10:05:44 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 10:05:44 2012 +1000"
      },
      "message": "md/raid5: For odirect-write performance, do not set STRIPE_PREREAD_ACTIVE.\n\n\u0027sync\u0027 writes set both REQ_SYNC and REQ_NOIDLE.\nO_DIRECT writes set REQ_SYNC but not REQ_NOIDLE.\n\nWe currently assume that a REQ_SYNC request will not be followed by\nmore requests and so set STRIPE_PREREAD_ACTIVE to expedite the\nrequest.\nThis is appropriate for sync requests, but not for O_DIRECT requests.\n\nSo make the setting of STRIPE_PREREAD_ACTIVE conditional on REQ_NOIDLE\nrather than REQ_SYNC.  This is consistent with the documented meaning\nof REQ_NOIDLE:\n\n        __REQ_NOIDLE,           /* don\u0027t anticipate more IO after this one */\n\nSigned-off-by: Jianpeng Ma \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3f9e7c140e4c4e75bdeeb8df46dd40e49386c978",
      "tree": "81585524e1ce341eb518716c0702a6dfd64a19ef",
      "parents": [
        "12cee5a8a29e7263e39953f1d941f723c617ca5f"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Tue Jul 31 10:04:21 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 10:04:21 2012 +1000"
      },
      "message": "raid5: Add R5_ReadNoMerge flag which prevent bio from merging at block layer\n\nBecause bios will merge at block-layer,so bios-error may caused by other\nbio which be merged into to the same request.\nUsing this flag,it will find exactly error-sector and not do redundant\noperation like re-write and re-read.\n\nV0-\u003eV1:Using REQ_FLUSH instead REQ_NOMERGE avoid bio merging at block\nlayer.\n\nSigned-off-by: Jianpeng Ma \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b17459c05000fdbe8d10946570a26510f86ec0f6",
      "tree": "251a9e640d91a9b9ffc804519ea07ed365035636",
      "parents": [
        "7eaf7e8eb31747e4259d60288b44b194fb3d56c7"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Thu Jul 19 16:01:31 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 19 16:01:31 2012 +1000"
      },
      "message": "raid5: add a per-stripe lock\n\nAdd a per-stripe lock to protect stripe specific data. The purpose is to reduce\nlock contention of conf-\u003edevice_lock.\n\nstripe -\u003etoread, -\u003etowrite are protected by per-stripe lock.  Accessing bio\nlist of the stripe is always serialized by this lock, so adding bio to the\nlists (add_stripe_bio()) and removing bio from the lists (like\nops_run_biofill()) not race.\n\nIf bio in -\u003eread, -\u003ewritten ... list are not shared by multiple stripes, we\ndon\u0027t need any lock to protect -\u003eread, -\u003ewritten, because STRIPE_ACTIVE will\nprotect them. If the bio are shared,  there are two protections:\n1. bi_phys_segments acts as a reference count\n2. traverse the list uses r5_next_bio, which makes traverse never access bio\nnot belonging to the stripe\n\nLet\u0027s have an example:\n|  stripe1 |  stripe2    |  stripe3  |\n...bio1......|bio2|bio3|....bio4.....\n\nstripe2 has 4 bios, when it\u0027s finished, it will decrement bi_phys_segments for\nall bios, but only end_bio for bio2 and bio3. bio1-\u003ebi_next still points to\nbio2, but this doesn\u0027t matter. When stripe1 is finished, it will not touch bio2\nbecause of r5_next_bio check. Next time stripe1 will end_bio for bio1 and\nstripe3 will end_bio bio4.\n\nbefore add_stripe_bio() addes a bio to a stripe, we already increament the bio\nbi_phys_segments, so don\u0027t worry other stripes release the bio.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7eaf7e8eb31747e4259d60288b44b194fb3d56c7",
      "tree": "bd084366fa8b61fd1eec312b54d0e861a39fba18",
      "parents": [
        "e7836bd6f60d659830b87804f7f4026edfe0f1d1"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Thu Jul 19 16:01:31 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 19 16:01:31 2012 +1000"
      },
      "message": "raid5: remove unnecessary bitmap write optimization\n\nNeil pointed out the bitmap write optimization in handle_stripe_clean_event()\nis unnecessary, because the chance one stripe gets written twice in the mean\ntime is rare. We can always do a bitmap_startwrite when a write request is\nadded to a stripe and bitmap_endwrite after write request is done.  Delete the\noptimization. With it, we can delete some cases of device_lock.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e7836bd6f60d659830b87804f7f4026edfe0f1d1",
      "tree": "48b8be28ae6d47697307d6fbce9d35c4fd1506f0",
      "parents": [
        "4eb788df670ef30a19b7ea15b107ea440544bc80"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Thu Jul 19 16:01:31 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 19 16:01:31 2012 +1000"
      },
      "message": "raid5: lockless access raid5 overrided bi_phys_segments\n\nRaid5 overrides bio-\u003ebi_phys_segments, accessing it is with device_lock hold,\nwhich is unnecessary, We can make it lockless actually.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4eb788df670ef30a19b7ea15b107ea440544bc80",
      "tree": "6a99872db014f67e43312afd4a93b3bcffe64506",
      "parents": [
        "58e94ae18478c08229626daece2fc108a4a23261"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Thu Jul 19 16:01:31 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 19 16:01:31 2012 +1000"
      },
      "message": "raid5: reduce chance release_stripe() taking device_lock\n\nrelease_stripe() is a place conf-\u003edevice_lock is heavily contended. We take the\nlock even stripe count isn\u0027t 1, which isn\u0027t required.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b357f04a67c2aeee828b240863cd3f21d6cb3179",
      "tree": "b8495f2c04fc40d5a2885fe4f7ff8d627cd55031",
      "parents": [
        "f456309106e9657645c81bce1a6bb3230393564e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 17:45:31 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 17:45:31 2012 +1000"
      },
      "message": "md: fix up plugging (again).\n\nThe value returned by \"mddev_check_plug\" is only valid until the\nnext \u0027schedule\u0027 as that will unplug things.  This could happen at any\ncall to mempool_alloc.\nSo just calling mddev_check_plug at the start doesn\u0027t really make\nsense.\n\nSo call it just before, or just after, queuing things for the thread.\nAs the action that happens at unplug is to wake the thread, this makes\nlots of sense.\nIf we cannot add a plug (which requires a small GFP_ATOMIC alloc) we\nwake thread immediately.\n\nRAID5 is a bit different.  Requests are queued for the thread and the\nthread is woken by release_stripe.  So we don\u0027t need to wake the\nthread on failure.\nHowever the thread doesn\u0027t perform certain actions when there is any\nactive plug, so it is important to install a plug before waking the\nthread.  So for RAID5 we install the plug *before* queuing the request\nand waking the thread.\n\nWithout this patch it is possible for raid1 or raid10 to queue a\nrequest without then waking the thread, resulting in the array locking\nup.\n\nAlso change raid10 to only flush_pending_write when there are not\nactive plugs, just like raid1.\n\nThis patch is suitable for 3.0 or later.  I plan to submit it to\n-stable, but I\u0027ll like to let it spend a few weeks in mainline\nfirst to be sure it is completely safe.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "fab363b5ff502d1b39ddcfec04271f5858d9f26e",
      "tree": "b9d247b33102421f46b21462cd569853cb926fdb",
      "parents": [
        "2e8ac30312973dd20e6807365349ecb1c7e0ea45"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Tue Jul 03 15:57:19 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 15:57:19 2012 +1000"
      },
      "message": "raid5: delayed stripe fix\n\nThere isn\u0027t locking setting STRIPE_DELAYED and STRIPE_PREREAD_ACTIVE bits, but\nthe two bits have relationship. A delayed stripe can be moved to hold list only\nwhen preread active stripe count is below IO_THRESHOLD. If a stripe has both\nthe bits set, such stripe will be in delayed list and preread count not 0,\nwhich will make such stripe never leave delayed list.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2e8ac30312973dd20e6807365349ecb1c7e0ea45",
      "tree": "23c672053c6ff1cf92119e7a18d2f5b83dbab5f2",
      "parents": [
        "0232605d987d8230b254aa139805bbb56a7ca30c"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Tue Jul 03 15:57:02 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 15:57:02 2012 +1000"
      },
      "message": "md/raid456: When read error cannot be recovered, record bad block\n\nWe may not be able to fix a bad block if:\n - the array is degraded\n - the over-write fails.\n\nIn these cases we currently eject the device, but we should\nrecord a bad block if possible.\n\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0232605d987d8230b254aa139805bbb56a7ca30c",
      "tree": "18537d016ecc0f12b41b4589818b4c047cd58bcf",
      "parents": [
        "055d3747dbf00ce85c6872ecca4d466638e80c22"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 15:56:52 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 15:56:52 2012 +1000"
      },
      "message": "md: make \u0027name\u0027 arg to md_register_thread non-optional.\n\nHaving the \u0027name\u0027 arg optional and defaulting to the current\npersonality name is no necessary and leads to errors, as when\nchanging the level of an array we can end up using the\nname of the old level instead of the new one.\n\nSo make it non-optional and always explicitly pass the name\nof the level that the array will be.\n\nReported-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5f066c632fcfd2a33f2eb7077c15c630e9f5ea5b",
      "tree": "9a659a20661d4a2b13f796cd2409879c0596b5c1",
      "parents": [
        "7c2c57c9a98bf5961e438a376486f95346f6b0c5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 12:13:29 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 12:13:29 2012 +1000"
      },
      "message": "md/raid5: fix refcount problem when blocked_rdev is set.\n\ncommit 43220aa0f22cd3ce5b30246d50ccd696d119edea\n    md/raid5: fix a hang on device failure.\n\nfixed a hang, but introduced a refcounting in-balance so\nthat if the presence of bad-blocks ever caused an rdev to\nbe \u0027blocked\u0027 we would increment the refcount on the rdev and\nnever decrement it.\n\nSo added the needed rdev_dec_pending when md_wait_for_blocked_rdev\nis not called.\n\nReported-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1850753d2e6d9ca7856581ca5d3cf09521e6a5d7",
      "tree": "78b6a6f246d35b13c3a37461187be7453d0972ba",
      "parents": [
        "6c0544e255dd6582a9899572e120fb55d9f672a4"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Tue Jul 03 12:11:54 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 12:11:54 2012 +1000"
      },
      "message": "md/raid5: In ops_run_io, inc nr_pending before calling md_wait_for_blocked_rdev\n\nIn ops_run_io(), the call to md_wait_for_blocked_rdev will decrement\nnr_pending so we lose the reference we hold on the rdev.\nSo atomic_inc it first to maintain the reference.\n\nThis bug was introduced by commit  73e92e51b7969ef5477d\n    md/raid5.  Don\u0027t write to known bad block on doubtful devices.\n\nwhich appeared in 3.0, so patch is suitable for stable kernels since\nthen.\n\nCc: stable@vger.kernel.org\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6c0544e255dd6582a9899572e120fb55d9f672a4",
      "tree": "f77e75815a54c6af1068dceb6ada1eb51d8501ce",
      "parents": [
        "5cfb22a1f83e4f04c0a4df89b60053a077222e2b"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Tue Jun 12 08:31:10 2012 +0800"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 12:09:57 2012 +1000"
      },
      "message": "md/raid5: Do not add data_offset before call to is_badblock\n\nIn chunk_aligned_read() we are adding data_offset before calling\nis_badblock.  But is_badblock also adds data_offset, so that is bad.\n\nSo move the addition of data_offset to after the call to\nis_badblock.\n\nThis bug was introduced by commit 31c176ecdf3563140e639\n     md/raid5: avoid reading from known bad blocks.\nwhich first appeared in 3.0.  So that patch is suitable for any\n-stable kernel from 3.0.y onwards.  However it will need minor\nrevision for most of those (as the comment didn\u0027t appear until\nrecently).\n\nCc: stable@vger.kernel.org\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5cfb22a1f83e4f04c0a4df89b60053a077222e2b",
      "tree": "9312c806fb3fb245beb0dd6669569f88a79a8b7d",
      "parents": [
        "fc448a18ae6219af9a73257b1fbcd009efab4a81"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 11:46:53 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 11:46:53 2012 +1000"
      },
      "message": "md/raid5: prefer replacing failed devices over want-replacement devices.\n\nIf a RAID5 has both a failed device and a device marked as\n\u0027WantReplacement\u0027, then we should preferentially replace the failed\ndevice.\nHowever the current code replaces whichever is found first.\nSo split into 2 loops, check fail failed/missing first, and only check\nfor WantReplacement if nothing is failed or missing.\n\nReported-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "da7613b8b042ab1d3ea55459ed97301e4a2097bb",
      "tree": "5a6fe23c5fbbb15f3ff459752807a00ddf121c55",
      "parents": [
        "0c098220e2320c1f0c9339d0ff05c5e04672133a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 22 13:55:33 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 22 13:55:33 2012 +1000"
      },
      "message": "md/raid5: improve removal of extra devices after reshape.\n\nAfter a reshape which reduced the number of devices we need\nto disconnect the extra devices.\nThe code for this doesn\u0027t currently handle \u0027replacement\u0027 devices.\nIt is very unlikely that such devices will be present, but it is\nsafest to handle them anyway.\n\nSo simplify the handling.  Just clear In_sync and leave it\nto remove_and_add_spaces (which will be called soon) to do\nthe real works.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "30b67645faadcdc32072f999796b99bd0a20f2d5",
      "tree": "b6e1f0d30c584794ecec0455450d36be5fe4b9e0",
      "parents": [
        "bb63a7019df91933de6854a87ddc5488b49edb85"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 22 13:55:28 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 22 13:55:28 2012 +1000"
      },
      "message": "md/raid5: Allow reshape while a bitmap is present.\n\nWe always should have allowed this.  A raid5 reshape doesn\u0027t change\nthe size of the bitmap, so not need to restrict it.\n\nAlso add a test to make sure we don\u0027t try to start a reshape on a\nfailed array.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a4a6125a074e1b08ee8ae34f700c5bca19eb9d18",
      "tree": "761a719a7d4f1a53d44349f7bef095368a9ae75a",
      "parents": [
        "b81a040481233e5171cb3fbc62f44636d5ea18b2"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 22 13:55:27 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 22 13:55:27 2012 +1000"
      },
      "message": "md: allow array to be resized while bitmap is present.\n\nNow that bitmaps can be resized, we can allow an array to be resized\nwhile the bitmap is present.\n\nThis only covers resizing that involves changing the effective size\nof member devices, not resizing that changes the number of devices.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bc0934f0477d0a2350a478004799d9c064923b7b",
      "tree": "9ca749760c19637a941e7eed76652e7da298687c",
      "parents": [
        "cceeca43b5ad96766098144a3fd757e03de9f6f8"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Tue May 22 13:55:05 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 22 13:55:05 2012 +1000"
      },
      "message": "raid5: support sync request\n\nREQ_SYNC is ignored in current raid5 code. Block layer does use it to do\npolicy,\nfor example ioscheduler. This patch adds it.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "cceeca43b5ad96766098144a3fd757e03de9f6f8",
      "tree": "728714dc95fba7ee9e51d9c8c9dfbc4da9aed1f4",
      "parents": [
        "5fdd2cf8265c6de0f190dea80cc4c50da8f31293"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Tue May 22 13:55:04 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 22 13:55:04 2012 +1000"
      },
      "message": "raid5: remove unused variables\n\nThe two variables are useless.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b5254dd5fdd9abcacadb5101beb35df9ae8cc564",
      "tree": "73d32b8dd7c0dc9ecfe61468965b06741070dee7",
      "parents": [
        "05616be5e11f66888b66554957dbecdd90658a84"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon May 21 09:27:01 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon May 21 09:27:01 2012 +1000"
      },
      "message": "md/raid5: allow for change in data_offset while managing a reshape.\n\nThe important issue here is incorporating the different in data_offset\ninto calculations concerning when we might need to over-write data\nthat is still thought to be valid.\n\nTo this end we find the minimum offset difference across all devices\nand add that where appropriate.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "05616be5e11f66888b66554957dbecdd90658a84",
      "tree": "e1d5607aa30926f7cd4b82b60c32f277c9aff39e",
      "parents": [
        "c6563a8c38fde3c1c7fc925a10bde3ca20799301"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon May 21 09:27:00 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon May 21 09:27:00 2012 +1000"
      },
      "message": "md/raid5:  Use correct data_offset for all IO.\n\nAs there can now be two different data_offsets - an \u0027old\u0027 and\na \u0027new\u0027 - we need to carefully choose between them.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c6563a8c38fde3c1c7fc925a10bde3ca20799301",
      "tree": "3916ae8247149a9dcf39ee1ca262f97be39071eb",
      "parents": [
        "2c810cddc44d6f95cef75df3f07fc0850ff92417"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon May 21 09:27:00 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon May 21 09:27:00 2012 +1000"
      },
      "message": "md: add possibility to change data-offset for devices.\n\nWhen reshaping we can avoid costly intermediate backup by\nchanging the \u0027start\u0027 address of the array on the device\n(if there is enough room).\n\nSo as a first step, allow such a change to be requested\nthrough sysfs, and recorded in v1.x metadata.\n\n(As we didn\u0027t previous check that all \u0027pad\u0027 fields were zero,\n we need a new FEATURE flag for this.\n A (belatedly) check that all remaining \u0027pad\u0027 fields are\n zero to avoid a repeat of this)\n\nThe new data offset must be requested separately for each device.\nThis allows each to have a different change in the data offset.\nThis is not likely to be used often but as data_offset can be\nset per-device, new_data_offset should be too.\n\nThis patch also removes the \u0027acknowledged\u0027 arg to rdev_set_badblocks as\nit is never used and never will be.  At the same time we add a new\narg (\u0027in_new\u0027) which is currently always zero but will be used more\nsoon.\n\nWhen a reshape finishes we will need to update the data_offset\nand rdev-\u003esectors.  So provide an exported function to do that.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2c810cddc44d6f95cef75df3f07fc0850ff92417",
      "tree": "185b35ce06656a53327dd66343f0926aa5a910d7",
      "parents": [
        "b5e1b8cee7ad58a15d2fa79bcd7946acb592602d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon May 21 09:27:00 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon May 21 09:27:00 2012 +1000"
      },
      "message": "md: allow a reshape operation to be reversed.\n\nCurrently a reshape operation always progresses from the start\nof the array to the end unless the number of devices is being\nreduced, in which case it progressed in the opposite direction.\n\nTo reverse a partial reshape which changes the number of devices\nyou can stop the array and re-assemble with the raid-disks numbers\nreversed and it will undo.\n\nHowever for a reshape that does not change the number of devices\nit is not possible to reverse the reshape in the middle - you have to\nwait until it completes.\n\nSo add a \u0027reshape_direction\u0027 attribute with is either \u0027forwards\u0027 or\n\u0027backwards\u0027 and can be explicitly set when delta_disks is zero.\n\nThis will become more important when we allow the data_offset to\nchange in a reshape.  Then the explicit statement of what direction is\nbeing used will be more useful.\n\nThis can be enabled in raid5 trivially as it already supports\nreverse reshape and just needs to use a different trigger to request it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c6d2e084c7411f61f2b446d94989e5aaf9879b0f",
      "tree": "521616d7bd6ff7eb38217bed1b81c5960fa2023d",
      "parents": [
        "a42f9d83b5c05dc6e678a1f0cd9767502c2c58de"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Mon Apr 02 01:16:59 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Apr 03 15:37:38 2012 +1000"
      },
      "message": "md/raid5: Fix a bug about judging if the operation is syncing or replacing\n\nWhen create a raid5 using assume-clean and echo check or repair to\nsync_action.Then component disks did not operated IO but the raid\ncheck/resync faster than normal.\nBecause the judgement in function analyse_stripe():\n\t\tif (do_recovery ||\n\t\t    sh-\u003esector \u003e\u003d conf-\u003emddev-\u003erecovery_cp)\n\t\t\ts-\u003esyncing \u003d 1;\n\t\telse\n\t\t\ts-\u003ereplacing \u003d 1;\nWhen check or repair,the recovery_cp \u003d\u003d MaxSectore,so syncing equal zero\nnot one.\n\nThis bug was introduced by commit 9a3e1101b827\n    md/raid5:  detect and handle replacements during recovery.\nso this patch is suitable for 3.3-stable.\n\nCc: stable@vger.kernel.org\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "18b9837ea0dc3cf844c6c4196871ce91d047bddb",
      "tree": "de8be80b767d144405aeeaf7238c723f575b4b40",
      "parents": [
        "5220ea1e640869e70f894837678315c878c651fd"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sun Apr 01 23:48:38 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Apr 03 15:36:17 2012 +1000"
      },
      "message": "md/raid5: fix handling of bad blocks during recovery.\n\n1/ We can only treat a known-bad-block like a read-error if we\n   have the data that belongs in that block.  So fix that test.\n\n2/ If we cannot recovery a stripe due to insufficient data,\n   don\u0027t tell \"md_done_sync\" that the sync failed unless we really\n   did fail something.  If we successfully record bad blocks,\n   that is success.\n\nReported-by: \"majianpeng\" \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "dafb20fa34320a472deb7442f25a0c086e0feb33",
      "tree": "2ff501805f8a6d08119f1f1a7248f579d52e491b",
      "parents": [
        "d6b42dcb995e6acd7cc276774e751ffc9f0ef4bf"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:39 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:39 2012 +1100"
      },
      "message": "md: tidy up rdev_for_each usage.\n\nmd.h has an \u0027rdev_for_each()\u0027 macro for iterating the rdevs in an\nmddev.  However it uses the \u0027safe\u0027 version of list_for_each_entry,\nand so requires the extra variable, but doesn\u0027t include \u0027safe\u0027 in the\nname, which is useful documentation.\n\nConsequently some places use this safe version without needing it, and\nmany use an explicity list_for_each entry.\n\nSo:\n - rename rdev_for_each to rdev_for_each_safe\n - create a new rdev_for_each which uses the plain\n   list_for_each_entry,\n - use the \u0027safe\u0027 version only where needed, and convert all other\n   list_for_each_entry calls to use rdev_for_each.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "dc10c643e8a8d008fd16dd6706e9e0018eadf8d2",
      "tree": "6a0efe323cfaca9d180c0429c74697598c6d9a05",
      "parents": [
        "41fe75f60bcd4d698daed3e54bb099227358ce58"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:37 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:37 2012 +1100"
      },
      "message": "md: allow re-add to failed arrays.\n\nWhen an array is failed (some data inaccessible) then there is no\npoint attempting to add a spare as it could not possibly be recovered.\n\nHowever that may be value in re-adding a recently removed device.\ne.g. if there is a write-intent-bitmap and it is clear, then access\nto the data could be restored by this action.\n\nSo don\u0027t reject a re-add to a failed array for RAID10 and RAID5 (the\nonly arrays  types that check for a failed array).\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "41fe75f60bcd4d698daed3e54bb099227358ce58",
      "tree": "bbd15d0143d20c59f87c5e6d2e0afba57252929b",
      "parents": [
        "43437ecd5adc8bd712b7140c8a70e2b4a80a89dd"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Tue Mar 13 11:21:25 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:25 2012 +1100"
      },
      "message": "md/raid5: use atomic_dec_return() instead of atomic_dec() and atomic_read().\n\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9d4c7d8799c418816342e263479fa010b182183e",
      "tree": "e1450bda6809a36d5bdb666ae0ab88ef1492b580",
      "parents": [
        "547414d19fd72376ff2ecc42aac8d7a051f03d26"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:21 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:21 2012 +1100"
      },
      "message": "md/raid5: removed unused \u0027added_devices\u0027 variable.\n\ncommit 908f4fbd265733 removed the last user of this variable,\nso we should discard it completely.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1e3fa9bd5061778fb5cf4648e4e8321e8cbbb95b",
      "tree": "de51166f0369e17cc2cb20566b61b7b3c873d7fc",
      "parents": [
        "fde7d9049e55ab85a390be7f415d74c9f62dd0f9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:18 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:18 2012 +1100"
      },
      "message": "md/raid5: make sure reshape_position is cleared on error path.\n\nLeaving a valid reshape_position value in place could be confusing.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3a6de2924af602f9c1b5a5154438c37f2d712dfa",
      "tree": "895462dfefd70827c5b6d860503d1244d003a56e",
      "parents": [
        "7bfec5f35c68121e7b1849f3f4166dd96c8da5b3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "message": "md/raid5: Mark device want_replacement when we see a write error.\n\nNow that WantReplacement drives are replaced cleanly, mark a drive\nas WantReplacement when we see a write error.  It might get failed soon so\nthe WantReplacement flag is irrelevant, but if the write error is recorded\nin the bad block log, we still want to activate any spare that might\nbe available.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by:  NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7bfec5f35c68121e7b1849f3f4166dd96c8da5b3",
      "tree": "14bab6480ccc14a6cdf9e5ee34662897e5e2e94a",
      "parents": [
        "17045f52ac76d9cd1a120e52af5d83b570af4ba8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "message": "md/raid5: If there is a spare and a want_replacement device, start replacement.\n\nWhen attempting to add a spare to a RAID[456] array, also consider\nadding it as a replacement for a want_replacement device.\n\nThis requires that common md code attempt hot_add even when the array\nis not formally degraded.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "17045f52ac76d9cd1a120e52af5d83b570af4ba8",
      "tree": "2bbd692eaab68ffa60f3dcf6757752b9b89a7a9b",
      "parents": [
        "dd054fce88d33da1aa81d018db75b91b102a6959"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "message": "md/raid5: recognise replacements when assembling array.\n\nIf a Replacement is seen, file it as such.\n\nIf we see two replacements (or two normal devices) for the one slot,\nabort.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "dd054fce88d33da1aa81d018db75b91b102a6959",
      "tree": "9528caece6b444ebcdb41453b60a1bb4054a1a4d",
      "parents": [
        "9a3e1101b827a59ac9036a672f5fa8d5279d0fe2"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "message": "md/raid5: handle activation of replacement device when recovery completes.\n\nWhen recovery completes - as reported by a call to -\u003espare_active,\nwe clear In_sync on the original and set it on the replacement.\n\nThen when the original gets removed we move the replacement from\n\u0027replacement\u0027 to \u0027rdev\u0027.\n\nThis could race with other code that is looking at these pointers,\nso we use memory barriers and careful ordering to ensure that\na reader might see one device twice, but never no devices.\nThen the readers guard against using both devices, which could\nonly happen when writing.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9a3e1101b827a59ac9036a672f5fa8d5279d0fe2",
      "tree": "9e629fbc1bab31b588c475181246bbe30778f67a",
      "parents": [
        "977df36255ab0ea78b048cbc9055300c586dcc91"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "message": "md/raid5:  detect and handle replacements during recovery.\n\nDuring recovery we want to write to the replacement but not\nthe original.  So we have two new flags\n - R5_NeedReplace if this stripe has a replacement that needs to\n   be written at some stage\n - R5_WantReplace if NeedReplace, and the data is available, and\n   a \u0027sync\u0027 has been requested on this stripe.\n\nWe also distinguish between \u0027sync and replace\u0027 which need to read\nall other devices, and \u0027replace\u0027 which only needs to read the\ndevices being replaced.\n\nNote that during resync we always write to any replacement device.\nIt might not need to be written to, but as we don\u0027t read to compare,\nwe have to write to be sure.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "977df36255ab0ea78b048cbc9055300c586dcc91",
      "tree": "6d89e08ebe7702ccbb5e160b99ea2440ab08fcda",
      "parents": [
        "657e3e4d88461a5ab660dd87f8f773f55e748da4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "message": "md/raid5: writes should get directed to replacement as well as original.\n\nWhen writing, we need to submit two writes, one to the original, and\none to the replacement - if there is a replacement.\n\nIf the write to the replacement results in a write error, we just fail\nthe device.  We only try to record write errors to the original.\n\nWhen writing for recovery, we shouldn\u0027t write to the original.  This\nwill be addressed in a subsequent patch that generally addresses\nrecovery.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "657e3e4d88461a5ab660dd87f8f773f55e748da4",
      "tree": "1eecf97f8e5eac95cf37b4f28e262a37dd3e116d",
      "parents": [
        "14a75d3e07c784c004b4b44b34af996b8e4ac453"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "message": "md/raid5: allow removal for failed replacement devices.\n\nEnhance raid5_remove_disk to be able to remove -\u003ereplacement\nas well as -\u003erdev.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "14a75d3e07c784c004b4b44b34af996b8e4ac453",
      "tree": "6009e1ccc1b766d4c55434e3b4c1d171b8a2c004",
      "parents": [
        "995c4275a7e14b8752f301e4570831a108ae4303"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "message": "md/raid5: preferentially read from replacement device if possible.\n\nIf a replacement device is present and has been recovered far enough,\nthen use it for reading into the stripe cache.\n\nIf we get an error we don\u0027t try to repair it, we just fail the device.\nA replacement device that gives errors does not sound sensible.\n\nThis requires removing the setting of R5_ReadError when we get\na read error during a read that bypasses the cache.  It was probably\na bad idea anyway as we don\u0027t know that every block in the read\ncaused an error, and it could cause ReadError to be set for the\nreplacement device, which is bad.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "995c4275a7e14b8752f301e4570831a108ae4303",
      "tree": "2bee4c8daf14b6453371bb348b18d37d7e3cdb07",
      "parents": [
        "ede7ee8b4d007f308aa033be676b1a048f99e9db"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "message": "md/raid5: remove redundant bio initialisations.\n\nWe current initialise some fields of a bio when preparing a\nstripe_head, and again just before submitting the request.\n\nRemove the duplication by only setting the fields that lower level\ndevices don\u0027t touch in raid5_build_block, and only set the changeable\nfields in ops_run_io.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "671488cc25f7c194c7c7a9f258bab1df17a6ff69",
      "tree": "00bec63c7789dbf7439418ee903490d6ee076a70",
      "parents": [
        "2d78f8c451785f030ac1676a18691896b59c69d8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "message": "md/raid5: allow each slot to have an extra replacement device\n\nJust enhance data structures to record a second device per slot to be\nused as a \u0027replacement\u0027 device, replacing the original.\nWe also have a second bio in each slot in each stripe_head.  This will\nonly be used when writing to the array - we need to write to both the\noriginal and the replacement at the same time, so will need two bios.\n\nFor now, only try using the replacement drive for aligned-reads.\nIn this case, we prefer the replacement if it has been recovered far\nenough, otherwise use the original.\n\nThis includes a small enhancement.  Previously we would only do\naligned reads if the target device was fully recovered.  Now we also\ndo them if it has recovered far enough.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b8321b68d1445f308324517e45fb0a5c2b48e271",
      "tree": "3fc4c9b253435753d2154d9bd697a7869163c29a",
      "parents": [
        "476a7abb9b00adfe6bf70e82800367319ab8078b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:51 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:51 2011 +1100"
      },
      "message": "md: change hot_remove_disk to take an rdev rather than a number.\n\nSoon an array will be able to have multiple devices with the\nsame raid_disk number (an original and a replacement).  So removing\na device based on the number won\u0027t work.  So pass the actual device\nhandle instead.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "908f4fbd265733310c17ecc906299846b5dac44a",
      "tree": "71e364c57887213431143e6fd1296e8433cc6293",
      "parents": [
        "2e61ebbcc45438899235d7a39f17291cb24e746c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:50 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:50 2011 +1100"
      },
      "message": "md/raid5: be more thorough in calculating \u0027degraded\u0027 value.\n\nWhen an array is being reshaped to change the number of devices,\nthe two halves can be differently degraded.  e.g. one could be\nmissing a device and the other not.\n\nSo we need to be more careful about calculating the \u0027degraded\u0027\nattribute.\n\nInstead of just inc/dec at appropriate times, perform a full\nre-calculation examining both possible cases.  This doesn\u0027t happen\noften so it not a big cost, and we already have most of the code to\ndo it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "30d7a4836847bdb10b32c78a4879d4aebe0f193b",
      "tree": "039d4eaec57d67cbfc49d92f12e592b46c251c01",
      "parents": [
        "09cd9270ea52e0f9851528e8ed028073f96b3c34"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 09:57:00 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 09:57:00 2011 +1100"
      },
      "message": "md/raid5: ensure correct assessment of drives during degraded reshape.\n\nWhile reshaping a degraded array (as when reshaping a RAID0 by first\nconverting it to a degraded RAID4) we currently get confused about\nwhich devices are in_sync.  In most cases we get it right, but in the\nregion that is being reshaped we need to treat non-failed devices as\nin-sync when we have the data but haven\u0027t actually written it out yet.\n\nReported-by: Adam Kwolek \u003cadam.kwolek@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5d8c71f9e5fbdd95650be00294d238e27a363b5c",
      "tree": "51f7ae70b3a188f8376d7912493d346537fe516e",
      "parents": [
        "9283d8c5af4cdcb809e655acdf4be368afec8b58"
      ],
      "author": {
        "name": "Adam Kwolek",
        "email": "adam.kwolek@intel.com",
        "time": "Fri Dec 09 14:26:11 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 09 14:26:11 2011 +1100"
      },
      "message": "md: raid5 crash during degradation\n\nNULL pointer access causes crash in raid5 module.\n\nSigned-off-by: Adam Kwolek \u003cadam.kwolek@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9283d8c5af4cdcb809e655acdf4be368afec8b58",
      "tree": "d4baa86260792a10782808e51d5468e145358980",
      "parents": [
        "8bd2f0a05b361e07d48bb34398593f5f523946b3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 08 16:27:57 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 08 16:27:57 2011 +1100"
      },
      "message": "md/raid5: never wait for bad-block acks on failed device.\n\nOnce a device is failed we really want to completely ignore it.\nIt should go away soon anyway.\n\nIn particular the presence of bad blocks on it should not cause us to\nblock as we won\u0027t be trying to write there anyway.\n\nSo as soon as we can check if a device is Faulty, do so and pretend\nthat it is already gone if it is Faulty.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "257a4b42af7586fab4eaec7f04e6896b86551843",
      "tree": "ec65357b2320ba4e4341a2853245048889666f5c",
      "parents": [
        "9a3f530f39f4490eaa18b02719fb74ce5f4d2d86"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Nov 08 16:22:06 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 08 16:22:06 2011 +1100"
      },
      "message": "md/raid5: STRIPE_ACTIVE has lock semantics, add barriers\n\nAll updates that occur under STRIPE_ACTIVE should be globally visible\nwhen STRIPE_ACTIVE clears.  test_and_set_bit() implies a barrier, but\nclear_bit() does not.\n\nThis is suitable for 3.1-stable.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "9a3f530f39f4490eaa18b02719fb74ce5f4d2d86",
      "tree": "4bcff31bacd9b242360f48dad706d8b5231ffafe",
      "parents": [
        "1ea6b8f48918282bdca0b32a34095504ee65bab5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 08 16:22:01 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 08 16:22:01 2011 +1100"
      },
      "message": "md/raid5: abort any pending parity operations when array fails.\n\nWhen the number of failed devices exceeds the allowed number\nwe must abort any active parity operations (checks or updates) as they\nare no longer meaningful, and can lead to a BUG_ON in\nhandle_parity_checks6.\n\nThis bug was introduce by commit 6c0069c0ae9659e3a91b68eaed06a5c6c37f45c8\nin 2.6.29.\n\nReported-by: Manish Katiyar \u003cmkatiyar@gmail.com\u003e\nTested-by: Manish Katiyar \u003cmkatiyar@gmail.com\u003e\nAcked-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "32aaeffbd4a7457bf2f7448b33b5946ff2a960eb",
      "tree": "faf7ad871d87176423ff9ed1d1ba4d9c688fc23f",
      "parents": [
        "208bca0860406d16398145ddd950036a737c3c9d",
        "67b84999b1a8b1af5625b1eabe92146c5eb42932"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "message": "Merge branch \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\n* \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)\n  Revert \"tracing: Include module.h in define_trace.h\"\n  irq: don\u0027t put module.h into irq.h for tracking irqgen modules.\n  bluetooth: macroize two small inlines to avoid module.h\n  ip_vs.h: fix implicit use of module_get/module_put from module.h\n  nf_conntrack.h: fix up fallout from implicit moduleparam.h presence\n  include: replace linux/module.h with \"struct module\" wherever possible\n  include: convert various register fcns to macros to avoid include chaining\n  crypto.h: remove unused crypto_tfm_alg_modname() inline\n  uwb.h: fix implicit use of asm/page.h for PAGE_SIZE\n  pm_runtime.h: explicitly requires notifier.h\n  linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h\n  miscdevice.h: fix up implicit use of lists and types\n  stop_machine.h: fix implicit use of smp.h for smp_processor_id\n  of: fix implicit use of errno.h in include/linux/of.h\n  of_platform.h: delete needless include \u003clinux/module.h\u003e\n  acpi: remove module.h include from platform/aclinux.h\n  miscdevice.h: delete unnecessary inclusion of module.h\n  device_cgroup.h: delete needless include \u003clinux/module.h\u003e\n  net: sch_generic remove redundant use of \u003clinux/module.h\u003e\n  net: inet_timewait_sock doesnt need \u003clinux/module.h\u003e\n  ...\n\nFix up trivial conflicts (other header files, and  removal of the ab3550 mfd driver) in\n - drivers/media/dvb/frontends/dibx000_common.c\n - drivers/media/video/{mt9m111.c,ov6650.c}\n - drivers/mfd/ab3550-core.c\n - include/linux/dmaengine.h\n"
    },
    {
      "commit": "b4fdcb02f1e39c27058a885905bd0277370ba441",
      "tree": "fd4cfd1994f21f44afe5e7904681fb5ac09f81b8",
      "parents": [
        "044595d4e448305fbaec472eb7d22636d24e7d8c",
        "6dd9ad7df2019b1e33a372a501907db293ebcd0d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 04 17:06:58 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 04 17:06:58 2011 -0700"
      },
      "message": "Merge branch \u0027for-3.2/core\u0027 of git://git.kernel.dk/linux-block\n\n* \u0027for-3.2/core\u0027 of git://git.kernel.dk/linux-block: (29 commits)\n  block: don\u0027t call blk_drain_queue() if elevator is not up\n  blk-throttle: use queue_is_locked() instead of lockdep_is_held()\n  blk-throttle: Take blkcg-\u003elock while traversing blkcg-\u003epolicy_list\n  blk-throttle: Free up policy node associated with deleted rule\n  block: warn if tag is greater than real_max_depth.\n  block: make gendisk hold a reference to its queue\n  blk-flush: move the queue kick into\n  blk-flush: fix invalid BUG_ON in blk_insert_flush\n  block: Remove the control of complete cpu from bio.\n  block: fix a typo in the blk-cgroup.h file\n  block: initialize the bounce pool if high memory may be added later\n  block: fix request_queue lifetime handling by making blk_queue_cleanup() properly shutdown\n  block: drop @tsk from attempt_plug_merge() and explain sync rules\n  block: make get_request[_wait]() fail if queue is dead\n  block: reorganize throtl_get_tg() and blk_throtl_bio()\n  block: reorganize queue draining\n  block: drop unnecessary blk_get/put_queue() in scsi_cmd_ioctl() and blk_get_tg()\n  block: pass around REQ_* flags instead of broken down booleans during request alloc/free\n  block: move blk_throtl prototypes to block/blk.h\n  block: fix genhd refcounting in blkio_policy_parse_and_set()\n  ...\n\nFix up trivial conflicts due to \"mddev_t\" -\u003e \"struct mddev\" conversion\nand making the request functions be of type \"void\" instead of \"int\" in\n - drivers/md/{faulty.c,linear.c,md.c,md.h,multipath.c,raid0.c,raid1.c,raid10.c,raid5.c}\n - drivers/staging/zram/zram_drv.c\n"
    },
    {
      "commit": "056075c76417b112b4924e7b6386fdc6dfc9ac03",
      "tree": "7326cbdb0f54f975b140e548bd4f4d6f4b3486cc",
      "parents": [
        "ec37d321b96621906337c4279c490e1b5893ecae"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Sun Jul 03 13:58:33 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 19:31:18 2011 -0400"
      },
      "message": "md: Add module.h to all files using it implicitly\n\nA pending cleanup will mean that module.h won\u0027t be implicitly\neverywhere anymore.  Make sure the modular drivers in md dir\nare actually calling out for \u003cmodule.h\u003e explicitly in advance.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "d890fa2b0586b6177b119643ff66932127d58afa",
      "tree": "48dfb1c192274002fc045996f49915a4d9af3bf8",
      "parents": [
        "355840e7a7e56bb2834fd3b0da64da5465f8aeaa"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 26 11:54:39 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 26 11:54:39 2011 +1100"
      },
      "message": "md: Fix some bugs in recovery_disabled handling.\n\nIn 3.0 we changed the way recovery_disabled was handle so that instead\nof testing against zero, we test an mddev-\u003e value against a conf-\u003e\nvalue.\nTwo problems:\n  1/ one place in raid1 was missed and still sets to \u00271\u0027.\n  2/ We didn\u0027t explicitly set the conf-\u003e value at array creation\n     time.\n     It defaulted to \u00270\u0027 just like the mddev value does so they\n     could appear equal and thus disable recovery.\n     This did not affect normal \u0027md\u0027 as it calls bind_rdev_to_array\n     which changes the mddev value.  However the dmraid interface\n     doesn\u0027t call this and so doesn\u0027t change -\u003erecovery_disabled; so at\n     array start all recovery is incorrectly disabled.\n\nSo initialise the \u0027conf\u0027 value to one less that the mddev value, so\nthe will only be the same when explicitly set that way.\n\nReported-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: NeilBrown  \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "355840e7a7e56bb2834fd3b0da64da5465f8aeaa",
      "tree": "8ba816b2db3b96872f744c476c3d3d0d3f12fd23",
      "parents": [
        "bd860c53d4f9cad520d233e1ba690aaacfb39e9b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 26 10:31:04 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 26 10:31:04 2011 +1100"
      },
      "message": "md/raid5: fix bug that could result in reads from a failed device.\n\nThis bug was introduced in 415e72d034c50520ddb7ff79e7d1792c1306f0c9\nwhich was in 2.6.36.\n\nThere is a small window of time between when a device fails and when\nit is removed from the array.  During this time we might still read\nfrom it, but we won\u0027t write to it - so it is possible that we could\nread stale data.\n\nWe didn\u0027t need the test of \u0027Faulty\u0027 before because the test on\nIn_sync is sufficient.  Since we started allowing reads from the early\npart of non-In_sync devices we need a test on Faulty too.\n\nThis is suitable for any kernel from 2.6.36 onwards, though the patch\nmight need a bit of tweaking in 3.0 and earlier.\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5c04b426f2e8b46cfc7969a35b2631063a3c646c",
      "tree": "2d27d9f5d2fe5d5e8fbc01a467ec58bcb50235c1",
      "parents": [
        "499337bb6511e665a236a6a947f819d98ea340c6",
        "899e3ee404961a90b828ad527573aaaac39f0ab1"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:30:42 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:30:42 2011 +0200"
      },
      "message": "Merge branch \u0027v3.1-rc10\u0027 into for-3.2/core\n\nConflicts:\n\tblock/blk-core.c\n\tinclude/linux/blkdev.h\n\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "84fc4b56db85cb9e05326424049973a2036c9940",
      "tree": "b8f942766ad620d63da92c24df56032168879253",
      "parents": [
        "29d3247ea2274bca0d0b7f41fcf3b82e0a8bc44c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:58 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:58 2011 +1100"
      },
      "message": "md: rename \"mdk_personality\" to \"md_personality\"\n\n\"mdk\" doesn\u0027t mean anything any more.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d1688a6d5515f1900af76a963b4bb6d9a6554cfa",
      "tree": "2ed2b1001804b6982697c3785f06580a4e84e31b",
      "parents": [
        "e8096360476689898f038feebf5b352c9ec43a2a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:52 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:52 2011 +1100"
      },
      "message": "md/raid5: typedef removal: raid5_conf_t -\u003e struct r5conf\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e373ab109172abc2d821bd3b5c1b400acddef5a5",
      "tree": "48ca1b8ded6ec90a47015ab7316fe8cadb9f8d05",
      "parents": [
        "69724e28ca99990a8f0b5370bb946d7704936d67"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:48:59 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:48:59 2011 +1100"
      },
      "message": "md/raid0: typedef removal: raid0_conf_t -\u003e struct r0conf\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "fd01b88c75a718020ff77e7f560d33835e9b58de",
      "tree": "c455d5adefd58f3263dcf265bb8ba2024523b106",
      "parents": [
        "3cb03002000f133f9f97269edefd73611eafc873"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:47:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:47:53 2011 +1100"
      },
      "message": "md: remove typedefs: mddev_t -\u003e struct mddev\n\nHaving mddev_t and \u0027struct mddev_s\u0027 is ugly and not preferred\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3cb03002000f133f9f97269edefd73611eafc873",
      "tree": "77fdb146666298b33aaeef0c05f082b6f82840fe",
      "parents": [
        "50de8df4abca1b27dbf7b2f81a56451bd8b5a7d8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:45:26 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:45:26 2011 +1100"
      },
      "message": "md: removing typedefs:  mdk_rdev_t -\u003e struct md_rdev\n\nThe typedefs are just annoying. \u0027mdk\u0027 probably refers to \u0027md_k.h\u0027\nwhich used to be an include file that defined this thing.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bdc04e6b15f70a8f96d8cdfe21df159a6466b49a",
      "tree": "23b762d044dafe35ac2fb20214fc1eff77a41bdd",
      "parents": [
        "db298e1946c074c83d97f1c959fbc0def2af2c86"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:23:04 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:23:04 2011 +1100"
      },
      "message": "md: remove some old DEBUGging code.\n\nThis code is not really helpful and is hard to maintain, so just\ndiscard it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "db298e1946c074c83d97f1c959fbc0def2af2c86",
      "tree": "1fb0ff7c0d6b85216d391e82b84af07b032fb987",
      "parents": [
        "0fc280f606742e8a2969776b2ab11cf6a614d9e1"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:23:00 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:23:00 2011 +1100"
      },
      "message": "md/raid5: convert to macros into inline functions.\n\nMore type-safety.  Easier to read.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e4f869d9de18bc8272df8d0ab764178aa24bdf33",
      "tree": "9782f85edbecdb83dab65f2fab4390264b0d7139",
      "parents": [
        "ce550c2059a67ee7834fc6f64cf895391d36a58e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:22:49 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:22:49 2011 +1100"
      },
      "message": "md/raid5: remove pointless NULL test.\n\nIn the \u0027abort\u0027 branch of run(), \u0027conf\u0027 cannot possibly be NULL,\nso remove the test.\n\nReported-by: Zdenek Kabelac \u003czdenek.kabelac@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "01f96c0a9922cd9919baf9d16febdf7016177a12",
      "tree": "a877fe509c4ef0db5252b7192df56009c1d06d6f",
      "parents": [
        "27a7b260f71439c40546b43588448faac01adb93"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 21 15:30:20 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 21 15:30:20 2011 +1000"
      },
      "message": "md: Avoid waking up a thread after it has been freed.\n\nTwo related problems:\n\n1/ some error paths call \"md_unregister_thread(mddev-\u003ethread)\"\n   without subsequently clearing -\u003ethread.  A subsequent call\n   to mddev_unlock will try to wake the thread, and crash.\n\n2/ Most calls to md_wakeup_thread are protected against the thread\n   disappeared either by:\n      - holding the -\u003emutex\n      - having an active request, so something else must be keeping\n        the array active.\n   However mddev_unlock calls md_wakeup_thread after dropping the\n   mutex and without any certainty of an active request, so the\n   -\u003ethread could theoretically disappear.\n   So we need a spinlock to provide some protections.\n\nSo change md_unregister_thread to take a pointer to the thread\npointer, and ensure that it always does the required locking, and\nclears the pointer properly.\n\nReported-by: \"Moshe Melnikov\" \u003cmoshe@zadarastorage.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\ncc: stable@kernel.org\n"
    },
    {
      "commit": "5a7bbad27a410350e64a2d7f5ec18fc73836c14f",
      "tree": "3447cd62dbcbd77b4071e2eb7576f1d7632ef2d3",
      "parents": [
        "c20e8de27fef9f59869c81c288ad6cf28200e00c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Sep 12 12:12:01 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Sep 12 12:12:01 2011 +0200"
      },
      "message": "block: remove support for bio remapping from -\u003emake_request\n\nThere is very little benefit in allowing to let a -\u003emake_request\ninstance update the bios device and sector and loop around it in\n__generic_make_request when we can archive the same through calling\ngeneric_make_request from the driver and letting the loop in\ngeneric_make_request handle it.\n\nNote that various drivers got the return value from -\u003emake_request and\nreturned non-zero values for errors.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "43220aa0f22cd3ce5b30246d50ccd696d119edea",
      "tree": "2738ff3d5acfbe899f30c4991175f945211e941d",
      "parents": [
        "7da64a0abc3b2c6cbd3521672e9bb74dd560bb89"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 31 12:49:14 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 31 12:49:14 2011 +1000"
      },
      "message": "md/raid5: fix a hang on device failure.\n\nWaiting for a \u0027blocked\u0027 rdev to become unblocked in the raid5d thread\ncannot work with internal metadata as it is the raid5d thread which\nwill clear the blocked flag.\nThis wasn\u0027t a problem in 3.0 and earlier as we only set the blocked\nflag when external metadata was used then.\nHowever we now set it always, so we need to be more careful.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b84db560ead5417b5594349512baf8837959df4f",
      "tree": "77f8cfe305a32ace5f4ead4eb820e3f9fa14ce67",
      "parents": [
        "73e92e51b7969ef5477dd28fe2ae4d77675896f4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "message": "md/raid5: Clear bad blocks on successful write.\n\nOn a successful write to a known bad block, flag the sh\nso that raid5d can remove the known bad block from the list.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "73e92e51b7969ef5477dd28fe2ae4d77675896f4",
      "tree": "05f3d45d6c686abed79c0e5fac1d0b61ae9f93bd",
      "parents": [
        "bc2607f393bd4fb844c1886a02af929ca0372056"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "message": "md/raid5.  Don\u0027t write to known bad block on doubtful devices.\n\nIf a device has seen write errors, don\u0027t write to any known\nbad blocks on that device.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bc2607f393bd4fb844c1886a02af929ca0372056",
      "tree": "45c7f9c538b5e196e389454286771f3beb8628ba",
      "parents": [
        "7f0da59bdc2f65795a57009d78f7753d3aea1de3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "message": "md/raid5: write errors should be recorded as bad blocks if possible.\n\nWhen a write error is detected, don\u0027t mark the device as failed\nimmediately but rather record the fact for handle_stripe to deal with.\n\nHandle_stripe then attempts to record a bad block.  Only if that fails\ndoes the device get marked as faulty.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    }
  ],
  "next": "7f0da59bdc2f65795a57009d78f7753d3aea1de3"
}
