md: enable raid4->raid0 takeover
authorMaciej Trela <maciej.trela@intel.com>
Wed, 16 Jun 2010 10:56:12 +0000 (11:56 +0100)
committerNeilBrown <neilb@suse.de>
Thu, 24 Jun 2010 03:34:57 +0000 (13:34 +1000)
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>
drivers/md/raid0.c

index ac09b7d385537717493a7f9711ab2e4eb382292f..563abed5a2cb73b68cc86d4230b8e1ab0a510b61 100644 (file)
@@ -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);