summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Trela <maciej.trela@intel.com>2010-06-16 11:56:12 +0100
committerNeilBrown <neilb@suse.de>2010-06-24 13:34:57 +1000
commit049d6c1ef983c9ac43aa423dfd752071a5b0002d (patch)
tree909db6119d7b96991fa724b633c2ee185474836d
parent001048a318d48e93cb6a1246f3b20335b2a7c855 (diff)
downloadlinux-3.10-049d6c1ef983c9ac43aa423dfd752071a5b0002d.tar.gz
linux-3.10-049d6c1ef983c9ac43aa423dfd752071a5b0002d.tar.bz2
linux-3.10-049d6c1ef983c9ac43aa423dfd752071a5b0002d.zip
md: enable raid4->raid0 takeover
Only level 5 with layout=PARITY_N can be taken over to raid0 now. Lets allow level 4 either. Signed-off-by: Maciej Trela <maciej.trela@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r--drivers/md/raid0.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index ac09b7d3855..563abed5a2c 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -569,7 +569,7 @@ static void raid0_status(struct seq_file *seq, mddev_t *mddev)
return;
}
-static void *raid0_takeover_raid5(mddev_t *mddev)
+static void *raid0_takeover_raid45(mddev_t *mddev)
{
mdk_rdev_t *rdev;
raid0_conf_t *priv_conf;
@@ -647,12 +647,16 @@ static void *raid0_takeover_raid10(mddev_t *mddev)
static void *raid0_takeover(mddev_t *mddev)
{
/* raid0 can take over:
+ * raid4 - if all data disks are active.
* raid5 - providing it is Raid4 layout and one disk is faulty
* raid10 - assuming we have all necessary active disks
*/
+ if (mddev->level == 4)
+ return raid0_takeover_raid45(mddev);
+
if (mddev->level == 5) {
if (mddev->layout == ALGORITHM_PARITY_N)
- return raid0_takeover_raid5(mddev);
+ return raid0_takeover_raid45(mddev);
printk(KERN_ERR "md/raid0:%s: Raid can only takeover Raid5 with layout: %d\n",
mdname(mddev), ALGORITHM_PARITY_N);