diff --git a/drivers/md/md.c b/drivers/md/md.c
index 07ab6790e29d86ef330c0e039b59b45969716716..117ea5fde56824f86839339cd968c380509ff6cf 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2633,9 +2633,9 @@ layout_store(mddev_t *mddev, const char *buf, size_t len)
 
 	if (mddev->pers)
 		return -EBUSY;
-	if (mddev->reshape_position != MaxSector)
-		mddev->new_layout = n;
-	else
+
+	mddev->new_layout = n;
+	if (mddev->reshape_position == MaxSector)
 		mddev->layout = n;
 	return len;
 }
@@ -2702,9 +2702,9 @@ chunk_size_store(mddev_t *mddev, const char *buf, size_t len)
 
 	if (mddev->pers)
 		return -EBUSY;
-	else if (mddev->reshape_position != MaxSector)
-		mddev->new_chunk = n;
-	else
+
+	mddev->new_chunk = n;
+	if (mddev->reshape_position == MaxSector)
 		mddev->chunk_size = n;
 	return len;
 }
@@ -3831,7 +3831,10 @@ static int do_md_run(mddev_t * mddev)
 	}
 	mddev->pers = pers;
 	spin_unlock(&pers_lock);
-	mddev->level = pers->level;
+	if (mddev->level != pers->level) {
+		mddev->level = pers->level;
+		mddev->new_level = pers->level;
+	}
 	strlcpy(mddev->clevel, pers->name, sizeof(mddev->clevel));
 
 	if (pers->level >= 4 && pers->level <= 6)