)]}'
{
  "log": [
    {
      "commit": "9f7c2220017771253d7d10b3cc017cb79eeac0fb",
      "tree": "91e387cc225d59ac975b53590c4a75e20770b5ce",
      "parents": [
        "252ac5221a71be72b7e7c7b7482af91e9c962e8c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 26 12:04:13 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 26 12:53:10 2010 +1000"
      },
      "message": "md/raid5: export raid5 unplugging interface.\n\nAlso remove remaining accesses to -\u003equeue and -\u003egendisk when -\u003equeue\nis NULL (As it is in a DM target).\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "2ac8740151b082f045e58010eb92560c3a23a0e9",
      "tree": "39bff686e28f033339c6d1cf47042b6dc1586c2f",
      "parents": [
        "11d8a6e3719519fbc0e2c9d61b6fa931b84bf813"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 01 19:37:29 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 26 12:53:08 2010 +1000"
      },
      "message": "md/raid5: add simple plugging infrastructure.\n\nmd/raid5 uses the plugging infrastructure provided by the block layer\nand \u0027struct request_queue\u0027.  However when we plug raid5 under dm there\nis no request queue so we cannot use that.\n\nSo create a similar infrastructure that is much lighter weight and use\nit for raid5.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "11d8a6e3719519fbc0e2c9d61b6fa931b84bf813",
      "tree": "13a075d1423b2caa3d3264db0cf8cd378c545623",
      "parents": [
        "4a5add49951e698073011855d1a8a7306bc9308d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 26 11:57:07 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 26 12:52:29 2010 +1000"
      },
      "message": "md/raid5: export is_congested test\n\nthe dm module will need this for dm-raid45.\n\nAlso only access -\u003equeue-\u003ebacking_dev_info-\u003econgested_fn\nif -\u003equeue actually exists.  It won\u0027t in a dm target.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f4be6b43f1ac60dff00ef0923ee43b0e08872947",
      "tree": "b4fbfed60c0614d97a91638483058a133ddfcbf4",
      "parents": [
        "c41d4ac40df0d01bf9c383ff28f194d1df2d4fd9"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 01 19:37:25 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jul 26 12:52:26 2010 +1000"
      },
      "message": "md/raid5: ensure we create a unique name for kmem_cache when mddev has no gendisk\n\nWe will shortly allow md devices with no gendisk (they are attached to\na dm-target instead).  That will cause mdname() to return \u0027mdX\u0027.\nThere is one place where mdname really needs to be unique: when\ncreating the name for a slab cache.\nSo in that case, if there is no gendisk, you the address of the mddev\nformatted in HEX to provide a unique name.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "c41d4ac40df0d01bf9c383ff28f194d1df2d4fd9",
      "tree": "0e22b3cc5e211a3f7dd4b6dea69d2afc1a173543",
      "parents": [
        "00bcb4ac7ee7e557a491b614219142cea0ef16f4"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 01 19:37:24 2010 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Wed Jul 21 13:28:15 2010 +1000"
      },
      "message": "md/raid5: factor out code for changing size of stripe cache.\n\nSeparate the actual \u0027change\u0027 code from the sysfs interface\nso that it can eventually be called internally.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a29d8b8e2d811a24bbe49215a0f0c536b72ebc18",
      "tree": "5a714679aeebd5f7af5d1fc521f0db8639324f6c",
      "parents": [
        "003cb608a2533d0927a83bc4e07e46d7a622eda9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 02 14:39:15 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 17 11:17:38 2010 +0900"
      },
      "message": "percpu: add __percpu sparse annotations to what\u0027s left\n\nAdd __percpu sparse annotations to places which didn\u0027t make it in one\nof the previous patches.  All converions are trivial.\n\nThese annotations are to make sparse consider percpu variables to be\nin a different address space and warn if accessed without going\nthrough percpu accessors.  This patch doesn\u0027t affect normal builds.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Borislav Petkov \u003cborislav.petkov@amd.com\u003e\nCc: Dan Williams \u003cdan.j.williams@intel.com\u003e\nCc: Huang Ying \u003cying.huang@intel.com\u003e\nCc: Len Brown \u003clenb@kernel.org\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "e4424fee1815f996dccd36be44d68ca160ec3e1b",
      "tree": "13e67731367d28451fdb1dcfbf4e085ce236f9b9",
      "parents": [
        "417b8d4ac868cf58d6c68f52d72f7648413e0edc"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 16 16:27:34 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 16 16:27:34 2009 +1100"
      },
      "message": "md: fix problems with RAID6 calculations for DDF.\n\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "417b8d4ac868cf58d6c68f52d72f7648413e0edc",
      "tree": "6eefb8b381fdad5235d2b29fc0054bcf537efbcc",
      "parents": [
        "dce3a7a42d585b74ce68081010b42afe81c8f4c4"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Fri Oct 16 16:25:22 2009 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Oct 16 16:25:22 2009 +1100"
      },
      "message": "md/raid456: downlevel multicore operations to raid_run_ops\n\nThe percpu conversion allowed a straightforward handoff of stripe\nprocessing to the async subsytem that initially showed some modest gains\n(+4%).  However, this model is too simplistic and leads to stripes\nbouncing between raid5d and the async thread pool for every invocation\nof handle_stripe().  As reported by Holger this can fall into a\npathological situation severely impacting throughput (6x performance\nloss).\n\nBy downleveling the parallelism to raid_run_ops the pathological\nstripe_head bouncing is eliminated.  This version still exhibits an\naverage 11% throughput loss for:\n\n\tmdadm --create /dev/md0 /dev/sd[b-q] -n 16 -l 6\n\techo 1024 \u003e /sys/block/md0/md/stripe_cache_size\n\tdd if\u003d/dev/zero of\u003d/dev/md0 bs\u003d1024k count\u003d2048\n\n...but the results are at least stable and can be used as a base for\nfurther multicore experimentation.\n\nReported-by: Holger Kiehl \u003cHolger.Kiehl@dwd.de\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "bbb20089a3275a19e475dbc21320c3742e3ca423",
      "tree": "216fdc1cbef450ca688135c5b8969169482d9a48",
      "parents": [
        "3e48e656903e9fd8bc805c6a2c4264d7808d315b",
        "657a77fa7284d8ae28dfa48f1dc5d919bf5b2843"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Sep 08 17:55:21 2009 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Sep 08 17:55:21 2009 -0700"
      },
      "message": "Merge branch \u0027dmaengine\u0027 into async-tx-next\n\nConflicts:\n\tcrypto/async_tx/async_xor.c\n\tdrivers/dma/ioat/dma_v2.h\n\tdrivers/dma/ioat/pci.c\n\tdrivers/md/raid5.c\n"
    },
    {
      "commit": "ac6b53b6e6acab27e4f3e2383f9ac1f0d7c6200b",
      "tree": "e9c67502fd32a9eea4902ea382e51eecb09f2a54",
      "parents": [
        "4e7d2c0aefb77f7b24942e5af042a083be4d60bb"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Jul 14 13:40:19 2009 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Aug 29 19:13:12 2009 -0700"
      },
      "message": "md/raid6: asynchronous raid6 operations\n\n[ Based on an original patch by Yuri Tikhonov ]\n\nThe raid_run_ops routine uses the asynchronous offload api and\nthe stripe_operations member of a stripe_head to carry out xor+pq+copy\noperations asynchronously, outside the lock.\n\nThe operations performed by RAID-6 are the same as in the RAID-5 case\nexcept for no support of STRIPE_OP_PREXOR operations. All the others\nare supported:\nSTRIPE_OP_BIOFILL\n - copy data into request buffers to satisfy a read request\nSTRIPE_OP_COMPUTE_BLK\n - generate missing blocks (1 or 2) in the cache from the other blocks\nSTRIPE_OP_BIODRAIN\n - copy data out of request buffers to satisfy a write request\nSTRIPE_OP_RECONSTRUCT\n - recalculate parity for new data that has entered the cache\nSTRIPE_OP_CHECK\n - verify that the parity is correct\n\nThe flow is the same as in the RAID-5 case, and reuses some routines, namely:\n1/ ops_complete_postxor (renamed to ops_complete_reconstruct)\n2/ ops_complete_compute (updated to set up to 2 targets uptodate)\n3/ ops_run_check (renamed to ops_run_check_p for xor parity checks)\n\n[neilb@suse.de: fixes to get it to pass mdadm regression suite]\nReviewed-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: Yuri Tikhonov \u003cyur@emcraft.com\u003e\nSigned-off-by: Ilya Yanok \u003cyanok@emcraft.com\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\n\n\n\n"
    },
    {
      "commit": "ad283ea4a3ce82cda2efe33163748a397b31b1eb",
      "tree": "11cd739195f336895abe9e4a62d824e49a41c24f",
      "parents": [
        "d6f38f31f3ad4b0dd33fe970988f14e7c65ef702"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Aug 29 19:09:26 2009 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Aug 29 19:09:26 2009 -0700"
      },
      "message": "async_tx: add sum check flags\n\nReplace the flat zero_sum_result with a collection of flags to contain\nthe P (xor) zero-sum result, and the soon to be utilized Q (raid6 reed\nsolomon syndrome) zero-sum result.  Use the SUM_CHECK_ namespace instead\nof DMA_ since these flags will be used on non-dma-zero-sum enabled\nplatforms.\n\nReviewed-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nAcked-by: Maciej Sosnowski \u003cmaciej.sosnowski@intel.com\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\n"
    },
    {
      "commit": "d6f38f31f3ad4b0dd33fe970988f14e7c65ef702",
      "tree": "0b881c68e676376f2f0eccb2eb377dc3561d395f",
      "parents": [
        "36d1c6476be51101778882897b315bd928c8c7b5"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Jul 14 11:50:52 2009 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Aug 29 19:09:26 2009 -0700"
      },
      "message": "md/raid5,6: add percpu scribble region for buffer lists\n\nUse percpu memory rather than stack for storing the buffer lists used in\nparity calculations.  Include space for dma address conversions and pass\nthat to async_tx via the async_submit_ctl.scribble pointer.\n\n[ Impact: move memory pressure from stack to heap ]\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\n\n\n"
    },
    {
      "commit": "36d1c6476be51101778882897b315bd928c8c7b5",
      "tree": "55b4ecd93ce9c22722c9c9da0dd28a2d2f7c082d",
      "parents": [
        "a11034b4282515fd7d9f6fdc0a1380781da461c3"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Jul 14 11:48:22 2009 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Sat Aug 29 19:09:26 2009 -0700"
      },
      "message": "md/raid6: move the spare page to a percpu allocation\n\nIn preparation for asynchronous handling of raid6 operations move the\nspare page to a percpu allocation to allow multiple simultaneous\nsynchronous raid6 recovery operations.\n\nMake this allocation cpu hotplug aware to maximize allocation\nefficiency.\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\n\n\n"
    },
    {
      "commit": "09c9e5fa1b93ad5b81c9dcf8ce3a5b9ae2ac31e4",
      "tree": "2b8767d6a94654944f18ad96347fa6fcddf1eda0",
      "parents": [
        "664e7c413f1e90eceb0b2596dd73a0832faec058"
      ],
      "author": {
        "name": "Andre Noll",
        "email": "maan@systemlinux.org",
        "time": "Thu Jun 18 08:45:55 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Jun 18 08:45:55 2009 +1000"
      },
      "message": "md: convert conf-\u003echunk_size and conf-\u003eprev_chunk to sectors.\n\nThis kills some more shifts.\n\nSigned-off-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "070ec55d07157a3041f92654135c3c6e2eaaf901",
      "tree": "10f24d859e669ba4a671204ce4176a2b43fdaae5",
      "parents": [
        "a6b3deafe0c50e3e873e8ed5cc8abfcb25c05eff"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 16 16:54:21 2009 +1000"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Jun 16 16:54:21 2009 +1000"
      },
      "message": "md: remove mddev_to_conf \"helper\" macro\n\nHaving a macro just to cast a void* isn\u0027t really helpful.\nI would must rather see that we are simply de-referencing -\u003eprivate,\nthan have to know what the macro does.\n\nSo open code the macro everywhere and remove the pointless cast.\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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "b5e98d65d34a1c11a2135ea8a9b2619dbc7216c8",
      "tree": "bf88aad375bb0cbf6c346ec912c06c2607850b21",
      "parents": [
        "e89f89629b5de76e504d1be75c82c4a6b2419583"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Jan 02 13:52:31 2007 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Fri Jul 13 08:06:17 2007 -0700"
      },
      "message": "md: handle_stripe5 - add request/completion logic for async read ops\n\nWhen a read bio is attached to the stripe and the corresponding block is\nmarked R5_UPTODATE, then a read (biofill) operation is scheduled to copy\nthe data from the stripe cache to the bio buffer.  handle_stripe flags the\nblocks to be operated on with the R5_Wantfill flag.  If new read requests\narrive while raid5_run_ops is running they will not be handled until\nhandle_stripe is scheduled to run again.\n\nChangelog:\n* cleanup to_read and to_fill accounting\n* do not fail reads that have reached the cache\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nAcked-By: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "f38e12199a94ca458e4f03c5a2c984fb80adadc5",
      "tree": "706f54c46d4a4c839dd43c1403854dde860c6be5",
      "parents": [
        "e33129d84130459dbb764a1a52a4bfceab3da978"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Jan 02 13:52:30 2007 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Fri Jul 13 08:06:17 2007 -0700"
      },
      "message": "md: handle_stripe5 - add request/completion logic for async compute ops\n\nhandle_stripe will compute a block when a backing disk has failed, or when\nit determines it can save a disk read by computing the block from all the\nother up-to-date blocks.\n\nPreviously a block would be computed under the lock and subsequent logic in\nhandle_stripe could use the newly up-to-date block.  With the raid5_run_ops\nimplementation the compute operation is carried out a later time outside\nthe lock.  To preserve the old functionality we take advantage of the\ndependency chain feature of async_tx to flag the block as R5_Wantcompute\nand then let other parts of handle_stripe operate on the block as if it\nwere up-to-date.  raid5_run_ops guarantees that the block will be ready\nbefore it is used in another operation.\n\nHowever, this only works in cases where the compute and the dependent\noperation are scheduled at the same time.  If a previous call to\nhandle_stripe sets the R5_Wantcompute flag there is no facility to pass the\nasync_tx dependency chain across successive calls to raid5_run_ops.  The\nreq_compute variable protects against this case.\n\nChangelog:\n* remove the req_compute BUG_ON\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nAcked-By: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "91c00924846a0034020451c280c76baa4299f9dc",
      "tree": "7124ed6706937b793a10c37a861c5fc0f2e5b348",
      "parents": [
        "45b4233caac05da0118b608a9fc2a40a9fc580cd"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Jan 02 13:52:30 2007 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Fri Jul 13 08:06:15 2007 -0700"
      },
      "message": "md: raid5_run_ops - run stripe operations outside sh-\u003elock\n\nWhen the raid acceleration work was proposed, Neil laid out the following\nattack plan:\n\n1/ move the xor and copy operations outside spin_lock(\u0026sh-\u003elock)\n2/ find/implement an asynchronous offload api\n\nThe raid5_run_ops routine uses the asynchronous offload api (async_tx) and\nthe stripe_operations member of a stripe_head to carry out xor+copy\noperations asynchronously, outside the lock.\n\nTo perform operations outside the lock a new set of state flags is needed\nto track new requests, in-flight requests, and completed requests.  In this\nnew model handle_stripe is tasked with scanning the stripe_head for work,\nupdating the stripe_operations structure, and finally dropping the lock and\ncalling raid5_run_ops for processing.  The following flags outline the\nrequests that handle_stripe can make of raid5_run_ops:\n\nSTRIPE_OP_BIOFILL\n - copy data into request buffers to satisfy a read request\nSTRIPE_OP_COMPUTE_BLK\n - generate a missing block in the cache from the other blocks\nSTRIPE_OP_PREXOR\n - subtract existing data as part of the read-modify-write process\nSTRIPE_OP_BIODRAIN\n - copy data out of request buffers to satisfy a write request\nSTRIPE_OP_POSTXOR\n - recalculate parity for new data that has entered the cache\nSTRIPE_OP_CHECK\n - verify that the parity is correct\nSTRIPE_OP_IO\n - submit i/o to the member disks (note this was already performed outside\n   the stripe lock, but it made sense to add it as an operation type\n\nThe flow is:\n1/ handle_stripe sets STRIPE_OP_* in sh-\u003eops.pending\n2/ raid5_run_ops reads sh-\u003eops.pending, sets sh-\u003eops.ack, and submits the\n   operation to the async_tx api\n3/ async_tx triggers the completion callback routine to set\n   sh-\u003eops.complete and release the stripe\n4/ handle_stripe runs again to finish the operation and optionally submit\n   new operations that were previously blocked\n\nNote this patch just defines raid5_run_ops, subsequent commits (one per\nmajor operation type) modify handle_stripe to take advantage of this\nroutine.\n\nChangelog:\n* removed ops_complete_biodrain in favor of ops_complete_postxor and\n  ops_complete_write.\n* removed the raid5_run_ops workqueue\n* call bi_end_io for reads in ops_complete_biofill, saves a call to\n  handle_stripe\n* explicitly handle the 2-disk raid5 case (xor becomes memcpy), Neil Brown\n* fix race between async engines and bi_end_io call for reads, Neil Brown\n* remove unnecessary spin_lock from ops_complete_biofill\n* remove test_and_set/test_and_clear BUG_ONs, Neil Brown\n* remove explicit interrupt handling for channel switching, this feature\n  was absorbed (i.e. it is now implicit) by the async_tx api\n* use return_io in ops_complete_biofill\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nAcked-By: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "a445685647e825c713175d180ffc8dd54d90589b",
      "tree": "d2db5674e51d33162e1e5993b6e6680ec534e2df",
      "parents": [
        "9bc89cd82d6f88fb0ca39b30445c329a430fd66b"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon Jul 09 11:56:43 2007 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Fri Jul 13 08:06:15 2007 -0700"
      },
      "message": "raid5: refactor handle_stripe5 and handle_stripe6 (v3)\n\nhandle_stripe5 and handle_stripe6 have very deep logic paths handling the\nvarious states of a stripe_head.  By introducing the \u0027stripe_head_state\u0027\nand \u0027r6_state\u0027 objects, large portions of the logic can be moved to\nsub-routines.\n\n\u0027struct stripe_head_state\u0027 consumes all of the automatic variables that previously\nstood alone in handle_stripe5,6.  \u0027struct r6_state\u0027 contains the handle_stripe6\nspecific variables like p_failed and q_failed.\n\nOne of the nice side effects of the \u0027stripe_head_state\u0027 change is that it\nallows for further reductions in code duplication between raid5 and raid6.\nThe following new routines are shared between raid5 and raid6:\n\n\thandle_completed_write_requests\n\thandle_requests_to_failed_array\n\thandle_stripe_expansion\n\nChanges:\n* v2: fixed \u0027conf-\u003eraid_disk-1\u0027 for the raid6 \u0027handle_stripe_expansion\u0027 path\n* v3: removed the unused \u0027dirty\u0027 field from struct stripe_head_state\n* v3: coalesced open coded bi_end_io routines into return_io()\n\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nAcked-By: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "46031f9a38a9773021f1872abc713d62467ac22e",
      "tree": "fe91f661fe0aad5f149447797c5d31544453ca38",
      "parents": [
        "f679623f50545bc0577caf2d0f8675b61162f059"
      ],
      "author": {
        "name": "Raz Ben-Jehuda(caro)",
        "email": "raziebe@gmail.com",
        "time": "Sun Dec 10 02:20:47 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:57:20 2006 -0800"
      },
      "message": "[PATCH] md: allow reads that have bypassed the cache to be retried on failure\n\nIf a bypass-the-cache read fails, we simply try again through the cache.  If\nit fails again it will trigger normal recovery precedures.\n\nupdate 1:\n\nFrom: NeilBrown \u003cneilb@suse.de\u003e\n\n1/\n  chunk_aligned_read and retry_aligned_read assume that\n      data_disks \u003d\u003d raid_disks - 1\n  which is not true for raid6.\n  So when an aligned read request bypasses the cache, we can get the wrong data.\n\n2/ The cloned bio is being used-after-free in raid5_align_endio\n   (to test BIO_UPTODATE).\n\n3/ We forgot to add rdev-\u003edata_offset when submitting\n   a bio for aligned-read\n\n4/ clone_bio calls blk_recount_segments and then we change bi_bdev,\n   so we need to invalidate the segment counts.\n\n5/ We don\u0027t de-reference the rdev when the read completes.\n   This means we need to record the rdev to so it is still\n   available in the end_io routine.  Fortunately\n   bi_next in the original bio is unused at this point so\n   we can stuff it in there.\n\n6/ We leak a cloned bio if the target rdev is not usable.\n\nFrom: NeilBrown \u003cneilb@suse.de\u003e\n\nupdate 2:\n\n1/ When aligned requests fail (read error) they need to be retried\n   via the normal method (stripe cache).  As we cannot be sure that\n   we can process a single read in one go (we may not be able to\n   allocate all the stripes needed) we store a bio-being-retried\n   and a list of bioes-that-still-need-to-be-retried.\n   When find a bio that needs to be retried, we should add it to\n   the list, not to single-bio...\n\n2/ We were never incrementing \u0027scnt\u0027 when resubmitting failed\n   aligned requests.\n\n[akpm@osdl.org: build fix]\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e18b890bb0881bbab6f4f1a6cd20d9c60d66b003",
      "tree": "4828be07e1c24781c264b42c5a75bcd968223c3f",
      "parents": [
        "441e143e95f5aa1e04026cb0aa71c801ba53982f"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed Dec 06 20:33:20 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:25 2006 -0800"
      },
      "message": "[PATCH] slab: remove kmem_cache_t\n\nReplace all uses of kmem_cache_t with struct kmem_cache.\n\nThe patch was generated using the following script:\n\n\t#!/bin/sh\n\t#\n\t# Replace one string by another in all the kernel sources.\n\t#\n\n\tset -e\n\n\tfor file in `find * -name \"*.c\" -o -name \"*.h\"|xargs grep -l $1`; do\n\t\tquilt add $file\n\t\tsed -e \"1,\\$s/$1/$2/g\" $file \u003e/tmp/$$\n\t\tmv /tmp/$$ $file\n\t\tquilt refresh\n\tdone\n\nThe script was run like this\n\n\tsh replace kmem_cache_t \"struct kmem_cache\"\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "02c2de8cc835885bdff51a8bfd6c0b659b969f50",
      "tree": "3c3b3adf01e4ec4139888d681eca5becb3374fda",
      "parents": [
        "850b2b420cd5b363ed4cf48a8816d656c8b5251b"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 03 01:15:47 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:17 2006 -0700"
      },
      "message": "[PATCH] md: remove the working_disks and failed_disks from raid5 state data.\n\nThey are not needed.  conf-\u003efailed_disks is the same as mddev-\u003edegraded and\nconf-\u003eworking_disks is conf-\u003eraid_disks - mddev-\u003edegraded.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b5c124af69119c1b5c1e728bd2e7b5b1fad9b7be",
      "tree": "7caf3a0fec3dfd4e4e9781aa67be9430f618ccf0",
      "parents": [
        "fbedac04fa11d7f9f9f425c7ec253f55becaae57"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Oct 03 01:15:45 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 03 08:04:16 2006 -0700"
      },
      "message": "[PATCH] md: fix a comment that is wrong in raid5.h\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "16a53ecc35f2a80dc285be2e769768847d89ca37",
      "tree": "19d005f19af68e9b98efaf16885bb60498f540c1",
      "parents": [
        "16f17b39f385212b73278a76d482cdcaaebe6c02"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Jun 26 00:27:38 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 26 09:58:37 2006 -0700"
      },
      "message": "[PATCH] md: merge raid5 and raid6 code\n\nThere is a lot of commonality between raid5.c and raid6main.c.  This patches\nmerges both into one module called raid456.  This saves a lot of code, and\npaves the way for online raid5-\u003eraid6 migrations.\n\nThere is still duplication, e.g.  between handle_stripe5 and handle_stripe6.\nThis will probably be cleaned up later.\n\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b578d55fdd80140f657130abd85aebeb345755fb",
      "tree": "3737b88a25b3fb1e3347cd1c4c274336aee6a462",
      "parents": [
        "f67055780caac6a99f43834795c43acf99eba6a6"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 27 01:18:12 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:45:02 2006 -0800"
      },
      "message": "[PATCH] md: Only checkpoint expansion progress occasionally\n\nInstead of checkpointing at each stripe, only checkpoint when a new write\nwould overwrite uncheckpointed data.  Block any write to the uncheckpointed\narea.  Arbitrarily checkpoint at least every 3Meg.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f67055780caac6a99f43834795c43acf99eba6a6",
      "tree": "6b80e7b4cb300edb0910dbad1d840ff8e2f36ae5",
      "parents": [
        "292695531ae4019bb15deedc121b218d1908b648"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 27 01:18:11 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:45:01 2006 -0800"
      },
      "message": "[PATCH] md: Checkpoint and allow restart of raid5 reshape\n\nWe allow the superblock to record an \u0027old\u0027 and a \u0027new\u0027 geometry, and a\nposition where any conversion is up to.  The geometry allows for changing\nchunksize, layout and level as well as number of devices.\n\nWhen using verion-0.90 superblock, we convert the version to 0.91 while the\nconversion is happening so that an old kernel will refuse the assemble the\narray.  For version-1, we use a feature bit for the same effect.\n\nWhen starting an array we check for an incomplete reshape and restart the\nreshape process if needed.  If the reshape stopped at an awkward time (like\nwhen updating the first stripe) we refuse to assemble the array, and let\nuser-space worry about it.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ccfcc3c10b2a5cb8fd3c918199a4ff904fc6fb3e",
      "tree": "0c86fe6ba0f0bafd76f86f81b7425d6d497664aa",
      "parents": [
        "7ecaa1e6a1ad69862e9980b6c777e11f26c4782d"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 27 01:18:09 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:45:01 2006 -0800"
      },
      "message": "[PATCH] md: Core of raid5 resize process\n\nThis patch provides the core of the resize/expand process.\n\nsync_request notices if a \u0027reshape\u0027 is happening and acts accordingly.\n\nIt allocated new stripe_heads for the next chunk-wide-stripe in the target\ngeometry, marking them STRIPE_EXPANDING.\n\nThen it finds which stripe heads in the old geometry can provide data needed\nby these and marks them STRIPE_EXPAND_SOURCE.  This causes stripe_handle to\nread all blocks on those stripes.\n\nOnce all blocks on a STRIPE_EXPAND_SOURCE stripe_head are read, any that are\nneeded are copied into the corresponding STRIPE_EXPANDING stripe_head.  Once a\nSTRIPE_EXPANDING stripe_head is full, it is marks STRIPE_EXPAND_READY and then\nis written out and released.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7ecaa1e6a1ad69862e9980b6c777e11f26c4782d",
      "tree": "3cbd64ebc2a45f6b5ac45b0305fd3cf2c6916070",
      "parents": [
        "ad01c9e3752f4ba4f3d99c89b7370fa4983a25b5"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 27 01:18:08 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:45:01 2006 -0800"
      },
      "message": "[PATCH] md: Infrastructure to allow normal IO to continue while array is expanding\n\nWe need to allow that different stripes are of different effective sizes, and\nuse the appropriate size.  Also, when a stripe is being expanded, we must\nblock any IO attempts until the stripe is stable again.\n\nKey elements in this change are:\n - each stripe_head gets a \u0027disk\u0027 field which is part of the key,\n   thus there can sometimes be two stripe heads of the same area of\n   the array, but covering different numbers of devices.  One of these\n   will be marked STRIPE_EXPANDING and so won\u0027t accept new requests.\n - conf-\u003eexpand_progress tracks how the expansion is progressing and\n   is used to determine whether the target part of the array has been\n   expanded yet or not.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ad01c9e3752f4ba4f3d99c89b7370fa4983a25b5",
      "tree": "856868aa97332d6d15d4cad412e0ebe3576bb571",
      "parents": [
        "b55e6bfcd23cb2f7249095050c649f7aea813f9f"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 27 01:18:07 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:45:01 2006 -0800"
      },
      "message": "[PATCH] md: Allow stripes to be expanded in preparation for expanding an array\n\nBefore a RAID-5 can be expanded, we need to be able to expand the stripe-cache\ndata structure.\n\nThis requires allocating new stripes in a new kmem_cache.  If this succeeds,\nwe copy cache pages over and release the old stripes and kmem_cache.\n\nWe then allocate new pages.  If that fails, we leave the stripe cache at it\u0027s\nnew size.  It isn\u0027t worth the effort to shrink it back again.\n\nUnfortuanately this means we need two kmem_cache names as we, for a short\nperiod of time, we have two kmem_caches.  So they are raid5/%s and\nraid5/%s-alt\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b55e6bfcd23cb2f7249095050c649f7aea813f9f",
      "tree": "78c854c1eeb85d48bf0956309cc7ccfa14e9805a",
      "parents": [
        "4588b42e9d0d0904a745c96cead66506c75bae21"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Mon Mar 27 01:18:06 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:45:01 2006 -0800"
      },
      "message": "[PATCH] md: Split disks array out of raid5 conf structure so it is easier to grow\n\nThe remainder of this batch implements raid5 reshaping.  Currently the only\nshape change that is supported is added a device, but it is envisioned that\nchanging the chunksize and layout will also be supported, as well as changing\nthe level (e.g.  1-\u003e5, 5-\u003e6).\n\nThe reshape process naturally has to move all of the data in the array, and so\nshould be used with caution.  It is believed to work, and some testing does\nsupport this, but wider testing would be great for increasing my confidence.\n\nYou will need a version of mdadm newer than 2.3.1 to make use of raid5 growth.\n This is because mdadm need to take a copy of a \u0027critical section\u0027 at the\nstart of the array incase there is a crash at an awkward moment.  On restart,\nmdadm will restore the critical section and allow reshape to continue.\n\nI hope to release a 2.4-pre by early next week - it still needs a little more\npolishing.\n\nThis patch:\n\nPreviously the array of disk information was included in the raid5 \u0027conf\u0027\nstructure which was allocated to an appropriate size.  This makes it awkward\nto change the size of that array.  So we split it off into a separate\nkmalloced array which will require a little extra indexing, but is much easier\nto grow.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "fccddba060f2b4916a30aa27acc3d03b01bb981e",
      "tree": "92fbb81ab3b1fdbbe8de9ba2ebb91ac68c57b2a0",
      "parents": [
        "9ffae0cf3ea02f75d163922accfd3e592d87adde"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 06 00:20:33 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:34:06 2006 -0800"
      },
      "message": "[PATCH] md: tidy up raid5/6 hash table code\n\n- replace open-coded hash chain with hlist macros\n\n- Fix hash-table size at one page - it is already quite generous, so there\n  will never be a need to use multiple pages, so no need for __get_free_pages\n\nNo functional change.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9910f16af35419a5382fa7850eecc220103036fa",
      "tree": "3b5145b8a706e03a6f2b4da4bd84fe98c83de31a",
      "parents": [
        "cf30a473a02901fe4db37abc0b0fa26dd5ba3f72"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 06 00:20:24 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:34:04 2006 -0800"
      },
      "message": "[PATCH] md: fix up some rdev rcu locking in raid5/6\n\nThere is this \"FIXME\" comment with a typo in it!!  that been annoying me for\ndays, so I just had to remove it.\n\nconf-\u003edisks[i].rdev should only be accessed if\n  - we know we hold a reference or\n  - the mddev-\u003ereconfig_sem is down or\n  - we have a rcu_readlock\n\nhandle_stripe was referencing rdev in three places without any of these.  For\nthe first two, get an rcu_readlock.  For the last, the same access\n(md_sync_acct call) is made a little later after the rdev has been claimed\nunder and rcu_readlock, if R5_Syncio is set.  So just use that access...\nHowever R5_Syncio isn\u0027t really needed as the \u0027syncing\u0027 variable contains the\nsame information.  So use that instead.\n\nIssues, comment, and fix are identical in raid5 and raid6.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ca65b73bd9c301d243df93780f7b26579e6c9204",
      "tree": "1ca8157e11033989ee94c20b1f2d4c936f9dc09c",
      "parents": [
        "6cce3b23f6f8e974c00af7a9b88f1d413ba368a8"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Fri Jan 06 00:20:17 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:34:03 2006 -0800"
      },
      "message": "[PATCH] md: fix raid6 resync check/repair code\n\nraid6 currently does not check the P/Q syndromes when doing a resync, it just\ncalculates the correct value and writes it.  Doing the check can reduce writes\n(often to 0) for a resync, and it is needed to properly implement the\n\n  echo check \u003e sync_action\n\noperation.\n\nThis patch implements the appropriate checks and tidies up some related code.\n\nIt also allows raid6 user-requested resync to bypass the intent bitmap.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "007583c9253fed363a0bd71b039e9b40a0f6855e",
      "tree": "f47d3fd94830ae2c09d7d821e8a57ba46ecb13bc",
      "parents": [
        "31399d9e56abeec4d819f07eefc97f30b5d5ed75"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 08 21:39:30 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Nov 09 07:56:38 2005 -0800"
      },
      "message": "[PATCH] md: change raid5 sysfs attribute to not create a new directory\n\nThere isn\u0027t really a need for raid5 attributes to be an a subdirectory,\nso this patch moves them from\n  /sys/block/mdX/md/raid5/attribute\nto\n  /sys/block/mdX/md/attribute\n\nThis suggests that all md personalities should co-operate about\nnamespace usage, but that shouldn\u0027t be a problem.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3f294f4fb6f2ba887b717674da26c21f3d57f3fc",
      "tree": "fd73f58a4d5c7261994127b0c46f04e33ee26d66",
      "parents": [
        "86e6ffdd243a06663713e637ee683fb27dce8e0c"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 08 21:39:25 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Nov 09 07:56:37 2005 -0800"
      },
      "message": "[PATCH] md: add kobject/sysfs support to raid5\n\n/sys/block/mdX/md/raid5/\ncontains raid5-related attributes.\nCurrently\n  stripe_cache_size\nis number of entries in stripe cache, and is settable.\n  stripe_cache_active\nis number of active entries, and in only readable.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4e5314b56a7ea11c7a5f2b8418992b2f49648a25",
      "tree": "58b0c604f4f4e55523d2c93971f79d80e406b9ce",
      "parents": [
        "703ebe86a999861e833be4015aaf552837e9613a"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Tue Nov 08 21:39:22 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Nov 09 07:56:36 2005 -0800"
      },
      "message": "[PATCH] md: better handling of readerrors with raid5.\n\nThis patch changes the behaviour of raid5 when it gets a read error.\nInstead of just failing the device, it tried to find out what should have\nbeen there, and writes it over the bad block.  For some media-errors, this\nhas a reasonable chance of fixing the error.  If the write succeeds, and a\nsubsequent read succeeds as well, raid5 decided the address is OK and\nconitnues.\n\nInstead of failing a drive on read-error, we attempt to re-write the block,\nand then re-read.  If that all works, we allow the device to remain in the\narray.\n\nSigned-off-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "72626685dc66d455742a7f215a0535c551628b9e",
      "tree": "91e19a61a5a3b782007132b6b2e353e8936dd656",
      "parents": [
        "0002b2718dd04da67c21f8a7830de8d95a9b0345"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@cse.unsw.edu.au",
        "time": "Fri Sep 09 16:23:54 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 09 16:39:12 2005 -0700"
      },
      "message": "[PATCH] md: add write-intent-bitmap support to raid5\n\nMost awkward part of this is delaying write requests until bitmap updates have\nbeen flushed.\n\nTo achieve this, we have a sequence number (seq_flush) which is incremented\neach time the raid5 is unplugged.\n\nIf the raid thread notices that this has changed, it flushes bitmap changes,\nand assigned the value of seq_flush to seq_write.\n\nWhen a write request arrives, it is given the number from seq_write, and that\nwrite request may not complete until seq_flush is larger than the saved seq\nnumber.\n\nWe have a new queue for storing stripes which are waiting for a bitmap flush\nand an extra flag for stripes to record if the write was \u0027degraded\u0027 and so\nshould not clear the a bit in the bitmap.\n\nSigned-off-by: Neil Brown \u003cneilb@cse.unsw.edu.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
