)]}'
{
  "log": [
    {
      "commit": "c6d2e084c7411f61f2b446d94989e5aaf9879b0f",
      "tree": "521616d7bd6ff7eb38217bed1b81c5960fa2023d",
      "parents": [
        "a42f9d83b5c05dc6e678a1f0cd9767502c2c58de"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Mon Apr 02 01:16:59 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Apr 03 15:37:38 2012 +1000"
      },
      "message": "md/raid5: Fix a bug about judging if the operation is syncing or replacing\n\nWhen create a raid5 using assume-clean and echo check or repair to\nsync_action.Then component disks did not operated IO but the raid\ncheck/resync faster than normal.\nBecause the judgement in function analyse_stripe():\n\t\tif (do_recovery ||\n\t\t    sh-\u003esector \u003e\u003d conf-\u003emddev-\u003erecovery_cp)\n\t\t\ts-\u003esyncing \u003d 1;\n\t\telse\n\t\t\ts-\u003ereplacing \u003d 1;\nWhen check or repair,the recovery_cp \u003d\u003d MaxSectore,so syncing equal zero\nnot one.\n\nThis bug was introduced by commit 9a3e1101b827\n    md/raid5:  detect and handle replacements during recovery.\nso this patch is suitable for 3.3-stable.\n\nCc: stable@vger.kernel.org\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "18b9837ea0dc3cf844c6c4196871ce91d047bddb",
      "tree": "de8be80b767d144405aeeaf7238c723f575b4b40",
      "parents": [
        "5220ea1e640869e70f894837678315c878c651fd"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Sun Apr 01 23:48:38 2012 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Apr 03 15:36:17 2012 +1000"
      },
      "message": "md/raid5: fix handling of bad blocks during recovery.\n\n1/ We can only treat a known-bad-block like a read-error if we\n   have the data that belongs in that block.  So fix that test.\n\n2/ If we cannot recovery a stripe due to insufficient data,\n   don\u0027t tell \"md_done_sync\" that the sync failed unless we really\n   did fail something.  If we successfully record bad blocks,\n   that is success.\n\nReported-by: \"majianpeng\" \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "dafb20fa34320a472deb7442f25a0c086e0feb33",
      "tree": "2ff501805f8a6d08119f1f1a7248f579d52e491b",
      "parents": [
        "d6b42dcb995e6acd7cc276774e751ffc9f0ef4bf"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:39 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:39 2012 +1100"
      },
      "message": "md: tidy up rdev_for_each usage.\n\nmd.h has an \u0027rdev_for_each()\u0027 macro for iterating the rdevs in an\nmddev.  However it uses the \u0027safe\u0027 version of list_for_each_entry,\nand so requires the extra variable, but doesn\u0027t include \u0027safe\u0027 in the\nname, which is useful documentation.\n\nConsequently some places use this safe version without needing it, and\nmany use an explicity list_for_each entry.\n\nSo:\n - rename rdev_for_each to rdev_for_each_safe\n - create a new rdev_for_each which uses the plain\n   list_for_each_entry,\n - use the \u0027safe\u0027 version only where needed, and convert all other\n   list_for_each_entry calls to use rdev_for_each.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "dc10c643e8a8d008fd16dd6706e9e0018eadf8d2",
      "tree": "6a0efe323cfaca9d180c0429c74697598c6d9a05",
      "parents": [
        "41fe75f60bcd4d698daed3e54bb099227358ce58"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:37 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 19 12:46:37 2012 +1100"
      },
      "message": "md: allow re-add to failed arrays.\n\nWhen an array is failed (some data inaccessible) then there is no\npoint attempting to add a spare as it could not possibly be recovered.\n\nHowever that may be value in re-adding a recently removed device.\ne.g. if there is a write-intent-bitmap and it is clear, then access\nto the data could be restored by this action.\n\nSo don\u0027t reject a re-add to a failed array for RAID10 and RAID5 (the\nonly arrays  types that check for a failed array).\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "41fe75f60bcd4d698daed3e54bb099227358ce58",
      "tree": "bbd15d0143d20c59f87c5e6d2e0afba57252929b",
      "parents": [
        "43437ecd5adc8bd712b7140c8a70e2b4a80a89dd"
      ],
      "author": {
        "name": "majianpeng",
        "email": "majianpeng@gmail.com",
        "time": "Tue Mar 13 11:21:25 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:25 2012 +1100"
      },
      "message": "md/raid5: use atomic_dec_return() instead of atomic_dec() and atomic_read().\n\nSigned-off-by: majianpeng \u003cmajianpeng@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9d4c7d8799c418816342e263479fa010b182183e",
      "tree": "e1450bda6809a36d5bdb666ae0ab88ef1492b580",
      "parents": [
        "547414d19fd72376ff2ecc42aac8d7a051f03d26"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:21 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:21 2012 +1100"
      },
      "message": "md/raid5: removed unused \u0027added_devices\u0027 variable.\n\ncommit 908f4fbd265733 removed the last user of this variable,\nso we should discard it completely.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1e3fa9bd5061778fb5cf4648e4e8321e8cbbb95b",
      "tree": "de51166f0369e17cc2cb20566b61b7b3c873d7fc",
      "parents": [
        "fde7d9049e55ab85a390be7f415d74c9f62dd0f9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:18 2012 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 13 11:21:18 2012 +1100"
      },
      "message": "md/raid5: make sure reshape_position is cleared on error path.\n\nLeaving a valid reshape_position value in place could be confusing.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3a6de2924af602f9c1b5a5154438c37f2d712dfa",
      "tree": "895462dfefd70827c5b6d860503d1244d003a56e",
      "parents": [
        "7bfec5f35c68121e7b1849f3f4166dd96c8da5b3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:54 2011 +1100"
      },
      "message": "md/raid5: Mark device want_replacement when we see a write error.\n\nNow that WantReplacement drives are replaced cleanly, mark a drive\nas WantReplacement when we see a write error.  It might get failed soon so\nthe WantReplacement flag is irrelevant, but if the write error is recorded\nin the bad block log, we still want to activate any spare that might\nbe available.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by:  NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7bfec5f35c68121e7b1849f3f4166dd96c8da5b3",
      "tree": "14bab6480ccc14a6cdf9e5ee34662897e5e2e94a",
      "parents": [
        "17045f52ac76d9cd1a120e52af5d83b570af4ba8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "message": "md/raid5: If there is a spare and a want_replacement device, start replacement.\n\nWhen attempting to add a spare to a RAID[456] array, also consider\nadding it as a replacement for a want_replacement device.\n\nThis requires that common md code attempt hot_add even when the array\nis not formally degraded.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "17045f52ac76d9cd1a120e52af5d83b570af4ba8",
      "tree": "2bbd692eaab68ffa60f3dcf6757752b9b89a7a9b",
      "parents": [
        "dd054fce88d33da1aa81d018db75b91b102a6959"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "message": "md/raid5: recognise replacements when assembling array.\n\nIf a Replacement is seen, file it as such.\n\nIf we see two replacements (or two normal devices) for the one slot,\nabort.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "dd054fce88d33da1aa81d018db75b91b102a6959",
      "tree": "9528caece6b444ebcdb41453b60a1bb4054a1a4d",
      "parents": [
        "9a3e1101b827a59ac9036a672f5fa8d5279d0fe2"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "message": "md/raid5: handle activation of replacement device when recovery completes.\n\nWhen recovery completes - as reported by a call to -\u003espare_active,\nwe clear In_sync on the original and set it on the replacement.\n\nThen when the original gets removed we move the replacement from\n\u0027replacement\u0027 to \u0027rdev\u0027.\n\nThis could race with other code that is looking at these pointers,\nso we use memory barriers and careful ordering to ensure that\na reader might see one device twice, but never no devices.\nThen the readers guard against using both devices, which could\nonly happen when writing.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9a3e1101b827a59ac9036a672f5fa8d5279d0fe2",
      "tree": "9e629fbc1bab31b588c475181246bbe30778f67a",
      "parents": [
        "977df36255ab0ea78b048cbc9055300c586dcc91"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "message": "md/raid5:  detect and handle replacements during recovery.\n\nDuring recovery we want to write to the replacement but not\nthe original.  So we have two new flags\n - R5_NeedReplace if this stripe has a replacement that needs to\n   be written at some stage\n - R5_WantReplace if NeedReplace, and the data is available, and\n   a \u0027sync\u0027 has been requested on this stripe.\n\nWe also distinguish between \u0027sync and replace\u0027 which need to read\nall other devices, and \u0027replace\u0027 which only needs to read the\ndevices being replaced.\n\nNote that during resync we always write to any replacement device.\nIt might not need to be written to, but as we don\u0027t read to compare,\nwe have to write to be sure.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "977df36255ab0ea78b048cbc9055300c586dcc91",
      "tree": "6d89e08ebe7702ccbb5e160b99ea2440ab08fcda",
      "parents": [
        "657e3e4d88461a5ab660dd87f8f773f55e748da4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:53 2011 +1100"
      },
      "message": "md/raid5: writes should get directed to replacement as well as original.\n\nWhen writing, we need to submit two writes, one to the original, and\none to the replacement - if there is a replacement.\n\nIf the write to the replacement results in a write error, we just fail\nthe device.  We only try to record write errors to the original.\n\nWhen writing for recovery, we shouldn\u0027t write to the original.  This\nwill be addressed in a subsequent patch that generally addresses\nrecovery.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "657e3e4d88461a5ab660dd87f8f773f55e748da4",
      "tree": "1eecf97f8e5eac95cf37b4f28e262a37dd3e116d",
      "parents": [
        "14a75d3e07c784c004b4b44b34af996b8e4ac453"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "message": "md/raid5: allow removal for failed replacement devices.\n\nEnhance raid5_remove_disk to be able to remove -\u003ereplacement\nas well as -\u003erdev.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "14a75d3e07c784c004b4b44b34af996b8e4ac453",
      "tree": "6009e1ccc1b766d4c55434e3b4c1d171b8a2c004",
      "parents": [
        "995c4275a7e14b8752f301e4570831a108ae4303"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "message": "md/raid5: preferentially read from replacement device if possible.\n\nIf a replacement device is present and has been recovered far enough,\nthen use it for reading into the stripe cache.\n\nIf we get an error we don\u0027t try to repair it, we just fail the device.\nA replacement device that gives errors does not sound sensible.\n\nThis requires removing the setting of R5_ReadError when we get\na read error during a read that bypasses the cache.  It was probably\na bad idea anyway as we don\u0027t know that every block in the read\ncaused an error, and it could cause ReadError to be set for the\nreplacement device, which is bad.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "995c4275a7e14b8752f301e4570831a108ae4303",
      "tree": "2bee4c8daf14b6453371bb348b18d37d7e3cdb07",
      "parents": [
        "ede7ee8b4d007f308aa033be676b1a048f99e9db"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "message": "md/raid5: remove redundant bio initialisations.\n\nWe current initialise some fields of a bio when preparing a\nstripe_head, and again just before submitting the request.\n\nRemove the duplication by only setting the fields that lower level\ndevices don\u0027t touch in raid5_build_block, and only set the changeable\nfields in ops_run_io.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "671488cc25f7c194c7c7a9f258bab1df17a6ff69",
      "tree": "00bec63c7789dbf7439418ee903490d6ee076a70",
      "parents": [
        "2d78f8c451785f030ac1676a18691896b59c69d8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:52 2011 +1100"
      },
      "message": "md/raid5: allow each slot to have an extra replacement device\n\nJust enhance data structures to record a second device per slot to be\nused as a \u0027replacement\u0027 device, replacing the original.\nWe also have a second bio in each slot in each stripe_head.  This will\nonly be used when writing to the array - we need to write to both the\noriginal and the replacement at the same time, so will need two bios.\n\nFor now, only try using the replacement drive for aligned-reads.\nIn this case, we prefer the replacement if it has been recovered far\nenough, otherwise use the original.\n\nThis includes a small enhancement.  Previously we would only do\naligned reads if the target device was fully recovered.  Now we also\ndo them if it has recovered far enough.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b8321b68d1445f308324517e45fb0a5c2b48e271",
      "tree": "3fc4c9b253435753d2154d9bd697a7869163c29a",
      "parents": [
        "476a7abb9b00adfe6bf70e82800367319ab8078b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:51 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:51 2011 +1100"
      },
      "message": "md: change hot_remove_disk to take an rdev rather than a number.\n\nSoon an array will be able to have multiple devices with the\nsame raid_disk number (an original and a replacement).  So removing\na device based on the number won\u0027t work.  So pass the actual device\nhandle instead.\n\nReviewed-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "908f4fbd265733310c17ecc906299846b5dac44a",
      "tree": "71e364c57887213431143e6fd1296e8433cc6293",
      "parents": [
        "2e61ebbcc45438899235d7a39f17291cb24e746c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:50 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 10:17:50 2011 +1100"
      },
      "message": "md/raid5: be more thorough in calculating \u0027degraded\u0027 value.\n\nWhen an array is being reshaped to change the number of devices,\nthe two halves can be differently degraded.  e.g. one could be\nmissing a device and the other not.\n\nSo we need to be more careful about calculating the \u0027degraded\u0027\nattribute.\n\nInstead of just inc/dec at appropriate times, perform a full\nre-calculation examining both possible cases.  This doesn\u0027t happen\noften so it not a big cost, and we already have most of the code to\ndo it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "30d7a4836847bdb10b32c78a4879d4aebe0f193b",
      "tree": "039d4eaec57d67cbfc49d92f12e592b46c251c01",
      "parents": [
        "09cd9270ea52e0f9851528e8ed028073f96b3c34"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 09:57:00 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 23 09:57:00 2011 +1100"
      },
      "message": "md/raid5: ensure correct assessment of drives during degraded reshape.\n\nWhile reshaping a degraded array (as when reshaping a RAID0 by first\nconverting it to a degraded RAID4) we currently get confused about\nwhich devices are in_sync.  In most cases we get it right, but in the\nregion that is being reshaped we need to treat non-failed devices as\nin-sync when we have the data but haven\u0027t actually written it out yet.\n\nReported-by: Adam Kwolek \u003cadam.kwolek@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5d8c71f9e5fbdd95650be00294d238e27a363b5c",
      "tree": "51f7ae70b3a188f8376d7912493d346537fe516e",
      "parents": [
        "9283d8c5af4cdcb809e655acdf4be368afec8b58"
      ],
      "author": {
        "name": "Adam Kwolek",
        "email": "adam.kwolek@intel.com",
        "time": "Fri Dec 09 14:26:11 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Dec 09 14:26:11 2011 +1100"
      },
      "message": "md: raid5 crash during degradation\n\nNULL pointer access causes crash in raid5 module.\n\nSigned-off-by: Adam Kwolek \u003cadam.kwolek@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9283d8c5af4cdcb809e655acdf4be368afec8b58",
      "tree": "d4baa86260792a10782808e51d5468e145358980",
      "parents": [
        "8bd2f0a05b361e07d48bb34398593f5f523946b3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 08 16:27:57 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Dec 08 16:27:57 2011 +1100"
      },
      "message": "md/raid5: never wait for bad-block acks on failed device.\n\nOnce a device is failed we really want to completely ignore it.\nIt should go away soon anyway.\n\nIn particular the presence of bad blocks on it should not cause us to\nblock as we won\u0027t be trying to write there anyway.\n\nSo as soon as we can check if a device is Faulty, do so and pretend\nthat it is already gone if it is Faulty.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "257a4b42af7586fab4eaec7f04e6896b86551843",
      "tree": "ec65357b2320ba4e4341a2853245048889666f5c",
      "parents": [
        "9a3f530f39f4490eaa18b02719fb74ce5f4d2d86"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Nov 08 16:22:06 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 08 16:22:06 2011 +1100"
      },
      "message": "md/raid5: STRIPE_ACTIVE has lock semantics, add barriers\n\nAll updates that occur under STRIPE_ACTIVE should be globally visible\nwhen STRIPE_ACTIVE clears.  test_and_set_bit() implies a barrier, but\nclear_bit() does not.\n\nThis is suitable for 3.1-stable.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "9a3f530f39f4490eaa18b02719fb74ce5f4d2d86",
      "tree": "4bcff31bacd9b242360f48dad706d8b5231ffafe",
      "parents": [
        "1ea6b8f48918282bdca0b32a34095504ee65bab5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 08 16:22:01 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 08 16:22:01 2011 +1100"
      },
      "message": "md/raid5: abort any pending parity operations when array fails.\n\nWhen the number of failed devices exceeds the allowed number\nwe must abort any active parity operations (checks or updates) as they\nare no longer meaningful, and can lead to a BUG_ON in\nhandle_parity_checks6.\n\nThis bug was introduce by commit 6c0069c0ae9659e3a91b68eaed06a5c6c37f45c8\nin 2.6.29.\n\nReported-by: Manish Katiyar \u003cmkatiyar@gmail.com\u003e\nTested-by: Manish Katiyar \u003cmkatiyar@gmail.com\u003e\nAcked-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "32aaeffbd4a7457bf2f7448b33b5946ff2a960eb",
      "tree": "faf7ad871d87176423ff9ed1d1ba4d9c688fc23f",
      "parents": [
        "208bca0860406d16398145ddd950036a737c3c9d",
        "67b84999b1a8b1af5625b1eabe92146c5eb42932"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "message": "Merge branch \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\n* \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)\n  Revert \"tracing: Include module.h in define_trace.h\"\n  irq: don\u0027t put module.h into irq.h for tracking irqgen modules.\n  bluetooth: macroize two small inlines to avoid module.h\n  ip_vs.h: fix implicit use of module_get/module_put from module.h\n  nf_conntrack.h: fix up fallout from implicit moduleparam.h presence\n  include: replace linux/module.h with \"struct module\" wherever possible\n  include: convert various register fcns to macros to avoid include chaining\n  crypto.h: remove unused crypto_tfm_alg_modname() inline\n  uwb.h: fix implicit use of asm/page.h for PAGE_SIZE\n  pm_runtime.h: explicitly requires notifier.h\n  linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h\n  miscdevice.h: fix up implicit use of lists and types\n  stop_machine.h: fix implicit use of smp.h for smp_processor_id\n  of: fix implicit use of errno.h in include/linux/of.h\n  of_platform.h: delete needless include \u003clinux/module.h\u003e\n  acpi: remove module.h include from platform/aclinux.h\n  miscdevice.h: delete unnecessary inclusion of module.h\n  device_cgroup.h: delete needless include \u003clinux/module.h\u003e\n  net: sch_generic remove redundant use of \u003clinux/module.h\u003e\n  net: inet_timewait_sock doesnt need \u003clinux/module.h\u003e\n  ...\n\nFix up trivial conflicts (other header files, and  removal of the ab3550 mfd driver) in\n - drivers/media/dvb/frontends/dibx000_common.c\n - drivers/media/video/{mt9m111.c,ov6650.c}\n - drivers/mfd/ab3550-core.c\n - include/linux/dmaengine.h\n"
    },
    {
      "commit": "b4fdcb02f1e39c27058a885905bd0277370ba441",
      "tree": "fd4cfd1994f21f44afe5e7904681fb5ac09f81b8",
      "parents": [
        "044595d4e448305fbaec472eb7d22636d24e7d8c",
        "6dd9ad7df2019b1e33a372a501907db293ebcd0d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 04 17:06:58 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 04 17:06:58 2011 -0700"
      },
      "message": "Merge branch \u0027for-3.2/core\u0027 of git://git.kernel.dk/linux-block\n\n* \u0027for-3.2/core\u0027 of git://git.kernel.dk/linux-block: (29 commits)\n  block: don\u0027t call blk_drain_queue() if elevator is not up\n  blk-throttle: use queue_is_locked() instead of lockdep_is_held()\n  blk-throttle: Take blkcg-\u003elock while traversing blkcg-\u003epolicy_list\n  blk-throttle: Free up policy node associated with deleted rule\n  block: warn if tag is greater than real_max_depth.\n  block: make gendisk hold a reference to its queue\n  blk-flush: move the queue kick into\n  blk-flush: fix invalid BUG_ON in blk_insert_flush\n  block: Remove the control of complete cpu from bio.\n  block: fix a typo in the blk-cgroup.h file\n  block: initialize the bounce pool if high memory may be added later\n  block: fix request_queue lifetime handling by making blk_queue_cleanup() properly shutdown\n  block: drop @tsk from attempt_plug_merge() and explain sync rules\n  block: make get_request[_wait]() fail if queue is dead\n  block: reorganize throtl_get_tg() and blk_throtl_bio()\n  block: reorganize queue draining\n  block: drop unnecessary blk_get/put_queue() in scsi_cmd_ioctl() and blk_get_tg()\n  block: pass around REQ_* flags instead of broken down booleans during request alloc/free\n  block: move blk_throtl prototypes to block/blk.h\n  block: fix genhd refcounting in blkio_policy_parse_and_set()\n  ...\n\nFix up trivial conflicts due to \"mddev_t\" -\u003e \"struct mddev\" conversion\nand making the request functions be of type \"void\" instead of \"int\" in\n - drivers/md/{faulty.c,linear.c,md.c,md.h,multipath.c,raid0.c,raid1.c,raid10.c,raid5.c}\n - drivers/staging/zram/zram_drv.c\n"
    },
    {
      "commit": "056075c76417b112b4924e7b6386fdc6dfc9ac03",
      "tree": "7326cbdb0f54f975b140e548bd4f4d6f4b3486cc",
      "parents": [
        "ec37d321b96621906337c4279c490e1b5893ecae"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Sun Jul 03 13:58:33 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 19:31:18 2011 -0400"
      },
      "message": "md: Add module.h to all files using it implicitly\n\nA pending cleanup will mean that module.h won\u0027t be implicitly\neverywhere anymore.  Make sure the modular drivers in md dir\nare actually calling out for \u003cmodule.h\u003e explicitly in advance.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "d890fa2b0586b6177b119643ff66932127d58afa",
      "tree": "48dfb1c192274002fc045996f49915a4d9af3bf8",
      "parents": [
        "355840e7a7e56bb2834fd3b0da64da5465f8aeaa"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 26 11:54:39 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 26 11:54:39 2011 +1100"
      },
      "message": "md: Fix some bugs in recovery_disabled handling.\n\nIn 3.0 we changed the way recovery_disabled was handle so that instead\nof testing against zero, we test an mddev-\u003e value against a conf-\u003e\nvalue.\nTwo problems:\n  1/ one place in raid1 was missed and still sets to \u00271\u0027.\n  2/ We didn\u0027t explicitly set the conf-\u003e value at array creation\n     time.\n     It defaulted to \u00270\u0027 just like the mddev value does so they\n     could appear equal and thus disable recovery.\n     This did not affect normal \u0027md\u0027 as it calls bind_rdev_to_array\n     which changes the mddev value.  However the dmraid interface\n     doesn\u0027t call this and so doesn\u0027t change -\u003erecovery_disabled; so at\n     array start all recovery is incorrectly disabled.\n\nSo initialise the \u0027conf\u0027 value to one less that the mddev value, so\nthe will only be the same when explicitly set that way.\n\nReported-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: NeilBrown  \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "355840e7a7e56bb2834fd3b0da64da5465f8aeaa",
      "tree": "8ba816b2db3b96872f744c476c3d3d0d3f12fd23",
      "parents": [
        "bd860c53d4f9cad520d233e1ba690aaacfb39e9b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 26 10:31:04 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 26 10:31:04 2011 +1100"
      },
      "message": "md/raid5: fix bug that could result in reads from a failed device.\n\nThis bug was introduced in 415e72d034c50520ddb7ff79e7d1792c1306f0c9\nwhich was in 2.6.36.\n\nThere is a small window of time between when a device fails and when\nit is removed from the array.  During this time we might still read\nfrom it, but we won\u0027t write to it - so it is possible that we could\nread stale data.\n\nWe didn\u0027t need the test of \u0027Faulty\u0027 before because the test on\nIn_sync is sufficient.  Since we started allowing reads from the early\npart of non-In_sync devices we need a test on Faulty too.\n\nThis is suitable for any kernel from 2.6.36 onwards, though the patch\nmight need a bit of tweaking in 3.0 and earlier.\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5c04b426f2e8b46cfc7969a35b2631063a3c646c",
      "tree": "2d27d9f5d2fe5d5e8fbc01a467ec58bcb50235c1",
      "parents": [
        "499337bb6511e665a236a6a947f819d98ea340c6",
        "899e3ee404961a90b828ad527573aaaac39f0ab1"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:30:42 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "axboe@kernel.dk",
        "time": "Wed Oct 19 14:30:42 2011 +0200"
      },
      "message": "Merge branch \u0027v3.1-rc10\u0027 into for-3.2/core\n\nConflicts:\n\tblock/blk-core.c\n\tinclude/linux/blkdev.h\n\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n"
    },
    {
      "commit": "84fc4b56db85cb9e05326424049973a2036c9940",
      "tree": "b8f942766ad620d63da92c24df56032168879253",
      "parents": [
        "29d3247ea2274bca0d0b7f41fcf3b82e0a8bc44c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:58 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:58 2011 +1100"
      },
      "message": "md: rename \"mdk_personality\" to \"md_personality\"\n\n\"mdk\" doesn\u0027t mean anything any more.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d1688a6d5515f1900af76a963b4bb6d9a6554cfa",
      "tree": "2ed2b1001804b6982697c3785f06580a4e84e31b",
      "parents": [
        "e8096360476689898f038feebf5b352c9ec43a2a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:52 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:49:52 2011 +1100"
      },
      "message": "md/raid5: typedef removal: raid5_conf_t -\u003e struct r5conf\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e373ab109172abc2d821bd3b5c1b400acddef5a5",
      "tree": "48ca1b8ded6ec90a47015ab7316fe8cadb9f8d05",
      "parents": [
        "69724e28ca99990a8f0b5370bb946d7704936d67"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:48:59 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:48:59 2011 +1100"
      },
      "message": "md/raid0: typedef removal: raid0_conf_t -\u003e struct r0conf\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "fd01b88c75a718020ff77e7f560d33835e9b58de",
      "tree": "c455d5adefd58f3263dcf265bb8ba2024523b106",
      "parents": [
        "3cb03002000f133f9f97269edefd73611eafc873"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:47:53 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:47:53 2011 +1100"
      },
      "message": "md: remove typedefs: mddev_t -\u003e struct mddev\n\nHaving mddev_t and \u0027struct mddev_s\u0027 is ugly and not preferred\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3cb03002000f133f9f97269edefd73611eafc873",
      "tree": "77fdb146666298b33aaeef0c05f082b6f82840fe",
      "parents": [
        "50de8df4abca1b27dbf7b2f81a56451bd8b5a7d8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:45:26 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 11 16:45:26 2011 +1100"
      },
      "message": "md: removing typedefs:  mdk_rdev_t -\u003e struct md_rdev\n\nThe typedefs are just annoying. \u0027mdk\u0027 probably refers to \u0027md_k.h\u0027\nwhich used to be an include file that defined this thing.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bdc04e6b15f70a8f96d8cdfe21df159a6466b49a",
      "tree": "23b762d044dafe35ac2fb20214fc1eff77a41bdd",
      "parents": [
        "db298e1946c074c83d97f1c959fbc0def2af2c86"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:23:04 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:23:04 2011 +1100"
      },
      "message": "md: remove some old DEBUGging code.\n\nThis code is not really helpful and is hard to maintain, so just\ndiscard it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "db298e1946c074c83d97f1c959fbc0def2af2c86",
      "tree": "1fb0ff7c0d6b85216d391e82b84af07b032fb987",
      "parents": [
        "0fc280f606742e8a2969776b2ab11cf6a614d9e1"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:23:00 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:23:00 2011 +1100"
      },
      "message": "md/raid5: convert to macros into inline functions.\n\nMore type-safety.  Easier to read.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e4f869d9de18bc8272df8d0ab764178aa24bdf33",
      "tree": "9782f85edbecdb83dab65f2fab4390264b0d7139",
      "parents": [
        "ce550c2059a67ee7834fc6f64cf895391d36a58e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:22:49 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 07 14:22:49 2011 +1100"
      },
      "message": "md/raid5: remove pointless NULL test.\n\nIn the \u0027abort\u0027 branch of run(), \u0027conf\u0027 cannot possibly be NULL,\nso remove the test.\n\nReported-by: Zdenek Kabelac \u003czdenek.kabelac@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "01f96c0a9922cd9919baf9d16febdf7016177a12",
      "tree": "a877fe509c4ef0db5252b7192df56009c1d06d6f",
      "parents": [
        "27a7b260f71439c40546b43588448faac01adb93"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 21 15:30:20 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 21 15:30:20 2011 +1000"
      },
      "message": "md: Avoid waking up a thread after it has been freed.\n\nTwo related problems:\n\n1/ some error paths call \"md_unregister_thread(mddev-\u003ethread)\"\n   without subsequently clearing -\u003ethread.  A subsequent call\n   to mddev_unlock will try to wake the thread, and crash.\n\n2/ Most calls to md_wakeup_thread are protected against the thread\n   disappeared either by:\n      - holding the -\u003emutex\n      - having an active request, so something else must be keeping\n        the array active.\n   However mddev_unlock calls md_wakeup_thread after dropping the\n   mutex and without any certainty of an active request, so the\n   -\u003ethread could theoretically disappear.\n   So we need a spinlock to provide some protections.\n\nSo change md_unregister_thread to take a pointer to the thread\npointer, and ensure that it always does the required locking, and\nclears the pointer properly.\n\nReported-by: \"Moshe Melnikov\" \u003cmoshe@zadarastorage.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\ncc: stable@kernel.org\n"
    },
    {
      "commit": "5a7bbad27a410350e64a2d7f5ec18fc73836c14f",
      "tree": "3447cd62dbcbd77b4071e2eb7576f1d7632ef2d3",
      "parents": [
        "c20e8de27fef9f59869c81c288ad6cf28200e00c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Mon Sep 12 12:12:01 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Sep 12 12:12:01 2011 +0200"
      },
      "message": "block: remove support for bio remapping from -\u003emake_request\n\nThere is very little benefit in allowing to let a -\u003emake_request\ninstance update the bios device and sector and loop around it in\n__generic_make_request when we can archive the same through calling\ngeneric_make_request from the driver and letting the loop in\ngeneric_make_request handle it.\n\nNote that various drivers got the return value from -\u003emake_request and\nreturned non-zero values for errors.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nAcked-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "43220aa0f22cd3ce5b30246d50ccd696d119edea",
      "tree": "2738ff3d5acfbe899f30c4991175f945211e941d",
      "parents": [
        "7da64a0abc3b2c6cbd3521672e9bb74dd560bb89"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 31 12:49:14 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 31 12:49:14 2011 +1000"
      },
      "message": "md/raid5: fix a hang on device failure.\n\nWaiting for a \u0027blocked\u0027 rdev to become unblocked in the raid5d thread\ncannot work with internal metadata as it is the raid5d thread which\nwill clear the blocked flag.\nThis wasn\u0027t a problem in 3.0 and earlier as we only set the blocked\nflag when external metadata was used then.\nHowever we now set it always, so we need to be more careful.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b84db560ead5417b5594349512baf8837959df4f",
      "tree": "77f8cfe305a32ace5f4ead4eb820e3f9fa14ce67",
      "parents": [
        "73e92e51b7969ef5477dd28fe2ae4d77675896f4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "message": "md/raid5: Clear bad blocks on successful write.\n\nOn a successful write to a known bad block, flag the sh\nso that raid5d can remove the known bad block from the list.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "73e92e51b7969ef5477dd28fe2ae4d77675896f4",
      "tree": "05f3d45d6c686abed79c0e5fac1d0b61ae9f93bd",
      "parents": [
        "bc2607f393bd4fb844c1886a02af929ca0372056"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "message": "md/raid5.  Don\u0027t write to known bad block on doubtful devices.\n\nIf a device has seen write errors, don\u0027t write to any known\nbad blocks on that device.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bc2607f393bd4fb844c1886a02af929ca0372056",
      "tree": "45c7f9c538b5e196e389454286771f3beb8628ba",
      "parents": [
        "7f0da59bdc2f65795a57009d78f7753d3aea1de3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "message": "md/raid5: write errors should be recorded as bad blocks if possible.\n\nWhen a write error is detected, don\u0027t mark the device as failed\nimmediately but rather record the fact for handle_stripe to deal with.\n\nHandle_stripe then attempts to record a bad block.  Only if that fails\ndoes the device get marked as faulty.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7f0da59bdc2f65795a57009d78f7753d3aea1de3",
      "tree": "4ab3ae7188122657c12dfab61626d96360fb6240",
      "parents": [
        "31c176ecdf3563140e6395249eda51a18130d9f6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "message": "md/raid5: use bad-block log to improve handling of uncorrectable read errors.\n\nIf we get an uncorrectable read error - record a bad block rather than\nfailing the device.\nAnd if these errors (which may be due to known bad blocks) cause\nrecovery to be impossible, record a bad block on the recovering\ndevices, or abort the recovery.\n\nAs we might abort a recovery without failing a device we need to teach\nRAID5 about recovery_disabled handling.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "31c176ecdf3563140e6395249eda51a18130d9f6",
      "tree": "5ad7dba363214e9d36fa921c221316d2597078ef",
      "parents": [
        "62096bce231b3760882ed91205fc84682d6b0529"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:22 2011 +1000"
      },
      "message": "md/raid5: avoid reading from known bad blocks.\n\nThere are two times that we might read in raid5:\n1/ when a read request fits within a chunk on a single\n   working device.\n   In this case, if there is any bad block in the range of\n   the read, we simply fail the cache-bypass read and\n   perform the read though the stripe cache.\n\n2/ when reading into the stripe cache.  In this case we\n   mark as failed any device which has a bad block in that\n   strip (1 page wide).\n   Note that we will both avoid reading and avoid writing.\n   This is correct (as we will never read from the block, there\n   is no point writing), but not optimal (as writing could \u0027fix\u0027\n   the error) - that will be addressed later.\n\nIf we have not seen any write errors on the device yet, we treat a bad\nblock like a recent read error.  This will encourage an attempt to fix\nthe read error which will either generate a write error, or will\nensure good data is stored there.  We don\u0027t yet forget the bad block\nin that case.  That comes later.\n\nNow that we honour bad blocks when reading we can allow devices with\nbad blocks into the array.\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": "8cfa7b0f67b4d899efc7f39eb7e172fd79237811",
      "tree": "df1002e5eccbf4b241dc9e948bb894de2106d6e2",
      "parents": [
        "cbea21703b2484f83faef040ed1de30114794392"
      ],
      "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/raid5: Avoid BUG caused by multiple failures.\n\nWhile preparing to write a stripe we keep the parity block or blocks\nlocked (R5_LOCKED) - towards the end of schedule_reconstruction.\n\nIf the array is discovered to have failed before this write completes\nwe can leave those blocks LOCKED, and init_stripe will notice that a\nfree stripe still has a locked block and will complain.\n\nSo clear the R5_LOCKED flag in handle_failed_stripe, and demote the\n\u0027BUG\u0027 to a \u0027WARN_ON\u0027.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ddd5115fe5594f5aae3c7f0008a5327bb1d19397",
      "tree": "a3bfeaea386bbecb4bc4cd56ff3139c5d9975981",
      "parents": [
        "9d3d80113df824a266c5db3fac357a036ebc0b62"
      ],
      "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/raid5: 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": "36fad858a7404a9656122a9e560a224ae2a00979",
      "tree": "95f8a7a6b8dad6bb8d7c7735f7845888b5e702db",
      "parents": [
        "8bda470e8ebde35f9349e98ecbce4dfb508a60fa"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md: introduce link/unlink_rdev() helpers\n\nThere are places where sysfs links to rdev are handled\nin a same way. Add the helper functions to consolidate\nthem.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8bda470e8ebde35f9349e98ecbce4dfb508a60fa",
      "tree": "105aa6781eef93c5a2f996c53dfa25fbce818dfe",
      "parents": [
        "a0a02a7ad62b5615b17294c2075e4916f8d1f0a4"
      ],
      "author": {
        "name": "Christian Dietrich",
        "email": "christian.dietrich@informatik.uni-erlangen.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md/raid: use printk_ratelimited instead of printk_ratelimit\n\nAs per printk_ratelimit comment, it should not be used.\n\nSigned-off-by: Christian Dietrich \u003cchristian.dietrich@informatik.uni-erlangen.de\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "acfe726bdd0000a9be1b308b29fad1e9ae62178c",
      "tree": "468713f2be848747723b89fe5afbf39cdfc375ef",
      "parents": [
        "474af965fe0005b334cabdb2904a7d712c21489b"
      ],
      "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/raid5: finalise new merged handle_stripe.\n\nhandle_stripe5() and handle_stripe6() are now virtually identical.\nSo discard one and rename the other to \u0027analyse_stripe()\u0027.\n\nIt always returns 0, so change it to \u0027void\u0027 and remove the \u0027done\u0027\nvariable in handle_stripe().\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "474af965fe0005b334cabdb2904a7d712c21489b",
      "tree": "1d63b4bbe47e2976dd10e7fa4674299b58efc45a",
      "parents": [
        "84789554e96c0263ad8aa9be91397ece1f88c768"
      ],
      "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/raid5: move some more common code into handle_stripe\n\nThe RAID6 version of this code is usable for RAID5 providing:\n  - we test \"conf-\u003emax_degraded\" rather than \"2\" as appropriate\n  - we make sure s-\u003efailed_num[1] is meaningful (and not \u0027-1\u0027)\n    when s-\u003efailed \u003e 1\n\nThe \u0027return 1\u0027 must become \u0027goto finish\u0027 in the new location.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "84789554e96c0263ad8aa9be91397ece1f88c768",
      "tree": "678ee7d5ba7a1473d4fd532a80e878b228c2066b",
      "parents": [
        "c8ac1803ff0af5aa614587ac0c66d46b7a3bdfcc"
      ],
      "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/raid5: move more common code into handle_stripe\n\nApart from \u0027prexor\u0027 which can only be set for RAID5, and\n\u0027qd_idx\u0027 which can only be meaningful for RAID6, these two\nchunks of code are nearly the same.\n\nSo combine them into one adding a test to call either\nhandle_parity_checks5 or handle_parity_checks6 as appropriate.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "c8ac1803ff0af5aa614587ac0c66d46b7a3bdfcc",
      "tree": "e1ac80fb2151802d8a2654b5c91e06c77c0f3686",
      "parents": [
        "93b3dbce6456a79c545b45e86ccc2244e923cc99"
      ],
      "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/raid5: unite handle_stripe_dirtying5 and handle_stripe_dirtying6\n\nRAID6 is only allowed to choose \u0027reconstruct-write\u0027 while RAID5 is\nalso allow \u0027read-modify-write\u0027\nApart from this difference, handle_stripe_dirtying[56] are nearly\nidentical.  So resolve these differences and create just one function.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "93b3dbce6456a79c545b45e86ccc2244e923cc99",
      "tree": "6f129f4bc8d309ed681e21bcb98009834becc898",
      "parents": [
        "5d35e09cae47bbae2739f432658860680de21866"
      ],
      "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/raid5: unite fetch_block5 and fetch_block6\n\nProvided that -\u003efailed_num[1] is not a valid device number (which is\neasily achieved) fetch_block6 provides all the functionality of\nfetch_block5.\n\nSo remove the latter and rename the former to simply \"fetch_block\".\n\nThen handle_stripe_fill5 and handle_stripe_fill6 become the same and\ncan similarly be united.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "5d35e09cae47bbae2739f432658860680de21866",
      "tree": "619a548f43403883f394062f3397de2ca6eb6c4a",
      "parents": [
        "c5a3100062cf277d3edd4e6f4a1f1e403524b464"
      ],
      "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/raid5: rearrange a test in fetch_block6.\n\nNext patch will unite fetch_block5 and fetch_block6.\nFirst I want to make the differences a little more clear.\n\nFor RAID6 if we are writing at all and there is a failed device, then\nwe need to load or compute every block so we can do a\nreconstruct-write.\nThis case isn\u0027t needed for RAID5 - we will do a read-modify-write in\nthat case.\nSo make that test a separate test in fetch_block6 rather than merged\nwith two other tests.\n\nMake a similar change in fetch_block5 so the one bit that is not\nneeded for RAID6 is clearly separate.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "c5a3100062cf277d3edd4e6f4a1f1e403524b464",
      "tree": "ccc8f2ae6491497cd8ad172a3bbc0165f86edcdf",
      "parents": [
        "3687c061886dd0bfec07e131ad12f916ef0abc62"
      ],
      "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/raid5: move more code into common handle_stripe\n\nThe difference between the RAID5 and RAID6 code here is easily\nresolved using conf-\u003emax_degraded.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "3687c061886dd0bfec07e131ad12f916ef0abc62",
      "tree": "c8f65f4895db3f9c1554f766a430829d40fe7c19",
      "parents": [
        "86c374ba9f6726a79a032ede741dc66d219b166e"
      ],
      "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/raid5: Move code for finishing a reconstruction into handle_stripe.\n\nPrior to commit ab69ae12ceef7 the code in handle_stripe5 and\nhandle_stripe6 to \"Finish reconstruct operations initiated by the\nexpansion process\" was identical.\nThat commit added an identical stanza of code to each function, but in\ndifferent places.  That was careless.\n\nThe raid5 code was correct, so move that out into handle_stripe and\nremove raid6 version.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "86c374ba9f6726a79a032ede741dc66d219b166e",
      "tree": "58bf8de967c300828e3176459455a86d68e27971",
      "parents": [
        "cc94015a9eac5d511fe9b716624d8fdf9c6e64b2"
      ],
      "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/raid5: Remove stripe_head_state arg from handle_stripe_expansion.\n\nThis arg is only used to differentiate between RAID5 and RAID6 but\nthat is not needed.  For RAID5, raid5_compute_sector will set qd_idx\nto \"~0\" so j with certainly not equals qd_idx, so there is no need\nfor a guard on that condition.\n\nSo remove the guard and remove the arg from the declaration and\ncallers of handle_stripe_expansion.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "cc94015a9eac5d511fe9b716624d8fdf9c6e64b2",
      "tree": "f8bc6cb3e5733f7101ea66223c27e30dc09b9bb1",
      "parents": [
        "c5709ef6a094c72b56355590bfa55cc107e98376"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:35:35 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:35:35 2011 +1000"
      },
      "message": "md/raid5: move stripe_head_state and more code into handle_stripe.\n\nBy defining the \u0027stripe_head_state\u0027 in \u0027handle_stripe\u0027, we can move\nsome common code out of handle_stripe[56]() and into handle_stripe.\n\nThe means that all accesses for stripe_head_state in handle_stripe[56]\nneed to be \u0027s-\u003e\u0027 instead of \u0027s.\u0027, but the compiler should inline\nthose functions and just use a direct stack reference, and future\npatches while hoist most of this code up into handle_stripe()\nso we will revert to \"s.\".\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "c5709ef6a094c72b56355590bfa55cc107e98376",
      "tree": "60e6208feff1ca8da4ce9a90cae3ef9d028d72fc",
      "parents": [
        "f2b3b44deee1524ca4f006048e0569f47eefdb74"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:35:20 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:35:20 2011 +1000"
      },
      "message": "md/raid5:  add some more fields to stripe_head_state\n\nAdding these three fields will allow more common code to be moved\nto handle_stripe()\n\nstruct field rearrangement by Namhyung Kim.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "f2b3b44deee1524ca4f006048e0569f47eefdb74",
      "tree": "49f758f1f46ceb9bbab9bdaa40117030f031a0b8",
      "parents": [
        "82e5a1718b9d0401b826341b9023766d04cb82f2"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:35:19 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:35:19 2011 +1000"
      },
      "message": "md/raid5: unify stripe_head_state and r6_state\n\n\u0027struct stripe_head_state\u0027 stores state about the \u0027current\u0027 stripe\nthat is passed around while handling the stripe.\nFor RAID6 there is an extension structure: r6_state, which is also\npassed around.\nThere is no value in keeping these separate, so move the fields from\nthe latter into the former.\n\nThis means that all code now needs to treat s-\u003efailed_num as an small\narray, but this is a small cost.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "82e5a1718b9d0401b826341b9023766d04cb82f2",
      "tree": "4c1f26a7c547be3eb3d710834e35876073b86739",
      "parents": [
        "c4c1663be46b2ab94e59d3e0c583a8f6b188ff0c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:35:15 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:35:15 2011 +1000"
      },
      "message": "md/raid5: move common code into handle_stripe\n\nThere is common code at the start of handle_stripe5 and\nhandle_stripe6.  Move it into handle_stripe.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "c4c1663be46b2ab94e59d3e0c583a8f6b188ff0c",
      "tree": "2e0b6b51c0a55c5f9edad2c832a66c9949ef496d",
      "parents": [
        "cbe47ec559c33a68b5ee002051b848d1531a8adb"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:34:20 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:34:20 2011 +1000"
      },
      "message": "md/raid5: replace sh-\u003elock with an \u0027active\u0027 flag.\n\nsh-\u003elock is now mainly used to ensure that two threads aren\u0027t running\nin the locked part of handle_stripe[56] at the same time.\n\nThat can more neatly be achieved with an \u0027active\u0027 flag which we set\nwhile running handle_stripe.  If we find the flag is set, we simply\nrequeue the stripe for later by setting STRIPE_HANDLE.\n\nFor safety we take -\u003edevice_lock while examining the state of the\nstripe and creating a summary in \u0027stripe_head_state / r6_state\u0027.\nThis possibly isn\u0027t needed but as shared fields like -\u003etoread,\n-\u003etowrite are checked it is safer for now at least.\n\nWe leave the label after the old \u0027unlock\u0027 called \"unlock\" because it\nwill disappear in a few patches, so renaming seems pointless.\n\nThis leaves the stripe \u0027locked\u0027 for longer as we clear STRIPE_ACTIVE\nlater, but that is not a problem.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "cbe47ec559c33a68b5ee002051b848d1531a8adb",
      "tree": "922184b1b599ce0e97f01d7fc6a84fc4c8493a0c",
      "parents": [
        "83206d66b65118d995c38746f21edc2bb8564b49"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:20:35 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:20:35 2011 +1000"
      },
      "message": "md/raid5: Protect some more code with -\u003edevice_lock.\n\nOther places that change or follow dev-\u003etowrite and dev-\u003ewritten take\nthe device_lock as well as the sh-\u003elock.\nSo it should really be held in these places too.\nAlso, doing so will allow sh-\u003elock to be discarded.\n\nwith merged fixes by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "83206d66b65118d995c38746f21edc2bb8564b49",
      "tree": "69e1c082cb33d19a508c764da613e0c6b5ced27b",
      "parents": [
        "ffd96e35c16a99fdb490cc5723b8e32135ae5883"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:19:49 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jul 26 11:19:49 2011 +1000"
      },
      "message": "md/raid5: Remove use of sh-\u003elock in sync_request\n\nThis is the start of a series of patches to remove sh-\u003elock.\n\nsync_request takes sh-\u003elock before setting STRIPE_SYNCING to ensure\nthere is no race with testing it in handle_stripe[56].\n\nInstead, use a new flag STRIPE_SYNC_REQUESTED and test it early\nin handle_stripe[56] (after getting the same lock) and perform the\nsame set/clear operations if it was set.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "ffd96e35c16a99fdb490cc5723b8e32135ae5883",
      "tree": "0ae71ae96af464f9e2edb60cdcfdc32e5cd92388",
      "parents": [
        "6ce328462c1145a217ba1f27b882743be1407759"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Mon Jul 18 17:38:51 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 18 17:38:51 2011 +1000"
      },
      "message": "md/raid5: get rid of duplicated call to bio_data_dir()\n\nIn raid5::make_request(), once bio_data_dir(@bi) is detected\nit never (and couldn\u0027t) be changed. Use the result always.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6ce328462c1145a217ba1f27b882743be1407759",
      "tree": "53eb00f1fbbb002f4f3d74a0e1ed09131377a70d",
      "parents": [
        "c65060ad4274f70048d62e0a86332cd3fd23f28d"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Mon Jul 18 17:38:50 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 18 17:38:50 2011 +1000"
      },
      "message": "md/raid5: use kmem_cache_zalloc()\n\nReplace kmem_cache_alloc + memset(,0,) to kmem_cache_zalloc.\nI think it\u0027s not harmful since @conf-\u003eslab_cache already knows\nactual size of struct stripe_head.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "fcde90759a985d8bfa4391346a821cc12fc16207",
      "tree": "6bf70b409c98cd019d7814c19b52a54690dcc8de",
      "parents": [
        "b062962edb086011e94ec4d9eb3f6a6d814f2a8f"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue Jun 14 14:23:57 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 14 14:23:57 2011 +1000"
      },
      "message": "md/raid5: remove unusual use of bio_iovec_idx()\n\nIn the bio_for_each_segment loop, bvl always points current\nbio_vec, so the same as bio_iovec_idx(, i). Let\u0027s get rid of\nit.\n\nCc: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b062962edb086011e94ec4d9eb3f6a6d814f2a8f",
      "tree": "4b832dab3687db5b719266d758a916bbc118e1f0",
      "parents": [
        "9b2dc8b665932a8e681a7ab3237f60475e75e161"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue Jun 14 14:20:19 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 14 14:20:19 2011 +1000"
      },
      "message": "md/raid5: fix FUA request handling in ops_run_io()\n\nCommit e9c7469bb4f5 (\"md: implment REQ_FLUSH/FUA support\")\nintroduced R5_WantFUA flag and set rw to WRITE_FUA in that case.\nHowever remaining code still checks whether rw is exactly same\nas WRITE or not, so FUAed-write ends up with being treated as\nREAD. Fix it.\n\nThis bug has been present since 2.6.37 and the fix is suitable for any\n-stable kernel since then.  It is not clear why this has not caused\nmore problems.\n\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: stable@kernel.org\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9b2dc8b665932a8e681a7ab3237f60475e75e161",
      "tree": "2f9b4b6a1439de5eb15afe0ca8c71f3e2347befc",
      "parents": [
        "f699bf2328521cc3e20c412fcdb9ffe1255c360f"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Mon Jun 13 14:48:22 2011 +0900"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 14 14:09:41 2011 +1000"
      },
      "message": "md/raid5: fix raid5_set_bi_hw_segments\n\nThe @bio-\u003ebi_phys_segments consists of active stripes count in the\nlower 16 bits and processed stripes count in the upper 16 bits. So\nlogical-OR operator should be bitwise one.\n\nThis bug has been present since 2.6.27 and the fix is suitable for any\n-stable kernel since then.  Fortunately the bad code is only used on\nerror paths and is relatively unlikely to be hit.\n\nCc: stable@kernel.org\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d6b212f4b19da5301e6b6eca562e5c7a2a6e8c8d",
      "tree": "0cf0ae9320ea9ebbb6bd1403659591cf399c16a1",
      "parents": [
        "9c81075f436f867f580c2edf2350c0898cffc9d0"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Wed Jun 08 18:00:28 2011 -0500"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 09 11:42:29 2011 +1000"
      },
      "message": "MD: raid5 do not set fullsync\n\nAdd check to determine if a device needs full resync or if partial resync will do\n\nRAID 5 was assuming that if a device was not In_sync, it must undergo a full\nresync.  We add a check to see if \u0027saved_raid_disk\u0027 is the same as \u0027raid_disk\u0027.\nIf it is, we can safely skip the full resync and rely on the bitmap for\npartial recovery instead.  This is the legitimate purpose of \u0027saved_raid_disk\u0027,\nfrom md.h:\nint saved_raid_disk;            /* role that device used to have in the\n                                 * array and could again if we did a partial\n                                 * resync from the bitmap\n                                 */\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "57d19e80f459dd845fb3cfeba8e6df8471bac142",
      "tree": "8254766715720228db3d50f1ef3c7fe003c06d65",
      "parents": [
        "ee9ec4f82049c678373a611ce20ac67fe9ad836e",
        "e64851f5a0ad6ec991f74ebb3108c35aa0323d5f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 23 09:12:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon May 23 09:12:26 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (39 commits)\n  b43: fix comment typo reqest -\u003e request\n  Haavard Skinnemoen has left Atmel\n  cris: typo in mach-fs Makefile\n  Kconfig: fix copy/paste-ism for dell-wmi-aio driver\n  doc: timers-howto: fix a typo (\"unsgined\")\n  perf: Only include annotate.h once in tools/perf/util/ui/browsers/annotate.c\n  md, raid5: Fix spelling error in comment (\u0027Ofcourse\u0027 --\u003e \u0027Of course\u0027).\n  treewide: fix a few typos in comments\n  regulator: change debug statement be consistent with the style of the rest\n  Revert \"arm: mach-u300/gpio: Fix mem_region resource size miscalculations\"\n  audit: acquire creds selectively to reduce atomic op overhead\n  rtlwifi: don\u0027t touch with treewide double semicolon removal\n  treewide: cleanup continuations and remove logging message whitespace\n  ath9k_hw: don\u0027t touch with treewide double semicolon removal\n  include/linux/leds-regulator.h: fix syntax in example code\n  tty: fix typo in descripton of tty_termios_encode_baud_rate\n  xtensa: remove obsolete BKL kernel option from defconfig\n  m68k: fix comment typo \u0027occcured\u0027\n  arch:Kconfig.locks Remove unused config option.\n  treewide: remove extra semicolons\n  ...\n"
    },
    {
      "commit": "b098636cf04c89db4036fedc778da0acc666ad1a",
      "tree": "11a970bdc482b4e5cb2211eefb9a71ae34355bd3",
      "parents": [
        "ab9d47e990c12c11cc95ed1247a3782234a7e33a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 15:52:21 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 15:52:21 2011 +1000"
      },
      "message": "md: allow resync_start to be set while an array is active.\n\nThe sysfs attribute \u0027resync_start\u0027 (known internally as recovery_cp),\nrecords where a resync is up to.  A value of 0 means the array is\nnot known to be in-sync at all.  A value of MaxSector means the array\nis believed to be fully in-sync.\n\nWhen the size of member devices of an array (RAID1,RAID4/5/6) is\nincreased, the array can be increased to match.  This process sets\nresync_start to the old end-of-device offset so that the new part of\nthe array gets resynced.\n\nHowever with RAID1 (and RAID6) a resync is not technically necessary\nand may be undesirable.  So it would be good if the implied resync\nafter the array is resized could be avoided.\n\nSo: change \u0027resync_start\u0027 so the value can be changed while the array\nis active, and as a precaution only allow it to be changed while\nresync/recovery is \u0027frozen\u0027.  Changing it once resync has started is\nnot going to be useful anyway.\n\nThis allows the array to be resized without a resync by:\n  write \u0027frozen\u0027 to \u0027sync_action\u0027\n  write new size to \u0027component_size\u0027 (this will set resync_start)\n  write \u0027none\u0027 to \u0027resync_start\u0027\n  write \u0027idle\u0027 to \u0027sync_action\u0027.\n\nAlso slightly improve some tests on recovery_cp when resizing\nraid1/raid5.  Now that an arbitrary value could be set we should be\nmore careful in our tests.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6f8d0c77cef5849433dd7beb0bd97e573cc4a6a3",
      "tree": "42d3a4438d035dfd792758c40cbd39317166b1c8",
      "parents": [
        "92f861a72a273ed038c1e22ff9775456353e3009"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:38:44 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 11 14:38:44 2011 +1000"
      },
      "message": "md: make error_handler functions more uniform and correct.\n\n- there is no need to test_bit Faulty, as that was already done in\n  md_error which is the only caller of these functions.\n- MD_CHANGE_DEVS should be set *after* faulty is set to ensure\n  metadata is updated correctly.\n- spinlock should be held while updating -\u003edegraded.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n\n  \n"
    },
    {
      "commit": "aeb878b0967550bb56606ae21172bdcbd6afe052",
      "tree": "10758d84093fbb7c1a379fb4317b573966fc20af",
      "parents": [
        "70f23fd66bc821a0e99647f70a809e277cc93c4c"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "jj@chaosbits.net",
        "time": "Sun Apr 10 18:06:17 2011 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue May 10 10:18:36 2011 +0200"
      },
      "message": "md, raid5: Fix spelling error in comment (\u0027Ofcourse\u0027 --\u003e \u0027Of course\u0027).\n\nThere\u0027s a small typo in a comment in drivers/md/raid5.c - \u0027Of course\u0027 is\nmisspelled as \u0027Ofcourse\u0027. This patch fixes the spelling error.\n\nSigned-off-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "d76c8420c3cf8e468901b0bd58306637335c98ea",
      "tree": "1dd7c5f1f19fb827968343e08e2cc5ed87358f05",
      "parents": [
        "83425eee85c6235392e3fe865faf533a48b60ab3"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Thu Apr 21 09:07:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 21 10:00:00 2011 -0700"
      },
      "message": "raid5: fix build error, sector_t usage\n\nChange \u003csectors\u003e from unsigned long long to sector_t.\nThis matches its source field.\n\n  ERROR: \"__udivdi3\" [drivers/md/raid456.ko] undefined!\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3b71bd9337b404baab5c894e066be6b6bf51b1c3",
      "tree": "23d29cf358319194092c41ed4748908e1b301180",
      "parents": [
        "2b7da309ffe602d222558cee4d7e407b96e34b3a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Apr 20 15:38:18 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Apr 20 15:38:18 2011 +1000"
      },
      "message": "md: Fix dev_sectors on takeover from raid0 to raid4/5\n\nA raid0 array doesn\u0027t set \u0027dev_sectors\u0027 as each device might\ncontribute a different number of sectors.\nSo when converting to a RAID4 or RAID5 we need to set dev_sectors\nas they need the number.\nWe have already verified that in fact all devices do contribute\nthe same number of sectors, so use that number.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2b7da309ffe602d222558cee4d7e407b96e34b3a",
      "tree": "34e3dc62926676983855aa0a4aa100aaabc98169",
      "parents": [
        "f0e615c3cb72b42191b558c130409335812621d8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Apr 20 15:38:07 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Apr 20 15:38:07 2011 +1000"
      },
      "message": "md/raid5: remove setting of -\u003equeue_lock\n\nWe previously needed to set -\u003equeue_lock to match the raid5\ndevice_lock so we could safely use queue_flag_* operations (e.g. for\nplugging). which test the -\u003equeue_lock is in fact locked.\n\nHowever that need has completely gone away and is unlikely to come\nback to remove this now-pointless setting.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7c13edc87510f665da3094174e1fd633e06649f4",
      "tree": "c0c50ab6ac43e9c762199bfd94c787f43a8e0896",
      "parents": [
        "97658cdd3af7d01461874c93b89afa4a2465e7c6"
      ],
      "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: incorporate new plugging into raid5.\n\nIn raid5 plugging is used for 2 things:\n 1/ collecting writes that require a bitmap update\n 2/ collecting writes in the hope that we can create full\n    stripes - or at least more-full.\n\nWe now release these different sets of stripes when plug_cnt\nis zero.\n\nAlso in make_request, we call mddev_check_plug to hopefully increase\nplug_cnt, and wake up the thread at the end if plugging wasn\u0027t\nachieved for some reason.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "482c083492ddaa32ef5864bae3d143dc8bcdf7d1",
      "tree": "75017fd1a51fe945c65b3600442ddaa20b636b1a",
      "parents": [
        "af1db72d8b340f97ad12b60175afdef43e6f0e60"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 18 18:25:42 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Apr 18 18:25:42 2011 +1000"
      },
      "message": "md - remove old plugging code.\n\nmd has some plugging infrastructure for RAID5 to use because the\nnormal plugging infrastructure required a \u0027request_queue\u0027, and when\ncalled from dm, RAID5 doesn\u0027t have one of those available.\n\nThis relied on the -\u003eunplug_fn callback which doesn\u0027t exist any more.\n\nSo remove all of that code, both in md and raid5.  Subsequent patches\nwith restore the plugging functionality.\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": "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": "50da08409654e036c4c964a473567a61a654cb83",
      "tree": "18a4c5edf23ec5aaf8872d9639970a99c7f16d8e",
      "parents": [
        "469518a3455c79619e9231aeffeffa2e2989f738"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jan 31 11:57:43 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jan 31 11:57:43 2011 +1100"
      },
      "message": "md: don\u0027t abort checking spares as soon as one cannot be added.\n\nAs spares can be added manually before a reshape starts, we need to\nfind them all to mark some of them as in_sync.\n\nPreviously we would abort looking for spares when we found an\nunallocated spare what could not be added to the array (implying there\nwas no room for new spares).  However already-added spares could be\nlater in the list, so we need to keep searching.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "469518a3455c79619e9231aeffeffa2e2989f738",
      "tree": "ae92280e8be9df25fd20fea87efcbe72bd855ae9",
      "parents": [
        "87a8dec91e15954f0cf86be6c21741d991d83621"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jan 31 11:57:43 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jan 31 11:57:43 2011 +1100"
      },
      "message": "md: fix the test for finding spares in raid5_start_reshape.\n\nAs spares can be added to the array before the reshape is started,\nwe need to find and count them when checking there are enough.\nThe array could have been degraded, so we need to check all devices,\nno just those out side of the range of devices in the array before\nthe reshape.\n\nSo instead of checking the index, check the In_sync flag as that\nreliably tells if the device is a spare or this purpose.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "87a8dec91e15954f0cf86be6c21741d991d83621",
      "tree": "6719ef774c0e1a719b0365eae457c8ba4f130c70",
      "parents": [
        "de171cb9a52598cc023adceafc6c166112401386"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jan 31 11:57:43 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jan 31 11:57:43 2011 +1100"
      },
      "message": "md: simplify some \u0027if\u0027 conditionals in raid5_start_reshape.\n\nThere are two consecutive \u0027if\u0027 statements.\n\n if (mddev-\u003edelta_disks \u003e\u003d 0)\n      ....\n if (mddev-\u003edelta_disks \u003e 0)\n\nThe code in the second is equally valid if delta_disks \u003d\u003d 0, and these\ntwo statements are the only place that \u0027added_devices\u0027 is used.\n\nSo make them a single if statement, make added_devices a local\nvariable, and re-indent it all.\n\nNo functional change.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1a940fcee31ec6c18c2f24dbdad31d54e4c35048",
      "tree": "73de19d505bb0483462eb1445a86a848e5506478",
      "parents": [
        "13ae864bc86ff65547ffe7e966b6433a0d0edb8a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 14 09:14:34 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 14 09:14:34 2011 +1100"
      },
      "message": "md/raid5: handle manually-added spares in start_reshape.\n\nIt is possible to manually add spares to specific slots before\nstarting a reshape.\nraid5_start_reshape should recognised this possibility and include\nit in the accounting.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "75d3da43cb74d2e5fb87816dbfecb839cd97c7f4",
      "tree": "27074aceb801ada315329591f32c938b36150ed9",
      "parents": [
        "a6ff7e089c7fca813c956ccbed824087e89a3a49"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 14 09:14:34 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 14 09:14:34 2011 +1100"
      },
      "message": "md: Don\u0027t let implementation detail of curr_resync leak out through sysfs.\n\nmddev-\u003ecurr_resync has artificial values of \u00271\u0027 and \u00272\u0027 which are used\nby the code which ensures only one resync is happening at a time on\nany given device.\n\nThese values are internal and should never be exposed to user-space\n(except when translated appropriately as in the \u0027pending\u0027 status in\n/proc/mdstat).\n\nUnfortunately they are as -\u003ecurr_resync is assigned to\n-\u003ecurr_resync_completed and that value is directly visible through\nsysfs.\n\nSo change the assignments to -\u003ecurr_resync_completed to get the same\nvalued from elsewhere in a form that doesn\u0027t have the magic \u00271\u0027 or \u00272\u0027\nvalues.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "43c73ca43b3e03bb228ff9350b6b44d0e560f262",
      "tree": "2a6fcff1e62c53ba0a95295cf02ae785b1efb501",
      "parents": [
        "0ca69886a8273ac1350143d562280bfcbe4760dc"
      ],
      "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/raid5: use sysfs_notify_dirent_safe to avoid NULL pointer\n\nWith the module parameter \u0027start_dirty_degraded\u0027 set,\nraid5_spare_active() previously called sysfs_notify_dirent() with a NULL\nargument (rdev-\u003esysfs_state) when a rebuild finished.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@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": "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": "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": "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"
    },
    {
      "commit": "e6ffbcb6cd0ac471223df24ae77eb486c1ee68cc",
      "tree": "8739230c95a051c8ab95fdbfd90ec2e6ce0bf3c9",
      "parents": [
        "3a3a5ddb7a0f43c3dd0f98673f3d930a456725f8"
      ],
      "author": {
        "name": "Adrian Drzewiecki",
        "email": "adriand@vmware.com",
        "time": "Wed Aug 18 11:49:02 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Aug 18 11:49:02 2010 +1000"
      },
      "message": "md: Notify sysfs when RAID1/5/10 disk is In_sync.\n\nWhen RAID1 is done syncing disks, it\u0027ll update the state\nof synced rdevs to In_sync. But it neglected to notify\nsysfs that the attribute changed. So any programs that\nare waiting for an rdev\u0027s state to change will not be\nwoken.\n\n(raid5/raid10 added by neilb)\n\nSigned-off-by: Adrian Drzewiecki \u003cadriand@vmware.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n\n"
    },
    {
      "commit": "3d30701b58970425e1d45994d6cb82f828924fdd",
      "tree": "8b14cf462628bebf8548c1b8c205a674564052d1",
      "parents": [
        "8cbd84f2dd4e52a8771b191030c374ba3e56d291",
        "fd8aa2c1811bf60ccb2d5de0579c6f62aec1772d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 15:38:19 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 15:38:19 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md: (24 commits)\n  md: clean up do_md_stop\n  md: fix another deadlock with removing sysfs attributes.\n  md: move revalidate_disk() back outside open_mutex\n  md/raid10: fix deadlock with unaligned read during resync\n  md/bitmap:  separate out loading a bitmap from initialising the structures.\n  md/bitmap: prepare for storing write-intent-bitmap via dm-dirty-log.\n  md/bitmap: optimise scanning of empty bitmaps.\n  md/bitmap: clean up plugging calls.\n  md/bitmap: reduce dependence on sysfs.\n  md/bitmap: white space clean up and similar.\n  md/raid5: export raid5 unplugging interface.\n  md/plug: optionally use plugger to unplug an array during resync/recovery.\n  md/raid5: add simple plugging infrastructure.\n  md/raid5: export is_congested test\n  raid5: Don\u0027t set read-ahead when there is no queue\n  md: add support for raising dm events.\n  md: export various start/stop interfaces\n  md: split out md_rdev_init\n  md: be more careful setting MD_CHANGE_CLEAN\n  md/raid5: ensure we create a unique name for kmem_cache when mddev has no gendisk\n  ...\n"
    },
    {
      "commit": "7b6d91daee5cac6402186ff224c3af39d79f4a0e",
      "tree": "b1518cf0b6c301178e0a320f80610cd5b3aa7625",
      "parents": [
        "33659ebbae262228eef4e0fe990f393d1f0ed941"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Aug 07 18:20:39 2010 +0200"
      },
      "message": "block: unify flags for struct bio and struct request\n\nRemove the current bio flags and reuse the request flags for the bio, too.\nThis allows to more easily trace the type of I/O from the filesystem\ndown to the block driver.  There were two flags in the bio that were\nmissing in the requests:  BIO_RW_UNPLUG and BIO_RW_AHEAD.  Also I\u0027ve\nrenamed two request flags that had a superflous RW in them.\n\nNote that the flags are in bio.h despite having the REQ_ name - as\nblkdev.h includes bio.h that is the only way to go for now.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9f7c2220017771253d7d10b3cc017cb79eeac0fb",
      "tree": "91e387cc225d59ac975b53590c4a75e20770b5ce",
      "parents": [
        "252ac5221a71be72b7e7c7b7482af91e9c962e8c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 26 12:04:13 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 26 12:53:10 2010 +1000"
      },
      "message": "md/raid5: export raid5 unplugging interface.\n\nAlso remove remaining accesses to -\u003equeue and -\u003egendisk when -\u003equeue\nis NULL (As it is in a DM target).\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    }
  ],
  "next": "252ac5221a71be72b7e7c7b7482af91e9c962e8c"
}
