]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/md/raid5.c
md: add support for raid5 to raid4 conversion
[net-next-2.6.git] / drivers / md / raid5.c
index bb28fd6b44feea0ba44405df2970b16cd460b7e2..020143dec180e5b2f0a21ca2c6398aae767c0140 100644 (file)
@@ -5788,6 +5788,18 @@ static void *raid5_takeover(mddev_t *mddev)
        return ERR_PTR(-EINVAL);
 }
 
+static void *raid4_takeover(mddev_t *mddev)
+{
+       /* raid4 can take over raid5 if layout is right.
+        */
+       if (mddev->level == 5 &&
+           mddev->layout == ALGORITHM_PARITY_N) {
+               mddev->new_layout = 0;
+               mddev->new_level = 4;
+               return setup_conf(mddev);
+       }
+       return ERR_PTR(-EINVAL);
+}
 
 static struct mdk_personality raid5_personality;
 
@@ -5903,6 +5915,7 @@ static struct mdk_personality raid4_personality =
        .start_reshape  = raid5_start_reshape,
        .finish_reshape = raid5_finish_reshape,
        .quiesce        = raid5_quiesce,
+       .takeover       = raid4_takeover,
 };
 
 static int __init raid5_init(void)