)]}'
{
  "log": [
    {
      "commit": "ed8b752bccf2560e305e25125721d2f0ac759e88",
      "tree": "b909fcf21ca7cdda3e7a680b37162212cce99586",
      "parents": [
        "772ae5f54d69c38a5e3c4352c5fdbdaff141af21"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Aug 02 12:32:08 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:08 2011 +0100"
      },
      "message": "dm table: set flush capability based on underlying devices\n\nDM has always advertised both REQ_FLUSH and REQ_FUA flush capabilities\nregardless of whether or not a given DM device\u0027s underlying devices\nalso advertised a need for them.\n\nBlock\u0027s flush-merge changes from 2.6.39 have proven to be more costly\nfor DM devices.  Performance regressions have been reported even when\nDM\u0027s underlying devices do not advertise that they have a write cache.\n\nFix the performance regressions by configuring a DM device\u0027s flushing\ncapabilities based on those of the underlying devices\u0027 capabilities.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "772ae5f54d69c38a5e3c4352c5fdbdaff141af21",
      "tree": "727b6dc7596b8250d644214695f09e3d6c7e43d1",
      "parents": [
        "327372797c88b24953f454cd51a3734c02697bdd"
      ],
      "author": {
        "name": "Milan Broz",
        "email": "mbroz@redhat.com",
        "time": "Tue Aug 02 12:32:08 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:08 2011 +0100"
      },
      "message": "dm crypt: optionally support discard requests\n\nAdd optional parameter field to dmcrypt table and support\n\"allow_discards\" option.\n\nDiscard requests bypass crypt queue processing. Bio is simple remapped\nto underlying device.\n\nNote that discard will be never enabled by default because of security\nconsequences.  It is up to the administrator to enable it for encrypted\ndevices.\n\n(Note that userspace cryptsetup does not understand new optional\nparameters yet.  Support for this will come later.  Until then, you\nshould use \u0027dmsetup\u0027 to enable and disable this.)\n\nSigned-off-by: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "327372797c88b24953f454cd51a3734c02697bdd",
      "tree": "e7f7e3dff1415817b31af76d746240d80772b448",
      "parents": [
        "b12d437b73d32203a41fde0d407e91812c866844"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Aug 02 12:32:07 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:07 2011 +0100"
      },
      "message": "dm raid: add md raid1 support\n\nSupport the MD RAID1 personality through dm-raid.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b12d437b73d32203a41fde0d407e91812c866844",
      "tree": "3c7a33f4a45779da4a5edb71678ce7f8ae4169e7",
      "parents": [
        "46bed2b5c16bb7c82e1088d7ae75fb958c8a8c4e"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Aug 02 12:32:07 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:07 2011 +0100"
      },
      "message": "dm raid: support metadata devices\n\nAdd the ability to parse and use metadata devices to dm-raid.  Although\nnot strictly required, without the metadata devices, many features of\nRAID are unavailable.  They are used to store a superblock and bitmap.\n\nThe role, or position in the array, of each device must be recorded in\nits superblock.  This is to help with fault handling, array reshaping,\nand sanity checks.  RAID 4/5/6 devices must be loaded in a specific order:\nin this way, the \u0027array_position\u0027 field helps validate the correctness\nof the mapping when it is loaded.  It can be used during reshaping to\nidentify which devices are added/removed.  Fault handling is impossible\nwithout this field.  For example, when a device fails it is recorded in\nthe superblock.  If this is a RAID1 device and the offending device is\nremoved from the array, there must be a way during subsequent array\nassembly to determine that the failed device was the one removed.  This\nis done by correlating the \u0027array_position\u0027 field and the bit-field\nvariable \u0027failed_devices\u0027.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "46bed2b5c16bb7c82e1088d7ae75fb958c8a8c4e",
      "tree": "bab932a8eec324ca470407ff54097d86a3c0e27f",
      "parents": [
        "c1084561bb85da3630540ebe951749a8cd8fc714"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Aug 02 12:32:07 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:07 2011 +0100"
      },
      "message": "dm raid: add write_mostly parameter\n\nAdd the write_mostly parameter to RAID1 dm-raid tables.\n\nThis allows the user to set the WriteMostly flag on a RAID1 device that\nshould normally be avoided for read I/O.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "c1084561bb85da3630540ebe951749a8cd8fc714",
      "tree": "ecdefcf24dd88f4c19a873fa5d26039a0edf03a7",
      "parents": [
        "c0a2fa1ef1057a1e9450d6f055f1cde2ad4f85a2"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Aug 02 12:32:07 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:07 2011 +0100"
      },
      "message": "dm raid: add region_size parameter\n\nAllow the user to specify the region_size.\n\nEnsures that the supplied value meets md\u0027s constraints, viz. the number of\nregions does not exceed 2^21.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "759dea204cce9f1fc2a5d00ea25211299fc7a4a0",
      "tree": "3ddbfdc0c4cb97317ea0d0d7bb6879fcac72b840",
      "parents": [
        "ba2e19b0f4ccd6920fe175a86521ff18ede260cb"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Aug 02 12:32:06 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:06 2011 +0100"
      },
      "message": "dm ioctl: forbid multiple device specifiers\n\nExactly one of name, uuid or device must be specified when referencing\nan existing device.  This removes the ambiguity (risking the wrong\ndevice being updated) if two conflicting parameters were specified.\nPreviously one parameter got used and any others were ignored silently.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "ba2e19b0f4ccd6920fe175a86521ff18ede260cb",
      "tree": "25a9533cfbd1946da36483c3172914b9ea1f51cb",
      "parents": [
        "0ddf9644cc26e74ed671525e61a17bdbebf18da6"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Aug 02 12:32:06 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:06 2011 +0100"
      },
      "message": "dm ioctl: introduce __get_dev_cell\n\nMove logic to find device based on major/minor number to a separate\nfunction __get_dev_cell (similar to __get_uuid_cell and __get_name_cell).\nThis makes the function __find_device_hash_cell more straightforward.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "0ddf9644cc26e74ed671525e61a17bdbebf18da6",
      "tree": "fa10cf2fda8f52c0da7f2f1fcec54f2ce2d5bd1f",
      "parents": [
        "a3998799fb4df0b0af8271a7d50c4269032397aa"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Aug 02 12:32:06 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:06 2011 +0100"
      },
      "message": "dm ioctl: fill in device parameters in more ioctls\n\nMove parameter filling from find_device to __find_device_hash_cell.\n\nThis patch causes ioctls using __find_device_hash_cell\n(DM_DEV_REMOVE_CMD, DM_DEV_SUSPEND_CMD - resume, DM_TABLE_CLEAR_CMD)\nto return device parameters, bringing them into line with the other\nioctls.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a3998799fb4df0b0af8271a7d50c4269032397aa",
      "tree": "2a0dc0a082519afd70cc991da36f620bc21272fe",
      "parents": [
        "b26f5e3d7127487e934758c1fbe05d683b082cb0"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Aug 02 12:32:06 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:06 2011 +0100"
      },
      "message": "dm flakey: add corrupt_bio_byte feature\n\nAdd corrupt_bio_byte feature to simulate corruption by overwriting a byte at a\nspecified position with a specified value during intervals when the device is\n\"down\".\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "b26f5e3d7127487e934758c1fbe05d683b082cb0",
      "tree": "8b120e0e45e3a50c1c5adada0eede0870d62457d",
      "parents": [
        "dfd068b01f02653c6650f1c0eda443b2655d1471"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Aug 02 12:32:05 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:05 2011 +0100"
      },
      "message": "dm flakey: add drop_writes\n\nAdd \u0027drop_writes\u0027 option to drop writes silently while the\ndevice is \u0027down\u0027.  Reads are not touched.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "dfd068b01f02653c6650f1c0eda443b2655d1471",
      "tree": "e61e92a4a1e6b4c0170a87453219cabaf66e312a",
      "parents": [
        "30e4171bfe3d1c49689803338005cc0071dddaff"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Aug 02 12:32:05 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:05 2011 +0100"
      },
      "message": "dm flakey: support feature args\n\nAdd the ability to specify arbitrary feature flags when creating a\nflakey target.  This code uses the same target argument helpers that\nthe multipath target does.\n\nAlso remove the superfluous \u0027dm-flakey\u0027 prefixes from the error messages,\nas they already contain the prefix \u0027flakey\u0027.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "30e4171bfe3d1c49689803338005cc0071dddaff",
      "tree": "8ba89dcca8774a94cbd5bb7685a9ea27570d772c",
      "parents": [
        "498f0103ea13123e007660def9072a0b7dd1c599"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Aug 02 12:32:05 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:05 2011 +0100"
      },
      "message": "dm flakey: use dm_target_offset and support discards\n\nUse dm_target_offset() and support discards.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "498f0103ea13123e007660def9072a0b7dd1c599",
      "tree": "3940ca8e50f13c3ed3a79c1939bacbc841ecb179",
      "parents": [
        "a6e50b409d3f9e0833e69c3c9cca822e8fa4adbb"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Aug 02 12:32:04 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:04 2011 +0100"
      },
      "message": "dm table: share target argument parsing functions\n\nMove multipath target argument parsing code into dm-table so other\ntargets can share it.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a6e50b409d3f9e0833e69c3c9cca822e8fa4adbb",
      "tree": "82ca807c21156437270e6a1ed255b18ccf8b3672",
      "parents": [
        "d5b9dd04bd74b774b8e8d93ced7a0d15ad403fa9"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Aug 02 12:32:04 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:04 2011 +0100"
      },
      "message": "dm snapshot: skip reading origin when overwriting complete chunk\n\nIf we write a full chunk in the snapshot, skip reading the origin device\nbecause the whole chunk will be overwritten anyway.\n\nThis patch changes the snapshot write logic when a full chunk is written.\nIn this case:\n  1. allocate the exception\n  2. dispatch the bio (but don\u0027t report the bio completion to device mapper)\n  3. write the exception record\n  4. report bio completed\n\nCallbacks must be done through the kcopyd thread, because callbacks must not\nrace with each other.  So we create two new functions:\n\n  dm_kcopyd_prepare_callback: allocate a job structure and prepare the callback.\n  (This function must not be called from interrupt context.)\n\n  dm_kcopyd_do_callback: submit callback.\n  (This function may be called from interrupt context.)\n\nPerformance test (on snapshots with 4k chunk size):\n  without the patch:\n    non-direct-io sequential write (dd):    17.7MB/s\n    direct-io sequential write (dd):        20.9MB/s\n    non-direct-io random write (mkfs.ext2): 0.44s\n\n  with the patch:\n    non-direct-io sequential write (dd):    26.5MB/s\n    direct-io sequential write (dd):        33.2MB/s\n    non-direct-io random write (mkfs.ext2): 0.27s\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d5b9dd04bd74b774b8e8d93ced7a0d15ad403fa9",
      "tree": "060512c4c411e4adda203fd721b79b50b0ff54df",
      "parents": [
        "08649012545cfb116798260352547cf4d47064ec"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Aug 02 12:32:04 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:04 2011 +0100"
      },
      "message": "dm: ignore merge_bvec for snapshots when safe\n\nAdd a new flag DMF_MERGE_IS_OPTIONAL to struct mapped_device to indicate\nwhether the device can accept bios larger than the size its merge\nfunction returns.  When set, use this to send large bios to snapshots\nwhich can split them if necessary.  Snapshot I/O may be significantly\nfragmented and this approach seems to improve peformance.\n\nBefore the patch, dm_set_device_limits restricted bio size to page size\nif the underlying device had a merge function and the target didn\u0027t\nprovide a merge function.  After the patch, dm_set_device_limits\nrestricts bio size to page size if the underlying device has a merge\nfunction, doesn\u0027t have DMF_MERGE_IS_OPTIONAL flag and the target doesn\u0027t\nprovide a merge function.\n\nThe snapshot target can\u0027t provide a merge function because when the merge\nfunction is called, it is impossible to determine where the bio will be\nremapped.  Previously this led us to impose a 4k limit, which we can\nnow remove if the snapshot store is located on a device without a merge\nfunction.  Together with another patch for optimizing full chunk writes,\nit improves performance from 29MB/s to 40MB/s when writing to the\nfilesystem on snapshot store.\n\nIf the snapshot store is placed on a non-dm device with a merge function\n(such as md-raid), device mapper still limits all bios to page size.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "08649012545cfb116798260352547cf4d47064ec",
      "tree": "8aa7eac4b53a07a9bdcb01ed2da11e250c823187",
      "parents": [
        "3e8dbb7f3966c80d77272f8b4f430babc99f6595"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Aug 02 12:32:04 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:04 2011 +0100"
      },
      "message": "dm table: clean dm_get_device and move exports\n\nThere is no need for __table_get_device to be factored out.\nAlso move the exports to the end of their respective functions.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "3e8dbb7f3966c80d77272f8b4f430babc99f6595",
      "tree": "00192da87f8e5db890bd5c6dab9c941a905b294e",
      "parents": [
        "2ca4c92f58f9386e080b26f9ccd78c9ca5825a42"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:03 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:03 2011 +0100"
      },
      "message": "dm raid: tidy includes\n\nA dm target only needs to use include/linux dm headers.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "2ca4c92f58f9386e080b26f9ccd78c9ca5825a42",
      "tree": "638f6e97f829cdf8cfc090dabff9213dc50db149",
      "parents": [
        "13c87583ea4e867211fc3e7edab750c353c47c95"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:03 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:03 2011 +0100"
      },
      "message": "dm ioctl: prevent empty message\n\nDetect invalid empty messages in core dm instead of requiring every target to\ncheck this.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "13c87583ea4e867211fc3e7edab750c353c47c95",
      "tree": "93d1a2b20f1033e031eedf86a19ab822b1fbb576",
      "parents": [
        "a2d2b0345a0f30c169b7d08b8cebdd4853fcb0f8"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Aug 02 12:32:03 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:03 2011 +0100"
      },
      "message": "dm raid: cleanup parameter handling\n\nRe-order the parameters so they are handled consistently in the same order\nwhere defined, parsed and output.\n\nOnly include rebuild parameters in the STATUSTYPE_TABLE output if they were\nsupplied in the original table line.\n\nCorrect the parameter count when outputting rebuild: there are two words,\nnot one.\n\nUse case-independent checks for keywords (as in other device-mapper targets).\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "a2d2b0345a0f30c169b7d08b8cebdd4853fcb0f8",
      "tree": "baa54cd731f8c191eb8574ae34bc4f8638a6ed79",
      "parents": [
        "aa3f0794d279cd154ac100f92ff3904ea1f56de2"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Tue Aug 02 12:32:03 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:03 2011 +0100"
      },
      "message": "dm snapshot: style cleanups\n\nCoding style cleanups.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\n"
    },
    {
      "commit": "aa3f0794d279cd154ac100f92ff3904ea1f56de2",
      "tree": "a18baeb6727d8be3089dc9aea74239462d2ce82c",
      "parents": [
        "5bf45a3dcdba9ff43959f7b5b44523fab254c19c"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Aug 02 12:32:03 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:03 2011 +0100"
      },
      "message": "dm snapshot: remove unused definitions\n\nRemove a couple of unused #defines.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "5bf45a3dcdba9ff43959f7b5b44523fab254c19c",
      "tree": "5306d66f4afd6336ee07dc59bd3ddf964b57e318",
      "parents": [
        "4622afb3f50e03ce6da42002e7ed3675dfafc187"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Aug 02 12:32:02 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:02 2011 +0100"
      },
      "message": "dm kcopyd: remove nr_pages field from job structure\n\nThe nr_pages field in struct kcopyd_job is only used temporarily in\nrun_pages_job() to count the number of required pages.\nWe can use a local variable instead.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "4622afb3f50e03ce6da42002e7ed3675dfafc187",
      "tree": "6143b3a7a3963c693cd018886ff51e10113c8805",
      "parents": [
        "e29e65aacbd9e628378084905cbcf62a9fa4a8cc"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Aug 02 12:32:02 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:02 2011 +0100"
      },
      "message": "dm kcopyd: remove offset field from job structure\n\nThe offset field in struct kcopyd_job is always zero so remove it.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "e29e65aacbd9e628378084905cbcf62a9fa4a8cc",
      "tree": "279e6e87d60da82c082833205c996d7046b1a46d",
      "parents": [
        "6c9b27ab08aaf46426515b8b858ad9c60731c7a1"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Tue Aug 02 12:32:02 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:02 2011 +0100"
      },
      "message": "dm: use vzalloc\n\nUse vzalloc() instead of vmalloc()+memset().\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6c9b27ab08aaf46426515b8b858ad9c60731c7a1",
      "tree": "4a6acc8a539df7371f1df85376a71029a5c1f4f9",
      "parents": [
        "c8f543e0786785d8c7118fc2878e42bc0193a88d"
      ],
      "author": {
        "name": "Kirill A. Shutemov",
        "email": "kirill@shutemov.name",
        "time": "Tue Aug 02 12:32:02 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:02 2011 +0100"
      },
      "message": "dm log: userspace use list_move\n\nReplace list_del() followed by list_add() with list_move().\n\nSigned-off-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "c8f543e0786785d8c7118fc2878e42bc0193a88d",
      "tree": "b8984adc44c3a15f1bee56f3b6b9ff49f8ed4d2c",
      "parents": [
        "936688d7eb0f39be96c5791be1a04994cc8d6aa0"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Tue Aug 02 12:32:01 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:01 2011 +0100"
      },
      "message": "dm log: clean up bit little endian bitops\n\nUsing __test_and_{set,clear}_bit_le() with ignoring its return value\ncan be replaced with __{set,clear}_bit_le().\n\nThis also removes unnecessary casts.\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "936688d7eb0f39be96c5791be1a04994cc8d6aa0",
      "tree": "4001f52284d39f5353174096e76b357f52ee2fb7",
      "parents": [
        "283a8328ca5b987e547848de8ff0e28edcfb9e08"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Aug 02 12:32:01 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:01 2011 +0100"
      },
      "message": "dm table: fix discard support\n\nRemove \u0027discards_supported\u0027 from the dm_table structure.  The same\ninformation can be easily discovered from the table\u0027s target(s) in\ndm_table_supports_discards().\n\nBefore this fix dm_table_supports_discards() would skip checking the\nindividual targets\u0027 \u0027discards_supported\u0027 flag if any one target in the\ntable didn\u0027t set num_discard_requests \u003e 0.  Now the per-target\n\u0027discards_supported\u0027 flag is effective at insuring the final DM device\nadvertises discard support.  But, to be clear, targets that don\u0027t\nsupport discards (!num_discard_requests) will not receive discard\nrequests.\n\nAlso DMWARN if a target sets \u0027discards_supported\u0027 override but forgets\nto set \u0027num_discard_requests\u0027.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "283a8328ca5b987e547848de8ff0e28edcfb9e08",
      "tree": "b500dbe90c0ebad2ff96ba1b7f0db16089bb3560",
      "parents": [
        "d15b774c2920d55e3d58275c97fbe3adc3afde38"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:01 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:01 2011 +0100"
      },
      "message": "dm: suppress endian warnings\n\nSuppress sparse warnings about cpu_to_le32() by using __le32 types for\non-disk data etc.\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "d15b774c2920d55e3d58275c97fbe3adc3afde38",
      "tree": "4801d4e5a70f1e8e57475e6ea2f8e1238b6bbc75",
      "parents": [
        "bb91bc7bacb906c9f3a9b22744c53fa7564b51ba"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:01 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:01 2011 +0100"
      },
      "message": "dm: fix idr leak on module removal\n\nDestroy _minor_idr when unloading the core dm module.  (Found by kmemleak.)\n\nCc: stable@kernel.org\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "bb91bc7bacb906c9f3a9b22744c53fa7564b51ba",
      "tree": "8acd6ee46ab5a557afcd1c491b55a68830252301",
      "parents": [
        "286f367dad40beb3234a18c17391d03ba939a7f3"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Aug 02 12:32:01 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:01 2011 +0100"
      },
      "message": "dm io: flush cpu cache with vmapped io\n\nFor normal kernel pages, CPU cache is synchronized by the dma layer.\nHowever, this is not done for pages allocated with vmalloc. If we do I/O\nto/from vmallocated pages, we must synchronize CPU cache explicitly.\n\nPrior to doing I/O on vmallocated page we must call\nflush_kernel_vmap_range to flush dirty cache on the virtual address.\nAfter finished read we must call invalidate_kernel_vmap_range to\ninvalidate cache on the virtual address, so that accesses to the virtual\naddress return newly read data and not stale data from CPU cache.\n\nThis patch fixes metadata corruption on dm-snapshots on PA-RISC and\npossibly other architectures with caches indexed by virtual address.\n\nCc: stable \u003cstable@kernel.org\u003e\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "286f367dad40beb3234a18c17391d03ba939a7f3",
      "tree": "50e7b04332ce6e8ab920284528d555e67aae2081",
      "parents": [
        "762a80d9fc9f690a3a35983f3b4619a220650808"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Aug 02 12:32:00 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:00 2011 +0100"
      },
      "message": "dm mpath: fix potential NULL pointer in feature arg processing\n\nAvoid dereferencing a NULL pointer if the number of feature arguments\nsupplied is fewer than indicated.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "762a80d9fc9f690a3a35983f3b4619a220650808",
      "tree": "807d9cfcd1c2395cd1cf62a95ebd6676ee2a6a4d",
      "parents": [
        "6140333d3656f62ac7e6a5af87e7fe92cfb8d655"
      ],
      "author": {
        "name": "Mikulas Patocka",
        "email": "mpatocka@redhat.com",
        "time": "Tue Aug 02 12:32:00 2011 +0100"
      },
      "committer": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Tue Aug 02 12:32:00 2011 +0100"
      },
      "message": "dm snapshot: flush disk cache when merging\n\nThis patch makes dm-snapshot flush disk cache when writing metadata for\nmerging snapshot.\n\nWithout cache flushing the disk may reorder metadata write and other\ndata writes and there is a possibility of data corruption in case of\npower fault.\n\nCc: stable@kernel.org\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\n"
    },
    {
      "commit": "6140333d3656f62ac7e6a5af87e7fe92cfb8d655",
      "tree": "d96f7ad2196b4383f5ca4396c956e24c82b2952c",
      "parents": [
        "6f56c218666b5c7eff354364357307d18c10058b",
        "58c54fcca3bac5bf9290cfed31c76e4c4bfbabaf"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 28 05:50:27 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 28 05:50:27 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md: (75 commits)\n  md/raid10: handle further errors during fix_read_error better.\n  md/raid10: Handle read errors during recovery better.\n  md/raid10: simplify read error handling during recovery.\n  md/raid10: record bad blocks due to write errors during resync/recovery.\n  md/raid10:  attempt to fix read errors during resync/check\n  md/raid10:  Handle write errors by updating badblock log.\n  md/raid10: clear bad-block record when write succeeds.\n  md/raid10: avoid writing to known bad blocks on known bad drives.\n  md/raid10 record bad blocks as needed during recovery.\n  md/raid10: avoid reading known bad blocks during resync/recovery.\n  md/raid10 - avoid reading from known bad blocks - part 3\n  md/raid10: avoid reading from known bad blocks - part 2\n  md/raid10: avoid reading from known bad blocks - part 1\n  md/raid10: Split handle_read_error out from raid10d.\n  md/raid10: simplify/reindent some loops.\n  md/raid5: Clear bad blocks on successful write.\n  md/raid5.  Don\u0027t write to known bad block on doubtful devices.\n  md/raid5: write errors should be recorded as bad blocks if possible.\n  md/raid5: use bad-block log to improve handling of uncorrectable read errors.\n  md/raid5: avoid reading from known bad blocks.\n  ...\n"
    },
    {
      "commit": "58c54fcca3bac5bf9290cfed31c76e4c4bfbabaf",
      "tree": "25f663873429468c3b582bc7544f983759b7592e",
      "parents": [
        "5e5702898e93eee7d69b6efde109609a89a61001"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "message": "md/raid10: handle further errors during fix_read_error better.\n\nIf we find more read/write errors we should record a bad block before\nfailing the device.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5e5702898e93eee7d69b6efde109609a89a61001",
      "tree": "87f47cc7e66da78befd16af6d479761b70f7adea",
      "parents": [
        "e684e41db3bad44f1262341300b827c0d94ae220"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "message": "md/raid10: Handle read errors during recovery better.\n\nCurrently when we get a read error during recovery, we simply abort\nthe recovery.\n\nInstead, repeat the read in page-sized blocks.\nOn successful reads, write to the target.\nOn read errors, record a bad block on the destination,\nand only if that fails do we abort the recovery.\n\nAs we now retry reads we need to know where we read from.  This was in\nbi_sector but that can be changed during a read attempt.\nSo store the correct from_addr and to_addr in the r10_bio for later\naccess.\n\n\nSigned-off-by: NeilBrown\u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e684e41db3bad44f1262341300b827c0d94ae220",
      "tree": "a3ff2ec212d4f69a06a64b3a6841895b8cf85673",
      "parents": [
        "1a0b7cd82657a590f163b090bd9123a3a6b9aae4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "message": "md/raid10: simplify read error handling during recovery.\n\nIf a read error is detected during recovery the code currently\nfails the read device.\nThis isn\u0027t really necessary.  recovery_request_write will signal\na write error to end_sync_write and it will record a write\nerror on the destination device which will record a bad block\nthere or kick it from the array.\n\nSo just remove this call to do md_error.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1a0b7cd82657a590f163b090bd9123a3a6b9aae4",
      "tree": "0dc3ccf6ad6ad88283e6d7924c38524865866cba",
      "parents": [
        "f84ee364dd15af11cada1e673f94128f62db189e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "message": "md/raid10: record bad blocks due to write errors during resync/recovery.\n\nIf we get a write error during resync/recovery don\u0027t fail the device\nbut instead record a bad block.  If that fails we can then fail the\ndevice.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f84ee364dd15af11cada1e673f94128f62db189e",
      "tree": "e57fc87130b8bb6958413f39ae51718977540152",
      "parents": [
        "bd870a16c5946d86126f7203db3c73b71de0a1d8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:25 2011 +1000"
      },
      "message": "md/raid10:  attempt to fix read errors during resync/check\n\nWe already attempt to fix read errors found during normal IO\nand a \u0027repair\u0027 process.\nIt is best to try to repair them at any time they are found,\nso move a test so that during sync and check a read error will\nbe corrected by over-writing with good data.\n\nIf both (all) devices have known bad blocks in the sync section we\nwon\u0027t try to fix even though the bad blocks might not overlap.  That\nshould be considered later.\n\nAlso if we hit a read error during recovery we don\u0027t try to fix it.\nIt would only be possible to fix if there were at least three copies\nof data, which is not very common with RAID10.  But it should still\nbe considered later.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bd870a16c5946d86126f7203db3c73b71de0a1d8",
      "tree": "3492f61a441266c796b8a08ec30c06f7f6f27fbc",
      "parents": [
        "749c55e942d91cb27045fe2eb313aa5afe68ae0b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10:  Handle write errors by updating badblock log.\n\nWhen we get a write error (in the data area, not in metadata),\nupdate the badblock log rather than failing the whole device.\n\nAs the write may well be many blocks, we trying writing each\nblock individually and only log the ones which fail.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "749c55e942d91cb27045fe2eb313aa5afe68ae0b",
      "tree": "ddf80a1eb3ef9005bc209c1c4946916b89c22a33",
      "parents": [
        "d4432c23be957ff061f7b23fd60e8506cb472a55"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10: clear bad-block record when write succeeds.\n\nIf we succeed in writing to a block that was recorded as\nbeing bad, we clear the bad-block record.\n\nThis requires some delayed handling as the bad-block-list update has\nto happen in process-context.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d4432c23be957ff061f7b23fd60e8506cb472a55",
      "tree": "1e9e8cbc75721e62300bb2251658de870bf79d8a",
      "parents": [
        "e875ecea266a543e643b19e44cf472f1412708f9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10: avoid writing to known bad blocks on known bad drives.\n\nWriting to known bad blocks on drives that have seen a write error\nis asking for trouble.  So try to avoid these blocks.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e875ecea266a543e643b19e44cf472f1412708f9",
      "tree": "b602d08f7aa4a743d3c27ad55e347d36991f0814",
      "parents": [
        "40c356ce5ad1a6be817825e1da1bc7494349cc6d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10 record bad blocks as needed during recovery.\n\nWhen recovering one or more devices, if all the good devices have\nbad blocks we should record a bad block on the device being rebuilt.\n\nIf this fails, we need to abort the recovery.\n\nTo ensure we don\u0027t think that we aborted later than we actually did,\nwe need to move the check for MD_RECOVERY_INTR earlier in md_do_sync,\nin particular before mddev-\u003ecurr_resync is updated.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "40c356ce5ad1a6be817825e1da1bc7494349cc6d",
      "tree": "6843d537ecdfda6c03860455c187b775bc6dec97",
      "parents": [
        "8dbed5cebdf6796bf2618457b3653cf820934366"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10: avoid reading known bad blocks during resync/recovery.\n\nDuring resync/recovery limit the size of the request to avoid\nreading into a bad block that does not start at-or-before the current\nread address.\n\nSimilarly if there is a bad block at this address, don\u0027t allow the\ncurrent request to extend beyond the end of that bad block.\n\nNow that we don\u0027t ever read from known bad blocks, it is safe to allow\ndevices with those blocks into the array.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8dbed5cebdf6796bf2618457b3653cf820934366",
      "tree": "b8e8421a3aae1ee8f21df97f76b116fd0a0a9b1c",
      "parents": [
        "7399c31bc92a26bb8388a73f8e14acadcc512fe5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:24 2011 +1000"
      },
      "message": "md/raid10 - avoid reading from known bad blocks - part 3\n\nWhen attempting to repair a read error, don\u0027t read from\ndevices with a known bad block.\n\nAs we are only reading PAGE_SIZE blocks, we don\u0027t try to\nnarrow down to smaller regions in the hope that only part of this\npage is bad - it isn\u0027t worth the effort.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7399c31bc92a26bb8388a73f8e14acadcc512fe5",
      "tree": "0f1d9904fde1d5258c84643a26947288251b9776",
      "parents": [
        "856e08e23762dfb92ffc68fd0a8d228f9e152160"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "message": "md/raid10: avoid reading from known bad blocks - part 2\n\nWhen redirecting a read error to a different device, we must\nagain avoid bad blocks and possibly split the request.\n\nSpin_lock typo fixed thanks to Dan Carpenter \u003cerror27@gmail.com\u003e\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "856e08e23762dfb92ffc68fd0a8d228f9e152160",
      "tree": "fa9977a39da542eebb2129712703c11009a56ff2",
      "parents": [
        "560f8e5532d63a314271bfb99d3d1d53c938ed14"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "message": "md/raid10: avoid reading from known bad blocks - part 1\n\nThis patch just covers the basic read path:\n 1/ read_balance needs to check for badblocks, and return not only\n    the chosen slot, but also how many good blocks are available\n    there.\n 2/ read submission must be ready to issue multiple reads to\n    different devices as different bad blocks on different devices\n    could mean that a single large read cannot be served by any one\n    device, but can still be served by the array.\n    This requires keeping count of the number of outstanding requests\n    per bio.  This count is stored in \u0027bi_phys_segments\u0027\n\nOn read error we currently just fail the request if another target\ncannot handle the whole request.  Next patch refines that a bit.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "560f8e5532d63a314271bfb99d3d1d53c938ed14",
      "tree": "c47cbeb54b1e98f626a3e4af1bf0a184a831d3b9",
      "parents": [
        "1294b9c973251a5e68b62c9b40dd914517bda675"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "message": "md/raid10: Split handle_read_error out from raid10d.\n\nraid10d() is too big and is about to get bigger, so split\nhandle_read_error() out as a separate function.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1294b9c973251a5e68b62c9b40dd914517bda675",
      "tree": "45547cfff8997a3a633490341f8166dc6d00e962",
      "parents": [
        "b84db560ead5417b5594349512baf8837959df4f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:39:23 2011 +1000"
      },
      "message": "md/raid10: simplify/reindent some loops.\n\nWhen a loop ends with a large if, it can be neater to change the\nif to invert the condition and just \u0027continue\u0027.\nThen the body of the if can be indented to a lower level.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "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": "62096bce231b3760882ed91205fc84682d6b0529",
      "tree": "90b8a89be6f3c1983e88a4b0fe9d5a0e15ccda7e",
      "parents": [
        "3a9f28a5117e00a868dd8b4395f9a707ae56764b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:38:13 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:38:13 2011 +1000"
      },
      "message": "md/raid1: factor several functions out or raid1d()\n\nraid1d is too big with several deep branches.\nSo separate them out into their own functions.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "3a9f28a5117e00a868dd8b4395f9a707ae56764b",
      "tree": "36fe0fc7a7ccfc0da03dea546286b7bdef581246",
      "parents": [
        "d8f05d2995d467a91db1af01637e6ffd94660ca8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:33:42 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:33:42 2011 +1000"
      },
      "message": "md/raid1: improve handling of read failure during recovery.\n\nIf we cannot read a block from anywhere during recovery, there is\nnow a better approach than just giving up.\nWe can record a bad block on each device and keep going - being\ncareful not to clear the bad block when a write succeeds as it might -\nit will be a write of incorrect data.\n\nWe have now reached the state where - for raid1 - we only call\nmd_error if md_set_badblocks has failed.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "d8f05d2995d467a91db1af01637e6ffd94660ca8",
      "tree": "e35959bc4f6c370c982df8222eb818c720b94ffd",
      "parents": [
        "cd5ff9a16f0831f68c1024d5d776075b5123b034"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:33:00 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:33:00 2011 +1000"
      },
      "message": "md/raid1: record badblocks found during resync etc.\n\nIf we find a bad block while writing as part of resync/recovery we\nneed to report that back to raid1d which must record the bad block,\nor fail the device.\n\nSimilarly when fixing a read error, a further error should just\nrecord a bad block if possible rather than failing the device.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "cd5ff9a16f0831f68c1024d5d776075b5123b034",
      "tree": "490e297bde3d0c52b55d38b38ed1cdb5b5b6f43e",
      "parents": [
        "2ca68f5ed7383733102ee53cd8fa4021ecc3b275"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:32:41 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:32:41 2011 +1000"
      },
      "message": "md/raid1:  Handle write errors by updating badblock log.\n\nWhen we get a write error (in the data area, not in metadata),\nupdate the badblock log rather than failing the whole device.\n\nAs the write may well be many blocks, we trying writing each\nblock individually and only log the ones which fail.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "2ca68f5ed7383733102ee53cd8fa4021ecc3b275",
      "tree": "29543cff802770d90380b889cf8b0cc01e7d1814",
      "parents": [
        "4367af556133723d0f443e14ca8170d9447317cb"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:32:10 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:32:10 2011 +1000"
      },
      "message": "md/raid1: store behind-write pages in bi_vecs.\n\nWhen performing write-behind we allocate pages to store the data\nduring write.\nPreviously we just keep a list of pages.  Now we keep a list of\nbi_vec which includes offset and size.\nThis means that the r1bio has complete information to create a new\nbio which will be needed for retrying after write errors.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "4367af556133723d0f443e14ca8170d9447317cb",
      "tree": "d87bb40920f0f43cea586b7dd99b45f713ffd614",
      "parents": [
        "1f68f0c4b677ccd6935ff61e4e6888787505f8dc"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:49 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:49 2011 +1000"
      },
      "message": "md/raid1: clear bad-block record when write succeeds.\n\nIf we succeed in writing to a block that was recorded as\nbeing bad, we clear the bad-block record.\n\nThis requires some delayed handling as the bad-block-list update has\nto happen in process-context.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "1f68f0c4b677ccd6935ff61e4e6888787505f8dc",
      "tree": "aaff73efbc3fb7b6092eb2106e142e1684c4b554",
      "parents": [
        "0b7d83865cb7a60b1768212c1e60b8fd7c280506"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "message": "md/raid1: avoid writing to known-bad blocks on known-bad drives.\n\nIf we have seen any write error on a drive, then don\u0027t write to\nany known-bad blocks on that drive.\nIf necessary, we divide the write request up into pieces just\nlike we do for reads, so each piece is either all written or\nall not written to any given drive.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "de393cdea66cbd63c90725663f400c76faf1b255",
      "tree": "6a2bf37bee98bf7de42856f904bd23c81e082f8e",
      "parents": [
        "d7a9d443bc8a75a24873c0506f50051edfedc714"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "message": "md: make it easier to wait for bad blocks to be acknowledged.\n\nIt is only safe to choose not to write to a bad block if that bad\nblock is safely recorded in metadata - i.e. if it has been\n\u0027acknowledged\u0027.\n\nIf it hasn\u0027t we need to wait for the acknowledgement.\n\nWe support that using rdev-\u003eblocked wait and\nmd_wait_for_blocked_rdev by introducing a new device flag\n\u0027BlockedBadBlock\u0027.\n\nThis flag is only advisory.\nIt is cleared whenever we acknowledge a bad block, so that a waiter\ncan re-check the particular bad blocks that it is interested it.\n\nIt should be set by a caller when they find they need to wait.\nThis (set after test) is inherently racy, but as\nmd_wait_for_blocked_rdev already has a timeout, losing the race will\nhave minimal impact.\n\nWhen we clear \"Blocked\" was also clear \"BlockedBadBlocks\" incase it\nwas set incorrectly (see above race).\n\nWe also modify the way we manage \u0027Blocked\u0027 to fit better with the new\nhandling of \u0027BlockedBadBlocks\u0027 and to make it consistent between\nexternally managed and internally managed metadata.   This requires\nthat each raidXd loop checks if the metadata needs to be written and\ntriggers a write (md_check_recovery) if needed.  Otherwise a queued\nwrite request might cause raidXd to wait for the metadata to write,\nand only that thread can write it.\n\nBefore writing metadata, we set FaultRecorded for all devices that\nare Faulty, then after writing the metadata we clear Blocked for any\ndevice for which the Fault was certainly Recorded.\n\nThe \u0027faulty\u0027 device flag now appears in sysfs if the device is faulty\n*or* it has unacknowledged bad blocks.  So user-space which does not\nunderstand bad blocks can continue to function correctly.\nUser space which does, should not assume a device is faulty until it\nsees the \u0027faulty\u0027 flag, and then sees the list of unacknowledged bad\nblocks is empty.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d7a9d443bc8a75a24873c0506f50051edfedc714",
      "tree": "6255771f6cca87698dcc8eb11d62e7fc217b8d0b",
      "parents": [
        "06f603851fa90bcd236328438278d4dc8b655495"
      ],
      "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: add \u0027write_error\u0027 flag to component devices.\n\nIf a device has ever seen a write error, we will want to handle\nknown-bad-blocks differently.\nSo create an appropriate state flag and export it via sysfs.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "06f603851fa90bcd236328438278d4dc8b655495",
      "tree": "49a7f239a9c2de4bf97d998f161b229a565e33cd",
      "parents": [
        "d2eb35acfdccbe2a3622ed6cc441a5482148423b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "message": "md/raid1: avoid reading known bad blocks during resync\n\nWhen performing resync/etc, keep the size of the request\nsmall enough that it doesn\u0027t overlap any known bad blocks.\nDevices with badblocks at the start of the request are completely\nexcluded.\nIf there is nowhere to read from due to bad blocks, record\na bad block on each target device.\n\nNow that we never read from known-bad-blocks we can allow devices with\nknown-bad-blocks into a RAID1.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d2eb35acfdccbe2a3622ed6cc441a5482148423b",
      "tree": "77600cab29fc9e1fd39d612773086a456fc32d88",
      "parents": [
        "9f2f3830789a4c9c1af2d1437d407c43e05136e6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:48 2011 +1000"
      },
      "message": "md/raid1: avoid reading from known bad blocks.\n\nNow that we have a bad block list, we should not read from those\nblocks.\nThere are several main parts to this:\n  1/ read_balance needs to check for bad blocks, and return not only\n     the chosen device, but also how many good blocks are available\n     there.\n  2/ fix_read_error needs to avoid trying to read from bad blocks.\n  3/ read submission must be ready to issue multiple reads to\n     different devices as different bad blocks on different devices\n     could mean that a single large read cannot be served by any one\n     device, but can still be served by the array.\n     This requires keeping count of the number of outstanding requests\n     per bio.  This count is stored in \u0027bi_phys_segments\u0027\n  4/ retrying a read needs to also be ready to submit a smaller read\n     and queue another request for the rest.\n\nThis does not yet handle bad blocks when reading to perform resync,\nrecovery, or check.\n\n\u0027md_trim_bio\u0027 will also be used for RAID10, so put it in md.c and\nexport it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9f2f3830789a4c9c1af2d1437d407c43e05136e6",
      "tree": "8e20afbfca82acd7346fb93d35170f44ee01a807",
      "parents": [
        "2699b67223aca6b1450fc2f72e40fada952afc85"
      ],
      "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: Disable bad blocks and v0.90 metadata.\n\nv0.90 metadata cannot record bad blocks, so when loading metadata\nfor such a device, set shift to -1.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2699b67223aca6b1450fc2f72e40fada952afc85",
      "tree": "c84d0cbb763ad03cd770a218a37f0f1ec31118af",
      "parents": [
        "34b343cff4354ab9864be83be88405fd53d928a0"
      ],
      "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: load/store badblock list from v1.x metadata\n\nSpace must have been allocated when array was created.\nA feature flag is set when the badblock list is non-empty, to\nensure old kernels don\u0027t load and trust the whole device.\n\nWe only update the on-disk badblocklist when it has changed.\nIf the badblocklist (or other metadata) is stored on a bad block, we\ndon\u0027t cope very well.\n\nIf metadata has no room for bad block, flag bad-blocks as disabled,\nand do the same for 0.90 metadata.\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": "16c791a5af3e50d0c11760485fd68e5829f3be4d",
      "tree": "24182e37b278a55a9b05b19154ff52597d220714",
      "parents": [
        "2230dfe4ccc3add340dc6d437965b2de1d269fde"
      ],
      "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/bad-block-log: add sysfs interface for accessing bad-block-log.\n\nThis can show the log (providing it fits in one page) and\nallows bad blocks to be \u0027acknowledged\u0027 meaning that they\nhave safely been recorded in metadata.\n\nClearing bad blocks is not allowed via sysfs (except for\ncode testing).  A bad block can only be cleared when\na write to the block succeeds.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "2230dfe4ccc3add340dc6d437965b2de1d269fde",
      "tree": "fc45b727ad2e1a148e7d20f327b45a3afc474e9d",
      "parents": [
        "a519b26dbe6533416d21b552053b0bf687f878d7"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:46 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 11:31:46 2011 +1000"
      },
      "message": "md: beginnings of bad block management.\n\nThis the first step in allowing md to track bad-blocks per-device so\nthat we can fail individual blocks rather than the whole device.\n\nThis patch just adds a data structure for recording bad blocks, with\nroutines to add, remove, search the list.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nReviewed-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\n"
    },
    {
      "commit": "a519b26dbe6533416d21b552053b0bf687f878d7",
      "tree": "bef24eab8604ef2275eb8f1b591ea52bd4b89194",
      "parents": [
        "768e587e18c1c4ce0403b9532115752189422408"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 07:56:24 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 28 07:56:24 2011 +1000"
      },
      "message": "md: remove suspicious size_of()\n\nWhen calling bioset_create we pass the size of the front_pad as\n   sizeof(mddev)\nwhich looks suspicious as mddev is a pointer and so it looks like a\ncommon mistake where\n   sizeof(*mddev)\nwas intended.\nThe size is actually correct as we want to store a pointer in the\nfront padding of the bios created by the bioset, so make the intent\nmore explicit by using\n   sizeof(mddev_t *)\n\nReported-by: Zdenek Kabelac \u003czdenek.kabelac@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "768e587e18c1c4ce0403b9532115752189422408",
      "tree": "1b0d65fc839aa562c409a46984e1e15b1ae629d6",
      "parents": [
        "3520fa4db7fc4ae1b0373dcecdaf720f620dab2d"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Wed Jul 27 11:00:37 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:37 2011 +1000"
      },
      "message": "MD: generate an event when array sync is complete\n\nThis patch causes MD to generate an event (for device-mapper) when the\nsynchronization thread is reaped.  This is expected behavior for device-mapper.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3520fa4db7fc4ae1b0373dcecdaf720f620dab2d",
      "tree": "62c675a29c65f89ec15f4a52203e5e0f731c2aa5",
      "parents": [
        "654e8b5abc0a793f0c029128db6e4804691a383e"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Wed Jul 27 11:00:37 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:37 2011 +1000"
      },
      "message": "MD bitmap: Revert DM dirty log hooks\n\n\nRevert most of commit e384e58549a2e9a83071ad80280c1a9053cfd84c\n  md/bitmap: prepare for storing write-intent-bitmap via dm-dirty-log.\n\nMD should not need to use DM\u0027s dirty log - we decided to use md\u0027s\nbitmaps instead.\n\nKeeping the DIV_ROUND_UP clean-ups that were part of commit\ne384e58549a2e9a83071ad80280c1a9053cfd84c, however.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "654e8b5abc0a793f0c029128db6e4804691a383e",
      "tree": "536950fcc8c418c8716ba152e439fe86d24f3365",
      "parents": [
        "8cfa7b0f67b4d899efc7f39eb7e172fd79237811"
      ],
      "author": {
        "name": "Jonathan Brassow",
        "email": "jbrassow@redhat.com",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "MD: raid1 s/sysfs_notify_dirent/sysfs_notify_dirent_safe\n\nIf device-mapper creates a RAID1 array that includes devices to\nbe rebuilt, it will deref a NULL pointer when finished because\nsysfs is not used by device-mapper instantiated RAID devices.\n\nSigned-off-by: Jonathan Brassow \u003cjbrassow@redhat.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "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": "cbea21703b2484f83faef040ed1de30114794392",
      "tree": "a6b06a5341cb8ece8807b09d3f35f928671b8578",
      "parents": [
        "ddd5115fe5594f5aae3c7f0008a5327bb1d19397"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md/raid10: move rdev-\u003ecorrected_errors counting\n\nRead errors are considered to corrected if write-back and re-read\ncycle is finished without further problems. Thus moving the rdev-\u003e\ncorrected_errors counting after the re-reading looks more reasonable\nIMHO.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "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": "9d3d80113df824a266c5db3fac357a036ebc0b62",
      "tree": "26607a8761b06cfc05e4259a6609a48d9dab3f26",
      "parents": [
        "65a06f06744d3deae61f3596566952a8da92199f"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md/raid1: move rdev-\u003ecorrected_errors counting\n\nRead errors are considered to corrected if write-back and re-read\ncycle is finished without further problems. Thus moving the rdev-\u003e\ncorrected_errors counting after the re-reading looks more reasonable\nIMHO. Also included a couple of whitespace fixes on sync_page_io().\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "65a06f06744d3deae61f3596566952a8da92199f",
      "tree": "5befc4ef2e1965c55a112d436bd980ff6c0bef55",
      "parents": [
        "700c72138938cf428c74379806886c6b017d6295"
      ],
      "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: get rid of unnecessary casts on page_address()\n\npage_address() returns void pointer, so the casts can be removed.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "700c72138938cf428c74379806886c6b017d6295",
      "tree": "93ca6eb628d36e841131aa62a85b45d16b3f45fa",
      "parents": [
        "2bb77736ae5dca0a189829fbb7379d43364a9dac"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md/raid10: Improve decision on whether to fail a device with a read error.\n\nNormally we would fail a device with a READ error.  However if doing\nso causes the array to fail, it is better to leave the device\nin place and just return the read error to the caller.\n\nThe current test for decide if the array will fail is overly\nsimplistic.\nWe have a function \u0027enough\u0027 which can tell if the array is failed or\nnot, so use it to guide the decision.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2bb77736ae5dca0a189829fbb7379d43364a9dac",
      "tree": "a15efb6810aaf67af679bd05edb5419ac9f19583",
      "parents": [
        "5389042ffa36976caa45a79af16081d759001fa7"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md/raid10: Make use of new recovery_disabled handling\n\nWhen we get a read error during recovery, RAID10 previously\narranged for the recovering device to appear to fail so that\nthe recovery stops and doesn\u0027t restart.  This is misleading and wrong.\n\nInstead, make use of the new recovery_disabled handling and mark\nthe target device and having recovery disabled.\n\nAdd appropriate checks in add_disk and remove_disk so that devices\nare removed and not re-added when recovery is disabled.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5389042ffa36976caa45a79af16081d759001fa7",
      "tree": "eb303de141a50f41ccac438e734b65dbfe25825e",
      "parents": [
        "a478a069b6adf186373a6648c54fc5f1d3c2f8eb"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 27 11:00:36 2011 +1000"
      },
      "message": "md: change managed of recovery_disabled.\n\nIf we hit a read error while recovering a mirror, we want to abort the\nrecovery without necessarily failing the disk - as having a disk this\na read error is better than not having an array at all.\n\nCurrently this is managed with a per-array flag \"recovery_disabled\"\nand is only implemented for RAID1.  For RAID10 we will need finer\ngrained control as we might want to disable recovery for individual\ndevices separately.\n\nSo push more of the decision making into the personality.\n\u0027recovery_disabled\u0027 is now a \u0027cookie\u0027 which is copied when the\npersonality want to disable recovery and is changed when a device is\nadded to the array as this is used as a trigger to \u0027try recovery\nagain\u0027.\n\nThis will allow RAID10 to get the control that it needs.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a478a069b6adf186373a6648c54fc5f1d3c2f8eb",
      "tree": "ac10604e2b0e3525c25c6fb23128ab1fc858a550",
      "parents": [
        "36fad858a7404a9656122a9e560a224ae2a00979"
      ],
      "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: remove ro check in md_check_recovery()\n\nCommit c89a8eee6154 (\"Allow faulty devices to be removed from a\nreadonly array.\") added some work on ro array in the function,\nbut it couldn\u0027t be done since we didn\u0027t allow the ro array to be\nhandled from the beginning. Fix it.\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": "a0a02a7ad62b5615b17294c2075e4916f8d1f0a4",
      "tree": "e3f9f7582a869915d3ac8242253c822b61e77e4b",
      "parents": [
        "acfe726bdd0000a9be1b308b29fad1e9ae62178c"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@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: use proper little-endian bitops\n\nUsing __test_and_{set,clear}_bit_le() with ignoring its return value\ncan be replaced with __{set,clear}_bit_le().\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nCc: NeilBrown \u003cneilb@suse.de\u003e\nCc: linux-raid@vger.kernel.org\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": "60063497a95e716c9a689af3be2687d261f115b4",
      "tree": "6ce0d68db76982c53df46aee5f29f944ebf2c320",
      "parents": [
        "148817ba092f9f6edd35bad3c6c6b8e8f90fe2ed"
      ],
      "author": {
        "name": "Arun Sharma",
        "email": "asharma@fb.com",
        "time": "Tue Jul 26 16:09:06 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:47 2011 -0700"
      },
      "message": "atomic: use \u003clinux/atomic.h\u003e\n\nThis allows us to move duplicated code in \u003casm/atomic.h\u003e\n(atomic_inc_not_zero() for now) to \u003clinux/atomic.h\u003e\n\nSigned-off-by: Arun Sharma \u003casharma@fb.com\u003e\nReviewed-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nAcked-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\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"
    }
  ],
  "next": "c4c1663be46b2ab94e59d3e0c583a8f6b188ff0c"
}
