)]}'
{
  "log": [
    {
      "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": "0e6e0271a210817e202c8a4bfffbde3e3c0616d1",
      "tree": "0452e29d393b7688f09f38c98f113703d1b5cc3d",
      "parents": [
        "a8c906ca3f63d05f0d25490cf82276f73c6fe095"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 09 16:32:22 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 09 16:32:22 2009 +1000"
      },
      "message": "md/raid5: fix bug in reshape code when chunk_size decreases.\n\nNow that we support changing the chunksize, we calculate\n\"reshape_sectors\" to be the max of number of sectors in old\nand new chunk size.\nHowever there is one please where we still use \u0027chunksize\u0027\nrather than \u0027reshape_sectors\u0027.\nThis causes a reshape that reduces the size of chunks to freeze.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a8c906ca3f63d05f0d25490cf82276f73c6fe095",
      "tree": "993249ef5865a2ec81ed21e8934ed9c0eb9f33dd",
      "parents": [
        "f001a70cdc61c01452d42e8b32fd7c7842ef62d5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 09 14:39:59 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 09 14:39:59 2009 +1000"
      },
      "message": "md/raid5 - avoid deadlocks in get_active_stripe during reshape\n\nmd has functionality to \u0027quiesce\u0027 and array so that all pending\nIO completed and no new IO starts.  This is used to achieve a\nstable state before making internal changes.\n\nCurrently this quiescing applies equally to normal IO, resync\nIO, and reshape IO.\nHowever there is a problem with applying it to reshape IO.\nReshape can have multiple \u0027stripe_heads\u0027 that must be active together.\nIf the quiesce come between allocating the first and the last of\nsuch a collection, then we deadlock, as the last will not be allocated\nuntil the quiesce is lifted, the quiesce will not be lifted until the\nfirst (which has been allocated) gets used, and that first cannot be\nused until the last is allocated.\n\nIt is not necessary to inhibit reshape IO when a quiesce is\nrequested.  Those places in the code that require a full quiesce will\nensure the reshape thread is not running at all.\n\nSo allow reshape requests to get access to new stripe_heads without\nbeing blocked by a \u0027quiesce\u0027.\n\nThis only affects in-place reshapes (i.e. where the array does not\ngrow or shrink) and these are only newly supported.  So this patch is\nnot needed in earlier kernels.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f001a70cdc61c01452d42e8b32fd7c7842ef62d5",
      "tree": "6427a1baca4b818aa2081cbeb5534f2e6b17cf5e",
      "parents": [
        "ccc0d38ec13d4649d4168c1db590137df53ad783"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 09 14:30:31 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 09 14:30:31 2009 +1000"
      },
      "message": "md/raid5: use conf-\u003eraid_disks in preference to mddev-\u003eraid_disk\n\nmddev-\u003eraid_disks can be changed and any time by a request from\nuser-space.  It is a suggestion as to what number of raid_disks is\ndesired.\n\nconf-\u003eraid_disks can only be changed by the raid5 module with suitable\nlocks in place.  It is a statement as to the current number of\nraid_disks.\n\nThere are two places where the latter should be used, but the former\nis used.  This can lead to a crash when reshaping an array.\n\nThis patch changes to mddev-\u003e to conf-\u003e\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ed37d83e6aa218192fb28bb6b82498d2a8c74070",
      "tree": "bfa8462c7be84539deae430355228305e5516a7a",
      "parents": [
        "b492b852cd8c99505708152c29a5e09a787af9de"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 27 21:39:05 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed May 27 21:39:05 2009 +1000"
      },
      "message": "md: raid5: change incorrect usage of \u0027min\u0027 macro to \u0027min_t\u0027\n\nA recent patch to raid5.c use min on an int and a sector_t.\nThis isn\u0027t allowed.\nSo change it to min_t(sector_t,x,y).\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "848b3182365fdf5a05bcd5ed949071cac2c894b3",
      "tree": "cfb09457f8d8d582d443a92c2a47f1f9862a2036",
      "parents": [
        "b6a9ce688f613e2ee5f15e6720e0bb8520efc36e"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 12:41:08 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue May 26 12:41:08 2009 +1000"
      },
      "message": "md: raid5: avoid sector values going negative when testing reshape progress.\n\nAs sector_t in unsigned, we cannot afford to let \u0027safepos\u0027 etc go\nnegative.\nSo replace\n   a -\u003d b;\nby\n   a -\u003d min(b,a);\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ae03bf639a5027d27270123f5f6e3ee6a412781d",
      "tree": "d705f41a188ad656b1f47f7952626a9f992e3b8f",
      "parents": [
        "e1defc4ff0cf57aca6c5e3ff99fa503f5943c1f1"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Fri May 22 17:17:50 2009 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri May 22 23:22:54 2009 +0200"
      },
      "message": "block: Use accessor functions for queue limits\n\nConvert all external users of queue limits to using wrapper functions\ninstead of poking the request queue variables directly.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\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": "c8f517c444e4f9f55b5b5ca202b8404691a35805",
      "tree": "e679ae13a07e1a2644da0dfc4a4d66bf73f83626",
      "parents": [
        "b0f9ec047b79a92e8b8a9dfbf97537c8fbef234a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:28:40 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:28:40 2009 +1100"
      },
      "message": "md/raid5 revise rules for when to update metadata during reshape\n\nWe currently update the metadata :\n 1/ every 3Megabytes\n 2/ When the place we will write new-layout data to is recorded in\n    the metadata as still containing old-layout data.\n\nRule one exists to avoid having to re-do too much reshaping in the\nface of a crash/restart.  So it should really be time based rather\nthan size based.  So change it to \"every 10 seconds\".\n\nRule two turns out to be too harsh when restriping an array\n\u0027in-place\u0027, as in that case the metadata much be updates for every\nstripe.\nFor the in-place update, it can only possibly be safe from a crash if\nsome user-space program data a backup of every e.g. few hundred\nstripes before allowing them to be reshaped.  In that case, the\nconstant metadata update is pointless.\nSo only update the metadata if the new metadata will report that the\nend of the \u0027old-layout\u0027 data is beyond where we are currently\nwriting \u0027new-layout\u0027 data.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b0f9ec047b79a92e8b8a9dfbf97537c8fbef234a",
      "tree": "2761193e869ed51d08674c39ed3df105cd91f4de",
      "parents": [
        "2cffc4a01dd90a502324e3453d7b245d6d16e1c2"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:27:18 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:27:18 2009 +1100"
      },
      "message": "md/raid5: minor code cleanups in make_request.\n\n... and to be certain the that make_request doesn\u0027t wait forever,\nadd a \u0027wake_up\u0027 when -\u003ereshape_progress has been set to MaxSector\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2cffc4a01dd90a502324e3453d7b245d6d16e1c2",
      "tree": "bcaf6e9fb8169c4e863173d33624de4c9a181246",
      "parents": [
        "ab69ae12ceef7f23c578a3c230144e94a167a821"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:27:05 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:27:05 2009 +1100"
      },
      "message": "md: remove CONFIG_MD_RAID_RESHAPE config option.\n\nThis was only needed when the code was experimental.  Most of it\nis well tested now, so the option is no longer useful.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ab69ae12ceef7f23c578a3c230144e94a167a821",
      "tree": "01bee8e4c4a91a1714596c4f85769bfe72e328ce",
      "parents": [
        "d1a7c50369835f9ecbd7752016cd9302ecfae678"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:26:47 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:26:47 2009 +1100"
      },
      "message": "md/raid5: be more careful about write ordering when reshaping.\n\nWhen we are reshaping an array, it is very important that we read\nthe data from a particular sector offset before writing new data\nat that offset.\n\nIn most cases when growing or shrinking an array we read long before\nwe even consider writing.  But when restriping an array without\nchanging it size, there is a small possibility that we might have\nsome data to available write before the read has happened at the same\nlocation.  This would require some stripes to be in cache already.\n\nTo guard against this small possibility, we check, before writing,\nthat the \u0027old\u0027 stripe at the same location is not in the process of\nbeing read.  And we ensure that we mark all \u0027source\u0027 stripes as such\nbefore allowing new \u0027destination\u0027 stripes to proceed.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "88ce4930e2b80378d45506ce2c3bb5820e156e85",
      "tree": "75847293ede7cd396b5470c0d1c4f50dc79ff031",
      "parents": [
        "7a6613810785872b7c028fba22fc0bae1c91733d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:24:23 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:24:23 2009 +1100"
      },
      "message": "md/raid5: allow layout and chunksize to be changed on active array.\n\nIf an array has 3 or more devices, we allow the chunksize or layout\nto be changed and when a reshape starts, we use these as the \u0027new\u0027\nvalues.\n\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7a6613810785872b7c028fba22fc0bae1c91733d",
      "tree": "b716e9278d42e83c82888d82671062d64fbf0bea",
      "parents": [
        "e183eaedd53807e33f02ee80573e2833890e1f21"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:21:40 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:21:40 2009 +1100"
      },
      "message": "md/raid5: reshape using largest of old and new chunk size\n\nThis ensures that even when old and new stripes are overlapping,\nwe will try to read all of the old before having to write any\nof the new.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e183eaedd53807e33f02ee80573e2833890e1f21",
      "tree": "ba648feacbc930936e5a66006a19ee8822ac28f5",
      "parents": [
        "784052ecc6ade6b6acf4f67e4ada8e5f2e6df446"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:20:22 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:20:22 2009 +1100"
      },
      "message": "md/raid5: prepare for allowing reshape to change layout\n\nAdd prev_algo to raid5_conf_t along the same lines as prev_chunk\nand previous_raid_disks.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "784052ecc6ade6b6acf4f67e4ada8e5f2e6df446",
      "tree": "f0b1060215922ba30a4d676a00dbdad8ddb724c9",
      "parents": [
        "86b42c713be3e5f6807aa14b4cbdb005d35c64d5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:19:07 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:19:07 2009 +1100"
      },
      "message": "md/raid5: prepare for allowing reshape to change chunksize.\n\nAdd \"prev_chunk\" to raid5_conf_t, similar to \"previous_raid_disks\", to\nremember what the chunk size was before the reshape that is currently\nunderway.\n\nThis seems like duplication with \"chunk_size\" and \"new_chunk\" in\nmddev_t, and to some extent it is, but there are differences.\nThe values in mddev_t are always defined and often the same.\nThe prev* values are only defined if a reshape is underway.\n\nAlso (and more significantly) the raid5_conf_t values will be changed\nat the same time (inside an appropriate lock) that the reshape is\nstarted by setting reshape_position.  In contrast, the new_chunk value\nis set when the sysfs file is written which could be well before the\nreshape starts.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "86b42c713be3e5f6807aa14b4cbdb005d35c64d5",
      "tree": "d6c70a966a6bda99e6cd4ce055efa84ab0ded701",
      "parents": [
        "11373542344bdc35be1e6e68b0baadd1b6f7acbb"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:19:03 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:19:03 2009 +1100"
      },
      "message": "md/raid5: clearly differentiate \u0027before\u0027 and \u0027after\u0027 stripes during reshape.\n\nDuring a raid5 reshape, we have some stripes in the cache that are\n\u0027before\u0027 the reshape (and are still to be processed) and some that are\n\u0027after\u0027.  They are currently differentiated by having different\n-\u003edisks values as the only reshape current supported involves changing\nthe number of disks.\n\nHowever we will soon support reshapes that do not change the number\nof disks (chunk parity or chunk size).  So make the difference more\nexplicit with a \u0027generation\u0027 number.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ec32a2bd35bd6b933a5db6542c48210ce069a376",
      "tree": "32d30344202025cf1c6cd202394e65ff7e99753f",
      "parents": [
        "fef9c61fdfabf97a307c2cf3621a6949f0a4b995"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:17:38 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:17:38 2009 +1100"
      },
      "message": "md: allow number of drives in raid5 to be reduced\n\nWhen reshaping a raid5 to have fewer devices, we work from the end of\nthe array to the beginning.\nmd_do_sync gives addresses to sync_request that go from the beginning\nto the end.  So largely ignore them use the internal state variable\n\"reshape_progress\" to keep track of what to do next.\n\nNever allow the size to be reduced below the minimum (4 for raid6,\n3 otherwise).\n\nWe require that the size of the array has already been reduced before\nthe array is reshaped to a smaller size.  This is because simply\nreducing the size is an easily reversible operation, while the reshape\nis immediately destructive and so is not reversible for the blocks at\nthe ends of the devices.\nThus to reshape an array to have fewer devices, you must first write\nan appropriately small size to md/array_size.\n\nWhen reshape finished, we remove any drives that are no longer\nneeded and fix up -\u003edegraded.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "fef9c61fdfabf97a307c2cf3621a6949f0a4b995",
      "tree": "82b128341c12205db62fe092d692d32103a7ea9f",
      "parents": [
        "cea9c22800773cecb1d41f4a6139f9eb6a95368b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:16:46 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:16:46 2009 +1100"
      },
      "message": "md/raid5: change reshape-progress measurement to cope with reshaping backwards.\n\nWhen reducing the number of devices in a raid4/5/6, the reshape\nprocess has to start at the end of the array and work down to the\nbeginning.  So we need to handle expand_progress and expand_lo\ndifferently.\n\nThis patch renames \"expand_progress\" and \"expand_lo\" to avoid the\nimplication that anything is getting bigger (expand-\u003ereshape) and\nevery place they are used, we make sure that they are used the right\nway depending on whether delta_disks is positive or negative.\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": "7ec0547838976d088dfb9cb0adb073e6e8a15aa3",
      "tree": "32f2d5aa5d112e99bebbfb9bfde49ba82b66809d",
      "parents": [
        "34e04e87fb8b2c62c9e8868f41c8179d0e15f51a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:10:36 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:10:36 2009 +1100"
      },
      "message": "md/raid5: enhance raid5_size to work correctly with negative delta_disks\n\nThis is the first of four patches which combine to allow md/raid5 to\nreduce the number of devices in the array by restriping the data over\na subset of the devices.\n\nIf the number of disks in a raid4/5/6 is being reduced, then the\ndefault size must be based on the new number, not the old number\nof devices.\nIn general, it should be based on the smaller of new and old.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "34e04e87fb8b2c62c9e8868f41c8179d0e15f51a",
      "tree": "19d62e6b77f6f786902cc5ab5f8f068fb889efe1",
      "parents": [
        "f701d589aa34d7531183c9ac6f7713ba14212b02"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:10:16 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:10:16 2009 +1100"
      },
      "message": "md/raid5: drop qd_idx from r6_state\n\nWe now have this value in stripe_head so we don\u0027t need to duplicate\nit.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f701d589aa34d7531183c9ac6f7713ba14212b02",
      "tree": "d388cd7fa54c520f12233470a35ebb0676677e7a",
      "parents": [
        "18b0033491f584a2d79697da714b1ef9d6b27d22"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Mar 31 15:09:39 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:09:39 2009 +1100"
      },
      "message": "md/raid6: move raid6 data processing to raid6_pq.ko\n\nMove the raid6 data processing routines into a standalone module\n(raid6_pq) to prepare them to be called from async_tx wrappers and other\nnon-md drivers/modules.  This precludes a circular dependency of raid456\nneeding the async modules for data processing while those modules in\nturn depend on raid456 for the base level synchronous raid6 routines.\n\nTo support this move:\n1/ The exportable definitions in raid6.h move to include/linux/raid/pq.h\n2/ The raid6_call, recovery calls, and table symbols are exported\n3/ Extra #ifdef __KERNEL__ statements to enable the userspace raid6test to\n   compile\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "18b0033491f584a2d79697da714b1ef9d6b27d22",
      "tree": "c06549a4d8fb65418671d6f55a9d647975b9abbc",
      "parents": [
        "b522adcde9c4d3fb7b579cfa9160d8bde7744be8"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Tue Mar 31 15:00:56 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 15:00:56 2009 +1100"
      },
      "message": "md: raid5 run(): Fix max_degraded for raid level 4.\n\nraid4 allows only one failed disk.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\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": "80c3a6ce4ba4470379b9e6a4d9bcd9d2ee26ae03",
      "tree": "de88622f05a7e681ac7bff7714e8f2d8953b66ac",
      "parents": [
        "93ed05e2a56b5ee06c0100a169433b11c4aa5d0b"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Mar 17 18:10:40 2009 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Mar 31 14:57:49 2009 +1100"
      },
      "message": "md: add \u0027size\u0027 as a personality method\n\nIn preparation for giving userspace control over -\u003earray_sectors we need\nto be able to retrieve the \u0027default\u0027 size, and the \u0027anticipated\u0027 size\nwhen a reshape is requested.  For personalities that do not reshape emit\na warning if anything but the default size is requested.\n\nIn the raid5 case we need to update -\u003eprevious_raid_disks to make the\nnew \u0027default\u0027 size available.\n\nReviewed-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    },
    {
      "commit": "fc9739c6d626ee79a148ec367d143b0601299a9d",
      "tree": "492a3a29fe44fdd99d9177bef77b16a463a771f9",
      "parents": [
        "e9d4758f6e93488dc719a1445ce54659a570938f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:57:20 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:57:20 2009 +1100"
      },
      "message": "md: add takeover support for converting raid6 back into raid5\n\nIf a raid6 is still in the layout that comes from converting raid5\ninto a raid6. this will allow us to convert it back again.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e9d4758f6e93488dc719a1445ce54659a570938f",
      "tree": "13fb97a1f47f806b25b957cbf9d1ec69df8d0de8",
      "parents": [
        "b3546035277847028df650b147469fc943cf5c71"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:57:09 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Mar 31 14:57:09 2009 +1100"
      },
      "message": "md: add takeover support for raid4 -\u003e raid5 conversion.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\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": "d562b0c4313e3ddea402a400371afa47ddf679f9",
      "tree": "e895c3f1688493f6587ad61d9824e96994ca38d6",
      "parents": [
        "245f46c2c221ef09c7db892f0e3fc2149be42052"
      ],
      "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 for raid5 to be able to take over raid1\n\nThe RAID1 must have two drives and be a suitable size to\nbe a multiple of a chunksize that isn\u0027t too small.\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": "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": "91adb56473febeeb3ef657bb5147ddd355465700",
      "tree": "9ed414dd2bf999d91a536449c01273ee23ddbcfa",
      "parents": [
        "34817e8c3948ea20316dfa8fd8947d6d0ee82ba9"
      ],
      "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/raid5: refactor raid5 \"run\"\n\n.. so that the code to create the private data structures is separate.\nThis will help with future code to change the level of an active\narray.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "67cc2b8165857ba019920d1f00d64bcc4140075d",
      "tree": "ff8e8eed440640acfa561160115ac44aedf811c2",
      "parents": [
        "99c0fb5f92828ae96909d390f2df137b89093b37"
      ],
      "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/raid5: finish support for DDF/raid6\n\nDDF requires RAID6 calculations over different devices in a different\norder.\nFor md/raid6, we calculate over just the data devices, starting\nimmediately after the \u0027Q\u0027 block.\nFor ddf/raid6 we calculate over all devices, using zeros in place of\nthe P and Q blocks.\n\nThis requires unfortunately complex loops...\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "99c0fb5f92828ae96909d390f2df137b89093b37",
      "tree": "67757972da005990d619b810c3b75fb8b6c9969f",
      "parents": [
        "911d4ee8536d89ea8a6cd3e96b1c95a3ebc5ea66"
      ],
      "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/raid5: Add support for new layouts for raid5 and raid6.\n\nDDF uses different layouts for P and Q blocks than current md/raid6\nso add those that are missing.\nAlso add support for RAID6 layouts that are identical to various\nraid5 layouts with the simple addition of one device to hold all of\nthe \u0027Q\u0027 blocks.\nFinally add \u0027raid5\u0027 layouts to match raid4.\nThese last to will allow online level conversion.\n\nNote that this does not provide correct support for DDF/raid6 yet\nas the order in which data blocks are summed to produce the Q block\nis significant and different between current md code and DDF\nrequirements.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "911d4ee8536d89ea8a6cd3e96b1c95a3ebc5ea66",
      "tree": "222c79b83b7cdcd0b73501c40ed11092b9af10cf",
      "parents": [
        "d0dabf7e577411c2bf6b616c751544dc241213d4"
      ],
      "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/raid5: simplify raid5_compute_sector interface\n\nRather than passing \u0027pd_idx\u0027 and \u0027qd_idx\u0027 to be filled in, pass\na \u0027struct stripe_head *\u0027 and fill in the relevant fields.  This is\nmore extensible.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d0dabf7e577411c2bf6b616c751544dc241213d4",
      "tree": "26a41b66f1ae83e2127eceace281332134518eb0",
      "parents": [
        "112bf8970dbdfc00bd4667da5996e57c2ce58066"
      ],
      "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/raid6: remove expectation that Q device is immediately after P device.\n\n\nCode currently assumes that the devices in a raid6 stripe are\n  0 1 ... N-1 P Q\nin some rotated order.  We will shortly add new layouts in which\nthis strict pattern is broken.\nSo remove this expectation.  We still assume that the data disks\nare roughly in-order.  However P and Q can be inserted anywhere within\nthat order.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "112bf8970dbdfc00bd4667da5996e57c2ce58066",
      "tree": "504afc2dec2ef28d27ef9248eb80b6165cdf95de",
      "parents": [
        "b5663ba405fe3e51176ddb6c91a5e186590c26b5"
      ],
      "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/raid5: change raid5_compute_sector and stripe_to_pdidx to take a \u0027previous\u0027 argument\n\nThis similar to the recent change to get_active_stripe.\nThere is no functional change, just come rearrangement to make\nfuture patches cleaner.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b5663ba405fe3e51176ddb6c91a5e186590c26b5",
      "tree": "5eb8f009b97a02a90cf23db012588971c2f9aa0d",
      "parents": [
        "dd8ac336c13fd8afdb082ebacb1cddd5cf727889"
      ],
      "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/raid5: simplify interface for init_stripe and get_active_stripe\n\nRather than passing \u0027pd_idx\u0027 and \u0027disks\u0027 to these functions, just pass\n\u0027previous\u0027 which tells whether to use the \u0027previous\u0027 or \u0027current\u0027\ngeometry during a reshape, and let init_stripe calculate\ndisks and pd_idx and anything else it might need.\n\nThis is not a substantial simplification and even adds a division.\nHowever we will shortly be adding more complexity to init_stripe\nto handle more interesting \u0027reshape\u0027 activities, and without this\nchange, the interface to these functions would get very complex.\n\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": "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": "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": "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": "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": "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": "c9959059161ddd7bf4670cf47367033d6b2f79c4",
      "tree": "6454db55f8e34361fe472358e10e0c5cfac1e366",
      "parents": [
        "e71bf0d0ee89e51b92776391c5634938236977d5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Aug 25 19:47:21 2008 +0900"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:06 2008 +0200"
      },
      "message": "block: fix diskstats access\n\nThere are two variants of stat functions - ones prefixed with double\nunderbars which don\u0027t care about preemption and ones without which\ndisable preemption before manipulating per-cpu counters.  It\u0027s unclear\nwhether the underbarred ones assume that preemtion is disabled on\nentry as some callers don\u0027t do that.\n\nThis patch unifies diskstats access by implementing disk_stat_lock()\nand disk_stat_unlock() which take care of both RCU (for partition\naccess) and preemption (for per-cpu counter access).  diskstats access\nshould always be enclosed between the two functions.  As such, there\u0027s\nno need for the versions which disables preemption.  They\u0027re removed\nand double underbars ones are renamed to drop the underbars.  As an\nextra argument is added, there\u0027s no danger of using the old version\nunconverted.\n\ndisk_stat_lock() uses get_cpu() and returns the cpu index and all\ndiskstat functions which access per-cpu counters now has @cpu\nargument to help RT.\n\nThis change adds RCU or preemption operations at some places but also\ncollapses several preemption ops into one at others.  Overall, the\nperformance difference should be negligible as all involved ops are\nvery lightweight per-cpu ones.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "5b99c2ffa980528a197f26c7d876cceeccce8dd5",
      "tree": "65e3bbbccb3f796f0569c47fcfc00e222cd3066e",
      "parents": [
        "960e739d9e9f1c2346d8bdc65299ee2e1ed42218"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Aug 15 10:56:11 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:03 2008 +0200"
      },
      "message": "block: make bi_phys_segments an unsigned int instead of short\n\nraid5 can overflow with more than 255 stripes, and we can increase it\nto an int for free on both 32 and 64-bit archs due to the padding.\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "960e739d9e9f1c2346d8bdc65299ee2e1ed42218",
      "tree": "d3b38cbfbf503338cdf08e9ad6c4d41f7684ce34",
      "parents": [
        "5df97b91b5d7ed426034fcc84cb6e7cf682b8838"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Aug 15 10:41:18 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Oct 09 08:56:03 2008 +0200"
      },
      "message": "block: raid fixups for removal of bi_hw_segments\n\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "ac4090d24c6a26211bc4523d920376e054d4f3f8",
      "tree": "5aabdbb2448967cbfc23be2fa6714d1c1bbf29dc",
      "parents": [
        "dba034eef2456d2a9f9a76806846c97acf6c3ad1"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Aug 05 15:54:13 2008 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Aug 05 15:56:32 2008 +1000"
      },
      "message": "Don\u0027t let a blocked_rdev interfere with read request in raid5/6\n\nWhen we have externally managed metadata, we need to mark a failed\ndevice as \u0027Blocked\u0027 and not allow any writes until that device\nhave been marked as faulty in the metadata and the Blocked flag has\nbeen removed.\n\nHowever it is perfectly OK to allow read requests when there is a\nBlocked device, and with a readonly array, there may not be any\nmetadata-handler watching for blocked devices.\n\nSo in raid5/raid6 only allow a Blocked device to interfere with\nWrite request or resync.  Read requests go through untouched.\n\nraid1 and raid10 already differentiate between read and write\nproperly.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "dba034eef2456d2a9f9a76806846c97acf6c3ad1",
      "tree": "3cf51b72fc5be671e986a39c389aa5332994e2a2",
      "parents": [
        "2b25000bf5157c28d8591f03f0575248a8cbd900"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Aug 05 15:54:13 2008 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Aug 05 15:56:32 2008 +1000"
      },
      "message": "Fail safely when trying to grow an array with a write-intent bitmap.\n\nWe cannot currently change the size of a write-intent bitmap.\nSo if we change the size of an array which has such a bitmap, it\ntries to set bits beyond the end of the bitmap.\n\nFor now, simply reject any request to change the size of an array\nwhich has a bitmap.  mdadm can remove the bitmap and add a new one\nafter the array has changed size.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "1e24b15b267293567a8d752721c7ae63f281325a",
      "tree": "ee63644d2dc59899e42ec0802c201140e3a92e5e",
      "parents": [
        "63a16f90167850010864a9e8ebb71d216983090f",
        "388667bed591b2359713bb17d5de0cf56e961447"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 01 11:56:07 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 01 11:56:07 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: raid10: wake up frozen array\n  md: do not count blocked devices as spares\n  md: do not progress the resync process if the stripe was blocked\n  md: delay notification of \u0027active_idle\u0027 to the recovery thread\n  md: fix merge error\n  md: move async_tx_issue_pending_all outside spin_lock_irq\n"
    },
    {
      "commit": "df10cfbc4d7ab93260d997df754219d390d62a9d",
      "tree": "23908d827de85f16f9404875859e51babb966856",
      "parents": [
        "d8e64406a037a64444175730294e449c9e21f5ec"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon Jul 28 23:10:39 2008 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon Jul 28 17:52:37 2008 -0700"
      },
      "message": "md: do not progress the resync process if the stripe was blocked\n\nhandle_stripe will take no action on a stripe when waiting for userspace\nto unblock the array, so do not report completed sectors.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    },
    {
      "commit": "2339788376e2d69a9154130e4dacd5b21ce63094",
      "tree": "ed8f21a7a726472fd089365b8913f0e950edf12a",
      "parents": [
        "c9f21aaff1d1fb5629325130af469532d19beb93"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Wed Jul 23 20:05:34 2008 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Wed Jul 23 13:09:45 2008 -0700"
      },
      "message": "md: fix merge error\n\nThe original STRIPE_OP_IO removal patch had the following hunk:\n\n-               for (i \u003d conf-\u003eraid_disks; i--; ) {\n+               for (i \u003d conf-\u003eraid_disks; i--; )\n                        set_bit(R5_Wantwrite, \u0026sh-\u003edev[i].flags);\n-                       if (!test_and_set_bit(STRIPE_OP_IO, \u0026sh-\u003eops.pending))\n-                               sh-\u003eops.count++;\n-               }\n\nHowever it appears the hunk became broken after merging:\n-               for (i \u003d conf-\u003eraid_disks; i--; ) {\n+               for (i \u003d conf-\u003eraid_disks; i--; )\n                        set_bit(R5_Wantwrite, \u0026sh-\u003edev[i].flags);\n                        set_bit(R5_LOCKED, \u0026dev-\u003eflags);\n                        s.locked++;\n-                       if (!test_and_set_bit(STRIPE_OP_IO, \u0026sh-\u003eops.pending))\n-                               sh-\u003eops.count++;\n-               }\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    },
    {
      "commit": "c9f21aaff1d1fb5629325130af469532d19beb93",
      "tree": "41bb8d2e9d0416d76698d7610b2cbda5ea496cda",
      "parents": [
        "4b80991c6cb9efa607bc4fd6f3ecdf5511c31bb0"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Wed Jul 23 12:05:51 2008 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Wed Jul 23 12:05:51 2008 -0700"
      },
      "message": "md: move async_tx_issue_pending_all outside spin_lock_irq\n\nSome dma drivers need to call spin_lock_bh in their device_issue_pending\nroutines.  This change avoids:\n\nWARNING: at kernel/softirq.c:136 local_bh_enable_ip+0x3a/0x85()\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    },
    {
      "commit": "8a392625b665c676a77c62f8608d10ff430bcb83",
      "tree": "4000a65d61baed73200e47f91dea5263ed16edd0",
      "parents": [
        "519f0141f1c42e2b8b59c7dea005cbf6095358e8",
        "4b80991c6cb9efa607bc4fd6f3ecdf5511c31bb0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 21 10:29:12 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 21 10:29:12 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: (52 commits)\n  md: Protect access to mddev-\u003edisks list using RCU\n  md: only count actual openers as access which prevent a \u0027stop\u0027\n  md: linear: Make array_size sector-based and rename it to array_sectors.\n  md: Make mddev-\u003earray_size sector-based.\n  md: Make super_type-\u003erdev_size_change() take sector-based sizes.\n  md: Fix check for overlapping devices.\n  md: Tidy up rdev_size_store a bit:\n  md: Remove some unused macros.\n  md: Turn rdev-\u003esb_offset into a sector-based quantity.\n  md: Make calc_dev_sboffset() return a sector count.\n  md: Replace calc_dev_size() by calc_num_sectors().\n  md: Make update_size() take the number of sectors.\n  md: Better control of when do_md_stop is allowed to stop the array.\n  md: get_disk_info(): Don\u0027t convert between signed and unsigned and back.\n  md: Simplify restart_array().\n  md: alloc_disk_sb(): Return proper error value.\n  md: Simplify sb_equal().\n  md: Simplify uuid_equal().\n  md: sb_equal(): Fix misleading printk.\n  md: Fix a typo in the comment to cmd_match().\n  ...\n"
    },
    {
      "commit": "f233ea5c9e0d8b95e4283bf6a3436b88f6fd3586",
      "tree": "8a36b621de46da23f3957c6e3ea4d653c2937544",
      "parents": [
        "15f4a5fdf3aa07b53f6a7969664741db5882e485"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Mon Jul 21 17:05:22 2008 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 21 17:05:22 2008 +1000"
      },
      "message": "md: Make mddev-\u003earray_size sector-based.\n\nThis patch renames the array_size field of struct mddev_s to array_sectors\nand converts all instances to use units of 512 byte sectors instead of 1k\nblocks.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "dddec01eb8e2b56267b37a6f9f0997a64b4e0b2a",
      "tree": "b6d8bfbce9abd105384b9d116499afbe306b9c22",
      "parents": [
        "7daf705f362e349983e92037a198b8821db198af",
        "32502b8413a77b54b9e19809404109590c32dfb7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 14 13:15:14 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 14 13:15:14 2008 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block: (37 commits)\n  splice: fix generic_file_splice_read() race with page invalidation\n  ramfs: enable splice write\n  drivers/block/pktcdvd.c: avoid useless memset\n  cdrom: revert commit 22a9189 (cdrom: use kmalloced buffers instead of buffers on stack)\n  scsi: sr avoids useless buffer allocation\n  block: blk_rq_map_kern uses the bounce buffers for stack buffers\n  block: add blk_queue_update_dma_pad\n  DAC960: push down BKL\n  pktcdvd: push BKL down into driver\n  paride: push ioctl down into driver\n  block: use get_unaligned_* helpers\n  block: extend queue_flag bitops\n  block: request_module(): use format string\n  Add bvec_merge_data to handle stacked devices and -\u003emerge_bvec()\n  block: integrity flags can\u0027t use bit ops on unsigned short\n  cmdfilter: extend default read filter\n  sg: fix odd style (extra parenthesis) introduced by cmd filter patch\n  block: add bounce support to blk_rq_map_user_iov\n  cfq-iosched: get rid of enable_idle being unused warning\n  allow userspace to modify scsi command filter on per device basis\n  ...\n"
    },
    {
      "commit": "7a1fc53c5adb910751a9b212af90302eb4ffb527",
      "tree": "9006ecc4323f2a55e6e16f2e19e41ec3c4c3a1ea",
      "parents": [
        "9bbbca3a0ee09293108b67835c6bdf6196d7bcb3"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Thu Jul 10 04:54:57 2008 -0700"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@suse.de",
        "time": "Thu Jul 10 15:25:18 2008 +1000"
      },
      "message": "md: ensure all blocks are uptodate or locked when syncing\n\nRemove the dubious attempt to prefer \u0027compute\u0027 over \u0027read\u0027.  Not only is it\nwrong given commit c337869d (md: do not compute parity unless it is on a failed\ndrive), but it can trigger a BUG_ON in handle_parity_checks5().\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "cc371e66e340f35eed8dc4651c7c18e754c7fb26",
      "tree": "5a2d6727eb07a05999c531a90da43ab1c36b713e",
      "parents": [
        "b24498d477a14680fc3bb3ad884fa9fa76a2d237"
      ],
      "author": {
        "name": "Alasdair G Kergon",
        "email": "agk@redhat.com",
        "time": "Thu Jul 03 09:53:43 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Jul 03 13:21:15 2008 +0200"
      },
      "message": "Add bvec_merge_data to handle stacked devices and -\u003emerge_bvec()\n\nWhen devices are stacked, one device\u0027s merge_bvec_fn may need to perform\nthe mapping and then call one or more functions for its underlying devices.\n\nThe following bio fields are used:\n  bio-\u003ebi_sector\n  bio-\u003ebi_bdev\n  bio-\u003ebi_size\n  bio-\u003ebi_rw  using bio_data_dir()\n\nThis patch creates a new struct bvec_merge_data holding a copy of those\nfields to avoid having to change them directly in the struct bio when\ngoing down the stack only to have to change them back again on the way\nback up.  (And then when the bio gets mapped for real, the whole\nexercise gets repeated, but that\u0027s a problem for another day...)\n\nSigned-off-by: Alasdair G Kergon \u003cagk@redhat.com\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: Milan Broz \u003cmbroz@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "b5470dc5fc18a8ff6517c3bb538d1479e58ecb02",
      "tree": "37b0eb3a4691bdbe58dc5c6c73b2dc8d3925b332",
      "parents": [
        "1fe797e67fb07d605b82300934d0de67068a0aca"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Fri Jun 27 21:44:04 2008 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon Jun 30 17:18:19 2008 -0700"
      },
      "message": "md: resolve external metadata handling deadlock in md_allow_write\n\nmd_allow_write() marks the metadata dirty while holding mddev-\u003elock and then\nwaits for the write to complete.  For externally managed metadata this causes a\ndeadlock as userspace needs to take the lock to communicate that the metadata\nupdate has completed.\n\nChange md_allow_write() in the \u0027external\u0027 case to start the \u0027mark active\u0027\noperation and then return -EAGAIN.  The expected side effects while waiting for\nuserspace to write \u0027active\u0027 to \u0027array_state\u0027 are holding off reshape (code\ncurrently handles -ENOMEM), cause some \u0027stripe_cache_size\u0027 change requests to\nfail, cause some GET_BITMAP_FILE ioctl requests to fall back to GFP_NOIO, and\ncause updates to \u0027raid_disks\u0027 to fail.  Except for \u0027stripe_cache_size\u0027 changes\nthese failures can be mitigated by coordinating with mdmon.\n\nmd_write_start() still prevents writes from occurring until the metadata\nhandler has had a chance to take action as it unconditionally waits for\nMD_CHANGE_CLEAN to be cleared.\n\n[neilb@suse.de: return -EAGAIN, try GFP_NOIO]\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    },
    {
      "commit": "1fe797e67fb07d605b82300934d0de67068a0aca",
      "tree": "b34186b86f446bfaafec0fda3f1f42d2f3a47613",
      "parents": [
        "7b3a871ed995270268a481404454ceafe1a87478"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 09:16:30 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 09:16:30 2008 +1000"
      },
      "message": "md: rationalize raid5 function names\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nCommit a4456856 refactored some of the deep code paths in raid5.c into separate\nfunctions.  The names chosen at the time do not consistently indicate what is\ngoing to happen to the stripe.  So, update the names, and since a stripe is a\ncache element use cache semantics like fill, dirty, and clean.\n\n(also, fix up the indentation in fetch_block5)\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "7b3a871ed995270268a481404454ceafe1a87478",
      "tree": "1d86a84bd885f6c24213dd84b5406a38597b457e",
      "parents": [
        "d8ee0728b5b30d7a6f62c399a95e953616d31f23"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 08:32:09 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:32:09 2008 +1000"
      },
      "message": "md: handle operation chaining in raid5_run_ops\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nNeil said:\n\u003e At the end of ops_run_compute5 you have:\n\u003e         /* ack now if postxor is not set to be run */\n\u003e         if (tx \u0026\u0026 !test_bit(STRIPE_OP_POSTXOR, \u0026s-\u003eops_run))\n\u003e                 async_tx_ack(tx);\n\u003e\n\u003e It looks odd having that test there.  Would it fit in raid5_run_ops\n\u003e better?\n\nThe intended global interpretation is that raid5_run_ops can build a chain\nof xor and memcpy operations.  When MD registers the compute-xor it tells\nasync_tx to keep the operation handle around so that another item in the\ndependency chain can be submitted. If we are just computing a block to\nsatisfy a read then we can terminate the chain immediately.  raid5_run_ops\ngives a better context for this test since it cares about the entire chain.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "d8ee0728b5b30d7a6f62c399a95e953616d31f23",
      "tree": "7f9fcf2b0f6222b2a2b8ee44d69af1fd6990064d",
      "parents": [
        "600aa10993012ff2dd5617720dac081e4f992017"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 08:32:06 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:32:06 2008 +1000"
      },
      "message": "md: replace R5_WantPrexor with R5_WantDrain, add \u0027prexor\u0027 reconstruct_states\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nCurrently ops_run_biodrain and other locations have extra logic to determine\nwhich blocks are processed in the prexor and non-prexor cases.  This can be\neliminated if handle_write_operations5 flags the blocks to be processed in all\ncases via R5_Wantdrain.  The presence of the prexor operation is tracked in\nsh-\u003ereconstruct_state.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "600aa10993012ff2dd5617720dac081e4f992017",
      "tree": "ead3e928aaa45e68bc65ea9aedc513c5b9c3d2d6",
      "parents": [
        "976ea8d475675da6e86bd434328814ccbf5ae641"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 08:32:05 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:32:05 2008 +1000"
      },
      "message": "md: replace STRIPE_OP_{BIODRAIN,PREXOR,POSTXOR} with \u0027reconstruct_states\u0027\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nTrack the state of reconstruct operations (recalculating the parity block\nusually due to incoming writes, or as part of array expansion)  Reduces the\nscope of the STRIPE_OP_{BIODRAIN,PREXOR,POSTXOR} flags to only tracking whether\na reconstruct operation has been requested via the ops_request field of struct\nstripe_head_state.\n\nThis is the final step in the removal of ops.{pending,ack,complete,count}, i.e.\nthe STRIPE_OP_{BIODRAIN,PREXOR,POSTXOR} flags only request an operation and do\nnot track the state of the operation.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "976ea8d475675da6e86bd434328814ccbf5ae641",
      "tree": "087b3c8a44b6cfce0ff085faab0bc66871c455fb",
      "parents": [
        "83de75cc92be599850e5ef3928e07cd840833499"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 08:32:03 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:32:03 2008 +1000"
      },
      "message": "md: replace STRIPE_OP_COMPUTE_BLK with STRIPE_COMPUTE_RUN\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nTrack the state of compute operations (recalculating a block from all the other\nblocks in a stripe) with a state flag.  Reduces the scope of the\nSTRIPE_OP_COMPUTE_BLK flag to only tracking whether a compute operation has\nbeen requested via the ops_request field of struct stripe_head_state.\n\nNote, the compute operation that is performed in the course of doing a \u0027repair\u0027\noperation (check the parity block, recalculate it and write it back if the\ncheck result is not zero) is tracked separately with the \u0027check_state\u0027\nvariable.  Compute operations are held off while a \u0027check\u0027 is in progress, and\nmoving this check out to handle_issuing_new_read_requests5 the helper routine\n__handle_issuing_new_read_requests5 can be simplified.\n\nThis is another step towards the removal of ops.{pending,ack,complete,count},\ni.e. STRIPE_OP_COMPUTE_BLK only requests an operation and does not track the\nstate of the operation.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "83de75cc92be599850e5ef3928e07cd840833499",
      "tree": "19995f66767debc27bf207ad1ec73280c31ca8fc",
      "parents": [
        "ecc65c9b3f9b9d740a5deade3d85b39be56401b6"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 08:31:58 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:58 2008 +1000"
      },
      "message": "md: replace STRIPE_OP_BIOFILL with STRIPE_BIOFILL_RUN\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nTrack the state of read operations (copying data from the stripe cache to bio\nbuffers outside the lock) with a state flag.  Reduce the scope of the\nSTRIPE_OP_BIOFILL flag to only tracking whether a biofill operation has been\nrequested via the ops_request field of struct stripe_head_state.\n\nThis is another step towards the removal of ops.{pending,ack,complete,count},\ni.e. STRIPE_OP_BIOFILL only requests an operation and does not track the state\nof the operation.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "ecc65c9b3f9b9d740a5deade3d85b39be56401b6",
      "tree": "e6b4e827befc6849716689f573c89aa0a41e5d26",
      "parents": [
        "f0e43bcdebf709d747a3effb210aff1941e819ab"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 08:31:57 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:57 2008 +1000"
      },
      "message": "md: replace STRIPE_OP_CHECK with \u0027check_states\u0027\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nThe STRIPE_OP_* flags record the state of stripe operations which are\nperformed outside the stripe lock.  Their use in indicating which\noperations need to be run is straightforward; however, interpolating what\nthe next state of the stripe should be based on a given combination of\nthese flags is not straightforward, and has led to bugs.  An easier to read\nimplementation with minimal degrees of freedom is needed.\n\nTowards this goal, this patch introduces explicit states to replace what was\npreviously interpolated from the STRIPE_OP_* flags.  For now this only converts\nthe handle_parity_checks5 path, removing a user of the\nops.{pending,ack,complete,count} fields of struct stripe_operations.\n\nThis conversion also found a remaining issue with the current code.  There is\na small window for a drive to fail between when we schedule a repair and when\nthe parity calculation for that repair completes.  When this happens we will\nwriteback to \u0027failed_num\u0027 when we really want to write back to \u0027pd_idx\u0027.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f0e43bcdebf709d747a3effb210aff1941e819ab",
      "tree": "3d95952224a1e31a49f9e635470aad3cdf6a707a",
      "parents": [
        "c4e5ac0a22e664eecf29249553cf16c2433f5f25"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 08:31:55 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:55 2008 +1000"
      },
      "message": "md: unify raid5/6 i/o submission\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nLet the raid6 path call ops_run_io to get pending i/o submitted.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c4e5ac0a22e664eecf29249553cf16c2433f5f25",
      "tree": "898a3b7f4b80d54d15d5b415397b1f4dd588e116",
      "parents": [
        "2b7497f0e0a0b9cf21d822e427d5399b2056501a"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 08:31:53 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:53 2008 +1000"
      },
      "message": "md: use stripe_head_state in ops_run_io()\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nIn handle_stripe after taking sh-\u003elock we sample some bits into \u0027s\u0027 (struct\nstripe_head_state):\n\n\ts.syncing \u003d test_bit(STRIPE_SYNCING, \u0026sh-\u003estate);\n\ts.expanding \u003d test_bit(STRIPE_EXPAND_SOURCE, \u0026sh-\u003estate);\n\ts.expanded \u003d test_bit(STRIPE_EXPAND_READY, \u0026sh-\u003estate);\n\nUse these values from \u0027s\u0027 in ops_run_io() rather than re-sampling the bits.\nThis ensures a consistent snapshot (as seen under sh-\u003elock) is used.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2b7497f0e0a0b9cf21d822e427d5399b2056501a",
      "tree": "8cf4d8e056ddafe48d49af0d8afe600868d2d21b",
      "parents": [
        "b203886edbcaac3ca427cf4dbcb50b18bdb346fd"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 08:31:52 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:52 2008 +1000"
      },
      "message": "md: kill STRIPE_OP_IO flag\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nThe R5_Want{Read,Write} flags already gate i/o.  So, this flag is\nsuperfluous and we can unconditionally call ops_run_io().\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "b203886edbcaac3ca427cf4dbcb50b18bdb346fd",
      "tree": "d96cf939fd3a7ab454f61110b91b3a928eb5fe7c",
      "parents": [
        "0cd17fec983b6bca505eecee1af33138687220b6"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Jun 28 08:31:50 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:50 2008 +1000"
      },
      "message": "md: kill STRIPE_OP_MOD_DMA in raid5 offload\n\nFrom: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\nThis micro-optimization allowed the raid code to skip a re-read of the\nparity block after checking parity.  It took advantage of the fact that\nxor-offload-engines have their own internal result buffer and can check\nparity without writing to memory.  Remove it for the following reasons:\n\n1/ It is a layering violation for MD to need to manage the DMA and\n   non-DMA paths within async_xor_zero_sum\n2/ Bad precedent to toggle the \u0027ops\u0027 flags outside the lock\n3/ Hard to realize a performance gain as reads will not need an updated\n   parity block and writes will dirty it anyways.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "199050ea1ff2270174ee525b73bc4c3323098897",
      "tree": "b2a7851511b2ddb943b9ff7ce7c8a96c3ac2a8bb",
      "parents": [
        "6c2fce2ef6b4821c21b5c42c7207cb9cf8c87eda"
      ],
      "author": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:33 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:33 2008 +1000"
      },
      "message": "rationalise return value for -\u003ehot_add_disk method.\n\nFor all array types but linear, -\u003ehot_add_disk returns 1 on\nsuccess, 0 on failure.\nFor linear, it returns 0 on success and -errno on failure.\n\nThis doesn\u0027t cause a functional problem because the -\u003ehot_add_disk\nfunction of linear is used quite differently to the others.\nHowever it is confusing.\n\nSo convert all to return 0 for success or -errno on failure\nand fix call sites to match.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "6c2fce2ef6b4821c21b5c42c7207cb9cf8c87eda",
      "tree": "726b16f46c039df387f7cdfe0d195821d8955532",
      "parents": [
        "8ed0a5216a0238f53b482ec88ce4aeed4b9f0da1"
      ],
      "author": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:31 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:31 2008 +1000"
      },
      "message": "Support adding a spare to a live md array with external metadata.\n\ni.e. extend the \u0027md/dev-XXX/slot\u0027 attribute so that you can\ntell a device to fill an vacant slot in an and md array.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "0e13fe23a00ad88c737d91d94a050707c6139ce4",
      "tree": "7b52d698f200751cd332948a6ad982d8e839ee2d",
      "parents": [
        "13864515f7bf6cabd60e63c62e09d311386ae1f1"
      ],
      "author": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:20 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:20 2008 +1000"
      },
      "message": "use bio_endio instead of a call to bi_end_io\n\nTurn calls to bi-\u003ebi_end_io() into bio_endio(). Apparently bio_endio does\nexactly the same error processing as is hardcoded at these places.\n\nbio_endio() avoids recursion (or will soon), so it should be used.\n\nSigned-off-by: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "efe311431869b40d67911820a309f9a1a41306f3",
      "tree": "3496fb7eca85cd629c19cd23afb5341007e9fa21",
      "parents": [
        "8c2e870a625bd336b2e7a65a97c1836acef07322"
      ],
      "author": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:14 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:31:14 2008 +1000"
      },
      "message": "Don\u0027t acknowlege that stripe-expand is complete until it really is.\n\nWe shouldn\u0027t acknowledge that a stripe has been expanded (When\nreshaping a raid5 by adding a device) until the moved data has\nactually been written out.  However we are currently\nacknowledging (by calling md_done_sync) when the POST_XOR\nis complete and before the write.\n\nSo track in s.locked whether there are pending writes, and don\u0027t\ncall md_done_sync yet if there are.\n\nNote: we all set R5_LOCKED on devices which are are about to\nread from.  This probably isn\u0027t technically necessary, but is\nusually done when writing a block, and justifies the use of\ns.locked here.\n\nThis bug can lead to a crash if an array is stopped while an reshape\nis in progress.\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "8c2e870a625bd336b2e7a65a97c1836acef07322",
      "tree": "1d0650ce9affed0bfae754e17bd5a86a563f8037",
      "parents": [
        "543cf4cb3fe6f6cae3651ba918b9c56200b257d0"
      ],
      "author": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:30:52 2008 +1000"
      },
      "committer": {
        "name": "Neil Brown",
        "email": "neilb@notabene.brown",
        "time": "Sat Jun 28 08:30:52 2008 +1000"
      },
      "message": "Ensure interrupted recovery completed properly (v1 metadata plus bitmap)\n\nIf, while assembling an array, we find a device which is not fully\nin-sync with the array, it is important to set the \"fullsync\" flags.\nThis is an exact analog to the setting of this flag in hot_add_disk\nmethods.\n\nCurrently, only v1.x metadata supports having devices in an array\nwhich are not fully in-sync (it keep track of how in sync they are).\nThe \u0027fullsync\u0027 flag only makes a difference when a write-intent bitmap\nis being used.  In this case it tells recovery to ignore the bitmap\nand recovery all blocks.\n\nThis fix is already in place for raid1, but not raid5/6 or raid10.\n\nSo without this fix, a raid1 ir raid4/5/6 array with version 1.x\nmetadata and a write intent bitmaps, that is stopped in the middle\nof a recovery, will appear to complete the recovery instantly\nafter it is reassembled, but the recovery will not be correct.\n\nIf you might have an array like that, issueing\n   echo repair \u003e /sys/block/mdXX/md/sync_action\n\nwill make sure recovery completes properly.\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c337869d95011495fa181536786e74aa2d7ff031",
      "tree": "786cdf119ce33641438cd841deb0c480dd92f900",
      "parents": [
        "a6d8113a986c66aeb379a26b6e0062488b3e59e1"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Thu Jun 05 22:45:54 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 06 11:29:08 2008 -0700"
      },
      "message": "md: do not compute parity unless it is on a failed drive\n\nIf a block is computed (rather than read) then a check/repair operation\nmay be lead to believe that the data on disk is correct, when infact it\nisn\u0027t.  So only compute blocks for failed devices.\n\nThis issue has been around since at least 2.6.12, but has become harder to\nhit in recent kernels since most reads bypass the cache.\n\necho repair \u003e /sys/block/mdN/md/sync_action will set the parity blocks to the\ncorrect state.\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e0a115e5aa554b93150a8dc1c3fe15467708abb2",
      "tree": "c8d869cba362f3728c528d696e3985f1c30b0a7b",
      "parents": [
        "b2c8daddcbe03a22402ecf943bb88302601c6835"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Thu Jun 05 22:45:52 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 06 11:29:08 2008 -0700"
      },
      "message": "md: fix prexor vs sync_request race\n\nDuring the initial array synchronization process there is a window between\nwhen a prexor operation is scheduled to a specific stripe and when it\ncompletes for a sync_request to be scheduled to the same stripe.  When\nthis happens the prexor completes and the stripe is unconditionally marked\n\"insync\", effectively canceling the sync_request for the stripe.  Prior to\n2.6.23 this was not a problem because the prexor operation was done under\nsh-\u003elock.  The effect in older kernels being that the prexor would still\nerroneously mark the stripe \"insync\", but sync_request would be held off\nand re-mark the stripe as \"!in_sync\".\n\nChange the write completion logic to not mark the stripe \"in_sync\" if a\nprexor was performed.  The effect of the change is to sometimes not set\nSTRIPE_INSYNC.  The worst this can do is cause the resync to stall waiting\nfor STRIPE_INSYNC to be set.  If this were happening, then STRIPE_SYNCING\nwould be set and handle_issuing_new_read_requests would cause all\navailable blocks to eventually be read, at which point prexor would never\nbe used on that stripe any more and STRIPE_INSYNC would eventually be set.\n\necho repair \u003e /sys/block/mdN/md/sync_action will correct arrays that may\nhave lost this race.\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dfc7064500061677720fa26352963c772d3ebe6b",
      "tree": "a8ca495bccf98837c6762ffba54a8009c9772259",
      "parents": [
        "90b08710e41a07d4ff0fb8940dcce3a552991a56"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri May 23 13:04:39 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 24 09:56:10 2008 -0700"
      },
      "message": "md: restart recovery cleanly after device failure.\n\nWhen we get any IO error during a recovery (rebuilding a spare), we abort\nthe recovery and restart it.\n\nFor RAID6 (and multi-drive RAID1) it may not be best to restart at the\nbeginning: when multiple failures can be tolerated, the recovery may be\nable to continue and re-doing all that has already been done doesn\u0027t make\nsense.\n\nWe already have the infrastructure to record where a recovery is up to\nand restart from there, but it is not being used properly.\nThis is because:\n  - We sometimes abort with MD_RECOVERY_ERR rather than just MD_RECOVERY_INTR,\n    which causes the recovery not be be checkpointed.\n  - We remove spares and then re-added them which loses important state\n    information.\n\nThe distinction between MD_RECOVERY_ERR and MD_RECOVERY_INTR really isn\u0027t\nneeded.  If there is an error, the relevant drive will be marked as\nFaulty, and that is enough to ensure correct handling of the error.  So we\nfirst remove MD_RECOVERY_ERR, changing some of the uses of it to\nMD_RECOVERY_INTR.\n\nThen we cause the attempt to remove a non-faulty device from an array to\nfail (unless recovery is impossible as the array is too degraded).  Then\nwhen remove_and_add_spares attempts to remove the devices on which\nrecovery can continue, it will fail, they will remain in place, and\nrecovery will continue on them as desired.\n\nIssue:  If we are halfway through rebuilding a spare and another drive\nfails, and a new spare is immediately available,  do we want to:\n 1/ complete the current rebuild, then go back and rebuild the new spare or\n 2/ restart the rebuild from the start and rebuild both devices in\n    parallel.\n\nBoth options can be argued for.  The code currently takes option 2 as\n  a/ this requires least code change\n  b/ this results in a minimally-degraded array in minimal time.\n\nCc: \"Eivind Sarto\" \u003civan@kasenna.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6be9d4940134b36f9ed020aead36f831f19b49f1",
      "tree": "af74a03897cc8ee2ce4ae68a82a18f1d86d34f31",
      "parents": [
        "6bcfd601861cce45ca73ac1d714f1286b6b3f0d4"
      ],
      "author": {
        "name": "Bernd Schubert",
        "email": "bernd-schubert@gmx.de",
        "time": "Fri May 23 13:04:34 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 24 09:56:10 2008 -0700"
      },
      "message": "md: md: raid5 rate limit error printk\n\nLast night we had scsi problems and a hardware raid unit was offlined\nduring heavy i/o.  While this happened we got for about 3 minutes a huge\nnumber messages like these\n\nApr 12 03:36:07 pfs1n14 kernel: [197510.696595] raid5:md7: read error not correctable (sector 2993096568 on sdj2).\n\nI guess the high error rate is responsible for not scheduling other events\n- during this time the system was not pingable and in the end also other\ndevices run into scsi command timeouts causing problems on these unrelated\ndevices as well.\n\nSigned-off-by: Bernd Schubert \u003cbernd-schubert@gmx.de\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e7e72bf641b1fc7b9df6f40bd2c36dfccd8d647c",
      "tree": "81b1db5434c9635bf23fb40415056e10390cd692",
      "parents": [
        "4920916f728fe3c51f54c25ab7b3d271254aab5a"
      ],
      "author": {
        "name": "Neil Brown",
        "email": "neilb@suse.de",
        "time": "Wed May 14 16:05:54 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 14 19:11:15 2008 -0700"
      },
      "message": "Remove blkdev warning triggered by using md\n\nAs setting and clearing queue flags now requires that we hold a spinlock\non the queue, and as blk_queue_stack_limits is called without that lock,\nget the lock inside blk_queue_stack_limits.\n\nFor blk_queue_stack_limits to be able to find the right lock, each md\npersonality needs to set q-\u003equeue_lock to point to the appropriate lock.\nThose personalities which didn\u0027t previously use a spin_lock, us\nq-\u003e__queue_lock.  So always initialise that lock when allocated.\n\nWith this in place, setting/clearing of the QUEUE_FLAG_PLUGGED bit will no\nlonger cause warnings as it will be clear that the proper lock is held.\n\nThanks to Dan Williams for review and fixing the silly bugs.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\nCc: Dan Williams \u003cdan.j.williams@intel.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Alistair John Strachan \u003calistair@devzero.co.uk\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nCc: Jacek Luczak \u003cdifrost.kernel@gmail.com\u003e\nCc: Prakash Punnoor \u003cprakash@punnoor.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c8894419acf5e56851de9741c5047bebd78acd1f",
      "tree": "6294b87ebf31d577cd48880a201ff4b1a6a50ffc",
      "parents": [
        "3f275ea3086054205795972b8e87f2046fd3de98"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon May 12 14:02:12 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 13 08:02:24 2008 -0700"
      },
      "message": "md: fix raid5 \u0027repair\u0027 operations\n\ncommit bd2ab67030e9116f1e4aae1289220255412b37fd \"md: close a livelock window\nin handle_parity_checks5\" introduced a bug in handling \u0027repair\u0027 operations.\nAfter a repair operation completes we clear the state bits tracking this\noperation.  However, they are cleared too early and this results in the code\ndeciding to re-run the parity check operation.  Since we have done the repair\nin memory the second check does not find a mismatch and thus does not do a\nwriteback.\n\nTest results:\n$ echo repair \u003e /sys/block/md0/md/sync_action\n$ cat /sys/block/md0/md/mismatch_cnt\n51072\n$ echo repair \u003e /sys/block/md0/md/sync_action\n$ cat /sys/block/md0/md/mismatch_cnt\n0\n\n(also fix incorrect indentation)\n\nCc: \u003cstable@kernel.org\u003e\nTested-by: George Spelvin \u003clinux@horizon.com\u003e\nAcked-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6bfe0b499082fd3950429017cd8ebf2a6c458aa5",
      "tree": "81476cf7f7ddbea135bdb93729e0bffae0e7c163",
      "parents": [
        "11e2ede0228ee0f81ccacd15894908c3bf241f73"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Wed Apr 30 00:52:32 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:33 2008 -0700"
      },
      "message": "md: support blocking writes to an array on device failure\n\nAllows a userspace metadata handler to take action upon detecting a device\nfailure.\n\nBased on an original patch by Neil Brown.\n\nChanges:\n-added blocked_wait waitqueue to rdev\n-don\u0027t qualify Blocked with Faulty always let userspace block writes\n-added md_wait_for_blocked_rdev to wait for the block device to be clear, if\n userspace misses the notification another one is sent every 5 seconds\n-set MD_RECOVERY_NEEDED after clearing \"blocked\"\n-kill DoBlock flag, just test mddev-\u003eexternal\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d7a420c9472a95c46600a0345434b7b166e0b9c7",
      "tree": "b95005ce8ab92efdb5cd04b3d85c3b01a0455ebc",
      "parents": [
        "4ef197d87ad7d4bb326de3e9b8ecbb26f9e86253"
      ],
      "author": {
        "name": "Nick Andrew",
        "email": "nick@nick-andrew.net",
        "time": "Mon Apr 28 02:15:55 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:42 2008 -0700"
      },
      "message": "raid: remove leading TAB on printk messages\n\nMD drivers use one printk() call to print 2 log messages and the second line\nmay be prefixed by a TAB character.  It may also output a trailing space\nbefore newline.  klogd (I think) turns the TAB character into the 2 characters\n\u0027^I\u0027 when logging to a file.  This looks ugly.\n\nInstead of a leading TAB to indicate continuation, prefix both output lines\nwith \u0027raid:\u0027 or similar.  Also remove any trailing space in the vicinity of\nthe affected code and consistently end the sentences with a period.\n\nSigned-off-by: Nick Andrew \u003cnick@nick-andrew.net\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4ef197d87ad7d4bb326de3e9b8ecbb26f9e86253",
      "tree": "f6bc4fde8c1955d9b8d6669fcc08e15e3cd6fa7e",
      "parents": [
        "8b3e6cdc53b7f29f7026955d6cb6902a49322a15"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon Apr 28 02:15:54 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:42 2008 -0700"
      },
      "message": "md: raid5.c convert simple_strtoul to strict_strtoul\n\nstrict_strtoul handles the open-coded sanity checks in\nraid5_store_stripe_cache_size and raid5_store_preread_threshold\n\nAcked-by: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8b3e6cdc53b7f29f7026955d6cb6902a49322a15",
      "tree": "69d9f22a526e687fe2892d327caa3fa6ddd65cf6",
      "parents": [
        "e46b272b6608783ed7aa7b0594871550ce20b849"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon Apr 28 02:15:53 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:42 2008 -0700"
      },
      "message": "md: introduce get_priority_stripe() to improve raid456 write performance\n\nImprove write performance by preventing the delayed_list from dumping all its\nstripes onto the handle_list in one shot.  Delayed stripes are now further\ndelayed by being held on the \u0027hold_list\u0027.  The \u0027hold_list\u0027 is bypassed when:\n\n  * a STRIPE_IO_STARTED stripe is found at the head of \u0027handle_list\u0027\n  * \u0027handle_list\u0027 is empty and i/o is being done to satisfy full stripe-width\n    write requests\n  * \u0027bypass_count\u0027 is less than \u0027bypass_threshold\u0027.  By default the threshold\n    is 1, i.e. every other stripe handled is a preread stripe provided the\n    top two conditions are false.\n\nBenchmark data:\nSystem: 2x Xeon 5150, 4x SATA, mem\u003d1GB\nBaseline: 2.6.24-rc7\nConfiguration: mdadm --create /dev/md0 /dev/sd[b-e] -n 4 -l 5 --assume-clean\nTest1: dd if\u003d/dev/zero of\u003d/dev/md0 bs\u003d1024k count\u003d2048\n  * patched:  +33% (stripe_cache_size \u003d 256), +25% (stripe_cache_size \u003d 512)\n\nTest2: tiobench --size 2048 --numruns 5 --block 4096 --block 131072 (XFS)\n  * patched: +13%\n  * patched + preread_bypass_threshold \u003d 0: +37%\n\nChanges since v1:\n* reduce bypass_threshold from (chunk_size / sectors_per_chunk) to (1) and\n  make it configurable.  This defaults to fairness and modest performance\n  gains out of the box.\nChanges since v2:\n* [neilb@suse.de]: kill STRIPE_PRIO_HI and preread_needed as they are not\n  necessary, the important change was clearing STRIPE_DELAYED in\n  add_stripe_bio and this has been moved out to make_request for the hang\n  fix.\n* [neilb@suse.de]: simplify get_priority_stripe\n* [dan.j.williams@intel.com]: reset the bypass_count when -\u003ehold_list is\n  sampled empty (+11%)\n* [dan.j.williams@intel.com]: decrement the bypass_count at the detection\n  of stripes being naturally promoted off of hold_list +2%.  Note, resetting\n  bypass_count instead of decrementing on these events yields +4% but that is\n  probably too aggressive.\nChanges since v3:\n* cosmetic fixups\n\nTested-by: James W. Laferriere \u003cbabydr@baby-dragons.com\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e46b272b6608783ed7aa7b0594871550ce20b849",
      "tree": "a65834f60bee7e77f9669a7ff7e95a1ec3cd74ee",
      "parents": [
        "9a7b2b0f36c40beeb252cb5ceff36bb295e88d97"
      ],
      "author": {
        "name": "Harvey Harrison",
        "email": "harvey.harrison@gmail.com",
        "time": "Mon Apr 28 02:15:50 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:42 2008 -0700"
      },
      "message": "md: replace remaining __FUNCTION__ occurrences\n\n__FUNCTION__ is gcc-specific, use __func__\n\nSigned-off-by: Harvey Harrison \u003charvey.harrison@gmail.com\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bd2ab67030e9116f1e4aae1289220255412b37fd",
      "tree": "da52cf8952a660f17ce45c8c510ded9a3487180a",
      "parents": [
        "231bc2a222411f43bfb0fbb6d64c0f34c7b1039f"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Thu Apr 10 21:29:27 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 11 08:06:44 2008 -0700"
      },
      "message": "md: close a livelock window in handle_parity_checks5\n\nIf a failure is detected after a parity check operation has been initiated,\nbut before it completes handle_parity_checks5 will never quiesce operations on\nthe stripe.\n\nExplicitly handle this case by \"canceling\" the parity check, i.e.  clear the\nSTRIPE_OP_CHECK flags and queue the stripe on the handle list again to refresh\nany non-uptodate blocks.\n\nKernel versions \u003e\u003d 2.6.23 are susceptible.\n\nCc: \u003cstable@kernel.org\u003e\nCc: NeilBrown \u003cneilb@suse.de\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9ea85ebae1e05100cdb4807db4f265b0ede7aad8",
      "tree": "c12e7a0a7339291f0dcf3deff6dcabf40c00e29f",
      "parents": [
        "8195096bf2e3756264561d7a47d547bafd4e9100"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Wed Mar 19 17:01:05 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 19 18:53:37 2008 -0700"
      },
      "message": "drivers/md/raid5.c: fix printk warnings\n\ngcc-3.4.5 on sparc64:\n\ndrivers/md/raid5.c: In function `raid5_end_read_request\u0027:\ndrivers/md/raid5.c:1147: warning: long long unsigned int format, long unsigned int arg (arg 4)\ndrivers/md/raid5.c:1164: warning: long long unsigned int format, long unsigned int arg (arg 3)\ndrivers/md/raid5.c:1170: warning: long long unsigned int format, long unsigned int arg (arg 3)\n\nsector_t is u64, and we don\u0027t know what type the architecture uses to\nimplement u64 (on some it is unsigned long).\n\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: \"J. Bruce Fields\" \u003cbfields@fieldses.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6ed3003c19a96fe18edf8179c4be6fe14abbebbc",
      "tree": "dba37b52eb4c68fedc9e842a69e2c0c3b4a5aa31",
      "parents": [
        "73c34431c7119d0bc7d3436abfad75fe47b2c51f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Feb 06 01:40:00 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Feb 06 10:41:19 2008 -0800"
      },
      "message": "md: fix an occasional deadlock in raid5\n\nraid5\u0027s \u0027make_request\u0027 function calls generic_make_request on underlying\ndevices and if we run out of stripe heads, it could end up waiting for one of\nthose requests to complete.  This is bad as recursive calls to\ngeneric_make_request go on a queue and are not even attempted until\nmake_request completes.\n\nSo: don\u0027t make any generic_make_request calls in raid5 make_request until all\nwaiting has been done.  We do this by simply setting STRIPE_HANDLE instead of\ncalling handle_stripe().\n\nIf we need more stripe_heads, raid5d will get called to process the pending\nstripe_heads which will call generic_make_request from a\n\nThis change by itself causes a performance hit.  So add a change so that\nraid5_activate_delayed is only called at unplug time, never in raid5.  This\nseems to bring back the performance numbers.  Calling it in raid5d was\nsometimes too soon...\n\nNeil said:\n\n  How about we queue it for 2.6.25-rc1 and then about when -rc2 comes out,\n  we queue it for 2.6.24.y?\n\nAcked-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nTested-by: dean gaudet \u003cdean@arctic.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d089c6af10c2be5988f03667d6d22fe6085fbe5e",
      "tree": "815eb0596bd7c908f30c268da6b5c5eff0e0bc21",
      "parents": [
        "29ac4aa3fc68a86279aca50f20df4d614de2e204"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Feb 06 01:39:59 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Feb 06 10:41:19 2008 -0800"
      },
      "message": "md: change ITERATE_RDEV to rdev_for_each\n\nAs this is more in line with common practice in the kernel.  Also swap the\nargs around to be more like list_for_each.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c620727779f7cc8ea96efb71f0651a26349e59c1",
      "tree": "777abdad9c9ef10cb4df5c0efc736e6c64851ed8",
      "parents": [
        "c303da6d713b87b7b3f999f5acce8ecc76ff1adb"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Feb 06 01:39:52 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Feb 06 10:41:18 2008 -0800"
      },
      "message": "md: allow a maximum extent to be set for resyncing\n\nThis allows userspace to control resync/reshape progress and synchronise it\nwith other activities, such as shared access in a SAN, or backing up critical\nsections during a tricky reshape.\n\nWriting a number of sectors (which must be a multiple of the chunk size if\nsuch is meaningful) causes a resync to pause when it gets to that point.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b47490c9bc73d0b34e4c194db40de183e592e446",
      "tree": "8334581aff7aa0b199df04c6f9d707c1902ad14f",
      "parents": [
        "66c811e99322767bad5db4368de93aac604f02a2"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Feb 06 01:39:50 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Feb 06 10:41:18 2008 -0800"
      },
      "message": "md: Update md bitmap during resync.\n\nCurrently an md array with a write-intent bitmap does not updated that bitmap\nto reflect successful partial resync.  Rather the entire bitmap is updated\nwhen the resync completes.\n\nThis is because there is no guarentee that resync requests will complete in\norder, and tracking each request individually is unnecessarily burdensome.\n\nHowever there is value in regularly updating the bitmap, so add code to\nperiodically pause while all pending sync requests complete, then update the\nbitmap.  Doing this only every few seconds (the same as the bitmap update\ntime) does not notciably affect resync performance.\n\n[snitzer@gmail.com: export bitmap_cond_end_sync]\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nCc: \"Mike Snitzer\" \u003csnitzer@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": "0f94e87cdeaaac9f0f9a28a5dd2a5070b87cd3e8",
      "tree": "6c35efe23f565d27bec046d8eed3c5901e1d0090",
      "parents": [
        "5b7741b3325d0d94c88b2ad46657a536890aaa2f"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Jan 08 15:32:53 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jan 08 16:10:35 2008 -0800"
      },
      "message": "md: fix data corruption when a degraded raid5 array is reshaped\n\nWe currently do not wait for the block from the missing device to be\ncomputed from parity before copying data to the new stripe layout.\n\nThe change in the raid6 code is not techincally needed as we don\u0027t delay\ndata block recovery in the same way for raid6 yet.  But making the change\nnow is safer long-term.\n\nThis bug exists in 2.6.23 and 2.6.24-rc\n\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nAcked-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6c55be8b962f1bdc592d579e81fc27b11ea53dfc",
      "tree": "3413cc2c8e26afdbc498cbdbd96bc2fa9733b2a6",
      "parents": [
        "5b23dbe8173c212d6a326e35347b038705603d39"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Wed Nov 14 16:59:35 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Nov 14 18:45:39 2007 -0800"
      },
      "message": "raid5: fix unending write sequence\n\n\u003cdebug output from Joel\u0027s system\u003e\nhandling stripe 7629696, state\u003d0x14 cnt\u003d1, pd_idx\u003d2 ops\u003d0:0:0\ncheck 5: state 0x6 toread 0000000000000000 read 0000000000000000 write fffff800ffcffcc0 written 0000000000000000\ncheck 4: state 0x6 toread 0000000000000000 read 0000000000000000 write fffff800fdd4e360 written 0000000000000000\ncheck 3: state 0x1 toread 0000000000000000 read 0000000000000000 write 0000000000000000 written 0000000000000000\ncheck 2: state 0x1 toread 0000000000000000 read 0000000000000000 write 0000000000000000 written 0000000000000000\ncheck 1: state 0x6 toread 0000000000000000 read 0000000000000000 write fffff800ff517e40 written 0000000000000000\ncheck 0: state 0x6 toread 0000000000000000 read 0000000000000000 write fffff800fd4cae60 written 0000000000000000\nlocked\u003d4 uptodate\u003d2 to_read\u003d0 to_write\u003d4 failed\u003d0 failed_num\u003d0\nfor sector 7629696, rmw\u003d0 rcw\u003d0\n\u003c/debug\u003e\n\nThese blocks were prepared to be written out, but were never handled in\nops_run_biodrain(), so they remain locked forever.  The operations flags\nare all clear which means handle_stripe() thinks nothing else needs to be\ndone.\n\nThis state suggests that the STRIPE_OP_PREXOR bit was sampled \u0027set\u0027 when it\nshould not have been.  This patch cleans up cases where the code looks at\nsh-\u003eops.pending when it should be looking at the consistent stack-based\nsnapshot of the operations flags.\n\nReport from Joel:\n\tResync done. Patch fix this bug.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nTested-by: Joel Bertrand \u003cjoel.bertrand@systella.fr\u003e\nCc: \u003cstable@kernel.org\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "2ad8b1ef11c98c5603580878aebf9f1bc74129e4"
}
