mddev->delta_disks = -1;
        /* make sure it will be not marked as dirty */
        mddev->recovery_cp = MaxSector;
+       clear_bit(MD_HAS_JOURNAL, &mddev->flags);
+       clear_bit(MD_JOURNAL_CLEAN, &mddev->flags);
 
        create_strip_zones(mddev, &priv_conf);
+
        return priv_conf;
 }
 
        mddev->degraded = 0;
        /* make sure it will be not marked as dirty */
        mddev->recovery_cp = MaxSector;
+       clear_bit(MD_FAILFAST_SUPPORTED, &mddev->flags);
 
        create_strip_zones(mddev, &priv_conf);
        return priv_conf;
        mddev->raid_disks = 1;
        /* make sure it will be not marked as dirty */
        mddev->recovery_cp = MaxSector;
+       clear_bit(MD_FAILFAST_SUPPORTED, &mddev->flags);
 
        create_strip_zones(mddev, &priv_conf);
        return priv_conf;
 
                mddev->new_layout = 0;
                mddev->new_chunk_sectors = 0;
                conf = setup_conf(mddev);
-               if (!IS_ERR(conf))
+               if (!IS_ERR(conf)) {
                        /* Array must appear to be quiesced */
                        conf->array_frozen = 1;
+                       clear_bit(MD_HAS_JOURNAL, &mddev->flags);
+                       clear_bit(MD_JOURNAL_CLEAN, &mddev->flags);
+               }
                return conf;
        }
        return ERR_PTR(-EINVAL);
 
 static void *raid5_takeover_raid1(struct mddev *mddev)
 {
        int chunksect;
+       void *ret;
 
        if (mddev->raid_disks != 2 ||
            mddev->degraded > 1)
        mddev->new_layout = ALGORITHM_LEFT_SYMMETRIC;
        mddev->new_chunk_sectors = chunksect;
 
-       return setup_conf(mddev);
+       ret = setup_conf(mddev);
+       if (!IS_ERR_VALUE(ret))
+               clear_bit(MD_FAILFAST_SUPPORTED, &mddev->flags);
+       return ret;
 }
 
 static void *raid5_takeover_raid6(struct mddev *mddev)