)]}'
{
  "log": [
    {
      "commit": "ee0b0244030434cdda26777bfb98962447e080cd",
      "tree": "f2e59eeed60c0b76f6f53c63221114f2c0d3dbe2",
      "parents": [
        "f96c9f305c24a0d4a075e2c75aa6b417aa238687"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Feb 25 12:38:29 2013 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Feb 26 11:58:50 2013 +1100"
      },
      "message": "md/raid1,raid10: fix deadlock with freeze_array()\n\nWhen raid1/raid10 needs to fix a read error, it first drains\nall pending requests by calling freeze_array().\nThis calls flush_pending_writes() if it needs to sleep,\nbut some writes may be pending in a per-process plug rather\nthan in the per-array request queue.\n\nWhen raid1{,0}_unplug() moves the request from the per-process\nplug to the per-array request queue (from which\nflush_pending_writes() can flush them), it needs to wake up\nfreeze_array(), or freeze_array() will never flush them and so\nit will block forever.\n\nSo add the requires wake_up() calls.\n\nThis bug was introduced by commit\n   f54a9d0e59c4bea3db733921ca9147612a6f292c\nfor raid1 and a similar commit for RAID10, and so has been present\nsince linux-3.6.  As the bug causes a deadlock I believe this fix is\nsuitable for -stable.\n\nCc: stable@vger.kernel.org (3.6.y 3.7.y 3.8.y)\nReported-by: Tregaron Bayly \u003ctbayly@bluehost.com\u003e\nTested-by: Tregaron Bayly \u003ctbayly@bluehost.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c8dc9c654794a765ca61baed07f84ed8aaa7ca8c",
      "tree": "81dea728ef7bcaa01fb7e06c1e731d76dd258dff",
      "parents": [
        "bbfa57c0f2243a7c31fd248d22e9861a2802cad5"
      ],
      "author": {
        "name": "Joe Lawrence",
        "email": "Joe.Lawrence@stratus.com",
        "time": "Thu Feb 21 13:28:09 2013 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Feb 26 11:55:21 2013 +1100"
      },
      "message": "md: raid1,10: Handle REQ_WRITE_SAME flag in write bios\n\nSet mddev queue\u0027s max_write_same_sectors to its chunk_sector value (before\ndisk_stack_limits merges the underlying disk limits.)  With that in place,\nbe sure to handle writes coming down from the block layer that have the\nREQ_WRITE_SAME flag set.  That flag needs to be copied into any newly cloned\nwrite bio.\n\nSigned-off-by: Joe Lawrence \u003cjoe.lawrence@stratus.com\u003e\nAcked-by: \"Martin K. Petersen\" \u003cmartin.petersen@oracle.com\u003e\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": "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": "874807a83139abc094f939e93623c5623573d543",
      "tree": "c36b108b47272d31cbe906cb4267829c02e9c121",
      "parents": [
        "884162df2aadd7414bef4935e1a54976fd4e3988"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 27 12:14:40 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 27 12:14:40 2012 +1100"
      },
      "message": "md/raid1{,0}: fix deadlock in bitmap_unplug.\n\nIf the raid1 or raid10 unplug function gets called\nfrom a make_request function (which is very possible) when\nthere are bios on the current-\u003ebio_list list, then it will not\nbe able to successfully call bitmap_unplug() and it could\nneed to submit more bios and wait for them to complete.\nBut they won\u0027t complete while current-\u003ebio_list is non-empty.\n\nSo detect that case and handle the unplugging off to another thread\njust like we already do when called from within the scheduler.\n\nRAID1 version of bug was introduced in 3.6, so that part of fix is\nsuitable for 3.6.y.  RAID10 part won\u0027t apply.\n\nCc: stable@vger.kernel.org\nReported-by: Torsten Kaiser \u003cjust.for.lkml@googlemail.com\u003e\nReported-by: Peter Maloney \u003cpeter.maloney@brockmann-consult.de\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "02b898f2f04e418094f0093a3ad0b415bcdbe8eb",
      "tree": "d66e05604b227e9b952db28fd796013a5cf22515",
      "parents": [
        "0be1fecd7ee61b5a6d2b2e94b052b8a070b946ef"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 31 11:42:03 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 31 11:42:03 2012 +1100"
      },
      "message": "md/raid1: Fix assembling of arrays containing Replacements.\n\nsetup_conf in raid1.c uses conf-\u003eraid_disks before assigning\na value.  It is used when including \u0027Replacement\u0027 devices.\n\nThe consequence is that assembling an array which contains a\nreplacement will misbehave and either not include the replacement, or\nnot include the device being replaced.\n\nThough this doesn\u0027t lead directly to data corruption, it could lead to\nreduced data safety.\n\nSo use mddev-\u003eraid_disks, which is initialised, instead.\n\nBug was introduced by commit c19d57980b38a5bb613a898937a1cf85f422fb9b\n      md/raid1: recognise replacements when assembling arrays.\n\nin 3.3, so fix is suitable for 3.3.y thru 3.6.y.\n\nCc: stable@vger.kernel.org\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": "7ad4d4a68a1a19f21c7b39cb3f51bf17fba6e3d0",
      "tree": "9a93ab26f6354988241dc003a9ab16b77a3d75d3",
      "parents": [
        "fd177481b440c3f7b5ee9b821a76b29fdf2a6712"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:44:30 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:44:30 2012 +1100"
      },
      "message": "md/raid1: Don\u0027t release reference to device while handling read error.\n\nWhen we get a read error, we arrange for raid1d to handle it.\nCurrently we release the reference on the device.  This can result\nin\n   conf-\u003emirrors[read_disk].rdev\nbeing NULL in fix_read_error, if the device happens to get removed\nbefore the read error is handled.\n\nSo instead keep the reference until the read error has been fully\nhandled.\n\nReported-by: hank \u003cpyu@redhat.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": "2ff8cc2c6d4e323de71a42affeb3041fa17d5b10",
      "tree": "12534cc77da4d06872e29b7eb114ca2c57b97478",
      "parents": [
        "c83057a1f4f987327c49448b046d9625c612ed8e"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@fusionio.com",
        "time": "Thu Oct 11 13:28:54 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 11 13:28:54 2012 +1100"
      },
      "message": "md: raid 1 supports TRIM\n\nThis makes md raid 1 support TRIM.\nIf one disk supports discard and another not, or one has discard_zero_data and\nanother not, there could be inconsistent between data from such disks. But this\nshould not matter, discarded data is useless. This will add extra copy in rebuild\nthough.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.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": "f54a9d0e59c4bea3db733921ca9147612a6f292c",
      "tree": "e17aa5d2a7220cfe7466cc4f8c74af5ed672a591",
      "parents": [
        "46a06401f6ba13e59d24746fa9ffa6773b69eee3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Aug 02 08:33:20 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Aug 02 08:33:20 2012 +1000"
      },
      "message": "md/raid1: submit IO from originating thread instead of md thread.\n\nqueuing writes to the md thread means that all requests go through the\none processor which may not be able to keep up with very high request\nrates.\n\nSo use the plugging infrastructure to submit all requests on unplug.\nIf a \u0027schedule\u0027 is needed, we fall back on the old approach of handing\nthe requests to the thread for it to handle.\n\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": "d57368afe63b3b7b45ce6c2b8c5276417935be2f",
      "tree": "f9748e1f4ecd42a416e922e3d5890dc32194a4dd",
      "parents": [
        "895e3c5c58a80bb9e4e05d9ac38b4f30e0f97d80"
      ],
      "author": {
        "name": "Alexander Lyakas",
        "email": "alex.bolshoy@gmail.com",
        "time": "Tue Jul 17 13:17:55 2012 +0300"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 12:01:29 2012 +1000"
      },
      "message": "md/RAID1: Add missing case for attempting to repair known bad blocks.\n\nWhen doing resync or repair, attempt to correct bad blocks, according\nto WriteErrorSeen policy\n\nSigned-off-by: Alex Lyakas \u003calex.bolshoy@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b7219ccb33aa0df9949a60c68b5e9f712615e56f",
      "tree": "64f89f9a0270134c1895ddfe230bc6e862213ab0",
      "parents": [
        "90cf195d9bcb4bf70e8b6df5073b05164b279ba0"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 10:05:34 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 10:05:34 2012 +1000"
      },
      "message": "md/raid1: don\u0027t abort a resync on the first badblock.\n\nIf a resync of a RAID1 array with 2 devices finds a known bad block\none device it will neither read from, or write to, that device for\nthis block offset.\nSo there will be one read_target (The other device) and zero write\ntargets.\nThis condition causes md/raid1 to abort the resync assuming that it\nhas finished - without known bad blocks this would be true.\n\nWhen there are no write targets because of the presence of bad blocks\nwe should only skip over the area covered by the bad block.\nRAID10 already gets this right, raid1 doesn\u0027t.  Or didn\u0027t.\n\nAs this can cause a \u0027sync\u0027 to abort early and appear to have succeeded\nit could lead to some data corruption, so it suitable for -stable.\n\nCc: stable@vger.kernel.org\nReported-by: Alexander Lyakas \u003calex.bolshoy@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "12cee5a8a29e7263e39953f1d941f723c617ca5f",
      "tree": "8aaf2fe512cf82e0640656640335ea2d7f0b2ec0",
      "parents": [
        "9dedf60313fa4dddfd5b9b226a0ef12a512bf9dc"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Tue Jul 31 10:03:53 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 10:03:53 2012 +1000"
      },
      "message": "md/raid1: prevent merging too large request\n\nFor SSD, if request size exceeds specific value (optimal io size), request size\nisn\u0027t important for bandwidth. In such condition, if making request size bigger\nwill cause some disks idle, the total throughput will actually drop. A good\nexample is doing a readahead in a two-disk raid1 setup.\n\nSo when should we split big requests? We absolutly don\u0027t want to split big\nrequest to very small requests. Even in SSD, big request transfer is more\nefficient. This patch only considers request with size above optimal io size.\n\nIf all disks are busy, is it worth doing a split? Say optimal io size is 16k,\ntwo requests 32k and two disks. We can let each disk run one 32k request, or\nsplit the requests to 4 16k requests and each disk runs two. It\u0027s hard to say\nwhich case is better, depending on hardware.\n\nSo only consider case where there are idle disks. For readahead, split is\nalways better in this case. And in my test, below patch can improve \u003e 30%\nthoughput. Hmm, not 100%, because disk isn\u0027t 100% busy.\n\nSuch case can happen not just in readahead, for example, in directio. But I\nsuppose directio usually will have bigger IO depth and make all disks busy, so\nI ignored it.\n\nNote: if the raid uses any hard disk, we don\u0027t prevent merging. That will make\nperformace worse.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9dedf60313fa4dddfd5b9b226a0ef12a512bf9dc",
      "tree": "36e8f400d7c858da776bf74f40e0ca71829ecb05",
      "parents": [
        "be4d3280b17bc51f23ec6ebb345728f302f80a0c"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Tue Jul 31 10:03:53 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 10:03:53 2012 +1000"
      },
      "message": "md/raid1: read balance chooses idlest disk for SSD\n\nSSD hasn\u0027t spindle, distance between requests means nothing. And the original\ndistance based algorithm sometimes can cause severe performance issue for SSD\nraid.\n\nConsidering two thread groups, one accesses file A, the other access file B.\nThe first group will access one disk and the second will access the other disk,\nbecause requests are near from one group and far between groups. In this case,\nread balance might keep one disk very busy but the other relative idle.  For\nSSD, we should try best to distribute requests to as many disks as possible.\nThere isn\u0027t spindle move penality anyway.\n\nWith below patch, I can see more than 50% throughput improvement sometimes\ndepending on workloads.\n\nThe only exception is small requests can be merged to a big request which\ntypically can drive higher throughput for SSD too. Such small requests are\nsequential reads. Unlike hard disk, sequential read which can\u0027t be merged (for\nexample direct IO, or read without readahead) can be ignored for SSD. Again\nthere is no spindle move penality. readahead dispatches small requests and such\nrequests can be merged.\n\nLast patch can help detect sequential read well, at least if concurrent read\nnumber isn\u0027t greater than raid disk number. In that case, distance based\nalgorithm doesn\u0027t work well too.\n\nV2: For hard disk and SSD mixed raid, doesn\u0027t use distance based algorithm for\nrandom IO too. This makes the algorithm generic for raid with SSD.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "be4d3280b17bc51f23ec6ebb345728f302f80a0c",
      "tree": "1fc4e6d04fd57667b6b496ae6165d08f59405743",
      "parents": [
        "cc4d1efdd017083bbcbaf23feb4cdc717fa7dab8"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Tue Jul 31 10:03:53 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 10:03:53 2012 +1000"
      },
      "message": "md/raid1: make sequential read detection per disk based\n\nCurrently the sequential read detection is global wide. It\u0027s natural to make it\nper disk based, which can improve the detection for concurrent multiple\nsequential reads. And next patch will make SSD read balance not use distance\nbased algorithm, where this change help detect truly sequential read for SSD.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "473e87ce485ffcac041f7911b33f0b4cd4d6cf2b",
      "tree": "01ae284e058d1805055bf153dd9175f1782181e8",
      "parents": [
        "0eaf822cb3dfcf2a64b2d27f4f6219186adb2695"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Jul 31 10:03:52 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 10:03:52 2012 +1000"
      },
      "message": "MD: Move macros from raid1*.h to raid1*.c\n\nMD RAID1/RAID10: Move some macros from .h file to .c file\n\nThere are three macros (IO_BLOCKED,IO_MADE_GOOD,BIO_SPECIAL) which are defined\nin both raid1.h and raid10.h.  They are only used in there respective .c files.\nHowever, if we wish to make RAID10 accessible to the device-mapper RAID\ntarget (dm-raid.c), then we need to move these macros into the .c files where\nthey are used so that they do not conflict with each other.\n\nThe macros from the two files are identical and could be moved into md.h, but\nI chose to leave the duplication and have them remain in the personality\nfiles.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0eaf822cb3dfcf2a64b2d27f4f6219186adb2695",
      "tree": "9ff680dca1ecb054793f90df472cedd63d32498d",
      "parents": [
        "dc280d987f039ef35ac1e59c09b7154b61f385cf"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Jul 31 10:03:52 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 31 10:03:52 2012 +1000"
      },
      "message": "MD RAID1: rename mirror_info structure\n\nMD RAID1: Rename the structure \u0027mirror_info\u0027 to \u0027raid1_info\u0027\n\nThe same structure name (\u0027mirror_info\u0027) is used by raid10.  Each of these\nstructures are defined in there respective header files.  If dm-raid is\nto support both RAID1 and RAID10, the header files will be included and\nthe structure names must not collide.  While only one of these structure\nnames needs to change, this patch adds consistency to the naming of the\nstructure.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "58e94ae18478c08229626daece2fc108a4a23261",
      "tree": "b4711cd5bbd18c01ffd11d18b1a65c5eecebf8d5",
      "parents": [
        "a05b7ea03d72f36edb0cec05e8893803335c61a0"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 19 15:59:18 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 19 15:59:18 2012 +1000"
      },
      "message": "md/raid1: close some possible races on write errors during resync\n\ncommit 4367af556133723d0f443e14ca8170d9447317cb\n   md/raid1: clear bad-block record when write succeeds.\n\nAdded a \u0027reschedule_retry\u0027 call possibility at the end of\nend_sync_write, but didn\u0027t add matching code at the end of\nsync_request_write.  So if the writes complete very quickly, or\nscheduling makes it seem that way, then we can miss rescheduling\nthe request and the resync could hang.\n\nAlso commit 73d5c38a9536142e062c35997b044e89166e063b\n    md: avoid races when stopping resync.\n\nFix a race condition in this same code in end_sync_write but didn\u0027t\nmake the change in sync_request_write.\n\nThis patch updates sync_request_write to fix both of those.\nPatch is suitable for 3.1 and later kernels.\n\nReported-by: Alexander Lyakas \u003calex.bolshoy@gmail.com\u003e\nOriginal-version-by: Alexander Lyakas \u003calex.bolshoy@gmail.com\u003e\nCc: stable@vger.kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2d4f4f3384d4ef4f7c571448e803a1ce721113d5",
      "tree": "6da1215ad5e15314aa41194ac9b0a13a8c3a2a00",
      "parents": [
        "10684112c9d154172ac34e48a2ab68649e8f63ac"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 09 11:34:13 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 09 11:34:13 2012 +1000"
      },
      "message": "md/raid1: fix use-after-free bug in RAID1 data-check code.\n\nThis bug has been present ever since data-check was introduce\nin 2.6.16.  However it would only fire if a data-check were\ndone on a degraded array, which was only possible if the array\nhas 3 or more devices.  This is certainly possible, but is quite\nuncommon.\n\nSince hot-replace was added in 3.3 it can happen more often as\nthe same condition can arise if not all possible replacements are\npresent.\n\nThe problem is that as soon as we submit the last read request, the\n\u0027r1_bio\u0027 structure could be freed at any time, so we really should\nstop looking at it.  If the last device is being read from we will\nstop looking at it.  However if the last device is not due to be read\nfrom, we will still check the bio pointer in the r1_bio, but the\nr1_bio might already be free.\n\nSo use the read_targets counter to make sure we stop looking for bios\nto submit as soon as we have submitted them all.\n\nThis fix is suitable for any -stable kernel since 2.6.16.\n\nCc: stable@vger.kernel.org\nReported-by: Arnold Schulz \u003carnysch@gmx.net\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": "32644afd8975d19174bcb9ba34687c32dd810a09",
      "tree": "10c55615d0edcb34af0dd2b9d1cdf09cbf34b45d",
      "parents": [
        "fab363b5ff502d1b39ddcfec04271f5858d9f26e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 15:58:42 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 15:58:42 2012 +1000"
      },
      "message": "md/raid1: fix bug in read_balance introduced by hot-replace\n\nWhen we added hot_replace we doubled the number of devices\nthat could be in a RAID1 array.  So we doubled how far read_balance\nwould search.  Unfortunately we didn\u0027t double the point at which\nit looped back to the beginning - so it effectively loops over\nall non-replacement disks twice.\nThis doesn\u0027t cause bad behaviour, but it pointless and means we\nnever read from replacement devices.\n\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": "aba336bd1d46d6b0404b06f6915ed76150739057",
      "tree": "6517e35ba3f6df77276d9c4e81d8ec726228aacd",
      "parents": [
        "2aa4ee2a8805ec0260dde971e9e6699917c868a7"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 31 15:39:11 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 31 15:56:30 2012 +1000"
      },
      "message": "md: raid1/raid10: fix problem with merge_bvec_fn\n\nThe new merge_bvec_fn which calls the corresponding function\nin subsidiary devices requires that mddev-\u003emerge_check_needed\nbe set if any child has a merge_bvec_fn.\n\nHowever were were only setting that when a device was hot-added,\nnot when a device was present from the start.\n\nThis bug was introduced in 3.4 so patch is suitable for 3.4.y\nkernels.  However that are conflicts in raid10.c so a separate\npatch will be needed for 3.4.y.\n\nCc: stable@vger.kernel.org\nReported-by: Sebastian Riemer \u003csebastian.riemer@profitbricks.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4f0a5e012cf41321d611e7cad63e1017d143d138",
      "tree": "3018a9cb99e99d683174dc6ab2d2223a53b2a124",
      "parents": [
        "c32fb9e7ecee25a5b6a45bf968dfef76f323e185"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue May 22 13:55:31 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 22 13:55:31 2012 +1000"
      },
      "message": "MD RAID1: Further conditionalize \u0027fullsync\u0027\n\nA RAID1 device does not necessarily need a fullsync if the bitmap can be used instead.\n\nSimilar to commit d6b212f4b19da5301e6b6eca562e5c7a2a6e8c8d in raid5.c, if a raid1\ndevice can be brought back (i.e. from a transient failure) it shouldn\u0027t need a\ncomplete resync.  Provided the bitmap is not to old, it will have recorded the areas\nof the disk that need recovery.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\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": "da8840a747c0dbf49506ec906757a6b87b9741e9",
      "tree": "127835ac03aaf4f3ecd188c665a9970047174c26",
      "parents": [
        "4fa2f327681808f653711e14203a42cf4644bda0"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Tue May 22 13:55:03 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 22 13:55:03 2012 +1000"
      },
      "message": "md/raid1: allow fix_read_error to read from recovering device.\n\nWhen attempting to fix a read error, it is acceptable to read from a\ndevice that is recovering, provided the recovery has got past the\nplace we are reading from.  This makes the test for \"can we read from\nhere\" the same as the test in read_balance.\n\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\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": "f4380a915823dbed0bf8e3cf502ebcf2b7c7f833",
      "tree": "1326179e1f715f33495066b2fe4b99acf1bbdd96",
      "parents": [
        "9e41dd35b39c2cf40767332b8f914d7afe25cc40"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Thu Apr 12 16:04:47 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Apr 12 16:04:47 2012 +1000"
      },
      "message": "md/raid1,raid10: Fix calculation of \u0027vcnt\u0027 when processing error recovery.\n\nIf r1bio-\u003esectors % 8 !\u003d 0,then the memcmp and a later\nmemcpy will omit the last bio_vec.\n\nThis is suitable for any stable kernel since 3.1 when bad-block\nmanagement was introduced.\n\nCc: stable@vger.kernel.org\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5020ad7d143ccfcf8149974096220d59e5572120",
      "tree": "0124b6866ecd63b3a8913a6661e1d96699d60b71",
      "parents": [
        "c6d2e084c7411f61f2b446d94989e5aaf9879b0f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 02 01:39:05 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Apr 03 15:39:23 2012 +1000"
      },
      "message": "md/raid1,raid10: don\u0027t compare excess byte during consistency check.\n\nWhen comparing two pages read from different legs of a mirror, only\ncompare the bytes that were read, not the whole page.\n\nIn most cases we read a whole page, but in some cases with\nbad blocks or odd sizes devices we might read fewer than that.\n\nThis bug has been present \"forever\" but at worst it might cause\na report of two many mismatches and generate a little bit\nextra resync IO, so there is no need to back-port to -stable\nkernels.\n\nReported-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a42f9d83b5c05dc6e678a1f0cd9767502c2c58de",
      "tree": "e1864a59287f1441a4b016938efea5ca30a57df1",
      "parents": [
        "24b961f811a3e790a9b93604d2594bfb6cce4fa4"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Mon Apr 02 01:04:19 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Apr 03 15:37:33 2012 +1000"
      },
      "message": "md/raid1:Remove unnecessary rcu_dereference(conf-\u003emirrors[i].rdev).\n\nBecause rde-\u003enr_pending \u003e 0,so can not remove this disk.\nAnd in any case, we aren\u0027t holding rcu_read_lock()\n\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5220ea1e640869e70f894837678315c878c651fd",
      "tree": "b18af9d438b634e81bd5d87c2323ae58d52eaf73",
      "parents": [
        "0366ef847581d692e197b88825867ca9ee00e358"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Mon Apr 02 09:48:38 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 02 09:48:38 2012 +1000"
      },
      "message": "md/raid1: If md_integrity_register() failed,run() must free the mem\n\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6b740b8d79252f13bcb7e5d3c1d43157e78a81e7",
      "tree": "4b99f8fb395e7a205a85766d1bd241dce39c4337",
      "parents": [
        "050b66152f87c79e8d66aed0e7996f9336462d5f"
      ],
      "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/raid1: handle merge_bvec_fn in member devices.\n\nCurrently we don\u0027t honour merge_bvec_fn in member devices so if there\nis one, we force all requests to be single-page at most.\nThis is not ideal.\n\nSo create a raid1 merge_bvec_fn to check that function in children\nas well.\n\nThis introduces a small problem.  There is no locking around calls\nthe -\u003emerge_bvec_fn and subsequent calls to -\u003emake_request.  So a\ndevice added between these could end up getting a request which\nviolates its merge_bvec_fn.\n\nCurrently the best we can do is synchronize_sched().  This will work\nproviding no preemption happens.  If there is is preemption, we just\nhave to hope that new devices are largely consistent with old devices.\n\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": "d6b42dcb995e6acd7cc276774e751ffc9f0ef4bf",
      "tree": "a9112351e8ddd2866afd8687b645a1c5bf574ee7",
      "parents": [
        "4474ca42e2577563a919fd3ed782e2ec55bf11a2"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:38 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:38 2012 +1100"
      },
      "message": "md/raid1,raid10: avoid deadlock during resync/recovery.\n\nIf RAID1 or RAID10 is used under LVM or some other stacking\nblock device, it is possible to enter a deadlock during\nresync or recovery.\nThis can happen if the upper level block device creates\ntwo requests to the RAID1 or RAID10.  The first request gets\nprocessed, blocks recovery and queue requests for underlying\nrequests in current-\u003ebio_list.  A resync request then starts\nwhich will wait for those requests and block new IO.\n\nBut then the second request to the RAID1/10 will be attempted\nand it cannot progress until the resync request completes,\nwhich cannot progress until the underlying device requests complete,\nwhich are on a queue behind that second request.\n\nSo allow that second request to proceed even though there is\na resync request about to start.\n\nThis is suitable for any -stable kernel.\n\nCc: stable@vger.kernel.org\nReported-by: Ray Morris \u003csupport@bettercgi.com\u003e\nTested-by: Ray Morris \u003csupport@bettercgi.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f53e29fc87b6fb76db0043202ec2c3450caa5ff3",
      "tree": "b1f8705e420775a40ebb2f26132fe27184b82fbb",
      "parents": [
        "db91ff55bdf06736b849afc1b1fce5763bbb8d5d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Feb 13 14:24:05 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Feb 13 14:24:05 2012 +1100"
      },
      "message": "md/raid1: fix buglet in md_raid1_contested.\n\nSince we added \u0027replacement\u0027 capability, RAID1 can have twice\nas many devices as -\u003eraid_disks indicates.\nSo md_raid1_congested needs to check that many possible devices,\nnot just -\u003eraid_disks many.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "307729c8bc5b5a41361af8af95906eee7552acb1",
      "tree": "9b20fe9c898ee4de85b64a8e41c92123dae0b093",
      "parents": [
        "f2a371c5e74dd5685ab47effa4ac7b23b1fdaae5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jan 09 01:41:51 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jan 11 08:35:17 2012 +1100"
      },
      "message": "md/raid1: perform bad-block tests for WriteMostly devices too.\n\nWe normally try to avoid reading from write-mostly devices, but when\nwe do we really have to check for bad blocks and be sure not to\ntry reading them.\n\nWith the current code, best_good_sectors might not get set and that\ncauses zero-length read requests to be send down which is very\nconfusing.\n\nThis bug was introduced in commit d2eb35acfdccbe2 and so the patch\nis suitable for 3.1.x and 3.2.x\n\nReported-and-tested-by: Michał Mirosław \u003cmirq-linux@rere.qmqm.pl\u003e\nReported-and-tested-by: Art -kwaak- van Breemen \u003card@telegraafnet.nl\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "19d671695e1931ebfd75b2b888778201aefe35ca",
      "tree": "b3c54cdb0812632f830453b6a6c9b8b966c9dcc4",
      "parents": [
        "7ef449d1ec3668acbba6af6a500d0c84636b436f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:57 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:57 2011 +1100"
      },
      "message": "md/raid1: Mark device want_replacement when we see a write error.\n\nNow that WantReplacement drives are replaced cleanly, mark a drive\nas want_replacement 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\nSigned-off-by:  NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7ef449d1ec3668acbba6af6a500d0c84636b436f",
      "tree": "4a9e23c9b88f404e896ba8748bdc7bb2b18ec65c",
      "parents": [
        "c19d57980b38a5bb613a898937a1cf85f422fb9b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:57 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:57 2011 +1100"
      },
      "message": "md/raid1: If there is a spare and a want_replacement device, start replacement.\n\nWhen attempting to add a spare to a RAID1 array, also consider\nadding it as a replacement for a want_replacement device.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c19d57980b38a5bb613a898937a1cf85f422fb9b",
      "tree": "ddc9f7ae53a4cd0464240ec8c49c03d35823a103",
      "parents": [
        "8c7a2c2bcfaf0ee29c74437a4814d1aa780d6a26"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:57 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:57 2011 +1100"
      },
      "message": "md/raid1: recognise replacements when assembling arrays.\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\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8c7a2c2bcfaf0ee29c74437a4814d1aa780d6a26",
      "tree": "74093a74ea43965f04502bc5d71b6976a74c7305",
      "parents": [
        "b014f14c81bc5db4e40e2a4db10998fd79c1c64c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:57 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:57 2011 +1100"
      },
      "message": "md/raid1: handle activation of replacement device when recovery completes.\n\nWhen recovery completes -\u003espare_active is called.\nThis checks if the replacement is ready and if so it fails\nthe original.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b014f14c81bc5db4e40e2a4db10998fd79c1c64c",
      "tree": "78c5499e8af9a3e850ca2f93d215c53d55c40003",
      "parents": [
        "8f19ccb2fd70deb1f278be5e75076074cfddee46"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:56 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:56 2011 +1100"
      },
      "message": "md/raid1: Allow a failed replacement device to be removed.\n\nReplacement devices are stored at a different offset, so look\nthere too.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8f19ccb2fd70deb1f278be5e75076074cfddee46",
      "tree": "59419e814d4d02dfdefaf6f5ef152c3468c890e8",
      "parents": [
        "301946364e0aa67c4cfaec82e94c389993c9f7c6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:56 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:56 2011 +1100"
      },
      "message": "md/raid1: Allocate spare to store replacement devices and their bios.\n\nIn RAID1, a replacement is much like a normal device, so we just\ndouble the size of the relevant arrays and look at all possible\ndevices for reads and writes.\n\nThis means that the array looks like it is now double the size in some\nway - we need to be careful about that.\nIn particular, we checking if the array is still degraded while\ncreating a recovery request we need to only consider the first \u0027half\u0027\n- i.e. the real (non-replacement) devices.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "301946364e0aa67c4cfaec82e94c389993c9f7c6",
      "tree": "fff6390d22ba68f6726700cd4979f0de4c205a6f",
      "parents": [
        "b7044d41b5a09ce9082699f74c8f10e0fe59f704"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:56 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:56 2011 +1100"
      },
      "message": "md/raid1:  Replace use of mddev-\u003eraid_disks with conf-\u003eraid_disks.\n\nIn general mddev-\u003eraid_disks can change unexpectedly while\nconf-\u003eraid_disks will only change in a very controlled way.  So change\nsome uses of one to the other.\n\nThe use of mddev-\u003eraid_disks will not cause actually problems but\nthis way is more consistent and safer in the long term.\n\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": "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": "9562ad9ab36df7ccef920d119f3b5100025db95f",
      "tree": "b5e32ca469cbefca4122c1a08db80cdb12e655fb",
      "parents": [
        "e890413af4c2dfebf5432ef30cc70cb11dad3213"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Oct 24 16:11:30 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Mon Oct 24 16:11:30 2011 +0200"
      },
      "message": "block: Remove the control of complete cpu from bio.\n\nbio originally has the functionality to set the complete cpu, but\nit is broken.\n\nChirstoph said that \"This code is unused, and from the all the\ndiscussions lately pretty obviously broken.  The only thing keeping\nit serves is creating more confusion and possibly more bugs.\"\n\nAnd Jens replied with \"We can kill bio_set_completion_cpu(). I\u0027m fine\nwith leaving cpu control to the request based drivers, they are the\nonly ones that can toggle the setting anyway\".\n\nSo this patch tries to remove all the work of controling complete cpu\nfrom a bio.\n\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\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": "34db0cd60f8a1f4ab73d118a8be3797c20388223",
      "tree": "45d1d629d6b9195d47d30980595686c9a3ee92f9",
      "parents": [
        "84fc4b56db85cb9e05326424049973a2036c9940"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:50:01 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:50:01 2011 +1100"
      },
      "message": "md: add proper write-congestion reporting to RAID1 and RAID10.\n\nRAID1 and RAID10 handle write requests by queuing them for handling by\na separate thread.  This is because when a write-intent-bitmap is\nactive we might need to update the bitmap first, so it is good to\nqueue a lot of writes, then do one big bitmap update for them all.\n\nHowever writeback request devices to appear to be congested after a\nwhile so it can make some guesstimate of throughput.  The infinite\nqueue defeats that (note that RAID5 has already has a finite queue so\nit doesn\u0027t suffer from this problem).\n\nSo impose a limit on the number of pending write requests.  By default\nit is 1024 which seems to be generally suitable.  Make it configurable\nvia module option just in case someone finds a regression.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\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": "e8096360476689898f038feebf5b352c9ec43a2a",
      "tree": "e7570a5fc3cb0e40f29c55470a2261e03c44a8d1",
      "parents": [
        "e879a8793f915aa7933364d962d2435bd71de462"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:05 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:05 2011 +1100"
      },
      "message": "md/raid1: typedef removal: conf_t -\u003e struct r1conf\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0f6d02d580ca77ee4be085c29c5fe5b879df24d9",
      "tree": "6ac3a0f3fba6cc6f8d66e9c413460ab5a740db8e",
      "parents": [
        "9f2c9d12bcc53fcb3b787023723754e84d1aef8b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:48:46 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:48:46 2011 +1100"
      },
      "message": "md: remove typedefs: mirror_info_t -\u003e struct mirror_info\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9f2c9d12bcc53fcb3b787023723754e84d1aef8b",
      "tree": "85fbc63c6e480bdebe06529e1af4d3d483d70452",
      "parents": [
        "2b8bf3451d1e3133ebc3998721d14013a6c27114"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:48:43 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:48:43 2011 +1100"
      },
      "message": "md: remove typedefs: r10bio_t -\u003e struct r10bio and r1bio_t -\u003e struct r1bio\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": "36a4e1fe0f454146724c174bf7c1e8e76297a212",
      "tree": "57f0de83fda98e5ae1b4f66d5e993ca27386a793",
      "parents": [
        "bdc04e6b15f70a8f96d8cdfe21df159a6466b49a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:23:17 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:23:17 2011 +1100"
      },
      "message": "md: remove PRINTK and dprintk debugging and use pr_debug\n\nBeing able to dynamically enable these make them much more useful.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0fc280f606742e8a2969776b2ab11cf6a614d9e1",
      "tree": "5725762cf7bc5eddcf0007584dfa7ba6eb67d3d8",
      "parents": [
        "ba3ae3bee317f0a5db813c026c8a8c113a4e40fb"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:22:55 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:22:55 2011 +1100"
      },
      "message": "md/raid1/ avoid bio search in end_sync_read()\n\nWe know which device we just read from so we don\u0027t need to\nsearch the bios to find out.  Just use -\u003eread_disk.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ba3ae3bee317f0a5db813c026c8a8c113a4e40fb",
      "tree": "30a8c9d55afc32156973a3b1efb1cec94f4411d4",
      "parents": [
        "e4f869d9de18bc8272df8d0ab764178aa24bdf33"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Fri Oct 07 14:22:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:22:53 2011 +1100"
      },
      "message": "md/raid1: factor out common bio handling code\n\nWhen normal-write and sync-read/write bio completes, we should\nfind out the disk number the bio belongs to. Factor those common\ncode out to a separate function.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@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": "079fa166a2874985ae58b2e21e26e1cbc91127d4",
      "tree": "39f67f9078465bd67c29216b35370a78907e4f3b",
      "parents": [
        "19d5f834d6aff7efb1c9353523865c5bce869470"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sat Sep 10 17:21:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sat Sep 10 17:21:23 2011 +1000"
      },
      "message": "md/raid1,10: Remove use-after-free bug in make_request.\n\nA single request to RAID1 or RAID10 might result in multiple\nrequests if there are known bad blocks that need to be avoided.\n\nTo detect if we need to submit another write request we test:\n \tif (sectors_handled \u003c (bio-\u003ebi_size \u003e\u003e 9)) {\n\nHowever this is after we call **_write_done() so the \u0027bio\u0027 no longer\nbelongs to us - the writes could have completed and the bio freed.\n\nSo move the **_write_done call until after the test against\nbio-\u003ebi_size.\n\nThis addresses https://bugzilla.kernel.org/show_bug.cgi?id\u003d41862\n\nReported-by: Bruno Wolff III \u003cbruno@wolff.to\u003e\nTested-by: Bruno Wolff III \u003cbruno@wolff.to\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "62096bce231b3760882ed91205fc84682d6b0529",
      "tree": "90b8a89be6f3c1983e88a4b0fe9d5a0e15ccda7e",
      "parents": [
        "3a9f28a5117e00a868dd8b4395f9a707ae56764b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:38:13 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:38:13 2011 +1000"
      },
      "message": "md/raid1: factor several functions out or raid1d()\n\nraid1d is too big with several deep branches.\nSo separate them out into their own functions.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "3a9f28a5117e00a868dd8b4395f9a707ae56764b",
      "tree": "36fe0fc7a7ccfc0da03dea546286b7bdef581246",
      "parents": [
        "d8f05d2995d467a91db1af01637e6ffd94660ca8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:33:42 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:33:42 2011 +1000"
      },
      "message": "md/raid1: improve handling of read failure during recovery.\n\nIf we cannot read a block from anywhere during recovery, there is\nnow a better approach than just giving up.\nWe can record a bad block on each device and keep going - being\ncareful not to clear the bad block when a write succeeds as it might -\nit will be a write of incorrect data.\n\nWe have now reached the state where - for raid1 - we only call\nmd_error if md_set_badblocks has failed.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "d8f05d2995d467a91db1af01637e6ffd94660ca8",
      "tree": "e35959bc4f6c370c982df8222eb818c720b94ffd",
      "parents": [
        "cd5ff9a16f0831f68c1024d5d776075b5123b034"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:33:00 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:33:00 2011 +1000"
      },
      "message": "md/raid1: record badblocks found during resync etc.\n\nIf we find a bad block while writing as part of resync/recovery we\nneed to report that back to raid1d which must record the bad block,\nor fail the device.\n\nSimilarly when fixing a read error, a further error should just\nrecord a bad block if possible rather than failing the device.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "cd5ff9a16f0831f68c1024d5d776075b5123b034",
      "tree": "490e297bde3d0c52b55d38b38ed1cdb5b5b6f43e",
      "parents": [
        "2ca68f5ed7383733102ee53cd8fa4021ecc3b275"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:32:41 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:32:41 2011 +1000"
      },
      "message": "md/raid1:  Handle write errors by updating badblock log.\n\nWhen we get a write error (in the data area, not in metadata),\nupdate the badblock log rather than failing the whole device.\n\nAs the write may well be many blocks, we trying writing each\nblock individually and only log the ones which fail.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "2ca68f5ed7383733102ee53cd8fa4021ecc3b275",
      "tree": "29543cff802770d90380b889cf8b0cc01e7d1814",
      "parents": [
        "4367af556133723d0f443e14ca8170d9447317cb"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:32:10 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:32:10 2011 +1000"
      },
      "message": "md/raid1: store behind-write pages in bi_vecs.\n\nWhen performing write-behind we allocate pages to store the data\nduring write.\nPreviously we just keep a list of pages.  Now we keep a list of\nbi_vec which includes offset and size.\nThis means that the r1bio has complete information to create a new\nbio which will be needed for retrying after write errors.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "4367af556133723d0f443e14ca8170d9447317cb",
      "tree": "d87bb40920f0f43cea586b7dd99b45f713ffd614",
      "parents": [
        "1f68f0c4b677ccd6935ff61e4e6888787505f8dc"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:49 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:49 2011 +1000"
      },
      "message": "md/raid1: clear bad-block record when write succeeds.\n\nIf we succeed in writing to a block that was recorded as\nbeing bad, we clear the bad-block record.\n\nThis requires some delayed handling as the bad-block-list update has\nto happen in process-context.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "1f68f0c4b677ccd6935ff61e4e6888787505f8dc",
      "tree": "aaff73efbc3fb7b6092eb2106e142e1684c4b554",
      "parents": [
        "0b7d83865cb7a60b1768212c1e60b8fd7c280506"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "message": "md/raid1: avoid writing to known-bad blocks on known-bad drives.\n\nIf we have seen any write error on a drive, then don\u0027t write to\nany known-bad blocks on that drive.\nIf necessary, we divide the write request up into pieces just\nlike we do for reads, so each piece is either all written or\nall not written to any given drive.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "de393cdea66cbd63c90725663f400c76faf1b255",
      "tree": "6a2bf37bee98bf7de42856f904bd23c81e082f8e",
      "parents": [
        "d7a9d443bc8a75a24873c0506f50051edfedc714"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "message": "md: make it easier to wait for bad blocks to be acknowledged.\n\nIt is only safe to choose not to write to a bad block if that bad\nblock is safely recorded in metadata - i.e. if it has been\n\u0027acknowledged\u0027.\n\nIf it hasn\u0027t we need to wait for the acknowledgement.\n\nWe support that using rdev-\u003eblocked wait and\nmd_wait_for_blocked_rdev by introducing a new device flag\n\u0027BlockedBadBlock\u0027.\n\nThis flag is only advisory.\nIt is cleared whenever we acknowledge a bad block, so that a waiter\ncan re-check the particular bad blocks that it is interested it.\n\nIt should be set by a caller when they find they need to wait.\nThis (set after test) is inherently racy, but as\nmd_wait_for_blocked_rdev already has a timeout, losing the race will\nhave minimal impact.\n\nWhen we clear \"Blocked\" was also clear \"BlockedBadBlocks\" incase it\nwas set incorrectly (see above race).\n\nWe also modify the way we manage \u0027Blocked\u0027 to fit better with the new\nhandling of \u0027BlockedBadBlocks\u0027 and to make it consistent between\nexternally managed and internally managed metadata.   This requires\nthat each raidXd loop checks if the metadata needs to be written and\ntriggers a write (md_check_recovery) if needed.  Otherwise a queued\nwrite request might cause raidXd to wait for the metadata to write,\nand only that thread can write it.\n\nBefore writing metadata, we set FaultRecorded for all devices that\nare Faulty, then after writing the metadata we clear Blocked for any\ndevice for which the Fault was certainly Recorded.\n\nThe \u0027faulty\u0027 device flag now appears in sysfs if the device is faulty\n*or* it has unacknowledged bad blocks.  So user-space which does not\nunderstand bad blocks can continue to function correctly.\nUser space which does, should not assume a device is faulty until it\nsees the \u0027faulty\u0027 flag, and then sees the list of unacknowledged bad\nblocks is empty.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "06f603851fa90bcd236328438278d4dc8b655495",
      "tree": "49a7f239a9c2de4bf97d998f161b229a565e33cd",
      "parents": [
        "d2eb35acfdccbe2a3622ed6cc441a5482148423b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "message": "md/raid1: avoid reading known bad blocks during resync\n\nWhen performing resync/etc, keep the size of the request\nsmall enough that it doesn\u0027t overlap any known bad blocks.\nDevices with badblocks at the start of the request are completely\nexcluded.\nIf there is nowhere to read from due to bad blocks, record\na bad block on each target device.\n\nNow that we never read from known-bad-blocks we can allow devices with\nknown-bad-blocks into a RAID1.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d2eb35acfdccbe2a3622ed6cc441a5482148423b",
      "tree": "77600cab29fc9e1fd39d612773086a456fc32d88",
      "parents": [
        "9f2f3830789a4c9c1af2d1437d407c43e05136e6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "message": "md/raid1: avoid reading from known bad blocks.\n\nNow that we have a bad block list, we should not read from those\nblocks.\nThere are several main parts to this:\n  1/ read_balance needs to check for bad blocks, and return not only\n     the chosen device, but also how many good blocks are available\n     there.\n  2/ fix_read_error needs to avoid trying to read from bad blocks.\n  3/ read submission must be ready to issue multiple reads to\n     different devices as different bad blocks on different devices\n     could mean that a single large read cannot be served by any one\n     device, but can still be served by the array.\n     This requires keeping count of the number of outstanding requests\n     per bio.  This count is stored in \u0027bi_phys_segments\u0027\n  4/ retrying a read needs to also be ready to submit a smaller read\n     and queue another request for the rest.\n\nThis does not yet handle bad blocks when reading to perform resync,\nrecovery, or check.\n\n\u0027md_trim_bio\u0027 will also be used for RAID10, so put it in md.c and\nexport it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "34b343cff4354ab9864be83be88405fd53d928a0",
      "tree": "10d75ecac6091f955cbb8a60b79f443355ca4ea8",
      "parents": [
        "6e0d2d0312fb20c1edac1b2c849068c1c7944abf"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:47 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:47 2011 +1000"
      },
      "message": "md: don\u0027t allow arrays to contain devices with bad blocks.\n\nAs no personality understand bad block lists yet, we must\nreject any device that is known to contain bad blocks.\nAs the personalities get taught, these tests can be removed.\n\nThis only applies to raid1/raid5/raid10.\nFor linear/raid0/multipath/faulty the whole concept of bad blocks\ndoesn\u0027t mean anything so there is no point adding the checks.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "654e8b5abc0a793f0c029128db6e4804691a383e",
      "tree": "536950fcc8c418c8716ba152e439fe86d24f3365",
      "parents": [
        "8cfa7b0f67b4d899efc7f39eb7e172fd79237811"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "MD: raid1 s/sysfs_notify_dirent/sysfs_notify_dirent_safe\n\nIf device-mapper creates a RAID1 array that includes devices to\nbe rebuilt, it will deref a NULL pointer when finished because\nsysfs is not used by device-mapper instantiated RAID devices.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9d3d80113df824a266c5db3fac357a036ebc0b62",
      "tree": "26607a8761b06cfc05e4259a6609a48d9dab3f26",
      "parents": [
        "65a06f06744d3deae61f3596566952a8da92199f"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md/raid1: move rdev-\u003ecorrected_errors counting\n\nRead errors are considered to corrected if write-back and re-read\ncycle is finished without further problems. Thus moving the rdev-\u003e\ncorrected_errors counting after the re-reading looks more reasonable\nIMHO. Also included a couple of whitespace fixes on sync_page_io().\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5389042ffa36976caa45a79af16081d759001fa7",
      "tree": "eb303de141a50f41ccac438e734b65dbfe25825e",
      "parents": [
        "a478a069b6adf186373a6648c54fc5f1d3c2f8eb"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md: change managed of recovery_disabled.\n\nIf we hit a read error while recovering a mirror, we want to abort the\nrecovery without necessarily failing the disk - as having a disk this\na read error is better than not having an array at all.\n\nCurrently this is managed with a per-array flag \"recovery_disabled\"\nand is only implemented for RAID1.  For RAID10 we will need finer\ngrained control as we might want to disable recovery for individual\ndevices separately.\n\nSo push more of the decision making into the personality.\n\u0027recovery_disabled\u0027 is now a \u0027cookie\u0027 which is copied when the\npersonality want to disable recovery and is changed when a device is\nadded to the array as this is used as a trigger to \u0027try recovery\nagain\u0027.\n\nThis will allow RAID10 to get the control that it needs.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "36fad858a7404a9656122a9e560a224ae2a00979",
      "tree": "95f8a7a6b8dad6bb8d7c7735f7845888b5e702db",
      "parents": [
        "8bda470e8ebde35f9349e98ecbce4dfb508a60fa"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md: introduce link/unlink_rdev() helpers\n\nThere are places where sysfs links to rdev are handled\nin a same way. Add the helper functions to consolidate\nthem.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8bda470e8ebde35f9349e98ecbce4dfb508a60fa",
      "tree": "105aa6781eef93c5a2f996c53dfa25fbce818dfe",
      "parents": [
        "a0a02a7ad62b5615b17294c2075e4916f8d1f0a4"
      ],
      "author": {
        "name": "Christian Dietrich",
        "email": "christian.dietrich@informatik.uni-erlangen.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md/raid: use printk_ratelimited instead of printk_ratelimit\n\nAs per printk_ratelimit comment, it should not be used.\n\nSigned-off-by: Christian Dietrich \u003cchristian.dietrich@informatik.uni-erlangen.de\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1ed7242e591af7e233234d483f12d33818b189d9",
      "tree": "87d4a65cdb3510a97da7f2aefb9534839c49cfa4",
      "parents": [
        "0fd018af37dadbb7826850883ad8abfecdb1a00b"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Jun 07 17:50:35 2011 -0500"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jun 08 15:11:31 2011 +1000"
      },
      "message": "MD: raid1 changes to allow use by device mapper\n\nMD RAID1: Changes to allow RAID1 to be used by device-mapper (dm-raid.c)\n\nAdded the necessary congestion function and conditionalize calls requiring an\narray \u0027queue\u0027 or \u0027gendisk\u0027.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b098636cf04c89db4036fedc778da0acc666ad1a",
      "tree": "11a970bdc482b4e5cb2211eefb9a71ae34355bd3",
      "parents": [
        "ab9d47e990c12c11cc95ed1247a3782234a7e33a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 15:52:21 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 15:52:21 2011 +1000"
      },
      "message": "md: allow resync_start to be set while an array is active.\n\nThe sysfs attribute \u0027resync_start\u0027 (known internally as recovery_cp),\nrecords where a resync is up to.  A value of 0 means the array is\nnot known to be in-sync at all.  A value of MaxSector means the array\nis believed to be fully in-sync.\n\nWhen the size of member devices of an array (RAID1,RAID4/5/6) is\nincreased, the array can be increased to match.  This process sets\nresync_start to the old end-of-device offset so that the new part of\nthe array gets resynced.\n\nHowever with RAID1 (and RAID6) a resync is not technically necessary\nand may be undesirable.  So it would be good if the implied resync\nafter the array is resized could be avoided.\n\nSo: change \u0027resync_start\u0027 so the value can be changed while the array\nis active, and as a precaution only allow it to be changed while\nresync/recovery is \u0027frozen\u0027.  Changing it once resync has started is\nnot going to be useful anyway.\n\nThis allows the array to be resized without a resync by:\n  write \u0027frozen\u0027 to \u0027sync_action\u0027\n  write new size to \u0027component_size\u0027 (this will set resync_start)\n  write \u0027none\u0027 to \u0027resync_start\u0027\n  write \u0027idle\u0027 to \u0027sync_action\u0027.\n\nAlso slightly improve some tests on recovery_cp when resizing\nraid1/raid5.  Now that an arbitrary value could be set we should be\nmore careful in our tests.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "af6d7b760c7547c1a410a333bdb24daed24e1043",
      "tree": "5789fa005f94911bc6a92a6cb8700b8025a3adc4",
      "parents": [
        "7ca78d57d11a91bc93b35342fa58647b85bedeb1"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:51:19 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:51:19 2011 +1000"
      },
      "message": "md/raid1: improve handling of pages allocated for write-behind.\n\nThe current handling and freeing of these pages is a bit fragile.\nWe only keep the list of allocated pages in each bio, so we need to\nstill have a valid bio when freeing the pages, which is a bit clumsy.\n\nSo simply store the allocated page list in the r1_bio so it can easily\nbe found and freed when we are finished with the r1_bio.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7ca78d57d11a91bc93b35342fa58647b85bedeb1",
      "tree": "398f2f91e5252b45872506763ae3677e1f35c026",
      "parents": [
        "78d7f5f726deb562a51126603f2dc5d00990b223"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:50:37 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:50:37 2011 +1000"
      },
      "message": "md/raid1: try fix_sync_read_error before process_checks.\n\nIf we get a read error during resync/recovery we current repeat with\nsingle-page reads to find out just where the error is, and possibly\nread each page from a different device.\n\nWith check/repair we don\u0027t currently do that, we just fail.\nHowever it is possible that while all devices fail on the large 64K\nread, we might be able to satisfy each 4K from one device or another.\n\nSo call fix_sync_read_error before process_checks to maximise the\nchance of finding good data and writing it out to the devices with\nread errors.\n\nFor this to work, we need to set the \u0027uptodate\u0027 flags properly after\nfix_sync_read_error has succeeded.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "78d7f5f726deb562a51126603f2dc5d00990b223",
      "tree": "eb4255cb674028b8709c4542e2a490db3264754f",
      "parents": [
        "a68e58703575b9c03d610a818e0241564fc17f68"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:48:56 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:48:56 2011 +1000"
      },
      "message": "md/raid1: tidy up new functions: process_checks and fix_sync_read_error.\n\nThese changes are mostly cosmetic:\n\n1/ change mddev-\u003eraid_disks to conf-\u003eraid_disks because the later is\n   technically safer, though in current practice it doesn\u0027t matter in\n   this particular context.\n2/ Rearrange two for / if loops to have an early \u0027continue\u0027 so the\n   body of the \u0027if\u0027 doesn\u0027t need to be indented so much.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a68e58703575b9c03d610a818e0241564fc17f68",
      "tree": "f60a433b20a4e297d010a23775e78493687c160b",
      "parents": [
        "6f8d0c77cef5849433dd7beb0bd97e573cc4a6a3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:40:44 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:40:44 2011 +1000"
      },
      "message": "md/raid1: split out two sub-functions from sync_request_write\n\nsync_request_write is too big and too deep.\nSo split out two self-contains bits of functionality into separate\nfunction.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "76073054c95b12af6bd0cc9b9462a265b45ba38f",
      "tree": "78f830289dd8bb5337a7d3efa442ae44abd4dbab",
      "parents": [
        "56d9912106b0974ffb6dd264c80c7e816677e998"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:34:56 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:34:56 2011 +1000"
      },
      "message": "md/raid1: clean up read_balance.\n\nread_balance has two loops which both look for a \u0027best\u0027\ndevice based on slightly different criteria.\nThis is clumsy and makes is hard to add extra criteria.\n\nSo replace it all with a single loop that combines everything.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c3b328ac846bcf6b9a62c5563380a81ab723006d",
      "tree": "f9b78651beec3d66cf2ab7cf7a8080fa1cfe5b99",
      "parents": [
        "7c13edc87510f665da3094174e1fd633e06649f4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 18 18:25:43 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 18 18:25:43 2011 +1000"
      },
      "message": "md: fix up raid1/raid10 unplugging.\n\nWe just need to make sure that an unplug event wakes up the md\nthread, which is exactly what mddev_check_plugged does.\n\nAlso remove some plug-related code that is no longer needed.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e1dfa0a29737142c32f00a3bac0f609dc85b4a82",
      "tree": "1af906cc5e959803e7d5ea0e56fb69b56754501a",
      "parents": [
        "99e22598e9a8e0a996d69c8c0f6b7027cb57720a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 18 18:25:41 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 18 18:25:41 2011 +1000"
      },
      "message": "md: use new plugging interface for RAID IO.\n\nmd/raid submits a lot of IO from the various raid threads.\nSo adding start/finish plug calls to those so that some\nplugging happens.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a91a2785b200864aef2270ed6a3babac7a253a20",
      "tree": "3d21d7ef82ddabbdbfb74499d68a73f15adc819f",
      "parents": [
        "82f04ab47e1d94d78503591a7460b2cad9601ede"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Thu Mar 17 11:11:05 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 17 11:11:05 2011 +0100"
      },
      "message": "block: Require subsystems to explicitly allocate bio_set integrity mempool\n\nMD and DM create a new bio_set for every metadevice. Each bio_set has an\nintegrity mempool attached regardless of whether the metadevice is\ncapable of passing integrity metadata. This is a waste of memory.\n\nInstead we defer the allocation decision to MD and DM since we know at\nmetadevice creation time whether integrity passthrough is needed or not.\n\nAutomatic integrity mempool allocation can then be removed from\nbioset_create() and we make an explicit integrity allocation for the\nfs_bio_set.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nReported-by: Zdenek Kabelac \u003czkabelac@redhat.com\u003e\nAcked-by: Mike Snitzer \u003csnizer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4c63f5646e405b5010cc9499419060bf2e838f5b",
      "tree": "df91ba315032c8ec4aafeb3ab96fdfa7c6c656e1",
      "parents": [
        "cafb0bfca1a73efd6d8a4a6a6a716e6134b96c24",
        "69d60eb96ae8a73cf9b79cf28051caf973006011"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:58:35 2011 +0100"
      },
      "message": "Merge branch \u0027for-2.6.39/stack-plug\u0027 into for-2.6.39/core\n\nConflicts:\n\tblock/blk-core.c\n\tblock/blk-flush.c\n\tdrivers/md/raid1.c\n\tdrivers/md/raid10.c\n\tdrivers/md/raid5.c\n\tfs/nilfs2/btnode.c\n\tfs/nilfs2/mdt.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7eaceaccab5f40bbfda044629a6298616aeaed50",
      "tree": "33954d12f63e25a47eb6d86ef3d3d0a5e62bf752",
      "parents": [
        "73c101011926c5832e6e141682180c4debe2cf45"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:52:07 2011 +0100"
      },
      "message": "block: remove per-queue plugging\n\nCode has been converted over to the new explicit on-stack plugging,\nand delay users have been converted to use the new API for that.\nSo lets kill off the old plugging along with aops-\u003esync_page().\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "da9cf5050a2e3dbc3cf26a8d908482eb4485ed49",
      "tree": "d5e7ea4ef419d07d294e88b47a4aaf2676a605eb",
      "parents": [
        "8f5f02c460b7ca74ce55ce126ce0c1e58a3f923d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Feb 21 18:25:57 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Feb 21 18:25:57 2011 +1100"
      },
      "message": "md: avoid spinlock problem in blk_throtl_exit\n\nblk_throtl_exit assumes that -\u003equeue_lock still exists,\nso make sure that it does.\nTo do this, we stop redirecting -\u003equeue_lock to conf-\u003edevice_lock\nand leave it pointing where it is initialised - __queue_lock.\n\nAs the blk_plug functions check the -\u003equeue_lock is held, we now\ntake that spin_lock explicitly around the plug functions.  We don\u0027t\nneed the locking, just the warning removal.\n\nThis is needed for any kernel with the blk_throtl code, which is\nwhich is 2.6.37 and later.\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ccebd4c4159462c96397ae9af9c667bb394d7b70",
      "tree": "04554f0e7607d906c6b09f31a995fca0dd40c5b5",
      "parents": [
        "57b2caa394393f8870ed41bdcc38a7542593018f"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Fri Jan 14 09:14:33 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 14 09:14:33 2011 +1100"
      },
      "message": "md-new-param-to_sync_page_io\n\nAdd new parameter to \u0027sync_page_io\u0027.\n\nThe new parameter allows us to distinguish between metadata and data\noperations.  This becomes important later when we add the ability to\nuse separate devices for data and metadata.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\n"
    },
    {
      "commit": "067032bc628598606056412594042564fcf09e22",
      "tree": "5e64b6446c2156631cc66f34330ba7b134a451bf",
      "parents": [
        "6c9879101442b08581e8a0e3ae6b7f643a78fd63"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Fri Jan 14 09:14:33 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 14 09:14:33 2011 +1100"
      },
      "message": "md: Fix single printks with multiple KERN_\u003clevel\u003es\n\nNoticed-by: Russell King \u003clinux@arm.linux.org.uk\u003e\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8f9e0ee38f75d4740daa9e42c8af628d33d19a02",
      "tree": "4e1b3fe1460cd0c71258cfb2f68bb28cf71eeca4",
      "parents": [
        "c26a44ed1e552aaa1d4ceb71842002d235fe98d7"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Nov 24 16:39:46 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Nov 24 16:39:46 2010 +1100"
      },
      "message": "md/raid1: really fix recovery looping when single good device fails.\n\nCommit 4044ba58dd15cb01797c4fd034f39ef4a75f7cc3 supposedly fixed a\nproblem where if a raid1 with just one good device gets a read-error\nduring recovery, the recovery would abort and immediately restart in\nan infinite loop.\n\nHowever it depended on raid1_remove_disk removing the spare device\nfrom the array.  But that does not happen in this case.  So add a test\nso that in the \u0027recovery_disabled\u0027 case, the device will be removed.\n\nThis suitable for any kernel since 2.6.29 which is when\nrecovery_disabled was introduced.\n\nCc: stable@kernel.org\nReported-by: Sebastian Färber \u003cfaerber@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f3ac8bf7ce1c5abd763ea762e95d1cdcf7799372",
      "tree": "bb903d4265520d5c96a9ee08557dd7f92c1f08df",
      "parents": [
        "046abeede717909feec38587d667cde1fc6c459c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Sep 06 14:10:08 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 29 16:40:33 2010 +1100"
      },
      "message": "md: tidy up device searches in read_balance.\n\nThe code for searching through the device list to read-balance in\nraid1 is rather clumsy and hard to follow.  Try to simplify it a bit.\n\nNo important functionality change here.\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    }
  ],
  "next": "046abeede717909feec38587d667cde1fc6c459c"
}
