)]}'
{
  "log": [
    {
      "commit": "268417aeea96a1941c2cd14f0f8b5b39c374ad25",
      "tree": "1ecf8a31d004e68f12040642dde8a31ddd9beb50",
      "parents": [
        "49028693152b88ae7ab2d444df7f73d2f0e3bbfd"
      ],
      "author": {
        "name": "Lukasz Dorau",
        "email": "lukasz.dorau@intel.com",
        "time": "Thu Oct 24 12:55:17 2013 +1100"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Wed Nov 13 12:01:48 2013 +0900"
      },
      "message": "md: Fix skipping recovery for read-only arrays.\n\ncommit 61e4947c99c4494336254ec540c50186d186150b upstream.\n\nSince:\n        commit 7ceb17e87bde79d285a8b988cfed9eaeebe60b86\n        md: Allow devices to be re-added to a read-only array.\n\nspares are activated on a read-only array. In case of raid1 and raid10\npersonalities it causes that not-in-sync devices are marked in-sync\nwithout checking if recovery has been finished.\n\nIf a read-only array is degraded and one of its devices is not in-sync\n(because the array has been only partially recovered) recovery will be skipped.\n\nThis patch adds checking if recovery has been finished before marking a device\nin-sync for raid1 and raid10 personalities. In case of raid5 personality\nsuch condition is already present (at raid5.c:6029).\n\nBug was introduced in 3.10 and causes data corruption.\n\nSigned-off-by: Pawel Baldysiak \u003cpawel.baldysiak@intel.com\u003e\nSigned-off-by: Lukasz Dorau \u003clukasz.dorau@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "1b9203bb4c658c0242afa6fdb025c71d2fc3ad76",
      "tree": "1dfbea2025be2872abb7b435b630bce988b6e032",
      "parents": [
        "efb5fbe89cdcc97ce170bf53c0764d7d00b7a4a6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jun 12 11:01:22 2013 +1000"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Tue Aug 20 08:26:28 2013 -0700"
      },
      "message": "md/raid1,raid10: use freeze_array in place of raise_barrier in various places.\n\ncommit e2d59925221cd562e07fee38ec8839f7209ae603 upstream.\n\nVarious places in raid1 and raid10 are calling raise_barrier when they\nreally should call freeze_array.\nThe former is only intended to be called from \"make_request\".\nThe later has extra checks for \u0027nr_queued\u0027 and makes a call to\nflush_pending_writes(), so it is safe to call it from within the\nmanagement thread.\n\nUsing raise_barrier will sometimes deadlock.  Using freeze_array\nshould not.\n\nAs \u0027freeze_array\u0027 currently expects one request to be pending (in\nhandle_read_error - the only previous caller), we need to pass\nit the number of pending requests (extra) to ignore.\n\nThe deadlock was made particularly noticeable by commits\n050b66152f87c7 (raid10) and 6b740b8d79252f13 (raid1) which\nappeared in 3.4, so the fix is appropriate for any -stable\nkernel since then.\n\nThis patch probably won\u0027t apply directly to some early kernels and\nwill need to be applied by hand.\n\nCc: stable@vger.kernel.org\nReported-by: Alexander Lyakas \u003calex.bolshoy@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n[adjust context to make it can be apply on top of 3.4 ]\nSigned-off-by: Jack Wang \u003cjinpu.wang@profitbricks.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "aa2f8abe27dd7058fd7bfe52401121037a285406",
      "tree": "241e0890bf19f715834bb5ee6584a4cebab7ef5b",
      "parents": [
        "0761d079bbc23ffd309c586ddd142b3cb5f11e0d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 24 15:37:42 2013 +1000"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Sun Aug 04 16:26:00 2013 +0800"
      },
      "message": "md/raid10: remove use-after-free bug.\n\ncommit 0eb25bb027a100f5a9df8991f2f628e7d851bc1e upstream.\n\nWe always need to be careful when calling generic_make_request, as it\ncan start a chain of events which might free something that we are\nusing.\n\nHere is one place I wasn\u0027t careful enough.  If the wbio2 is not in\nuse, then it might get freed at the first generic_make_request call.\nSo perform all necessary tests first.\n\nThis bug was introduced in 3.3-rc3 (24afd80d99) and can cause an\noops, so fix is suitable for any -stable since then.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "0938e135aa8513f9bc379a408d3c6c1fd24eb46a",
      "tree": "466eb744cd9b8eb52134453d8871b7212ff2b6c0",
      "parents": [
        "c09c35b2ae5ea7f62b0fd5369935b8e6af25e9cd"
      ],
      "author": {
        "name": "Alex Lyakas",
        "email": "alex@zadarastorage.com",
        "time": "Tue Jun 04 20:42:21 2013 +0300"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Thu Jun 20 11:58:46 2013 -0700"
      },
      "message": "md/raid1: consider WRITE as successful only if at least one non-Faulty and non-rebuilding drive completed it.\n\ncommit 3056e3aec8d8ba61a0710fb78b2d562600aa2ea7 upstream.\n\nWithout that fix, the following scenario could happen:\n\n- RAID1 with drives A and B; drive B was freshly-added and is rebuilding\n- Drive A fails\n- WRITE request arrives to the array. It is failed by drive A, so\nr1_bio is marked as R1BIO_WriteError, but the rebuilding drive B\nsucceeds in writing it, so the same r1_bio is marked as\nR1BIO_Uptodate.\n- r1_bio arrives to handle_write_finished, badblocks are disabled,\nmd_error()-\u003eerror() does nothing because we don\u0027t fail the last drive\nof raid1\n- raid_end_bio_io()  calls call_bio_endio()\n- As a result, in call_bio_endio():\n        if (!test_bit(R1BIO_Uptodate, \u0026r1_bio-\u003estate))\n                clear_bit(BIO_UPTODATE, \u0026bio-\u003ebi_flags);\nthis code doesn\u0027t clear the BIO_UPTODATE flag, and the whole master\nWRITE succeeds, back to the upper layer.\n\nSo we returned success to the upper layer, even though we had written\nthe data onto the rebuilding drive only. But when we want to read the\ndata back, we would not read from the rebuilding drive, so this data\nis lost.\n\n[neilb - applied identical change to raid10 as well]\n\nThis bug can result in lost data, so it is suitable for any\n-stable kernel.\n\nSigned-off-by: Alex Lyakas \u003calex@zadarastorage.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "f3921710aa40ae72bd2580282548f763b008a1d0",
      "tree": "f622dc7bf80f31334bb9849876fe45a03d92a879",
      "parents": [
        "dbdd7f0c98e8ee0d49da5e8b462ad2ba07d0f358"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 22 14:42:49 2012 +1100"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Dec 10 10:59:40 2012 -0800"
      },
      "message": "md/raid10: close race that lose writes lost when replacement completes.\n\ncommit e7c0c3fa29280d62aa5e11101a674bb3064bd791 upstream.\n\nWhen a replacement operation completes there is a small window\nwhen the original device is marked \u0027faulty\u0027 and the replacement\nstill looks like a replacement.  The faulty should be removed and\nthe replacement moved in place very quickly, bit it isn\u0027t instant.\n\nSo the code write out to the array must handle the possibility that\nthe only working device for some slot in the replacement - but it\ndoesn\u0027t.  If the primary device is faulty it just gives up.  This\ncan lead to corruption.\n\nSo make the code more robust: if either  the primary or the\nreplacement is present and working, write to them.  Only when\nneither are present do we give up.\n\nThis bug has been present since replacement was introduced in\n3.3, so it is suitable for any -stable kernel since then.\n\nReported-by: \"George Spelvin\" \u003clinux@horizon.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "ecf049ce86e1d93bc9a3376facf31d7244338089",
      "tree": "1143b5ca06537fb8e35a8e2584d7059247df904d",
      "parents": [
        "8c98fbaa55508732bb5a9f46b3c6cf60daa8e526"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 22 15:12:09 2012 +1100"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Dec 03 11:47:07 2012 -0800"
      },
      "message": "md/raid10: decrement correct pending counter when writing to replacement.\n\ncommit 884162df2aadd7414bef4935e1a54976fd4e3988 upstream.\n\nWhen a write to a replacement device completes, we carefully\nand correctly found the rdev that the write actually went to\nand the blithely called rdev_dec_pending on the primary rdev,\neven if this write was to the replacement.\n\nThis means that any writes to an array while a replacement\nwas ongoing would cause the nr_pending count for the primary\ndevice to go negative, so it could never be removed.\n\nThis bug has been present since replacement was introduced in\n3.3, so it is suitable for any -stable kernel since then.\n\nReported-by: \"George Spelvin\" \u003clinux@horizon.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "9b38cc4a70f2c83857fd37707570a18c1027effe",
      "tree": "a9841de8c174c5c0e37522ceba2ce9ad59170396",
      "parents": [
        "a0fee8de3ae5784d4308b7bd18c303a4144ece18"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@oracle.com",
        "time": "Thu Oct 11 14:20:58 2012 +1100"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Sun Oct 21 09:27:59 2012 -0700"
      },
      "message": "md/raid10: use correct limit variable\n\ncommit 91502f099dfc5a1e8812898e26ee280713e1d002 upstream.\n\nClang complains that we are assigning a variable to itself.  This should\nbe using bad_sectors like the similar earlier check does.\n\nBug has been present since 3.1-rc1.  It is minor but could\nconceivably cause corruption or other bad behaviour.\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "956b165f9e89e37aff44d615321d1e3166589701",
      "tree": "eefe7da63af690ee5b1be1f6c799338f6336f94b",
      "parents": [
        "1f7edfcc0a87e5daf273981135e376ed61d284e4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sat Aug 18 09:51:42 2012 +1000"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Tue Oct 02 10:30:33 2012 -0700"
      },
      "message": "md/raid10: fix problem with on-stack allocation of r10bio structure.\n\ncommit e0ee778528bbaad28a5c69d2e219269a3a096607 upstream.\n\nA \u0027struct r10bio\u0027 has an array of per-copy information at the end.\nThis array is declared with size [0] and r10bio_pool_alloc allocates\nenough extra space to store the per-copy information depending on the\nnumber of copies needed.\n\nSo declaring a \u0027struct r10bio on the stack isn\u0027t going to work.  It\nwon\u0027t allocate enough space, and memory corruption will ensue.\n\nSo in the two places where this is done, declare a sufficiently large\nstructure and use that instead.\n\nThe two call-sites of this bug were introduced in 3.4 and 3.5\nso this is suitable for both those kernels.  The patch will have to\nbe modified for 3.4 as it only has one bug.\n\nReported-by: Ivan Vasilyev \u003civan.vasilyev@gmail.com\u003e\nTested-by: Ivan Vasilyev \u003civan.vasilyev@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n\n"
    },
    {
      "commit": "65c3f18b9032f7237fc74403ce3a92176eaebd8c",
      "tree": "2088abe208befd572ef07a2f41b5330f1d6a0dfb",
      "parents": [
        "04e0f69d135f6cf10534282fc09cf3efd6973c5b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 15:55:33 2012 +1000"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Jul 16 09:04:25 2012 -0700"
      },
      "message": "md/raid10: fix failure when trying to repair a read error.\n\ncommit 055d3747dbf00ce85c6872ecca4d466638e80c22 upstream.\n\ncommit 58c54fcca3bac5bf9290cfed31c76e4c4bfbabaf\n     md/raid10: handle further errors during fix_read_error better.\n\nin 3.1 added \"r10_sync_page_io\" which takes an IO size in sectors.\nBut we were passing the IO size in bytes!!!\nThis resulting in bio_add_page failing, and empty request being sent\ndown, and a consequent BUG_ON in scsi_lib.\n\n[fix missing space in error message at same time]\n\nThis fix is suitable for 3.1.y and later.\n\nReported-by: Christian Balzer \u003cchibi@gol.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "04e0f69d135f6cf10534282fc09cf3efd6973c5b",
      "tree": "a5d1d20670b6c24a78112446f51009aee13ed267",
      "parents": [
        "10ff23ae117665e886fed089cb5a2e015cd8b7b4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 03 10:37:30 2012 +1000"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Mon Jul 16 09:04:25 2012 -0700"
      },
      "message": "md/raid10: Don\u0027t try to recovery unmatched (and unused) chunks.\n\ncommit fc448a18ae6219af9a73257b1fbcd009efab4a81 upstream.\n\nIf a RAID10 has an odd number of chunks - as might happen when there\nare an odd number of devices - the last chunk has no pair and so is\nnot mirrored.  We don\u0027t store data there, but when recovering the last\ndevice in an array we retry to recover that last chunk from a\nnon-existent location.  This results in an error, and the recovery\naborts.\n\nWhen we get to that last chunk we should just stop - there is nothing\nmore to do anyway.\n\nThis bug has been present since the introduction of RAID10, so the\npatch is appropriate for any -stable kernel.\n\nReported-by: Christian Balzer \u003cchibi@gol.com\u003e\nTested-by: Christian Balzer \u003cchibi@gol.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "584b886aee3aff5fe7eb21e30f779eb5cd1daa36",
      "tree": "61945a4b446196fd4e21cb0c5fe9d125d26fd1ea",
      "parents": [
        "cf9ab4c62be7837c2f007cd51ab3604ca0620070"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 31 15:39:11 2012 +1000"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Sun Jun 10 00:36:18 2012 +0900"
      },
      "message": "md: raid1/raid10: fix problem with merge_bvec_fn\n\ncommit aba336bd1d46d6b0404b06f6915ed76150739057 upstream.\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\nReported-by: Sebastian Riemer \u003csebastian.riemer@profitbricks.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\n\n"
    },
    {
      "commit": "b0d634d5683f0b186b242ce6a4f3b041edb8b956",
      "tree": "6443dc130dcd45c78ca2878938464c418ea89c41",
      "parents": [
        "0d9f4f135eb6dea06bdcb7065b1e4ff78274a5e9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sat May 19 09:01:13 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sat May 19 09:01:13 2012 +1000"
      },
      "message": "md/raid10: fix transcription error in calc_sectors conversion.\n\nThe old code was\n\t\tsector_div(stride, fc);\nthe new code was\n\t\tsector_dir(size, conf-\u003enear_copies);\n\n\u0027size\u0027 is right (the stride various wasn\u0027t really needed), but\n\u0027fc\u0027 means \u0027far_copies\u0027, and that is an important difference.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e       \n"
    },
    {
      "commit": "6508fdbf40a92fd7c19d32780ea33ce8e8362b93",
      "tree": "f51e0e36459eeb2f4e7d94f3ff15ffc5ab12de7c",
      "parents": [
        "b16b1b6cd052acbacc0a15f934bca9b354534d48"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 17 10:08:45 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 17 10:08:45 2012 +1000"
      },
      "message": "md/raid10: set dev_sectors properly when resizing devices in array.\n\nraid10 stores dev_sectors in \u0027conf\u0027 separately from the one in\n\u0027mddev\u0027 because it can have a very significant effect on block\naddressing and so need to be updated carefully.\n\nHowever raid10_resize isn\u0027t updating it at all!\n\nTo update it correctly, we need to make sure it is a proper\nmultiple of the chunksize taking various details of the layout\nin to account.\nThis calculation is currently done in setup_conf.   So split it\nout from there and call it from raid10_resize as well.\nThen set conf-\u003edev_sectors properly.\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": "006a09a0ae0a494473a8cd82c8d1d653e37e6663",
      "tree": "169c59f77ef89e1c7cfb727249d60de88370fe79",
      "parents": [
        "6b740b8d79252f13bcb7e5d3c1d43157e78a81e7"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:40 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:40 2012 +1100"
      },
      "message": "md/raid10 - support resizing some RAID10 arrays.\n\n\u0027resizing\u0027 an array in this context means making use of extra\nspace that has become available in component devices, not adding new\ndevices.\nIt also includes shrinking the array to take up less space of\ncomponent devices.\n\nThis is not supported for array with a \u0027far\u0027 layout.  However\nfor \u0027near\u0027 and \u0027offset\u0027 layout arrays, adding and removing space at\nthe end of the devices is easy to support, and this patch provides\nthat support.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "050b66152f87c79e8d66aed0e7996f9336462d5f",
      "tree": "44d100c2eadf2a56794e7b526abeb21d1019baa1",
      "parents": [
        "ba13da47ffa202784355561f72160a41350e95cc"
      ],
      "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/raid10: 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 enhance the raid10 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 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": "dc10c643e8a8d008fd16dd6706e9e0018eadf8d2",
      "tree": "6a0efe323cfaca9d180c0429c74697598c6d9a05",
      "parents": [
        "41fe75f60bcd4d698daed3e54bb099227358ce58"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:37 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:37 2012 +1100"
      },
      "message": "md: allow re-add to failed arrays.\n\nWhen an array is failed (some data inaccessible) then there is no\npoint attempting to add a spare as it could not possibly be recovered.\n\nHowever that may be value in re-adding a recently removed device.\ne.g. if there is a write-intent-bitmap and it is clear, then access\nto the data could be restored by this action.\n\nSo don\u0027t reject a re-add to a failed array for RAID10 and RAID5 (the\nonly arrays  types that check for a failed array).\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "547414d19fd72376ff2ecc42aac8d7a051f03d26",
      "tree": "d46f4726e9bc397a182b9c36665a941e70692281",
      "parents": [
        "1e3fa9bd5061778fb5cf4648e4e8321e8cbbb95b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:20 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:20 2012 +1100"
      },
      "message": "md/raid10: remove unnecessary smp_mb() from end_sync_write\n\nRecent commit 4ca40c2ce099e4f1ce3 (md/raid10: Allow replacement device ...)\nadded an smp_mb in end_sync_write.\nThis was to close a possible race with raid10_remove_disk.\nHowever there is no such race as it is never attempted to remove a\ndisk while resync (or recovery) is happening.\nso the smp_mb is just noise.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7a90484825680e7831856105f5fef654e6c02701",
      "tree": "24eacf1558541076767b59c0cbcc6b6835e35204",
      "parents": [
        "fae8cc5ed0714953b1ad7cf86f030d2177278424"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 05 17:48:12 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 06 10:12:45 2012 +1100"
      },
      "message": "md/raid10: fix assembling of arrays with replacement devices.\n\ncommit 56a2559bb654a (md/raid10: recognise replacements ...)\nchanged \u0027run\u0027 to set -\u003ereplacement or -\u003erdev depending on the\n\u0027Replacement\u0027 status if the device, but it didn\u0027t remove the\nold unconditional setting of \u0027rdev\u0027.  So it was largely ineffective.\n\nSo remove that now.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "fae8cc5ed0714953b1ad7cf86f030d2177278424",
      "tree": "f61f54aaff4122671153e63cad86914566bce389",
      "parents": [
        "f53e29fc87b6fb76db0043202ec2c3450caa5ff3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Feb 14 11:10:10 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Feb 14 11:10:10 2012 +1100"
      },
      "message": "md/raid10: fix handling of error on last working device in array.\n\nIf we get a read error on the last working device in a RAID10 which\ncontains the target block, then we don\u0027t fail the device (which is\ngood) but we don\u0027t abort retries, which is wrong.\nWe end up in an infinite loop retrying the read on the one device.\n\nThis patch fixes the problem in two places:\n1/ in raid10_end_read_request we don\u0027t even ask for a retry if this\n   was the last usable device.  This is efficient but a little racy\n   and will sometimes retry when it should not.\n\n2/ in handle_read_error we are careful to exclude any device from\n   retry which we tried to mark as faulty (that might have failed if\n   it was the last device).  This is race-free but less efficient.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b7044d41b5a09ce9082699f74c8f10e0fe59f704",
      "tree": "6eccbaddb40861aeba8459cb4f0efe3c340fb936",
      "parents": [
        "56a2559bb654ae2555b2ae3b29c837615d0c45c9"
      ],
      "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/raid10: If there is a spare and a want_replacement device, start replacement.\n\nWhen attempting to add a spare to a RAID10 array, also consider\nadding it as a replacement for a want_replacement device.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "56a2559bb654ae2555b2ae3b29c837615d0c45c9",
      "tree": "f90a0d605260f668ad13af654f7951bcb27dfe64",
      "parents": [
        "4ca40c2ce099e4f1ce35445994f49836662596c8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:55 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:55 2011 +1100"
      },
      "message": "md/raid10: recognise replacements when assembling array.\n\nIf a Replacement is seen, file it as such.\n\nIf we see two replacements (or two normal devices) for the one slot,\nabort.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4ca40c2ce099e4f1ce35445994f49836662596c8",
      "tree": "7d6f2187e8d6aaab0cdcf4924017aeb9725d87b0",
      "parents": [
        "24afd80d99f80a79d8824d2805114b8b067e9823"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:55 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:55 2011 +1100"
      },
      "message": "md/raid10: Allow replacement device to be replace old drive.\n\nWhen recovery finish and spare_active is called, check for a\nreplace that might have just become fully synced and mark it\nas such, marking the original as failed.\n\nThen when the original is removed, move the replacement into\nits position.\n\nThis means that \u0027replacement\u0027 and spontaneously become NULL in some\nsituations.  Make sure we check for those.\nIt also means that \u0027rdev\u0027 and \u0027replacement\u0027 could appear to be\nidentical - check for that too.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "24afd80d99f80a79d8824d2805114b8b067e9823",
      "tree": "c4ba36331ee56c64ba74a69ec5d0b56b6e860832",
      "parents": [
        "9ad1aefc8ae8d2e482b4cc4b7199e2354148bbdc"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:55 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:55 2011 +1100"
      },
      "message": "md/raid10: handle recovery of replacement devices.\n\nIf there is a replacement device, then recover to it,\nreading from any drives - maybe the one being replaced, maybe not.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9ad1aefc8ae8d2e482b4cc4b7199e2354148bbdc",
      "tree": "c501f70c4726aade7eec3d743741f1568bba41df",
      "parents": [
        "475b0321a4df381f64db10ddd750a8b7bb82d88b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:55 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:55 2011 +1100"
      },
      "message": "md/raid10:  Handle replacement devices during resync.\n\nIf we need to resync an array which has replacement devices,\nwe always write any block checked to every replacement.\n\nIf the resync was bitmap-based resync we will then complete the\nreplacement normally.\nIf it was a full resync, we mark the replacements as fully recovered\nwhen the resync finishes so no further recovery is needed.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "475b0321a4df381f64db10ddd750a8b7bb82d88b",
      "tree": "c8433c702892962091e617c83ada4560a208e4de",
      "parents": [
        "c8ab903ea9d7309044910c33dc087418be84f9b5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:55 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:55 2011 +1100"
      },
      "message": "md/raid10: writes should get directed to replacement as well as original.\n\nWhen writing, we need to submit two writes, one to the original,\nand one to the replacements - if there is a replacement.\n\nIf the write to the replacement results in a write error we just\nfail the device.  We only try to record write errors to the\noriginal.\n\nThis only handles writing new data.  Writing for resync/recovery\nwill come later.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c8ab903ea9d7309044910c33dc087418be84f9b5",
      "tree": "1113f320a71e50bc5ed22b7f6ca0ec1800b37b08",
      "parents": [
        "abbf098e6e1e23d5d247b9eaaf325e67f67b0328"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "message": "md/raid10: allow removal of failed replacement devices.\n\nEnhance raid10_remove_disk to be able to remove -\u003ereplacement\nas well as -\u003erdev\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "abbf098e6e1e23d5d247b9eaaf325e67f67b0328",
      "tree": "e2d8dc88c99ecc14d6d87596d95b3de9b9dc87c9",
      "parents": [
        "96c3fd1f3802371610c620cff03f9d825707e80e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "message": "md/raid10: preferentially read from replacement device if possible.\n\nWhen reading (for array reads, not for recovery etc) we read from the\nreplacement device if it has recovered far enough.\nThis requires storing the chosen rdev in the \u0027r10_bio\u0027 so we can make\nsure to drop the ref on the right device when the read finishes.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "96c3fd1f3802371610c620cff03f9d825707e80e",
      "tree": "822e95ed42ca9d1526964b3d06ef66ec4edd0ab9",
      "parents": [
        "69335ef3bc5b766f34db2d688be1d35313138bca"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "message": "md/raid10:  change read_balance to return an rdev\n\nIt makes more sense to return an rdev than just an index as\nread_balance() gets a reference to the rdev and so returning\nthe pointer make this more idiomatic.\n\nThis will be needed in a future patch when we might return\na \u0027replacement\u0027 rdev instead of the main rdev.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "69335ef3bc5b766f34db2d688be1d35313138bca",
      "tree": "dcd87ffc4c97540d374a20de7380368e3679ac3b",
      "parents": [
        "3a6de2924af602f9c1b5a5154438c37f2d712dfa"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "message": "md/raid10: prepare data structures for handling replacement.\n\nAllow each slot in the RAID10 to have 2 devices, the want_replacement\nand the replacement.\n\nAlso an r10bio to have 2 bios, and for resync/recovery allocate the\nsecond bio if there are any replacement devices.\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": "7fcc7c8acf0fba44d19a713207af7e58267c1179",
      "tree": "ce4b03fa3dfc07fb19b4d6c3653ba41ec1f926db",
      "parents": [
        "d890fa2b0586b6177b119643ff66932127d58afa"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 31 12:59:44 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 31 12:59:44 2011 +1100"
      },
      "message": "md/raid10:  Fix bug when activating a hot-spare.\n\nThis is a fairly serious bug in RAID10.\n\nWhen a RAID10 array is degraded and a hot-spare is activated, the\nspare does not take up the empty slot, but rather replaces the first\nworking device.\nThis is likely to make the array non-functional.   It would normally\nbe possible to recover the data, but that would need care and is not\nguaranteed.\n\nThis bug was introduced in commit\n   2bb77736ae5dca0a189829fbb7379d43364a9dac\nwhich first appeared in 3.1.\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\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": "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": "e879a8793f915aa7933364d962d2435bd71de462",
      "tree": "bf62ccd52171bdaebd1d09b98f049950e39dd198",
      "parents": [
        "e373ab109172abc2d821bd3b5c1b400acddef5a5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:02 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:02 2011 +1100"
      },
      "message": "md/raid10: typedef removal: conf_t -\u003e struct r10conf\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e373ab109172abc2d821bd3b5c1b400acddef5a5",
      "tree": "48ca1b8ded6ec90a47015ab7316fe8cadb9f8d05",
      "parents": [
        "69724e28ca99990a8f0b5370bb946d7704936d67"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:48:59 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:48:59 2011 +1100"
      },
      "message": "md/raid0: typedef removal: raid0_conf_t -\u003e struct r0conf\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "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": "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": "19d5f834d6aff7efb1c9353523865c5bce869470",
      "tree": "01c18b17519df9034bbcaf126eac9d9318143a1d",
      "parents": [
        "94007751bb02797ba87bac7aacee2731ac2039a3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sat Sep 10 17:21:17 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sat Sep 10 17:21:17 2011 +1000"
      },
      "message": "md/raid10: unify handling of write completion.\n\nA write can complete at two different places:\n1/ when the last member-device write completes, through\n   raid10_end_write_request\n2/ in make_request() when we remove the initial bias from -\u003eremaining.\n\nThese two should do exactly the same thing and the comment says they\ndo, but they don\u0027t.\n\nSo factor the correct code out into a function and call it in both\nplaces.  This makes the code much more similar to RAID1.\n\nThe difference is only significant if there is an error, and they\nusually take a while, so it is unlikely that there will be an error\nalready when make_request is completing, so this is unlikely to cause\nreal problems.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "58c54fcca3bac5bf9290cfed31c76e4c4bfbabaf",
      "tree": "25f663873429468c3b582bc7544f983759b7592e",
      "parents": [
        "5e5702898e93eee7d69b6efde109609a89a61001"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "message": "md/raid10: handle further errors during fix_read_error better.\n\nIf we find more read/write errors we should record a bad block before\nfailing the device.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5e5702898e93eee7d69b6efde109609a89a61001",
      "tree": "87f47cc7e66da78befd16af6d479761b70f7adea",
      "parents": [
        "e684e41db3bad44f1262341300b827c0d94ae220"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "message": "md/raid10: Handle read errors during recovery better.\n\nCurrently when we get a read error during recovery, we simply abort\nthe recovery.\n\nInstead, repeat the read in page-sized blocks.\nOn successful reads, write to the target.\nOn read errors, record a bad block on the destination,\nand only if that fails do we abort the recovery.\n\nAs we now retry reads we need to know where we read from.  This was in\nbi_sector but that can be changed during a read attempt.\nSo store the correct from_addr and to_addr in the r10_bio for later\naccess.\n\n\nSigned-off-by: NeilBrown\u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e684e41db3bad44f1262341300b827c0d94ae220",
      "tree": "a3ff2ec212d4f69a06a64b3a6841895b8cf85673",
      "parents": [
        "1a0b7cd82657a590f163b090bd9123a3a6b9aae4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "message": "md/raid10: simplify read error handling during recovery.\n\nIf a read error is detected during recovery the code currently\nfails the read device.\nThis isn\u0027t really necessary.  recovery_request_write will signal\na write error to end_sync_write and it will record a write\nerror on the destination device which will record a bad block\nthere or kick it from the array.\n\nSo just remove this call to do md_error.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1a0b7cd82657a590f163b090bd9123a3a6b9aae4",
      "tree": "0dc3ccf6ad6ad88283e6d7924c38524865866cba",
      "parents": [
        "f84ee364dd15af11cada1e673f94128f62db189e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "message": "md/raid10: record bad blocks due to write errors during resync/recovery.\n\nIf we get a write error during resync/recovery don\u0027t fail the device\nbut instead record a bad block.  If that fails we can then fail the\ndevice.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f84ee364dd15af11cada1e673f94128f62db189e",
      "tree": "e57fc87130b8bb6958413f39ae51718977540152",
      "parents": [
        "bd870a16c5946d86126f7203db3c73b71de0a1d8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "message": "md/raid10:  attempt to fix read errors during resync/check\n\nWe already attempt to fix read errors found during normal IO\nand a \u0027repair\u0027 process.\nIt is best to try to repair them at any time they are found,\nso move a test so that during sync and check a read error will\nbe corrected by over-writing with good data.\n\nIf both (all) devices have known bad blocks in the sync section we\nwon\u0027t try to fix even though the bad blocks might not overlap.  That\nshould be considered later.\n\nAlso if we hit a read error during recovery we don\u0027t try to fix it.\nIt would only be possible to fix if there were at least three copies\nof data, which is not very common with RAID10.  But it should still\nbe considered later.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bd870a16c5946d86126f7203db3c73b71de0a1d8",
      "tree": "3492f61a441266c796b8a08ec30c06f7f6f27fbc",
      "parents": [
        "749c55e942d91cb27045fe2eb313aa5afe68ae0b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10:  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\n"
    },
    {
      "commit": "749c55e942d91cb27045fe2eb313aa5afe68ae0b",
      "tree": "ddf80a1eb3ef9005bc209c1c4946916b89c22a33",
      "parents": [
        "d4432c23be957ff061f7b23fd60e8506cb472a55"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10: 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\n"
    },
    {
      "commit": "d4432c23be957ff061f7b23fd60e8506cb472a55",
      "tree": "1e9e8cbc75721e62300bb2251658de870bf79d8a",
      "parents": [
        "e875ecea266a543e643b19e44cf472f1412708f9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10: avoid writing to known bad blocks on known bad drives.\n\nWriting to known bad blocks on drives that have seen a write error\nis asking for trouble.  So try to avoid these blocks.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e875ecea266a543e643b19e44cf472f1412708f9",
      "tree": "b602d08f7aa4a743d3c27ad55e347d36991f0814",
      "parents": [
        "40c356ce5ad1a6be817825e1da1bc7494349cc6d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10 record bad blocks as needed during recovery.\n\nWhen recovering one or more devices, if all the good devices have\nbad blocks we should record a bad block on the device being rebuilt.\n\nIf this fails, we need to abort the recovery.\n\nTo ensure we don\u0027t think that we aborted later than we actually did,\nwe need to move the check for MD_RECOVERY_INTR earlier in md_do_sync,\nin particular before mddev-\u003ecurr_resync is updated.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "40c356ce5ad1a6be817825e1da1bc7494349cc6d",
      "tree": "6843d537ecdfda6c03860455c187b775bc6dec97",
      "parents": [
        "8dbed5cebdf6796bf2618457b3653cf820934366"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10: avoid reading known bad blocks during resync/recovery.\n\nDuring resync/recovery limit the size of the request to avoid\nreading into a bad block that does not start at-or-before the current\nread address.\n\nSimilarly if there is a bad block at this address, don\u0027t allow the\ncurrent request to extend beyond the end of that bad block.\n\nNow that we don\u0027t ever read from known bad blocks, it is safe to allow\ndevices with those blocks into the array.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8dbed5cebdf6796bf2618457b3653cf820934366",
      "tree": "b8e8421a3aae1ee8f21df97f76b116fd0a0a9b1c",
      "parents": [
        "7399c31bc92a26bb8388a73f8e14acadcc512fe5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10 - avoid reading from known bad blocks - part 3\n\nWhen attempting to repair a read error, don\u0027t read from\ndevices with a known bad block.\n\nAs we are only reading PAGE_SIZE blocks, we don\u0027t try to\nnarrow down to smaller regions in the hope that only part of this\npage is bad - it isn\u0027t worth the effort.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7399c31bc92a26bb8388a73f8e14acadcc512fe5",
      "tree": "0f1d9904fde1d5258c84643a26947288251b9776",
      "parents": [
        "856e08e23762dfb92ffc68fd0a8d228f9e152160"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "message": "md/raid10: avoid reading from known bad blocks - part 2\n\nWhen redirecting a read error to a different device, we must\nagain avoid bad blocks and possibly split the request.\n\nSpin_lock typo fixed thanks to Dan Carpenter \u003cerror27@gmail.com\u003e\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "856e08e23762dfb92ffc68fd0a8d228f9e152160",
      "tree": "fa9977a39da542eebb2129712703c11009a56ff2",
      "parents": [
        "560f8e5532d63a314271bfb99d3d1d53c938ed14"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "message": "md/raid10: avoid reading from known bad blocks - part 1\n\nThis patch just covers the basic read path:\n 1/ read_balance needs to check for badblocks, and return not only\n    the chosen slot, but also how many good blocks are available\n    there.\n 2/ 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\nOn read error we currently just fail the request if another target\ncannot handle the whole request.  Next patch refines that a bit.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "560f8e5532d63a314271bfb99d3d1d53c938ed14",
      "tree": "c47cbeb54b1e98f626a3e4af1bf0a184a831d3b9",
      "parents": [
        "1294b9c973251a5e68b62c9b40dd914517bda675"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "message": "md/raid10: Split handle_read_error out from raid10d.\n\nraid10d() is too big and is about to get bigger, so split\nhandle_read_error() out as a separate function.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1294b9c973251a5e68b62c9b40dd914517bda675",
      "tree": "45547cfff8997a3a633490341f8166dc6d00e962",
      "parents": [
        "b84db560ead5417b5594349512baf8837959df4f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "message": "md/raid10: simplify/reindent some loops.\n\nWhen a loop ends with a large if, it can be neater to change the\nif to invert the condition and just \u0027continue\u0027.\nThen the body of the if can be indented to a lower level.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\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": "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": "cbea21703b2484f83faef040ed1de30114794392",
      "tree": "a6b06a5341cb8ece8807b09d3f35f928671b8578",
      "parents": [
        "ddd5115fe5594f5aae3c7f0008a5327bb1d19397"
      ],
      "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/raid10: 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.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "700c72138938cf428c74379806886c6b017d6295",
      "tree": "93ca6eb628d36e841131aa62a85b45d16b3f45fa",
      "parents": [
        "2bb77736ae5dca0a189829fbb7379d43364a9dac"
      ],
      "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/raid10: Improve decision on whether to fail a device with a read error.\n\nNormally we would fail a device with a READ error.  However if doing\nso causes the array to fail, it is better to leave the device\nin place and just return the read error to the caller.\n\nThe current test for decide if the array will fail is overly\nsimplistic.\nWe have a function \u0027enough\u0027 which can tell if the array is failed or\nnot, so use it to guide the decision.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2bb77736ae5dca0a189829fbb7379d43364a9dac",
      "tree": "a15efb6810aaf67af679bd05edb5419ac9f19583",
      "parents": [
        "5389042ffa36976caa45a79af16081d759001fa7"
      ],
      "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/raid10: Make use of new recovery_disabled handling\n\nWhen we get a read error during recovery, RAID10 previously\narranged for the recovering device to appear to fail so that\nthe recovery stops and doesn\u0027t restart.  This is misleading and wrong.\n\nInstead, make use of the new recovery_disabled handling and mark\nthe target device and having recovery disabled.\n\nAdd appropriate checks in add_disk and remove_disk so that devices\nare removed and not re-added when recovery is disabled.\n\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": "c65060ad4274f70048d62e0a86332cd3fd23f28d",
      "tree": "5e6c3cfeb122da72e1bfa3bea07d8f16f453dc9f",
      "parents": [
        "778ca01852e6cc9ff335119b37a1938a978df384"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Mon Jul 18 17:38:49 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 18 17:38:49 2011 +1000"
      },
      "message": "md/raid10: share pages between read and write bio\u0027s during recovery\n\nWhen performing a recovery, only first 2 slots in r10_bio are in use,\nfor read and write respectively. However all of pages in the write bio\nare never used and just replaced to read bio\u0027s when the read completes.\n\nGet rid of those unused pages and share read pages properly.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "778ca01852e6cc9ff335119b37a1938a978df384",
      "tree": "845221188a1ffaafddac1041c8ced88ac9e6d8c2",
      "parents": [
        "2c4193df379bb89114ff60d4b0fa66131abe6a75"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Mon Jul 18 17:38:47 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 18 17:38:47 2011 +1000"
      },
      "message": "md/raid10: 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": "2c4193df379bb89114ff60d4b0fa66131abe6a75",
      "tree": "5eed0d76e3b8ae12a543e0deab771c48f6597a40",
      "parents": [
        "1765a367a3b5d5e9692949b0c5ec933eff2c0701"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Mon Jul 18 17:38:43 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 18 17:38:43 2011 +1000"
      },
      "message": "md/raid10: get rid of duplicated conditional expression\n\nVariable \u0027first\u0027 is initialized to zero and updated to @rdev-\u003eraid_disk\nonly if it is greater than 0. Thus condition \u0027\u003e\u003d first\u0027 always implies\n\u0027\u003e\u003d 0\u0027 so the latter is not needed.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ab9d47e990c12c11cc95ed1247a3782234a7e33a",
      "tree": "7c82006d01e903e79d23d3b289a35effed4eacde",
      "parents": [
        "f17ed07c853d5d772515f565a7fc68f9098d6d69"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:54:41 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:54:41 2011 +1000"
      },
      "message": "md/raid10:  reformat some loops with less indenting.\n\nWhen a loop ends with an \u0027if\u0027 with a large body, it is neater\nto make the if \u0027continue\u0027 on the inverse condition, and then\nthe body is indented less.\n\nApply this pattern 3 times, and wrap some other long lines.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f17ed07c853d5d772515f565a7fc68f9098d6d69",
      "tree": "1dd382524ef7d0d3c47c238a0042d0aa7dd386c8",
      "parents": [
        "a8830bcaf3206f15e29efcd9e04becd96a0722e9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:54:32 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:54:32 2011 +1000"
      },
      "message": "md/raid10: remove unused variable.\n\nThis variable \u0027disk\u0027 is never used - how odd.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a8830bcaf3206f15e29efcd9e04becd96a0722e9",
      "tree": "7952a9dcc4ecfda07d706095ac3a9f9d6973837b",
      "parents": [
        "7c4e06ff2b6a4c09638551dfde76f37f9fca5c0c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:54:19 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:54:19 2011 +1000"
      },
      "message": "md/raid10: make more use of \u0027slot\u0027 in raid10d.\n\nNow that we have a \u0027slot\u0027 variable, make better use of it to simplify\nsome code a little.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7c4e06ff2b6a4c09638551dfde76f37f9fca5c0c",
      "tree": "15ae0b698fc2d5347a776215c3bb6faaf45b2b41",
      "parents": [
        "af6d7b760c7547c1a410a333bdb24daed24e1043"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:53:17 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:53:17 2011 +1000"
      },
      "message": "md/raid10: some tidying up in fix_read_error\n\nCurrently the rdev on which a read error happened could be removed\nbefore we perform the fix_error handling.  This requires extra tests\nfor NULL.\n\nSo delay the rdev_dec_pending call until after the call to\nfix_read_error so that we can be sure that the rdev still exists.\n\nThis allows an \u0027if\u0027 clause to be removed so the body gets re-indented\nback one level.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "56d9912106b0974ffb6dd264c80c7e816677e998",
      "tree": "eef9208cffd7bc4501ca57250a4b884a04aa116b",
      "parents": [
        "8258c53208d7a9b7207e7d4dae36d2ea384cb278"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:27:03 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:27:03 2011 +1000"
      },
      "message": "md: simplify raid10 read_balance\n\nraid10 read balance has two different loop for looking through\npossible devices to chose the best.\nCollapse those into one loop and generally make the code more\nreadable.\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": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\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": "02214dc5461c36da26a34014cab4e1bb484edba2",
      "tree": "32137bdf12144af5ff6c946838e1bfbf3b2bc0f2",
      "parents": [
        "e91ece5590b3c728624ab57043fc7a05069c604a"
      ],
      "author": {
        "name": "Krzysztof Wojcik",
        "email": "krzysztof.wojcik@intel.com",
        "time": "Fri Feb 04 14:18:26 2011 +0100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Feb 08 11:49:02 2011 +1100"
      },
      "message": "FIX: md: process hangs at wait_barrier after 0-\u003e10 takeover\n\nFollowing symptoms were observed:\n1. After raid0-\u003eraid10 takeover operation we have array with 2\nmissing disks.\nWhen we add disk for rebuild, recovery process starts as expected\nbut it does not finish- it stops at about 90%, md126_resync process\nhangs in \"D\" state.\n2. Similar behavior is when we have mounted raid0 array and we\nexecute takeover to raid10. After this when we try to unmount array-\nit causes process umount hangs in \"D\"\n\nIn scenarios above processes hang at the same function- wait_barrier\nin raid10.c.\nProcess waits in macro \"wait_event_lock_irq\" until the\n\"!conf-\u003ebarrier\" condition will be true.\nIn scenarios above it never happens.\n\nReason was that at the end of level_store, after calling pers-\u003erun,\nwe call mddev_resume. This calls pers-\u003equiesce(mddev, 0) with\nRAID10, that calls lower_barrier.\nHowever raise_barrier hadn\u0027t been called on that \u0027conf\u0027 yet,\nso conf-\u003ebarrier becomes negative, which is bad.\n\nThis patch introduces setting conf-\u003ebarrier\u003d1 after takeover\noperation. It prevents to become barrier negative after call\nlower_barrier().\n\nSigned-off-by: Krzysztof Wojcik \u003ckrzysztof.wojcik@intel.com\u003e\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": "589a594be1fb8815b3f18e517be696c48664f728",
      "tree": "9de6f6b4f9244802ccf77312f7fba8612dd13a75",
      "parents": [
        "1a855a0606653d2d82506281e2c686bacb4b2f45"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 17:02:14 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 09 17:02:14 2010 +1100"
      },
      "message": "md: protect against NULL reference when waiting to start a raid10.\n\nWhen we fail to start a raid10 for some reason, we call\nmd_unregister_thread to kill the thread that was created.\n\nUnfortunately md_thread() will then make one call into the handler\n(raid10d) even though md_wakeup_thread has not been called.  This is\nnot safe and as md_unregister_thread is called after mddev-\u003eprivate\nhas been set to NULL, it will definitely cause a NULL dereference.\n\nSo fix this at both ends:\n - md_thread should only call the handler if THREAD_WAKEUP has been\n   set.\n - raid10 should call md_unregister_thread before setting things\n   to NULL just like all the other raid modules do.\n\nThis is applicable to 2.6.35 and later.\n\nCc: stable@kernel.org\nReported-by: \"Citizen\" \u003ccitizen_lee@thecus.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a167f663243662aa9153c01086580a11cde9ffdc",
      "tree": "886e64787421bbf17a1eab7853d67258b598f050",
      "parents": [
        "2b193363ef68667ad717a6723165e0dccf99470f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 26 18:31:13 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:36:15 2010 +1100"
      },
      "message": "md: use separate bio pool for each md device.\n\nbio_clone and bio_alloc allocate from a common bio pool.\nIf an md device is stacked with other devices that use this pool, or under\nsomething like swap which uses the pool, then the multiple calls on\nthe pool can cause deadlocks.\n\nSo allocate a local bio pool for each md array and use that rather\nthan the common pool.\n\nThis pool is used both for regular IO and metadata updates.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2b193363ef68667ad717a6723165e0dccf99470f",
      "tree": "bd45d5186f0edf2b546c4503d794b479d126ad1f",
      "parents": [
        "1c4588e9c19cae6209a28c9da2f16a18a610b935"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 27 15:16:40 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:36:11 2010 +1100"
      },
      "message": "md: change type of first arg to sync_page_io.\n\nCurrently sync_page_io takes a \u0027bdev\u0027.\nEvery caller passes \u0027rdev-\u003ebdev\u0027.\nWe will soon want another field out of the rdev in sync_page_io,\nSo just pass the rdev instead of the bdev out of it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6746557f0325a66f57d179126426e38a8ea66945",
      "tree": "3b1db04c854b6ccc4752560f0d30c85e6cbbda6a",
      "parents": [
        "4e78064f42ad474ce9c31760861f7fb0cfc22532"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 26 17:33:54 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:36:06 2010 +1100"
      },
      "message": "md: use bio_kmalloc rather than bio_alloc when failure is acceptable.\n\nbio_alloc can never fail (as it uses a mempool) but an block\nindefinitely, especially if the caller is holding a reference to a\npreviously allocated bio.\n\nSo these to places which both handle failure and hold multiple bios\nshould not use bio_alloc, they should use bio_kmalloc.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4e78064f42ad474ce9c31760861f7fb0cfc22532",
      "tree": "3a1abaa98ebcbd62eacfbe95d72e44195fb3bc1f",
      "parents": [
        "e804ac780e2f01cb3b914daca2fd4780d1743db1"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 19 12:54:01 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:34:07 2010 +1100"
      },
      "message": "md: Fix possible deadlock with multiple mempool allocations.\n\nIt is not safe to allocate from a mempool while holding an item\npreviously allocated from that mempool as that can deadlock when the\nmempool is close to exhaustion.\n\nSo don\u0027t use a bio list to collect the bios to write to multiple\ndevices in raid1 and raid10.\nInstead queue each bio as it becomes available so an unplug will\nactivate all previously allocated bios and so a new bio has a chance\nof being allocated.\n\nThis means we must set the \u0027remaining\u0027 count to \u00271\u0027 before submitting\nany requests, then when all are submitted, decrement \u0027remaining\u0027 and\npossible handle the write completion at that point.\n\nReported-by: Torsten Kaiser \u003cjust.for.lkml@googlemail.com\u003e\nTested-by: Torsten Kaiser \u003cjust.for.lkml@googlemail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "57dab0bdf689d42972975ec646d862b0900a4bf3",
      "tree": "d136f69b8a68850e40844397ebaffde31787c988",
      "parents": [
        "4b532c9b8c87eb8e51605c4d08dfb5139c758dc5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 19 10:03:39 2010 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 28 17:32:26 2010 +1100"
      },
      "message": "md: use sector_t in bitmap_get_counter\n\nbitmap_get_counter returns the number of sectors covered\nby the counter in a pass-by-reference variable.\nIn some cases this can be very large, so make it a sector_t\nfor safety.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n\n"
    },
    {
      "commit": "e9c7469bb4f502dafc092166201bea1ad5fc0fbf",
      "tree": "04202b0bb88623d3005c909eaafcb280778902da",
      "parents": [
        "7bc9fddab074d6bb630344e1969e28d20b140621"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Sep 03 11:56:18 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 10 12:35:38 2010 +0200"
      },
      "message": "md: implment REQ_FLUSH/FUA support\n\nThis patch converts md to support REQ_FLUSH/FUA instead of now\ndeprecated REQ_HARDBARRIER.  In the core part (md.c), the following\nchanges are notable.\n\n* Unlike REQ_HARDBARRIER, REQ_FLUSH/FUA don\u0027t interfere with\n  processing of other requests and thus there is no reason to mark the\n  queue congested while FLUSH/FUA is in progress.\n\n* REQ_FLUSH/FUA failures are final and its users don\u0027t need retry\n  logic.  Retry logic is removed.\n\n* Preflush needs to be issued to all member devices but FUA writes can\n  be handled the same way as other writes - their processing can be\n  deferred to request_queue of member devices.  md_barrier_request()\n  is renamed to md_flush_request() and simplified accordingly.\n\nFor linear, raid0 and multipath, the core changes are enough.  raid1,\n5 and 10 need the following conversions.\n\n* raid1: Handling of FLUSH/FUA bio\u0027s can simply be deferred to\n  request_queues of member devices.  Barrier related logic removed.\n\n* raid5: Queue draining logic dropped.  FUA bit is propagated through\n  biodrain and stripe resconstruction such that all the updated parts\n  of the stripe are written out with FUA writes if any of the dirtying\n  writes was FUA.  preread_active_stripes handling in make_request()\n  is updated as suggested by Neil Brown.\n\n* raid10: FUA bit needs to be propagated to write clones.\n\nlinear, raid0, 1, 5 and 10 tested.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "2c7d46ec192e4f2b350f67a0e185b9bce646cd6b",
      "tree": "2a49c1e99de3442184726be20d03e3a15d80cee0",
      "parents": [
        "6b9656205469269c050963c71fca1998b247a560"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 16:16:05 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 16:16:05 2010 +1000"
      },
      "message": "md raid-1/10 Fix bio_rw bit manipulations again\n\ncommit 7b6d91daee5cac6402186ff224c3af39d79f4a0e changed the behaviour\nof a few variables in raid1 and raid10 from flags to bit-sets, but\nleft them as type \u0027bool\u0027 so they did not work.\n\nChange them (back) to unsigned long.\n(historical note: see 1ef04fefe2241087d9db7e9615c3f11b516e36cf)\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReported-by: Jiri Slaby \u003cjslaby@suse.cz\u003e and many others\n"
    },
    {
      "commit": "6b9656205469269c050963c71fca1998b247a560",
      "tree": "9d090d2e363d269cdc55549213025d86af8ef70a",
      "parents": [
        "e6ffbcb6cd0ac471223df24ae77eb486c1ee68cc"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 11:56:59 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 12:04:32 2010 +1000"
      },
      "message": "md: provide appropriate return value for spare_active functions.\n\nmd_check_recovery expects -\u003espare_active to return \u0027true\u0027 if any\nspares were activated, but none of them do, so the consequent change\nin \u0027degraded\u0027 is not notified through sysfs.\n\nSo count the number of spares activated, subtract it from \u0027degraded\u0027\njust once, and return it.\n\nReported-by: Adrian Drzewiecki \u003cadriand@vmware.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    }
  ],
  "next": "e6ffbcb6cd0ac471223df24ae77eb486c1ee68cc"
}
