)]}'
{
  "log": [
    {
      "commit": "0261cd9f1cb42fa44ece314d27868d83742bdf03",
      "tree": "95954fb2e1a10ee1b20198b8fbefd7a8392dc896",
      "parents": [
        "5e8651060cea6b44844521ddcac665e2c021f5d8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Nov 13 17:40:48 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Nov 13 17:40:48 2009 +1100"
      },
      "message": "md: allow v0.91 metadata to record devices as being active but not in-sync.\n\nThis is a combination that didn\u0027t really make sense before.\nHowever when a reshape is converting e.g. raid5 -\u003e raid6, the extra\ndevice is not fully in-sync, but is certainly active and contains\nimportant data.\nSo allow that start to be meaningful and in particular get\nthe \u0027recovery_offset\u0027 value (which is needed for any non-in-sync\nactive device) from the reshape_position.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5e8651060cea6b44844521ddcac665e2c021f5d8",
      "tree": "56a2a3de85fae3f7e210c54a9cda305b0341c334",
      "parents": [
        "8dee7211467a56b7eb4e4359efb0aa4a72e1b6f3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 12 12:08:04 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 12 12:08:04 2009 +1100"
      },
      "message": "md: factor out updating of \u0027recovery_offset\u0027.\n\nEach device has its own \u0027recovery_offset\u0027 showing how far\nrecovery has progressed on the device.\nAs the only real significance of this is that fact that it can\nbe stored in the metadata and recovered at restart, and as\nonly 1.x metadata can do this, we were only updating\n\u0027recovery_offset\u0027 to \u0027curr_resync_completed\u0027 when updating\nv1.x metadata.\nBut this is wrong, and we will shortly make limited use of this\nfield in v0.90 metadata.\n\nSo move the update into common code.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "24395a85d8efe6eee477ea35c73d045a8dd7a3a1",
      "tree": "eeb32daee4f1d44eaae636cfd19cc2c8e8af686a",
      "parents": [
        "b6727b12dd2ffb4a890eb5b13a298230c29ba45d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Nov 06 14:59:27 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Nov 06 14:59:27 2009 +1100"
      },
      "message": "md: don\u0027t clear endpoint for resync when resync is interrupted.\n\nIf a \u0027sync_max\u0027 has been set (via sysfs), it is wrong to clear it\nuntil a resync (or reshape or recovery ...) actually reached that\npoint.\nSo if a resync is interrupted (e.g. by device failure),\nleave \u0027resync_max\u0027 unchanged.\n\nThis is particularly important for \u0027reshape\u0027 operations that do not\nchange the size of the array.  For such operations mdadm needs to\nmonitor the reshape taking rolling backups of the section being\nreshaped.  If resync_max gets cleared, the reshape can get ahead of\nmdadm and then the backups that mdadm creates are useless.\n\nThis is suitable for 2.6.31.y stable kernels.\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5e5e3e78ed9038b8f7112835d07084eefb9daa47",
      "tree": "afcefac7c0dbafb71f09d90812eecb2c6e4bc766",
      "parents": [
        "e4424fee1815f996dccd36be44d68ca160ec3e1b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 16 16:35:30 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 16 16:35:30 2009 +1100"
      },
      "message": "md: Fix handling of raid5 array which is being reshaped to fewer devices.\n\nWhen a raid5 (or raid6) array is being reshaped to have fewer devices,\nconf-\u003eraid_disks is the latter and hence smaller number of devices.\nHowever sometimes we want to use a number which is the total number of\ncurrently required devices - the larger of the \u0027old\u0027 and \u0027new\u0027 sizes.\nBefore we implemented reducing the number of devices, this was always\n\u0027new\u0027 i.e. -\u003eraid_disks.\nNow we need max(raid_disks, previous_raid_disks) in those places.\n\nThis particularly affects assembling an array that was shutdown while\nin the middle of a reshape to fewer devices.\n\nmd.c needs a similar fix when interpreting the md metadata.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3fa841d7e7266f6fcc1b3885b905f5153ba897d8",
      "tree": "7afa971a10eddcf52787340ea43fa1e910b5805b",
      "parents": [
        "0da3c6194ec2f32617b272df4505a1cf022faea5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 23 18:10:29 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 23 18:10:29 2009 +1000"
      },
      "message": "md: report device as congested when suspended\n\nThis should writeback from coming when the device is temporarily\nsuspended.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0da3c6194ec2f32617b272df4505a1cf022faea5",
      "tree": "5864b61b8fac2e7477668bdb9a493d2a64d0b3dd",
      "parents": [
        "ee305acef5c7841dc25cc32e84bb94f744e1e9b9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 23 18:09:45 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 23 18:09:45 2009 +1000"
      },
      "message": "md: Improve name of threads created by md_register_thread\n\nThe management thread for raid4,5,6 arrays are all called\nmdX_raid5, independent of the actual raid level, which is wrong and\ncan be confusion.\n\nSo change md_register_thread to use the name from the personality\nunless no alternate name (like \u0027resync\u0027 or \u0027reshape\u0027) is given.\n\nThis is simpler and more correct.\n\nCc: Jinzc \u003czhenchengjin@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a9f326ebf22a0de776815240fb76dabe139397ea",
      "tree": "4402ba08931cd0663aca077be4d26e66c91869bd",
      "parents": [
        "7fa07729e439a6184bd824746d06a49cca553f15"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 23 18:06:41 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Sep 23 18:06:41 2009 +1000"
      },
      "message": "md: remove sparse waring \"symbol xxx shadows an earlier one\"\n\nRename some variable and remove some duplicate definitions\nto avoid there warnings.  None of them are actual errors.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "83d5cde47dedf01b6a4a4331882cbc0a7eea3c2e",
      "tree": "f8ba5e263717d35cd444fcc65898d2ed352af1ae",
      "parents": [
        "7b021967c5e1463936042c8da72b550d3cabe9ac"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon Sep 21 17:01:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:25 2009 -0700"
      },
      "message": "const: make block_device_operations const\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "80ffb3cceaefa405f2ecd46d66500ed8d53efe74",
      "tree": "867d6ec951663255076ea42fab29a31eac4e51c0",
      "parents": [
        "4d484a4a7a5126410eed5f8dd329a33f6eeed068"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Aug 18 10:35:26 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Aug 18 10:35:26 2009 +1000"
      },
      "message": "Fix new incorrect error return from do_md_stop.\n\nRecent commit c8c00a6915a2e3d10416e8bdd3138429beb96210\nchanged the exit paths in do_md_stop and was not quite\ncareful enough.  There is one path were \u0027err\u0027 now needs\nto be cleared but it isn\u0027t.\nSo setting an array to readonly (with mdadm --readonly) will\nwork, but will incorrectly report and error: ENXIO.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4d484a4a7a5126410eed5f8dd329a33f6eeed068",
      "tree": "9fe49a23117adc2d475711f39a16c1718bab4b7f",
      "parents": [
        "1a67dde0abba36421a1257d01ba9de2f6d1c160a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Aug 13 10:41:50 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Aug 13 10:41:50 2009 +1000"
      },
      "message": "md: allow upper limit for resync/reshape to be set when array is read-only\n\nNormally we only allow the upper limit for a reshape to be decreased\nwhen the array not performing a sync/recovery/reshape, otherwise there\ncould be races.  But if an array is part-way through a reshape when it\nis assembled the reshape is started immediately leaving no window\nto set an upper bound.\n\nIf the array is started read-only, the reshape will be suspended until\nthe array becomes writable, so that provides a window during which it\nis perfectly safe to reduce the upper limit of a reshape.\n\nSo: allow the upper limit (sync_max) to be reduced even if the reshape\nthread is running, as long as the array is still read-only.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "51d5668cb2e3fd1827a55184e48606fff054c5be",
      "tree": "117824cc3a25c04c939856578105c6c93af6ac8b",
      "parents": [
        "c8c00a6915a2e3d10416e8bdd3138429beb96210"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Aug 13 09:54:02 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Aug 13 09:54:02 2009 +1000"
      },
      "message": "md: never advance \u0027events\u0027 counter by more than 1.\n\nWhen assembling arrays, md allows two devices to have different event\ncounts as long as the difference is only \u00271\u0027.  This is to cope with\na system failure between updating the metadata on two difference\ndevices.\n\nHowever there are currently times when we update the event count by\n2.  This was done to keep the event count even when the array is clean\nand odd when it is dirty, which allows us to avoid writing common\nupdate to spare devices and so allow those spares to go to sleep.\n\nThis is bad for the above reason.  So change it to never increase by\ntwo.  This means that the alignment between \u0027odd/even\u0027 and\n\u0027clean/dirty\u0027 might take a little longer to attain, but that is only a\nsmall cost.  The spares will get a few more updates but that will\nstill be spared (;-) most updates and can still go to sleep.\n\nPrior to this patch there was a small chance that after a crash an\narray would fail to assemble due to the overly large event count\nmismatch.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c8c00a6915a2e3d10416e8bdd3138429beb96210",
      "tree": "ecf06a9e2b08edefe707da450b52a69f818ec7d6",
      "parents": [
        "7b2aa037e878c939676675969983284a02958ae3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 10 12:50:52 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 10 12:50:52 2009 +1000"
      },
      "message": "Remove deadlock potential in md_open\n\nA recent commit:\n  commit 449aad3e25358812c43afc60918c5ad3819488e7\n\nintroduced the possibility of an A-B/B-A deadlock between\nbd_mutex and reconfig_mutex.\n\n__blkdev_get holds bd_mutex while calling md_open which takes\n   reconfig_mutex,\ndo_md_run is always called with reconfig_mutex held, and it now\n   takes bd_mutex in the call the revalidate_disk.\n\nThis potential deadlock was not caught by lockdep due to the\nuse of mutex_lock_interruptible_nexted which was introduced\nby\n   commit d63a5a74dee87883fda6b7d170244acaac5b05e8\ndo avoid a warning of an impossible deadlock.\n\nIt is quite possible to split reconfig_mutex in to two locks.\nOne protects the array data structures while it is being\nreconfigured, the other ensures that an array is never even partially\nopen while it is being deactivated.\nIn particular, the second lock prevents an open from completing\nbetween the time when do_md_stop checks if there are any active opens,\nand the time when the array is either set read-only, or when -\u003epers is\nset to NULL.  So we can be certain that no IO is in flight as the\narray is being destroyed.\n\nSo create a new lock, open_mutex, just to ensure exclusion between\n\u0027open\u0027 and \u0027stop\u0027.\n\nThis avoids the deadlock and also avoids the lockdep warning mentioned\nin commit d63a5a74d\n\nReported-by: \"Mike Snitzer\" \u003csnitzer@gmail.com\u003e\nReported-by: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "449aad3e25358812c43afc60918c5ad3819488e7",
      "tree": "45fab3b82fc1ed06959537a0801319045cf4c102",
      "parents": [
        "64bd660b51b2da92e99a5e97349f6558349f11c5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 03 10:59:58 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 03 10:59:58 2009 +1000"
      },
      "message": "md: Use revalidate_disk to effect changes in size of device.\n\nAs revalidate_disk calls check_disk_size_change, it will cause\nany capacity change of a gendisk to be propagated to the blockdev\ninode.  So use that instead of mucking about with locks and\ni_size_write.\n\nAlso add a call to revalidate_disk in do_md_run and a few other places\nwhere the gendisk capacity is changed.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "70471dafe3390243c598a3165dfb86b8b8b3f4fe",
      "tree": "febb8dfdbbb981370e1ea046714628bf6b790e5a",
      "parents": [
        "3673f305faf1bc66ead751344f8262ace851ff44"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 03 10:59:57 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 03 10:59:57 2009 +1000"
      },
      "message": "md: Handle growth of v1.x metadata correctly.\n\nThe v1.x metadata does not have a fixed size and can grow\nwhen devices are added.\nIf it grows enough to require an extra sector of storage,\nwe need to update the \u0027sb_size\u0027 to match.\n\nWithout this, md can write out an incomplete superblock with a\nbad checksum, which will be rejected when trying to re-assemble\nthe array.\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3673f305faf1bc66ead751344f8262ace851ff44",
      "tree": "4cbdd23d9af20632678e95b3e8f02ede241a3917",
      "parents": [
        "3a981b03f38dc3b8a69b77cbc679e66c1318a44a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 03 10:59:56 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 03 10:59:56 2009 +1000"
      },
      "message": "md: avoid array overflow with bad v1.x metadata\n\nWe trust the \u0027desc_nr\u0027 field in v1.x metadata enough to use it\nas an index in an array.  This isn\u0027t really safe.\nSo range-check the value first.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3a981b03f38dc3b8a69b77cbc679e66c1318a44a",
      "tree": "7f8b0747385a02c793edd7df30d34c4c9c95b1a5",
      "parents": [
        "ac5e7113e74872928844d00085bd47c988f12728"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 03 10:59:55 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 03 10:59:55 2009 +1000"
      },
      "message": "md: when a level change reduces the number of devices, remove the excess.\n\nWhen an array is changed from RAID6 to RAID5, fewer drives are\nneeded.  So any device that is made superfluous by the level\nconversion must be marked as not-active.\nFor the RAID6-\u003eRAID5 conversion, this will be a drive which only\nhas \u0027Q\u0027 blocks on it.\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ac5e7113e74872928844d00085bd47c988f12728",
      "tree": "dabce6a99c2af9f00b33660f6b2d906cce836764",
      "parents": [
        "95fc17aac45300f45968aacd97a536ddd8db8101"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Mon Aug 03 10:59:47 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Aug 03 10:59:47 2009 +1000"
      },
      "message": "md: Push down data integrity code to personalities.\n\nThis patch replaces md_integrity_check() by two new public functions:\nmd_integrity_register() and md_integrity_add_rdev() which are both\npersonality-independent.\n\nmd_integrity_register() is called from the -\u003erun and -\u003ehot_remove\nmethods of all personalities that support data integrity.  The\nfunction iterates over the component devices of the array and\ndetermines if all active devices are integrity capable and if their\nprofiles match. If this is the case, the common profile is registered\nfor the mddev via blk_integrity_register().\n\nThe second new function, md_integrity_add_rdev() is called from the\n-\u003ehot_add_disk methods, i.e. whenever a new device is being added\nto a raid array. If the new device does not support data integrity,\nor has a profile different from the one already registered, data\nintegrity for the mddev is disabled.\n\nFor raid0 and linear, only the call to md_integrity_register() from\nthe -\u003erun method is necessary.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ad361c9884e809340f6daca80d56a9e9c871690a",
      "tree": "7ec02c9934964fecdc791a0df0fc722d3bda5c53",
      "parents": [
        "e3288775ff63900fbb7db505f2b9a1bee98f07df"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Mon Jul 06 13:05:40 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jul 08 10:30:03 2009 -0700"
      },
      "message": "Remove multiple KERN_ prefixes from printk formats\n\nCommit 5fd29d6ccbc98884569d6f3105aeca70858b3e0f (\"printk: clean up\nhandling of log-levels and newlines\") changed printk semantics.  printk\nlines with multiple KERN_\u003clevel\u003e prefixes are no longer emitted as\nbefore the patch.\n\n\u003clevel\u003e is now included in the output on each additional use.\n\nRemove all uses of multiple KERN_\u003clevel\u003es in formats.\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e62e58a5ffdc98ac28d8dbd070c857620d541f99",
      "tree": "0ec3471f4e66e3a376ac8cb2da79d6123e7aa2cf",
      "parents": [
        "a5c308d4d1659b1f4833b863394e3e24cdbdfc6e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 01 13:15:35 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 01 13:15:35 2009 +1000"
      },
      "message": "md: use interruptible wait when duration is controlled by userspace.\n\nUser space can set various limits on an md array so that resync waits\nwhen it gets to a certain point, or so that I/O is blocked for a short\nwhile.\nWhen md is waiting against one of these limit, it should use an\ninterruptible wait so as not to add to the load average, and so are\nnot to trigger a warning if the wait goes on for too long.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0909dc448c98ed5021c87ffdfc09fb473aa464ab",
      "tree": "17c48d146c0f9eb7367a0d0feafea29838eae8eb",
      "parents": [
        "1ec22eb2b4a2e1a763106bce36b11c02eaa84e61"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 01 12:27:21 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 01 12:27:21 2009 +1000"
      },
      "message": "md: tidy up error paths in md_alloc\n\nAs the recent bug in md_alloc showed, having a single exit path for\nunlocking and putting is a good idea.  So restructure md_alloc to have\na single mutex_unlock and mddev_put, and use gotos where necessary.\n\nFound-by: Jiri Slaby \u003cjirislaby@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1ec22eb2b4a2e1a763106bce36b11c02eaa84e61",
      "tree": "2aa6e6539342a28263417f6a2f2551d541e9ead9",
      "parents": [
        "b8d966efd9a46a9a35beac50cbff6e30565125ef"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 01 12:27:21 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 01 12:27:21 2009 +1000"
      },
      "message": "md: fix error path when duplicate name is found on md device creation.\n\nWhen an md device is created by name (rather than number) we need to\ncheck that the name is not already in use.  If this check finds a\nduplicate, we return an error without dropping the lock or freeing\nthe newly create mddev.\nThis patch fixes that.\n\nCc: stable@kernel.org\nFound-by: Jiri Slaby \u003cjirislaby@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b8d966efd9a46a9a35beac50cbff6e30565125ef",
      "tree": "d1c59125e8ee9677e8594bdc4ab223e692a87e50",
      "parents": [
        "8f6c2e4b325a8e9f8f47febb2fd0ed4fae7d45a9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 01 11:14:04 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 01 11:14:04 2009 +1000"
      },
      "message": "md: avoid dereferencing NULL pointer when accessing suspend_* sysfs attributes.\n\nIf we try to modify one of the md/ sysfs files\n  suspend_lo or suspend_hi\nwhen the array is not active, we dereference a NULL.\nProtect against that.\n\nCc: stable@kernel.org\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0894cc3066aaa3e75a99383c0d25feebf9b688ac",
      "tree": "651664e6b288e36dc9553443e334e650139851c8",
      "parents": [
        "8190e754e0723de7cecb80bdd9eb93911dfa04a1"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Thu Jun 18 08:49:23 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:49:23 2009 +1000"
      },
      "message": "md: Move check for bitmap presence to personality code.\n\nIf the superblock of a component device indicates the presence of a\nbitmap but the corresponding raid personality does not support bitmaps\n(raid0, linear, multipath, faulty), then something is seriously wrong\nand we\u0027d better refuse to run such an array.\n\nCurrently, this check is performed while the superblocks are examined,\ni.e. before entering personality code. Therefore the generic md layer\nmust know which raid levels support bitmaps and which do not.\n\nThis patch avoids this layer violation without adding identical code\nto various personalities. This is accomplished by introducing a new\npublic function to md.c, md_check_no_bitmap(), which replaces the\nhard-coded checks in the superblock loading functions.\n\nA call to md_check_no_bitmap() is added to the -\u003erun method of each\npersonality which does not support bitmaps and assembly is aborted\nif at least one component device contains a bitmap.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8190e754e0723de7cecb80bdd9eb93911dfa04a1",
      "tree": "6fbd0edd64cb767b9421103301e198804c3aa40b",
      "parents": [
        "13f2682b7216ebebd72b3d5868fe7fccec91a92d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:48:58 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:48:58 2009 +1000"
      },
      "message": "md: remove chunksize rounding from common code.\n\nIt is easiest to round sizes to multiples of chunk size in\nthe personality code for those personalities which care.\nThose personalities now do the rounding, so we can\nremove that function from common code.\n\nAlso remove the upper bound on the size of a chunk, and the lower\nbound on the size of a device (1 chunk), neither of which really buy\nus anything.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1b57f132231593923cb4ab99943ddd777e8745bc",
      "tree": "b76f936d08e5ef72430c6fbcf9352f53721481ec",
      "parents": [
        "8c6ac868b107ed50a46204f6d14e2ad9443ff146"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:48:19 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:48:19 2009 +1000"
      },
      "message": "md: move assignment of -\u003eutime so that it never gets skipped.\n\nCurrently the assignment to utime gets skipped for \u0027external\u0027\nmetadata.  So move it to the top of the function so that it\nalways gets effected.\nThis is of largely cosmetic interest.  Nothing actually depends\non -\u003eutime being right for external arrays.\n\"mdadm --monitor\" does use it for 0.90 and 1.x arrays, but with\nmdadm-3.0, this is not important for external metadata.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8c6ac868b107ed50a46204f6d14e2ad9443ff146",
      "tree": "a0690ce92ed1993cc3211448948f3964c389c082",
      "parents": [
        "50ac168a6e0a061bf5346d53aa9e7beb94c97527"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Thu Jun 18 08:48:06 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:48:06 2009 +1000"
      },
      "message": "md: Push down reconstruction log message to personality code.\n\nCurrently, the md layer checks in analyze_sbs() if the raid level\nsupports reconstruction (mddev-\u003elevel \u003e\u003d 1) and if reconstruction is\nin progress (mddev-\u003erecovery_cp !\u003d MaxSector).\n\nMove that printk into the personality code of those raid levels that\ncare (levels 1, 4, 5, 6, 10).\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "50ac168a6e0a061bf5346d53aa9e7beb94c97527",
      "tree": "4f1eff67793bd8349a1995c921a63e9512be7818",
      "parents": [
        "597a711b69cfff95c4b8f6069037e7ad3fc71f56"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:47:55 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:47:55 2009 +1000"
      },
      "message": "md: merge reconfig and check_reshape methods.\n\nThe difference between these two methods is artificial.\nBoth check that a pending reshape is valid, and perform any\naspect of it that can be done immediately.\n\u0027reconfig\u0027 handles chunk size and layout.\n\u0027check_reshape\u0027 handles raid_disks.\n\nSo make them just one method.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "597a711b69cfff95c4b8f6069037e7ad3fc71f56",
      "tree": "8c2cfa4c1223827a560de2f14da426d4822151c4",
      "parents": [
        "01ee22b496c41384eaa6dcae983c86d8bc32fbb8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:47:42 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:47:42 2009 +1000"
      },
      "message": "md: remove unnecessary arguments from -\u003ereconfig method.\n\nPassing the new layout and chunksize as args is not necessary as\nthe mddev has fields for new_check and new_layout.\n\nThis is preparation for combining the check_reshape and reconfig\nmethods\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "664e7c413f1e90eceb0b2596dd73a0832faec058",
      "tree": "72ea827a0f2a493766d3ea1fd14909c756aa4496",
      "parents": [
        "9d8f0363623b3da12c43007cf77f5e1a4e8a5964"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Thu Jun 18 08:45:27 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:45:27 2009 +1000"
      },
      "message": "md: Convert mddev-\u003enew_chunk to sectors.\n\nA straight-forward conversion which gets rid of some\nmultiplications/divisions/shifts. The patch also introduces a couple\nof new ones, most of which are due to conf-\u003echunk_size still being\nrepresented in bytes. This will be cleaned up in subsequent patches.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "9d8f0363623b3da12c43007cf77f5e1a4e8a5964",
      "tree": "0fee53971a397ade209dd36c4f1ed50db6450faf",
      "parents": [
        "fbb704efb784e2c8418e34dc3013af76bdd58101"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Thu Jun 18 08:45:01 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:45:01 2009 +1000"
      },
      "message": "md: Make mddev-\u003echunk_size sector-based.\n\nThis patch renames the chunk_size field to chunk_sectors with the\nimplied change of semantics.  Since\n\n\tis_power_of_2(chunk_size) \u003d is_power_of_2(chunk_sectors \u003c\u003c 9)\n\t\t\t\t  \u003d is_power_of_2(chunk_sectors)\n\nthese bits don\u0027t need an adjustment for the shift.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2ac06c3332898103210b478c5a17c20e28929287",
      "tree": "6f34315bbdcc8a8300ab2ab5edcd4cb96150e583",
      "parents": [
        "740da44918680a0c72411ae4ccdd1861069afcc4"
      ],
      "author": {
        "name": "raz ben yehuda",
        "email": "raziebe@gmail.com",
        "time": "Tue Jun 16 17:01:42 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 16 17:01:42 2009 +1000"
      },
      "message": "md: prepare for non-power-of-two chunk sizes\n\nRemove chunk size check from md as this is now performed in the run\nfunction in each personality.\n\nReplace chunk size power 2 code calculations by a regular division.\n\nSigned-off-by: raziebe@gmail.com\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c9059598ea8981d02356eead3188bf7fa4d717b8",
      "tree": "03e73b20a30e988da7c6a3e0ad93b2dc5843274d",
      "parents": [
        "0a33f80a8373eca7f4bea3961d1346c3815fa5ed",
        "b0fd271d5fba0b2d00888363f3869e3f9b26caa9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 10:52:27 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 11:10:35 2009 -0700"
      },
      "message": "Merge branch \u0027for-2.6.31\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.31\u0027 of git://git.kernel.dk/linux-2.6-block: (153 commits)\n  block: add request clone interface (v2)\n  floppy: fix hibernation\n  ramdisk: remove long-deprecated \"ramdisk\u003d\" boot-time parameter\n  fs/bio.c: add missing __user annotation\n  block: prevent possible io_context-\u003erefcount overflow\n  Add serial number support for virtio_blk, V4a\n  block: Add missing bounce_pfn stacking and fix comments\n  Revert \"block: Fix bounce limit setting in DM\"\n  cciss: decode unit attention in SCSI error handling code\n  cciss: Remove no longer needed sendcmd reject processing code\n  cciss: change SCSI error handling routines to work with interrupts enabled.\n  cciss: separate error processing and command retrying code in sendcmd_withirq_core()\n  cciss: factor out fix target status processing code from sendcmd functions\n  cciss: simplify interface of sendcmd() and sendcmd_withirq()\n  cciss: factor out core of sendcmd_withirq() for use by SCSI error handling code\n  cciss: Use schedule_timeout_uninterruptible in SCSI error handling code\n  block: needs to set the residual length of a bidi request\n  Revert \"block: implement blkdev_readpages\"\n  block: Fix bounce limit setting in DM\n  Removed reference to non-existing file Documentation/PCI/PCI-DMA-mapping.txt\n  ...\n\nManually fix conflicts with tracing updates in:\n\tblock/blk-sysfs.c\n\tdrivers/ide/ide-atapi.c\n\tdrivers/ide/ide-cd.c\n\tdrivers/ide/ide-floppy.c\n\tdrivers/ide/ide-tape.c\n\tinclude/trace/events/block.h\n\tkernel/trace/blktrace.c\n"
    },
    {
      "commit": "b492b852cd8c99505708152c29a5e09a787af9de",
      "tree": "f26aa9676231a583e209a9397acfc4512061325e",
      "parents": [
        "7a91ee1f628ef6bfe3f13067c0ddf9db520cb86b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 12:57:36 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 12:57:36 2009 +1000"
      },
      "message": "md: don\u0027t use locked_ioctl.\n\nmd has no need for the BKL - it does its own locking.\nSo md_ioctl doesn\u0027t need to be a locked_ioctl.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7a91ee1f628ef6bfe3f13067c0ddf9db520cb86b",
      "tree": "b6b317a2dfb067784fccae113001cb3957e25337",
      "parents": [
        "848b3182365fdf5a05bcd5ed949071cac2c894b3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 12:57:21 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 12:57:21 2009 +1000"
      },
      "message": "md: don\u0027t update curr_resync_completed without also updating reshape_position.\n\nIn order for the metadata to always be consistent, we mustn\u0027t updated\ncurr_resync_completed without also updating reshape_position.\n\nThe reshape code updates both at the same time.  However since\ncommit 97e4f42d62badb0f9fbc27c013e89bc1336a03bc\nthe common md_do_sync will sometimes update curr_resync_completed\nbut is not in a position to update reshape_position.\nSo if MD_RECOVERY_RESHAPE is set (indicating that a reshape is\nhappening, so reshape_position might change), don\u0027t update\ncurr_resync_completed in md_do_sync, leave it to the per-personality\nreshape code.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b6a9ce688f613e2ee5f15e6720e0bb8520efc36e",
      "tree": "7fc4c8ab5ea14df5e544e740ec3154b707766a08",
      "parents": [
        "be512691036cc989c11d0f418187efbbf14468e6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 09:41:17 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 09:41:17 2009 +1000"
      },
      "message": "md: export \u0027frozen\u0027 resync state through sysfs\n\nThe md resync engine has a \u0027frozen\u0027 state which ensures that\nno resync/recovery.  This is used to avoid races.\n\nExport this state through the \u0027sync_action\u0027 sysfs attribute\nso that user-space can benefit and also avoid some races.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2b69c83924396ad1eda36fdd267c9d2f360f5555",
      "tree": "14c01b6dd6b596859835b3f0d176bf02129d2c45",
      "parents": [
        "62e1e389f87a8839ad83b08c44691d1df8320846"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 09:41:17 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 09:41:17 2009 +1000"
      },
      "message": "md: improve errno return when setting array_size\n\nInstead of always returns EINVAL if anything goes wrong\nwhen setting the array size, add the option of\n  E2BIG\nif the size requested is too large.  This makes it easier\nfor user-space to be sure what went wrong.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "62e1e389f87a8839ad83b08c44691d1df8320846",
      "tree": "d8915df95d7164188334052b31ffe7ac40aa4e94",
      "parents": [
        "59a3759d0fe8d969888c741bb33f4946e4d3750d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 09:40:59 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 09:40:59 2009 +1000"
      },
      "message": "md: always update level / chunk_size / layout when writing v1.x metadata.\n\nWe previously didn\u0027t update these fields when writing the metadata\nbecause they could never change.  They can now, so we better write\nthem.\nv0.90 metadata always updated these fields.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e1defc4ff0cf57aca6c5e3ff99fa503f5943c1f1",
      "tree": "d60d15a082171c58ac811d547d51a9c3119f23e3",
      "parents": [
        "9bd7de51ee8537094656149eaf45338cadb7d7d4"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Fri May 22 17:17:49 2009 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 22 23:22:54 2009 +0200"
      },
      "message": "block: Do away with the notion of hardsect_size\n\nUntil now we have had a 1:1 mapping between storage device physical\nblock size and the logical block sized used when addressing the device.\nWith SATA 4KB drives coming out that will no longer be the case.  The\nsector size will be 4KB but the logical block size will remain\n512-bytes.  Hence we need to distinguish between the physical block size\nand the logical ditto.\n\nThis patch renames hardsect_size to logical_block_size.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c4647292fda0833bebe45be27f04453b736981fa",
      "tree": "85c89a4161b06b1c591a76c2a68ff51fc02ff6f4",
      "parents": [
        "5bf295975416f8e97117bbbcfb0191c00bc3e2b4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 07 12:51:06 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 07 12:51:06 2009 +1000"
      },
      "message": "md: remove rd%d links immediately after stopping an array.\n\nmd maintains link in sys/mdXX/md/ to identify which device has\nwhich role in the array. e.g.\n   rd2 -\u003e dev-sda\n\nindicates that the device with role \u00272\u0027 in the array is sda.\n\nThese links are only present when the array is active.  They are\ncreated immediately after -\u003erun is called, and so should be removed\nimmediately after -\u003estop is called.\nHowever they are currently removed a little bit later, and it is\npossible for -\u003erun to be called again, thus adding these links, before\nthey are removed.\n\nSo move the removal earlier so they are consistently only present when\nthe array is active.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5bf295975416f8e97117bbbcfb0191c00bc3e2b4",
      "tree": "9d7ddfe9d4632c8d6cacb6c4dd7b9cb49f837432",
      "parents": [
        "110518bccf076726cc93bf604527d8019aae50ba"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 07 12:50:57 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 07 12:50:57 2009 +1000"
      },
      "message": "md: remove ability to explicit set an inactive array to \u0027clean\u0027.\n\nBeing able to write \u0027clean\u0027 to an \u0027array_state\u0027 of an inactive array\nto activate it in \u0027clean\u0027 mode is both unnecessary and inconvenient.\n\nIt is unnecessary because the same can be achieved by writing\n\u0027active\u0027.  This activates and array, but it still remains \u0027clean\u0027\nuntil the first write.\n\nIt is inconvenient because writing \u0027clean\u0027 is more often used to\ncause an \u0027active\u0027 array to revert to \u0027clean\u0027 mode (thus blocking\nany writes until a \u0027write-pending\u0027 is promoted to \u0027active\u0027).\n\nAllowing \u0027clean\u0027 to both activate an array and mark an active array as\nclean can lead to races:  One program writes \u0027clean\u0027 to mark the\nactive array as clean at the same time as another program writes\n\u0027inactive\u0027 to deactivate (stop) and active array.  Depending on which\nwrites first, the array could be deactivated and immediately\nreactivated which isn\u0027t what was desired.\n\nSo just disable the use of \u0027clean\u0027 to activate an array.\n\nThis avoids a race that can be triggered with mdadm-3.0 and external\nmetadata, so it suitable for -stable.\n\nReported-by: Rafal Marszewski \u003crafal.marszewski@intel.com\u003e\nAcked-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "110518bccf076726cc93bf604527d8019aae50ba",
      "tree": "f2df7daf983640c64f66bcd76aea475b35f9f1d3",
      "parents": [
        "dd71cf6b2773310b01c6fe6c773064c80fd2476b"
      ],
      "author": {
        "name": "Jan Engelhardt",
        "email": "jengelh@medozas.de",
        "time": "Thu May 07 12:49:37 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 07 12:49:37 2009 +1000"
      },
      "message": "md: constify VFTs\n\n\nSigned-off-by: Jan Engelhardt \u003cjengelh@medozas.de\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "dd71cf6b2773310b01c6fe6c773064c80fd2476b",
      "tree": "33a4cc4fe4db45ec4f1a8f477bb294a0b685efa4",
      "parents": [
        "db305e507d554430a69ede901a6308e6ecb72349"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 07 12:49:35 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu May 07 12:49:35 2009 +1000"
      },
      "message": "md: tidy up status_resync to handle large arrays.\n\nTwo problems in status_resync.\n1/ It still used Kilobytes as the basic block unit, while most code\n   now uses sectors uniformly.\n2/ It doesn\u0027t allow for the possibility that max_sectors exceeds\n   the range of \"unsigned long\".\n\nSo\n - change \"max_blocks\" to \"max_sectors\", and store sector numbers\n   in there and in \u0027resync\u0027\n - Make \u0027rt\u0027 a \u0027sector_t\u0027 so it can temporarily hold the number of\n   remaining sectors.\n - use sector_div rather than normal division.\n - change the magic \u0027100\u0027 used to preserve precision to \u002732\u0027.\n   + making it a power of 2 makes division easier\n   + it doesn\u0027t need to be as large as it was chosen when we averaged\n     speed over the entire run.  Now we average speed over the last 30\n     seconds or so.\n\nReported-by: \"Mario \u0027BitKoenig\u0027 Holbe\" \u003cMario.Holbe@TU-Ilmenau.DE\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c03f6a19699fce4389888a45db8245969311d868",
      "tree": "2a3be3033d5fad42f25fe2678e98efcf6abb04bc",
      "parents": [
        "acb180b0e335ad88acfed6c8a33e39c05b95dc49"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Apr 17 11:06:30 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Apr 17 11:06:30 2009 +1000"
      },
      "message": "md: update sync_completed and reshape_position even more often.\n\nThere are circumstances when a user-space process might need to\n\"oversee\" a resync/reshape process.  For example when doing an\nin-place reshape of a raid5, it is prudent to take a backup of each\nsection before reshaping it as this is the only way to provide\nsafety against an unplanned shutdown (i.e. crash/power failure).\n\nThe sync_max sysfs value can be used to stop the resync from\nadvancing beyond a particular point.\nSo user-space can:\n  suspend IO to the first section and back it up\n  set \u0027sync_max\u0027 to the end of the section\n  wait for \u0027sync_completed\u0027 to reach that point\n  resume IO on the first section and move on to the next section.\n\nHowever this process requires the kernel and user-space to run in\nlock-step which could introduce unnecessary delays.\n\nIt would be better if a \u0027double buffered\u0027 approach could be used with\nuserspace and kernel space working on different sections with the\n\u0027next\u0027 section always ready when the \u0027current\u0027 section is finished.\n\nOne problem with implementing this is that sync_completed is only\nguaranteed to be updated when the sync process reaches sync_max.\n(it is updated on a time basis at other times, but it is hard to rely\non that).  This defeats some of the double buffering.\n\nWith this patch, sync_completed (and reshape_position) get updated as\nthe current position approaches sync_max, so there is room for\nuserspace to advance sync_max early without losing updates.\n\nTo be precise, sync_completed is updated when the current sync\nposition reaches half way between the current value of sync_completed\nand the value of sync_max.  This will usually be a good time for user\nspace to update sync_max.\n\nIf sync_max does not get updated, the updates to sync_completed\n(together with associated metadata updates) will occur at an\nexponentially increasing frequency which will get unreasonably fast\n(one update every page) immediately before the process hits sync_max\nand stops.  So the update rate will be unreasonably fast only for an\ninsignificant period of time.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "acb180b0e335ad88acfed6c8a33e39c05b95dc49",
      "tree": "fa980978bb66b178fd8c2f474194754139c0921d",
      "parents": [
        "6d56e278444bc8323b1bcfcada126b8e4dbba0f4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Apr 14 16:28:34 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Apr 14 16:28:34 2009 +1000"
      },
      "message": "md: improve usefulness and accuracy of sysfs file md/sync_completed.\n\nThe sync_completed file reports how much of a resync (or recovery or\nreshape) has been completed.\nHowever due to the possibility of out-of-order completion of writes,\nit is not certain to be accurate.\n\nWe have an internal value - mddev-\u003ecurr_resync_completed - which is an\naccurate value (though it might not always be quite so uptodate).\n\nSo:\n - make curr_resync_completed be uptodate a little more often,\n   particularly when raid5 reshape updates status in the metadata\n - report curr_resync_completed in the sysfs file\n - allow poll/select to report all updates to md/sync_completed.\n\nThis makes sync_completed completed usable by any external metadata\nhandler that wants to record this status information in its metadata.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6d56e278444bc8323b1bcfcada126b8e4dbba0f4",
      "tree": "4a1e838b3bb46ce0650f08daa4cdf976eb49317e",
      "parents": [
        "63fe08177f92ce21929df8af6361491b98ad12cd"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Apr 14 12:01:57 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Apr 14 12:01:57 2009 +1000"
      },
      "message": "md: allow setting newly added device to \u0027in_sync\u0027 via sysfs.\n\nWhen adding devices to an active array via sysfs, there is currently\nno way to mark a device as \u0027in-sync\u0027 which is useful when\nincrementally assembling an array.\n\nSo add that option.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "223cdea4c4b5af5181b2da00ac85711d1e0c737c",
      "tree": "dfe7226c70ddabbf2e2e63924ba636345278e79c",
      "parents": [
        "31e6e2dac575c9d21a6ec56ca52ae89086baa705",
        "c8f517c444e4f9f55b5b5ca202b8404691a35805"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:08:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 03 09:08:19 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md: (53 commits)\n  md/raid5 revise rules for when to update metadata during reshape\n  md/raid5: minor code cleanups in make_request.\n  md: remove CONFIG_MD_RAID_RESHAPE config option.\n  md/raid5: be more careful about write ordering when reshaping.\n  md: don\u0027t display meaningless values in sysfs files resync_start and sync_speed\n  md/raid5: allow layout and chunksize to be changed on active array.\n  md/raid5: reshape using largest of old and new chunk size\n  md/raid5: prepare for allowing reshape to change layout\n  md/raid5: prepare for allowing reshape to change chunksize.\n  md/raid5: clearly differentiate \u0027before\u0027 and \u0027after\u0027 stripes during reshape.\n  Documentation/md.txt update\n  md: allow number of drives in raid5 to be reduced\n  md/raid5: change reshape-progress measurement to cope with reshaping backwards.\n  md: add explicit method to signal the end of a reshape.\n  md/raid5: enhance raid5_size to work correctly with negative delta_disks\n  md/raid5: drop qd_idx from r6_state\n  md/raid6: move raid6 data processing to raid6_pq.ko\n  md: raid5 run(): Fix max_degraded for raid level 4.\n  md: \u0027array_size\u0027 sysfs attribute\n  md: centralize -\u003earray_sectors modifications\n  ...\n"
    },
    {
      "commit": "d1a7c50369835f9ecbd7752016cd9302ecfae678",
      "tree": "2c6bcc8c5cb4d045d555e0d030321cb887a4e05a",
      "parents": [
        "88ce4930e2b80378d45506ce2c3bb5820e156e85"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:24:32 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:24:32 2009 +1100"
      },
      "message": "md: don\u0027t display meaningless values in sysfs files resync_start and sync_speed\n\nWhen no resync if happening, both of these files currently have\nmeaningless values (is slightly different ways).\nChange them to \"none\" in that case.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "cea9c22800773cecb1d41f4a6139f9eb6a95368b",
      "tree": "d070d22390b86768fefb8ba04c64d74993ed28e9",
      "parents": [
        "7ec0547838976d088dfb9cb0adb073e6e8a15aa3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:15:05 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:15:05 2009 +1100"
      },
      "message": "md: add explicit method to signal the end of a reshape.\n\nCurrently raid5 (the only module that supports restriping)\nnotices that the reshape has finished be sync_request being\ngiven a large value, and handles any cleanup them.\n\nThis patch changes it so md_check_recovery calls into an\nexplicit finish_reshape method as well.\n\nThe clean-up from sync_request can do things that need to be\ndone promptly, typically things local to the raid5_conf_t\nstructure.\n\nThe \"finish_reshape\" method is called under the mddev_lock\nso it can do things involving reconfiguring the device.\n\nThis allows us to get rid of md_set_array_sectors_locked, which\nwould have caused a deadlock if you tried to stop and array\nwhile a reshape was happening.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b522adcde9c4d3fb7b579cfa9160d8bde7744be8",
      "tree": "4208e3dcec3ebdfa6ad9bc153f76129400532717",
      "parents": [
        "1f403624bde3c678a166984b1e6a727a0ce06f2b"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Mar 31 15:00:31 2009 +1100"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Mar 31 15:00:31 2009 +1100"
      },
      "message": "md: \u0027array_size\u0027 sysfs attribute\n\nAllow userspace to set the size of the array according to the following\nsemantics:\n\n1/ size must be \u003c\u003d to the size returned by mddev-\u003epers-\u003esize(mddev, 0, 0)\n   a) If size is set before the array is running, do_md_run will fail\n      if size is greater than the default size\n   b) A reshape attempt that reduces the default size to less than the set\n      array size should be blocked\n2/ once userspace sets the size the kernel will not change it\n3/ writing \u0027default\u0027 to this attribute returns control of the size to the\n   kernel and reverts to the size reported by the personality\n\nAlso, convert locations that need to know the default size from directly\nreading -\u003earray_sectors to \u003cpers\u003e_size.  Resync/reshape operations\nalways follow the default size.\n\nFinally, fixup other locations that read a number of 1k-blocks from\nuserspace to use strict_blocks_to_sectors() which checks for unsigned\nlong long to sector_t overflow and blocks to sectors overflow.\n\nReviewed-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    },
    {
      "commit": "1f403624bde3c678a166984b1e6a727a0ce06f2b",
      "tree": "b66ed37091e825bcde1cd0d333d4ebba86772805",
      "parents": [
        "80c3a6ce4ba4470379b9e6a4d9bcd9d2ee26ae03"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Mar 31 14:59:03 2009 +1100"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Mar 31 14:59:03 2009 +1100"
      },
      "message": "md: centralize -\u003earray_sectors modifications\n\nGet personalities out of the business of directly modifying\n-\u003earray_sectors.  Lays groundwork to introduce policy on when\n-\u003earray_sectors can be modified.\n\nReviewed-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    },
    {
      "commit": "b3546035277847028df650b147469fc943cf5c71",
      "tree": "87966abc5456a62845326eb8d5a5cf0f88879b2d",
      "parents": [
        "d562b0c4313e3ddea402a400371afa47ddf679f9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:56:41 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:56:41 2009 +1100"
      },
      "message": "md/raid5: allow layout/chunksize to be changed on an active 2-drive raid5.\n\n2-drive raid5\u0027s aren\u0027t very interesting.  But if you are converting\na raid1 into a raid5, you will at least temporarily have one.  And\nthat it a good time to set the layout/chunksize for the new RAID5\nif you aren\u0027t happy with the defaults.\n\nlayout and chunksize don\u0027t actually affect the placement of data\non a 2-drive raid5, so we just do some internal book-keeping.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "245f46c2c221ef09c7db892f0e3fc2149be42052",
      "tree": "be7e6f4b7b65b682c43e59ef17f7ed580bc8a82b",
      "parents": [
        "409c57f3801701dfee27a28103dda4831306cb20"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:39:39 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:39:39 2009 +1100"
      },
      "message": "md: add -\u003etakeover method to support changing the personality managing an array\n\nImplement this for RAID6 to be able to \u0027takeover\u0027 a RAID5 array.  The\nnew RAID6 will use a layout which places Q on the last device, and\nthat device will be missing.\nIf there are any available spares, one will immediately have Q\nrecovered onto it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "409c57f3801701dfee27a28103dda4831306cb20",
      "tree": "430c8e4ebe879b27250e061dc1a1171b12aaadf0",
      "parents": [
        "e0cf8f045b2023b0b3f919ee93eb94345f648434"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:39:39 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:39:39 2009 +1100"
      },
      "message": "md: enable suspend/resume of md devices.\n\nTo be able to change the \u0027level\u0027 of an md/raid array, we need to\nsuspend the device so that no requests are active - then move some\npointers around etc.\n\nThe code already keeps counts of active requests and the -\u003equiesce\nfunction can be used to wait until those counts hit zero.\nHowever the quiesce function blocks new requests once they are all\nready \u0027inside\u0027 the personality module, and that is too late if we want\nto replace the personality modules.\n\nSo make all md requests come in through a common md_make_request\nfunction that keeps track of how many requests have entered the\nmodules but may not yet be on the internal reference counts.\nAllow md_make_request to be blocked when we want to suspend the\ndevice, and make it possible to wait for all those in-transit requests\nto be added to internal lists so that -\u003equiesce can wait for them.\n\nThere is still a problem that when a request completes, we drop the\nref count inside the personality code so there is a short time between\nwhen the refcount hits zero, and when the personality code is no\nlonger being used.\nThe personality code never blocks (schedule or spinlock) between\ndropping the refcount and exiting the routine, so this should be safe\n(as put_module calls synchronize_sched() before unmapping the module\ncode).\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e0cf8f045b2023b0b3f919ee93eb94345f648434",
      "tree": "21d8d0741a5ae4676fea5b53939cc806ae2b41bd",
      "parents": [
        "91adb56473febeeb3ef657bb5147ddd355465700"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:39:39 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:39:39 2009 +1100"
      },
      "message": "md: md_unregister_thread should cope with being passed NULL\n\nMostly md_unregister_thread is only called when we know that the\nthread is NULL, but sometimes we need to check first.  It is safer\nto put the check inside md_unregister_thread itself.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "34817e8c3948ea20316dfa8fd8947d6d0ee82ba9",
      "tree": "f4d2e75473b46db94928e21e9fe54b029432418b",
      "parents": [
        "67cc2b8165857ba019920d1f00d64bcc4140075d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:39:38 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:39:38 2009 +1100"
      },
      "message": "md: make sure new_level, new_chunksize, new_layout always have sensible values.\n\nWhen an md array is undergoing a change, we have new_* fields that\nshow the new values.\nWhen no change is happening, it is least confusing if these have\nthe same value as the normal fields.\nThis is true in most cases, but not when the values are set via sysfs.\n\nSo fix this up.\n\nA subsequent patch will BUG_ON if these things aren\u0027t consistent.\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "dd8ac336c13fd8afdb082ebacb1cddd5cf727889",
      "tree": "0baa8111d7406774525a1053be461135257d73d2",
      "parents": [
        "58c0fed400603a802968b23ddf78f029c5a84e41"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "message": "md: Represent raid device size in sectors.\n\nThis patch renames the \"size\" field of struct mdk_rdev_s to\n\"sectors\" and changes this field to store sectors instead of\nblocks.\n\nAll users of this field, linear.c, raid0.c and md.c, are fixed up\naccordingly which gets rid of many multiplications and divisions.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "58c0fed400603a802968b23ddf78f029c5a84e41",
      "tree": "474fcb9775bb07f39ebb7802fb9b51d69222dcbb",
      "parents": [
        "575a80fa4f623141e9791e41879d87800fb6d862"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "message": "md: Make mddev-\u003esize sector-based.\n\nThis patch renames the \"size\" field of struct mddev_s to \"dev_sectors\"\nand stores the number of 512-byte sectors instead of the number of\n1K-blocks in it.\n\nAll users of that field, including raid levels 1,4-6,10, are adjusted\naccordingly. This simplifies the code a bit because it allows to get\nrid of a couple of divisions/multiplications by two.\n\nIn order to make checkpatch happy, some minor coding style issues\nhave also been addressed. In particular, size_store() now uses\nstrict_strtoull() instead of simple_strtoull().\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "575a80fa4f623141e9791e41879d87800fb6d862",
      "tree": "f316efc3ee33b2914d8b9f3a3041394560ee9e90",
      "parents": [
        "97e4f42d62badb0f9fbc27c013e89bc1336a03bc"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "message": "md: be more consistent about setting WriteMostly flag when adding a drive to an array\n\nWhen a drive is added to an array using ADD_NEW_DISK, there are two\nplaces we can get certain flags from:  the metadata on the disk or the\nflags passed through the IOCTL.\n\nFor the WriteMostly flag (aka MD_DISK_WRITEMOSTLY) we take the value\nfrom either of those sources depending on if it is set (i.e. we\neffectively \u0027or\u0027 the two sources together).\n\nThis makes it awkward to clear, and is at best inconsistent.\n\nAs documented code (in mdadm) requires that setting\nMD_DISK_WRITEMOSTLY in the ioctl will be effective, we resolve the\ninconsistency by always using the value for this flag from the ioctl,\nand ignoring the value on disk.\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "97e4f42d62badb0f9fbc27c013e89bc1336a03bc",
      "tree": "04cc809702a6b080c417c4ddf605642bbf7de521",
      "parents": [
        "43b2e5d86d8bdd77386226db0bc961529492c043"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "message": "md: occasionally checkpoint drive recovery to reduce duplicate effort after a crash\n\nVersion 1.x metadata has the ability to record the status of a\npartially completed drive recovery.\nHowever we only update that record on a clean shutdown.\nIt would be nice to update it on unclean shutdowns too, particularly\nwhen using a bitmap that removes much to the \u0027sync\u0027 effort after an\nunclean shutdown.\n\nOne complication with checkpointing recovery is that we only know\nwhere we are up to in terms of IO requests started, not which ones\nhave completed.  And we need to know what has completed to record\nhow much is recovered.  So occasionally pause the recovery until all\nsubmitted requests are completed, then update the record of where\nwe are up to.\n\nWhen we have a bitmap, we already do that pause occasionally to keep\nthe bitmap up-to-date.  So enhance that code to record the recovery\noffset and schedule a superblock update.\nAnd when there is no bitmap, just pause 16 times during the resync to\ndo a checkpoint.\n\u002716\u0027 is a fairly arbitrary number.  But we don\u0027t really have any good\nway to judge how often is acceptable, and it seems like a reasonable\nnumber for now.\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "43b2e5d86d8bdd77386226db0bc961529492c043",
      "tree": "601a885b1410324678cf319eee77cc54a02f2cf3",
      "parents": [
        "bff61975b3d6c18ee31457cc5b4d73042f44915f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "message": "md: move md_k.h from include/linux/raid/ to drivers/md/\n\nIt really is nicer to keep related code together..\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bff61975b3d6c18ee31457cc5b4d73042f44915f",
      "tree": "3aff48088b35172e74f56ae54f0b53e76a0c2150",
      "parents": [
        "92022950c6b1bb3da90b2976b20271cdfd98b8a3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:33:13 2009 +1100"
      },
      "message": "md: move lots of #include lines out of .h files and into .c\n\nThis makes the includes more explicit, and is preparation for moving\nmd_k.h to drivers/md/md.h\n\nRemove include/raid/md.h as its only remaining use was to #include\nother files.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8b2b5c217c20b5460218ab8731295f2e46c7dd29",
      "tree": "f5da8b06b3d2a53e80c31e0c0aa386e381b3a841",
      "parents": [
        "ef740c372dfd80e706dbf955d4e4aedda6c0c148"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:27:03 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:27:03 2009 +1100"
      },
      "message": "md: move LEVEL_* definition from md_k.h to md_u.h\n\n.. as they are part of the user-space interface.\nAlso move MdpMinorShift into there so we can remove duplication.\n\nLastly move mdp_major in.  It is less obviously part of the user-space\ninterface, but do_mounts_md.c uses it, and it is acting a bit like\nuser-space.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ef740c372dfd80e706dbf955d4e4aedda6c0c148",
      "tree": "8d9ef9db346ee1ba319a125c9de83cdde049510d",
      "parents": [
        "2a40a8aed083d988df6822bb9b1b08fb7ce21e1d"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Mar 31 14:27:03 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:27:03 2009 +1100"
      },
      "message": "md: move headers out of include/linux/raid/\n\nMove the headers with the local structures for the disciplines and\nbitmap.h into drivers/md/ so that they are more easily grepable for\nhacking and not far away.  md.h is left where it is for now as there\nare some uses from the outside.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3dbd8c2e3ff0185585e068f190289d2a267a3e83",
      "tree": "f49dfbb19fc57e7888a53e763449c36e692367c4",
      "parents": [
        "3f9d99c12a533809342b475c95452e82761bcc1c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Tue Mar 31 14:27:02 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:27:02 2009 +1100"
      },
      "message": "md: stop defining MAJOR_NR\n\nMAJOR_NR was only required for magic in linux/blk.h in 2.4 or earlier\nkernels, so no need to keep it around.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3f9d99c12a533809342b475c95452e82761bcc1c",
      "tree": "8e8bcc72dce1b69e958317f77c351bc0bd4e1c28",
      "parents": [
        "355a43e641b948a7b755cb4c2466ec548d5b495f"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Tue Mar 31 14:27:02 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:27:02 2009 +1100"
      },
      "message": "MD data integrity support\n\nmd: Add support for data integrity to MD\n\nIf all subdevices support the same protection format the MD device is\nflagged as integrity capable.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "eea1bf384e05b5ab747f8530c4fba9e9e6907fff",
      "tree": "ed4c05f8bd7e5805092e9c6a2c257ca71dc0fe2d",
      "parents": [
        "99adcd9d67aaf04e28f5ae96df280f236bde4b66"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:27:02 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:27:02 2009 +1100"
      },
      "message": "md: Fix is_mddev_idle test (again).\n\nThere are two problems with is_mddev_idle.\n\n1/ sync_io is \u0027atomic_t\u0027 and hence \u0027int\u0027.  curr_events and all the\n   rest are \u0027long\u0027.\n   So if sync_io were to wrap on a 64bit host, the value of\n   curr_events would go very negative suddenly, and take a very\n   long time to return to positive.\n\n   So do all calculations as \u0027int\u0027.  That gives us plenty of precision\n   for what we need.\n\n2/ To initialise rdev-\u003elast_events we simply call is_mddev_idle, on\n   the assumption that it will make sure that last_events is in a\n   suitable range.  It used to do this, but now it does not.\n   So now we need to be more explicit about initialisation.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "5fd3a17ed456637a224cf4ca82b9ad9d005bc8d4",
      "tree": "24906c956159349cddecc43b3479d2a9add364df",
      "parents": [
        "fec6c6fec3e20637bee5d276fb61dd8b49a3f9cc"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Wed Mar 04 00:57:25 2009 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Wed Mar 04 00:57:25 2009 -0700"
      },
      "message": "md: fix deadlock when stopping arrays\n\nResolve a deadlock when stopping redundant arrays, i.e. ones that\nrequire a call to sysfs_remove_group when shutdown.  The deadlock is\nsummarized below:\n\nThread1                Thread2\n-------                -------\nread sysfs attribute   stop array\n                       take mddev lock\n                       sysfs_remove_group\nsysfs_get_active\nwait for mddev lock\n                       wait for active\n\nSysrq-w:\n--------\nmdmon         S 00000017  2212  4163      1\n  f1982ea8 00000046 2dcf6b85 00000017 c0b23100 f2f83ed0 c0b23100 f2f8413c\n  c0b23100 c0b23100 c0b1fb98 f2f8413c 00000000 f2f8413c c0b23100 f2291ecc\n  00000002 c0b23100 00000000 00000017 f2f83ed0 f1982eac 00000046 c044d9dd\nCall Trace:\n  [\u003cc044d9dd\u003e] ? debug_mutex_add_waiter+0x1d/0x58\n  [\u003cc06ef451\u003e] __mutex_lock_common+0x1d9/0x338\n  [\u003cc06ef451\u003e] ? __mutex_lock_common+0x1d9/0x338\n  [\u003cc06ef5e3\u003e] mutex_lock_interruptible_nested+0x33/0x3a\n  [\u003cc0634553\u003e] ? mddev_lock+0x14/0x16\n  [\u003cc0634553\u003e] mddev_lock+0x14/0x16\n  [\u003cc0634eda\u003e] md_attr_show+0x2a/0x49\n  [\u003cc04e9997\u003e] sysfs_read_file+0x93/0xf9\nmdadm         D 00000017  2812  4177      1\n  f0401d78 00000046 430456f8 00000017 f0401d58 f0401d20 c0b23100 f2da2c4c\n  c0b23100 c0b23100 c0b1fb98 f2da2c4c 0a10fc36 00000000 c0b23100 f0401d70\n  00000003 c0b23100 00000000 00000017 f2da29e0 00000001 00000002 00000000\nCall Trace:\n  [\u003cc06eed1b\u003e] schedule_timeout+0x1b/0x95\n  [\u003cc06eed1b\u003e] ? schedule_timeout+0x1b/0x95\n  [\u003cc06eeb97\u003e] ? wait_for_common+0x34/0xdc\n  [\u003cc044fa8a\u003e] ? trace_hardirqs_on_caller+0x18/0x145\n  [\u003cc044fbc2\u003e] ? trace_hardirqs_on+0xb/0xd\n  [\u003cc06eec03\u003e] wait_for_common+0xa0/0xdc\n  [\u003cc0428c7c\u003e] ? default_wake_function+0x0/0x12\n  [\u003cc06eeccc\u003e] wait_for_completion+0x17/0x19\n  [\u003cc04ea620\u003e] sysfs_addrm_finish+0x19f/0x1d1\n  [\u003cc04e920e\u003e] sysfs_hash_and_remove+0x42/0x55\n  [\u003cc04eb4db\u003e] sysfs_remove_group+0x57/0x86\n  [\u003cc0638086\u003e] do_md_stop+0x13a/0x499\n\nThis has been there for a while, but is easier to trigger now that mdmon\nis closely watching sysfs.\n\nCc: \u003cstable@kernel.org\u003e\nReported-by: Jacek Danecki \u003cjacek.danecki@intel.com\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    },
    {
      "commit": "93dbb393503d53cd226e5e1f0088fe8f4dbaa2b8",
      "tree": "790365e207951cf6810e8995f3141ddc0b74519b",
      "parents": [
        "c1c201200a359cf3b6e2e36a4236cdca77a3cd8e"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Mon Feb 16 10:25:40 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Wed Feb 18 10:32:00 2009 +0100"
      },
      "message": "block: fix bad definition of BIO_RW_SYNC\n\nWe can\u0027t OR shift values, so get rid of BIO_RW_SYNC and use BIO_RW_SYNCIO\nand BIO_RW_UNPLUG explicitly. This brings back the behaviour from before\n213d9417fec62ef4c3675621b9364a667954d4dd.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "de01dfadf25bf83cfe3d85c163005c4320532658",
      "tree": "dc1cca5a6aa10ecc0fea2fb9f13534685ba8ff61",
      "parents": [
        "852c8bf484a0e17ee27f413ef26e87f522af5607"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Feb 06 18:02:46 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Feb 06 18:02:46 2009 +1100"
      },
      "message": "md: Ensure an md array never has too many devices.\n\nEach different metadata format supported by md supports a\ndifferent maximum number of devices.\nWe really should be enforcing this maximum in the kernel, but\nwe aren\u0027t quite doing that properly.\n\nWe currently only enforce it at the \u0027hot_add\u0027 point, which is an\nolder interface which is not used by current userspace.\n\nWe need to also enforce it at \u0027add_new_disk\u0027 time for active arrays\nand at \u0027do_md_run\u0027 time when starting a new array.\n\nSo move the test from \u0027hot_add\u0027 into \u0027bind_rdev_to_array\u0027 which is\ncalled from both \u0027hot_add\u0027 and \u0027add_new_disk, and add a new\ntest in \u0027analyse_sbs\u0027 which is called from \u0027do_md_run\u0027.\n\nThis bug (or missing feature) has been around \"forever\" and so\nthe patch is suitable for any -stable that is currently maintained.\n\nCc: stable@kernel.org\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4044ba58dd15cb01797c4fd034f39ef4a75f7cc3",
      "tree": "e1bea8143538fc3eaeeb8578c2f9231e32809a25",
      "parents": [
        "efeb53c0e57213e843b7ef3cc6ebcdea7d6186ac"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:11 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:11 2009 +1100"
      },
      "message": "md: don\u0027t retry recovery of raid1 that fails due to error on source drive.\n\nIf a raid1 has only one working drive and it has a sector which\ngives an error on read, then an attempt to recover onto a spare will\nfail, but as the single remaining drive is not removed from the\narray, the recovery will be immediately re-attempted, resulting\nin an infinite recovery loop.\n\nSo detect this situation and don\u0027t retry recovery once an error\non the lone remaining drive is detected.\n\nAllow recovery to be retried once every time a spare is added\nin case the problem wasn\u0027t actually a media error.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "efeb53c0e57213e843b7ef3cc6ebcdea7d6186ac",
      "tree": "ef580effd8809fb0bc5d6ffa6f3b8abaa9180539",
      "parents": [
        "d3374825ce57ba2214d375023979f6197ccc1385"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:10 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:10 2009 +1100"
      },
      "message": "md: Allow md devices to be created by name.\n\nUsing sequential numbers to identify md devices is somewhat artificial.\nUsing names can be a lot more user-friendly.\n\nAlso, creating md devices by opening the device special file is a bit\nawkward.\n\nSo this patch provides a new option for creating and naming devices.\n\nWriting a name such as \"md_home\" to\n    /sys/modules/md_mod/parameters/new_array\nwill cause an array with that name to be created.  It will appear in\n/sys/block/ /proc/partitions and /proc/mdstat as \u0027md_home\u0027.\nIt will have an arbitrary minor number allocated.\n\nmd devices that a created by an open are destroyed on the last\nclose when the device is inactive.\nFor named md devices, they will not be destroyed until the array\nis explicitly stopped, either with the STOP_ARRAY ioctl or by\nwriting \u0027clear\u0027 to /sys/block/md_XXXX/md/array_state.\n\nThe name of the array must start \u0027md_\u0027 to avoid conflict with\nother devices.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d3374825ce57ba2214d375023979f6197ccc1385",
      "tree": "441ea927a7c702e4eadeafbac8be97d664bfb83b",
      "parents": [
        "a21d15042d8cd736caf82c2bac564f3f93f3d017"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:10 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:10 2009 +1100"
      },
      "message": "md: make devices disappear when they are no longer needed.\n\nCurrently md devices, once created, never disappear until the module\nis unloaded.  This is essentially because the gendisk holds a\nreference to the mddev, and the mddev holds a reference to the\ngendisk, this a circular reference.\n\nIf we drop the reference from mddev to gendisk, then we need to ensure\nthat the mddev is destroyed when the gendisk is destroyed.  However it\nis not possible to hook into the gendisk destruction process to enable\nthis.\n\nSo we drop the reference from the gendisk to the mddev and destroy the\ngendisk when the mddev gets destroyed.  However this has a\ncomplication.\nBetween the call\n   __blkdev_get-\u003eget_gendisk-\u003ekobj_lookup-\u003emd_probe\nand the call\n   __blkdev_get-\u003emd_open\n\nthere is no obvious way to hold a reference on the mddev any more, so\nunless something is done, it will disappear and gendisk will be\ndestroyed prematurely.\n\nAlso, once we decide to destroy the mddev, there will be an unlockable\nmoment before the gendisk is unlinked (blk_unregister_region) during\nwhich a new reference to the gendisk can be created.  We need to\nensure that this reference can not be used.  i.e. the -\u003eopen must\nfail.\n\nSo:\n 1/  in md_probe we set a flag in the mddev (hold_active) which\n     indicates that the array should be treated as active, even\n     though there are no references, and no appearance of activity.\n     This is cleared by md_release when the device is closed if it\n     is no longer needed.\n     This ensures that the gendisk will survive between md_probe and\n     md_open.\n\n 2/  In md_open we check if the mddev we expect to open matches\n     the gendisk that we did open.\n     If there is a mismatch we return -ERESTARTSYS and modify\n     __blkdev_get to retry from the top in that case.\n     In the -ERESTARTSYS sys case we make sure to wait until\n     the old gendisk (that we succeeded in opening) is really gone so\n     we loop at most once.\n\nSome udev configurations will always open an md device when it first\nappears.   If we allow an md device that was just created by an open\nto disappear on an immediate close, then this can race with such udev\nconfigurations and result in an infinite loop the device being opened\nand closed, then re-open due to the \u0027ADD\u0027 even from the first open,\nand then close and so on.\nSo we make sure an md device, once created by an open, remains active\nat least until some md \u0027ioctl\u0027 has been made on it.  This means that\nall normal usage of md devices will allow them to disappear promptly\nwhen not needed, but the worst that an incorrect usage will do it\ncause an inactive md device to be left in existence (it can easily be\nremoved).\n\nAs an array can be stopped by writing to a sysfs attribute\n  echo clear \u003e /sys/block/mdXXX/md/array_state\nwe need to use scheduled work for deleting the gendisk and other\nkobjects.  This allows us to wait for any pending gendisk deletion to\ncomplete by simply calling flush_scheduled_work().\n\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a21d15042d8cd736caf82c2bac564f3f93f3d017",
      "tree": "d430b6ae126e9bc8139d1c491b80a18cc86b27f1",
      "parents": [
        "8b76539823d71576927e3eb08b395eb6620f628d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:09 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:09 2009 +1100"
      },
      "message": "md: centralise all freeing of an \u0027mddev\u0027 in \u0027md_free\u0027\n\nmd_free is the .release handler for the md kobj_type.\nSo it makes sense to release all the objects referenced by\nthe mddev in there, rather than just prior to calling kobject_put\nfor what we think is the last time.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8b76539823d71576927e3eb08b395eb6620f628d",
      "tree": "37f9c4da6c861a69b4695ea7818eab2cf6ce95f4",
      "parents": [
        "cd2ac9321c26dc7a76455cd2a4df89123fa2b73e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "message": "md: move allocation of -\u003equeue from mddev_find to md_probe\n\nIt is more balanced to just do simple initialisation in mddev_find,\nwhich allocates and links a new md device, and leave all the\nmore sophisticated allocation to md_probe (which calls mddev_find).\nmd_probe already allocated the gendisk.  It should allocate the\nqueue too.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "cd2ac9321c26dc7a76455cd2a4df89123fa2b73e",
      "tree": "8163a2cc791282cf32fafed19a60f357882d6169",
      "parents": [
        "159ec1fc060ab22b157a62364045f5e98749c4d3"
      ],
      "author": {
        "name": "Cheng Renquan",
        "email": "crquan@gmail.com",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "message": "md: need another print_sb for mdp_superblock_1\n\nmd_print_devices is called in two code path: MD_BUG(...), and md_ioctl\nwith PRINT_RAID_DEBUG.  it will dump out all in use md devices\ninformation;\n\nHowever, it wrongly processed two types of superblock in one:\n\nThe header file \u003clinux/raid/md_p.h\u003e has defined two types of superblock,\nstruct mdp_superblock_s (typedefed with mdp_super_t) according to md with\nmetadata 0.90, and struct mdp_superblock_1 according to md with metadata\n1.0 and later,\n\nThese two types of superblock are very different,\n\nThe md_print_devices code processed them both in mdp_super_t, that would\nlead to wrong informaton dump like:\n\n\t[ 6742.345877]\n\t[ 6742.345887] md:\t**********************************\n\t[ 6742.345890] md:\t* \u003cCOMPLETE RAID STATE PRINTOUT\u003e *\n\t[ 6742.345892] md:\t**********************************\n\t[ 6742.345896] md1: \u003cram7\u003e\u003cram6\u003e\u003cram5\u003e\u003cram4\u003e\n\t[ 6742.345907] md: rdev ram7, SZ:00065472 F:0 S:1 DN:3\n\t[ 6742.345909] md: rdev superblock:\n\t[ 6742.345914] md:  SB: (V:0.90.0) ID:\u003c42ef13c7.598c059a.5f9f1645.801e9ee6\u003e CT:4919856d\n\t[ 6742.345918] md:     L5 S00065472 ND:4 RD:4 md1 LO:2 CS:65536\n\t[ 6742.345922] md:     UT:4919856d ST:1 AD:4 WD:4 FD:0 SD:0 CSUM:b7992907 E:00000001\n\t[ 6742.345924]      D  0:  DISK\u003cN:0,(1,8),R:0,S:6\u003e\n\t[ 6742.345930]      D  1:  DISK\u003cN:1,(1,10),R:1,S:6\u003e\n\t[ 6742.345933]      D  2:  DISK\u003cN:2,(1,12),R:2,S:6\u003e\n\t[ 6742.345937]      D  3:  DISK\u003cN:3,(1,14),R:3,S:6\u003e\n\t[ 6742.345942] md:     THIS:  DISK\u003cN:3,(1,14),R:3,S:6\u003e\n\t...\n\t[ 6742.346058] md0: \u003cram3\u003e\u003cram2\u003e\u003cram1\u003e\u003cram0\u003e\n\t[ 6742.346067] md: rdev ram3, SZ:00065472 F:0 S:1 DN:3\n\t[ 6742.346070] md: rdev superblock:\n\t[ 6742.346073] md:  SB: (V:1.0.0) ID:\u003c369aad81.00000000.00000000.00000000\u003e CT:9a322a9c\n\t[ 6742.346077] md:     L-1507699579 S976570180 ND:48 RD:0 md0 LO:65536 CS:196610\n\t[ 6742.346081] md:     UT:00000018 ST:0 AD:131048 WD:0 FD:8 SD:0 CSUM:00000000 E:00000000\n\t[ 6742.346084]      D  0:  DISK\u003cN:-1,(-1,-1),R:-1,S:-1\u003e\n\t[ 6742.346089]      D  1:  DISK\u003cN:-1,(-1,-1),R:-1,S:-1\u003e\n\t[ 6742.346092]      D  2:  DISK\u003cN:-1,(-1,-1),R:-1,S:-1\u003e\n\t[ 6742.346096]      D  3:  DISK\u003cN:-1,(-1,-1),R:-1,S:-1\u003e\n\t[ 6742.346102] md:     THIS:  DISK\u003cN:0,(0,0),R:0,S:0\u003e\n\t...\n\t[ 6742.346219] md:\t**********************************\n\t[ 6742.346221]\n\nHere md1 is metadata 0.90.0, and md0 is metadata 1.2\n\nAfter some more code to distinguish these two types of superblock, in this patch,\n\nit will generate dump information like:\n\n\t[ 7906.755790]\n\t[ 7906.755799] md:\t**********************************\n\t[ 7906.755802] md:\t* \u003cCOMPLETE RAID STATE PRINTOUT\u003e *\n\t[ 7906.755804] md:\t**********************************\n\t[ 7906.755808] md1: \u003cram7\u003e\u003cram6\u003e\u003cram5\u003e\u003cram4\u003e\n\t[ 7906.755819] md: rdev ram7, SZ:00065472 F:0 S:1 DN:3\n\t[ 7906.755821] md: rdev superblock (MJ:0):\n\t[ 7906.755826] md:  SB: (V:0.90.0) ID:\u003c3fca7a0d.a612bfed.5f9f1645.801e9ee6\u003e CT:491989f3\n\t[ 7906.755830] md:     L5 S00065472 ND:4 RD:4 md1 LO:2 CS:65536\n\t[ 7906.755834] md:     UT:491989f3 ST:1 AD:4 WD:4 FD:0 SD:0 CSUM:00fb52ad E:00000001\n\t[ 7906.755836]      D  0:  DISK\u003cN:0,(1,8),R:0,S:6\u003e\n\t[ 7906.755842]      D  1:  DISK\u003cN:1,(1,10),R:1,S:6\u003e\n\t[ 7906.755845]      D  2:  DISK\u003cN:2,(1,12),R:2,S:6\u003e\n\t[ 7906.755849]      D  3:  DISK\u003cN:3,(1,14),R:3,S:6\u003e\n\t[ 7906.755855] md:     THIS:  DISK\u003cN:3,(1,14),R:3,S:6\u003e\n\t...\n\t[ 7906.755972] md0: \u003cram3\u003e\u003cram2\u003e\u003cram1\u003e\u003cram0\u003e\n\t[ 7906.755981] md: rdev ram3, SZ:00065472 F:0 S:1 DN:3\n\t[ 7906.755984] md: rdev superblock (MJ:1):\n\t[ 7906.755989] md:  SB: (V:1) (F:0) Array-ID:\u003c5fbcf158:55aa:5fbe:9a79:1e939880dcbd\u003e\n\t[ 7906.755990] md:    Name: \"DG5:0\" CT:1226410480\n\t[ 7906.755998] md:       L5 SZ130944 RD:4 LO:2 CS:128 DO:24 DS:131048 SO:8 RO:0\n\t[ 7906.755999] md:     Dev:00000003 UUID: 9194d744:87f7:a448:85f2:7497b84ce30a\n\t[ 7906.756001] md:       (F:0) UT:1226410480 Events:0 ResyncOffset:-1 CSUM:0dbcd829\n\t[ 7906.756003] md:         (MaxDev:384)\n\t...\n\t[ 7906.756113] md:\t**********************************\n\t[ 7906.756116]\n\nthis md0 (metadata 1.2) information dumping is exactly according to struct\nmdp_superblock_1.\n\nSigned-off-by: Cheng Renquan \u003ccrquan@gmail.com\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Dan Williams \u003cdan.j.williams@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "159ec1fc060ab22b157a62364045f5e98749c4d3",
      "tree": "1de0edfd782245b271d2898e36ae76c00e1e1b6d",
      "parents": [
        "ccacc7d2cf03114a24ab903f710118e9e5d43273"
      ],
      "author": {
        "name": "Cheng Renquan",
        "email": "crquan@gmail.com",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:08 2009 +1100"
      },
      "message": "md: use list_for_each_entry macro directly\n\nThe rdev_for_each macro defined in \u003clinux/raid/md_k.h\u003e is identical to\nlist_for_each_entry_safe, from \u003clinux/list.h\u003e, it should be defined to\nuse list_for_each_entry_safe, instead of reinventing the wheel.\n\nBut some calls to each_entry_safe don\u0027t really need a safe version,\njust a direct list_for_each_entry is enough, this could save a temp\nvariable (tmp) in every function that used rdev_for_each.\n\nIn this patch, most rdev_for_each loops are replaced by list_for_each_entry,\ntotally save many tmp vars; and only in the other situations that will call\nlist_del to delete an entry, the safe version is used.\n\nSigned-off-by: Cheng Renquan \u003ccrquan@gmail.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0c3573f19d135d718264e38c46597295bd6154b7",
      "tree": "0943035f89d163d9d7b354445303fb03e5ea7fb1",
      "parents": [
        "538452700d95480c16e7aa6b10ff77cd937d33f4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:05 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 09 08:31:05 2009 +1100"
      },
      "message": "md: use sysfs_notify_dirent to notify changes to md/sync_action.\n\nThere is no compelling need for this, but sysfs_notify_dirent is a\nnicer interface and the change is good for consistency.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "cb3ac42b8af357fdd9ad838234245b39e5bdb7fe",
      "tree": "f6c354c2ec374fa35fe64902204d212f0ef30bd4",
      "parents": [
        "45beca08dd8b6d6a65c5ffd730af2eac7a2c7a03"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 06 17:28:01 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Nov 06 17:28:01 2008 +1100"
      },
      "message": "md: revert the recent addition of a call to the BLKRRPART ioctl.\n\nIt turns out that it is only safe to call blkdev_ioctl when the device\nis actually open (as -\u003ebd_disk is set to NULL on last close).  And it\nis quite possible for do_md_stop to be called when the device is not\nopen.  So discard the call to blkdev_ioctl(BLKRRPART) which was\nadded in\n   commit 934d9c23b4c7e31840a895ba4b7e88d6413c81f3\n\nIt is just as easy to call this ioctl from userspace when needed (on\nmdadm -S) so leave it out of the kernel\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "934d9c23b4c7e31840a895ba4b7e88d6413c81f3",
      "tree": "989d1ac0be656e51d44eaf8513076917bfed3adf",
      "parents": [
        "f8d56f1771e4867acc461146764b4feeb5245669"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 28 17:01:23 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 28 17:01:23 2008 +1100"
      },
      "message": "md: destroy partitions and notify udev when md array is stopped.\n\nmd arrays are not currently destroyed when they are stopped - they\nremain in /sys/block.  Last time I tried this I tripped over locking\ntoo much.\n\nA consequence of this is that udev doesn\u0027t remove anything from /dev.\nThis is rather ugly.\n\nAs an interim measure until proper device removal can be achieved,\nmake sure all partitions are removed using the BLKRRPART ioctl, and\nsend a KOBJ_CHANGE when an md array is stopped.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f8d56f1771e4867acc461146764b4feeb5245669",
      "tree": "9d4857b72287f3170818b4b883c232e3ffb677af",
      "parents": [
        "3d6eadcb5008beca1b289983ffd7771d1e947bac",
        "92850bbd71228730c80efd491e7427650188d359"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 26 16:42:18 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 26 16:42:18 2008 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md:\n  md: allow extended partitions on md devices.\n  md: use sysfs_notify_dirent to notify changes to md/dev-xxx/state\n  md: use sysfs_notify_dirent to notify changes to md/array_state\n"
    },
    {
      "commit": "9a1c3542768b5a58e45a9216921cd10a3bae1205",
      "tree": "c20ffda950db868ec7e1e35aed532962de2ecfd9",
      "parents": [
        "511de73ff09034fb89c8d54bed201a10d057328c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Feb 22 20:40:24 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:48:58 2008 -0400"
      },
      "message": "[PATCH] pass fmode_t to blkdev_put()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a39907fa2fdb73d3c0fb06eff06d855c3298d707",
      "tree": "d8be7f2fb0fe6ddf037e40b2cc958a6c07a32d95",
      "parents": [
        "fe5f9f2cd57c2ce56f36c66e87a10d4b7a158505"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 02 10:31:15 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:48:31 2008 -0400"
      },
      "message": "[PATCH] switch md\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d4430d62fa77208824a37fe6f85ab2831d274769",
      "tree": "5d4d0bca31e63eb208fbebe4f39c912b964c1e4d",
      "parents": [
        "badf8082c33d18b118d3a6f1b32d5ea6b97d3839"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Mar 02 09:09:22 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Oct 21 07:47:32 2008 -0400"
      },
      "message": "[PATCH] beginning of methods conversion\n\nTo keep the size of changesets sane we split the switch by drivers;\nto keep the damn thing bisectable we do the following:\n\t1) rename the affected methods, add ones with correct\nprototypes, make (few) callers handle both.  That\u0027s this changeset.\n\t2) for each driver convert to new methods.  *ALL* drivers\nare converted in this series.\n\t3) kill the old (renamed) methods.\n\nNote that it _is_ a flagday; all in-tree drivers are converted and by the\nend of this series no trace of old methods remain.  The only reason why\nwe do that this way is to keep the damn thing bisectable and allow per-driver\ndebugging if anything goes wrong.\n\nNew methods:\n\topen(bdev, mode)\n\trelease(disk, mode)\n\tioctl(bdev, mode, cmd, arg)\t\t/* Called without BKL */\n\tcompat_ioctl(bdev, mode, cmd, arg)\n\tlocked_ioctl(bdev, mode, cmd, arg)\t/* Called with BKL, legacy */\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "92850bbd71228730c80efd491e7427650188d359",
      "tree": "1d9d87d8eead78e2f6d37db62b580a8b7961844e",
      "parents": [
        "3c0ee63a64a20351ed6c16ec797e1f8c850741ea"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:32 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:32 2008 +1100"
      },
      "message": "md: allow extended partitions on md devices.\n\nThe new extended partition support provides a much nicer was\nto have partitions on md devices that the \u0027mdp\u0027 alternate major.\nWe cannot really get rid of \u0027mdp\u0027 at this time, but we can\nenable extended partitions as that will probably make life\neasier for sysadmins.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "3c0ee63a64a20351ed6c16ec797e1f8c850741ea",
      "tree": "482b825a00356a2b7b605065ce1d6ebe87591eb5",
      "parents": [
        "b62b75905d571c29262a6c38cf9e5f089c203871"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:28 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:28 2008 +1100"
      },
      "message": "md: use sysfs_notify_dirent to notify changes to md/dev-xxx/state\n\nThe \u0027state\u0027 file for a device reports, for example, when the device\nhas failed.  Changes should be reported to userspace ASAP without\nthe possibility of blocking on low-memory.  sysfs_notify does\nhave that possibility (as it takes a mutex which can be held\nacross a kmalloc) so use sysfs_notify_dirent instead.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b62b75905d571c29262a6c38cf9e5f089c203871",
      "tree": "0ca9a74c1d53aad0532aaebebb031b9d8edc5d90",
      "parents": [
        "0cfd81031a26717fe14380d18275f8e217571615"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:21 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 21 13:25:21 2008 +1100"
      },
      "message": "md: use sysfs_notify_dirent to notify changes to md/array_state\n\nNow that we have sysfs_notify_dirent, use it to notify changes\nto md/array_state.\nAs sysfs_notify_dirent can be called in atomic context, we can\nremove the delayed notify and the MD_NOTIFY_ARRAY_STATE flag.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "97ce0a7f9caf9d715cee815a016ee21575f71c95",
      "tree": "b35d4f84795a9b3f20a22faa43148a9c2c68d051",
      "parents": [
        "08ff39f1c8f2134f7d0f38123ca5952371665cc5"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@gmail.com",
        "time": "Wed Sep 24 22:48:19 2008 -0700"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Oct 16 17:03:08 2008 +1100"
      },
      "message": "md: fix input truncation in safe_delay_store()\n\nsafe_delay_store() currently truncates the last character of input since\nit tells strlcpy that the buffer can only hold \u0027len\u0027 characters, off by\none.  sysfs already null terminates the buffer, so just increase the\nlast argument to strlcpy.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "255707274ea25d486b7de060a30ba4ac50593408",
      "tree": "2057cd3ee600f4b5a88c743674fcf9c138d44b48",
      "parents": [
        "4bbf3771ca40d0aaec8316d0e7476b16010288e5"
      ],
      "author": {
        "name": "Stephen Rothwell",
        "email": "sfr@canb.auug.org.au",
        "time": "Wed Oct 15 09:09:21 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Oct 15 21:57:05 2008 +1100"
      },
      "message": "md: build failure due to missing delay.h\n\nToday\u0027s linux-next build (powerpc ppc64_defconfig) failed like this:\n\ndrivers/md/raid1.c: In function \u0027sync_request\u0027:\ndrivers/md/raid1.c:1759: error: implicit declaration of function \u0027msleep_interruptible\u0027\nmake[3]: *** [drivers/md/raid1.o] Error 1\nmake[3]: *** Waiting for unfinished jobs....\ndrivers/md/raid10.c: In function \u0027sync_request\u0027:\ndrivers/md/raid10.c:1749: error: implicit declaration of function \u0027msleep_interruptible\u0027\nmake[3]: *** [drivers/md/raid10.o] Error 1\ndrivers/md/md.c: In function \u0027md_do_sync\u0027:\ndrivers/md/md.c:5915: error: implicit declaration of function \u0027msleep\u0027\n\nCaused by commit 6caa3b0bbdb474647f6bdd8a958ffc46f78d8d58 (\"md: Remove\nunnecessary #includes, #defines, and function declarations\").  I added\nthe following patch.\n\nSigned-off-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "4bbf3771ca40d0aaec8316d0e7476b16010288e5",
      "tree": "f7cba1f72612c5d2132f549881c46ff572e01933",
      "parents": [
        "d710e13812600037a723a673dc5c96a071de98d3"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:12 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:12 2008 +1100"
      },
      "message": "md: Relax minimum size restrictions on chunk_size.\n\nCurrently, the \u0027chunk_size\u0027 of an array must be at-least PAGE_SIZE.\n\nThis makes moving an array to a machine with a larger PAGE_SIZE, or\nchanging the kernel to use a larger PAGE_SIZE, can stop an array from\nworking.\n\nFor RAID10 and RAID4/5/6, this is non-trivial to fix as the resync\nprocess works on whole pages at a time, and assumes them to be wholly\nwithin a stripe.  For other raid personalities, this restriction is\nnot needed at all and can be dropped.\n\nSo remove the test on chunk_size from common can, and add it in just\nthe places where it is needed: raid10 and raid4/5/6.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d710e13812600037a723a673dc5c96a071de98d3",
      "tree": "df8e34fb02cb7909090aa697da7c1db4814ee122",
      "parents": [
        "fb4d8c76e56a887b9eee99fbc55fe82b18625d30"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:12 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:12 2008 +1100"
      },
      "message": "md: remove space after function name in declaration and call.\n\nHaving\n   function (args)\ninstead of\n   function(args)\n\nmake is harder to search for calls of particular functions.\nSo remove all those spaces.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "fb4d8c76e56a887b9eee99fbc55fe82b18625d30",
      "tree": "0ca96887e40db671957b79d493830b9527b04949",
      "parents": [
        "ab5bd5cbc8d4b868378d062eed3d4240930fbb86"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:12 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:12 2008 +1100"
      },
      "message": "md: Remove unnecessary #includes, #defines, and function declarations.\n\nA lot of cruft has gathered over the years.  Time to remove it.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "80268ee9270ebe4847365a7426de91d179e870d0",
      "tree": "0f5d10d1cc86b64030d036e6e322b23caf6aec5c",
      "parents": [
        "ea43ddd8491feccf36267349748ea91b1194481e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:12 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:12 2008 +1100"
      },
      "message": "md: Don\u0027t try to set an array to \u0027read-auto\u0027 if it is already in that state.\n\n\u0027read-auto\u0027 is a variant of \u0027readonly\u0027 which will switch to writable\non the first write attempt.\n\nCalling do_md_stop to set the array readonly when it is already readonly\nreturns an error.  So make sure not to do that.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ea43ddd8491feccf36267349748ea91b1194481e",
      "tree": "89ca77c1f9794994eefa16b76f985b502326cfcd",
      "parents": [
        "7d3c6f8717ee6c2bf6cba5fa0bda3b28fbda6015"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:11 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:11 2008 +1100"
      },
      "message": "md: Allow metadata_version to be updated for externally managed metadata.\n\nFor externally managed metadata, the \u0027metadata_version\u0027 sysfs\nattribute is really just a channel for user-space programs to\ncommunicate about how the array is being managed.\nIt can be useful for this to be changed while the array is active.\n\nNormally changes to metadata_version are not permitted while the array\nis active.  Change that so that if the metadata is externally managed,\nthe metadata_version can be changed to a different flavour of external\nmanagement.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7d3c6f8717ee6c2bf6cba5fa0bda3b28fbda6015",
      "tree": "118b13de811d5eca3e6e3e6410c667ca9cbba607",
      "parents": [
        "fd048088306656824958e7783ffcee27e241b361"
      ],
      "author": {
        "name": "Chris Webb",
        "email": "chris@arachsys.com",
        "time": "Mon Oct 13 11:55:11 2008 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Oct 13 11:55:11 2008 +1100"
      },
      "message": "md: Fix rdev_size_store with size \u003d\u003d 0\n\n\nFix rdev_size_store with size \u003d\u003d 0.\nsize \u003d\u003d 0 means to use the largest size allowed by the\nunderlying device and is used when modifying an active array.\n\nThis fixes a regression introduced by\n commit d7027458d68b2f1752a28016dcf2ffd0a7e8f567\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Chris Webb \u003cchris@arachsys.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "074a7aca7afa6f230104e8e65eba3420263714a5",
      "tree": "f418313e45bd55be8156c8a3e8f9a216cf63058d",
      "parents": [
        "eddb2e26b5ee3c5da68ba4bf1921ba20e2097bff"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 25 19:56:14 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:08 2008 +0200"
      },
      "message": "block: move stats from disk to part0\n\nMove stats related fields - stamp, in_flight, dkstats - from disk to\npart0 and unify stat handling such that...\n\n* part_stat_*() now updates part0 together if the specified partition\n  is not part0.  ie. part_stat_*() are now essentially all_stat_*().\n\n* {disk|all}_stat_*() are gone.\n\n* part_round_stats() is updated similary.  It handles part0 stats\n  automatically and disk_round_stats() is killed.\n\n* part_{inc|dec}_in_fligh() is implemented which automatically updates\n  part0 stats for parts other than part0.\n\n* disk_map_sector_rcu() is updated to return part0 if no part matches.\n  Combined with the above changes, this makes NULL special case\n  handling in callers unnecessary.\n\n* Separate stats show code paths for disk are collapsed into part\n  stats show code paths.\n\n* Rename disk_stat_lock/unlock() to part_stat_lock/unlock()\n\nWhile at it, reposition stat handling macros a bit and add missing\nparentheses around macro parameters.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "0762b8bde9729f10f8e6249809660ff2ec3ad735",
      "tree": "12aa94ef16b840f713f833c712d335646c816dc1",
      "parents": [
        "4c46501d1659475dc6c89554af6ce7fe6ecf615c"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 25 19:56:12 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:08 2008 +0200"
      },
      "message": "block: always set bdev-\u003ebd_part\n\nTill now, bdev-\u003ebd_part is set only if the bdev was for parts other\nthan part0.  This patch makes bdev-\u003ebd_part always set so that code\npaths don\u0027t have to differenciate common handling.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ed9e1982347b36573cd622ee5f4e2a7ccd79b3fd",
      "tree": "79d834094d655ec97cfc0a382a9207ebc8e711a5",
      "parents": [
        "870d6656126add8e383645732b03df2b7ccd4f94"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 25 19:56:05 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:07 2008 +0200"
      },
      "message": "block: implement and use {disk|part}_to_dev()\n\nImplement {disk|part}_to_dev() and use them to access generic device\ninstead of directly dereferencing {disk|part}-\u003edev.  To make sure no\nuser is left behind, rename generic devices fields to __dev.\n\nThis is in preparation of unifying partition 0 handling with other\npartitions.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "9744197c3d7b329590c2be33ad7b17409bd798fe",
      "tree": "b82478694d768a54bad23661e31830cc48e95e0f",
      "parents": [
        "45e9c0de2e86485f8b6633fd64ab19cfbff167f6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Sep 19 11:49:54 2008 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Sep 19 11:49:54 2008 +1000"
      },
      "message": "md: Don\u0027t wait UNINTERRUPTIBLE for other resync to finish\n\nWhen two md arrays share some block device (e.g each uses different\npartitions on the one device), a resync of one array will wait for\nthe resync on the other to finish.\n\nThis can be a long time and as it currently waits TASK_UNINTERRUPTIBLE,\nthe softlockup code notices and complains.\n\nSo use TASK_INTERRUPTIBLE instead and make sure to flush signals\nbefore calling schedule.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "271f5a9b8f8ae0db95de72779d115c9d0b9d3cc5",
      "tree": "814bfe03f1c5ae97da163c8f6b24a0cf67cfd783",
      "parents": [
        "bef69ea0dcce574a425feb0a5aa4c63dd108b9a6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Sep 01 12:32:52 2008 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Sep 01 12:32:52 2008 +1000"
      },
      "message": "Remove invalidate_partition call from do_md_stop.\n\nWhen stopping an md array, or just switching to read-only, we\ncurrently call invalidate_partition while holding the mddev lock.\nThe main reason for this is probably to ensure all dirty buffers\nare flushed (invalidate_partition calls fsync_bdev).\n\nHowever if any dirty buffers are found, it will almost certainly cause\na deadlock as starting writeout will require an update to the\nsuperblock, and performing that updates requires taking the mddev\nlock - which is already held.\n\nThis deadlock can be demonstrated by running \"reboot -f -n\" with\na root filesystem on md/raid, and some dirty buffers in memory.\n\nAll other calls to stop an array should already happen after a flush.\nThe normal sequence is to stop using the array (e.g. umount) which\nwill cause __blkdev_put to call sync_blockdev.  Then open the\narray and issue the STOP_ARRAY ioctl while the buffers are all still\nclean.\n\nSo this invalidate_partition is normally a no-op, except for one case\nwhere it will cause a deadlock.\n\nSo remove it.\n\nThis patch possibly addresses the regression recored in\n   http://bugzilla.kernel.org/show_bug.cgi?id\u003d11460\nand\n   http://bugzilla.kernel.org/show_bug.cgi?id\u003d11452\n\nthough it isn\u0027t yet clear how it ever worked.\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "56ac36d722d0d27c03599d1245ac0ab59e474e5c",
      "tree": "e65f4d860549532a570b92995906f3c3dec9c529",
      "parents": [
        "0310fa216decc3ecfab41f327638fa48a81f3735"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Thu Aug 07 10:02:47 2008 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Thu Aug 07 10:02:47 2008 -0700"
      },
      "message": "md: cancel check/repair requests when recovery is needed\n\nIf a \u0027repair\u0027 is requested when an array is in a position to \u0027recover\u0027 raid1\nwill perform the repair while md believes a recovery is happening.  Address\nthis at both ends, i.e. cancel check/repair requests upon detecting a\nrecover condition and do not call -\u003espare_active after completing a\ncheck/repair.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    }
  ],
  "next": "c89a8eee61540df04fc83f32f51ef0f46ec018b1"
}
