diff options
author | NeilBrown <neilb@suse.de> | 2013-02-21 17:02:21 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-02-21 17:02:21 +1100 |
commit | fdcad551e9a54c4aa8c4b63160b76e2c539a0441 (patch) | |
tree | 1f0f1f0119d906c75128bc271e4d5f34aab2965e | |
parent | 3920235ea20bf32be8fc3c830ebca3f83eea671a (diff) |
Grow: fix problem with reshaping RAID4 to RAID0.
As 'layout' doesn't map neatly from RAID4 to RAID5, we need to
set it correctly for RAID4.
Also, when no reshape is needed we should set re->level to the final
desired level.
Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r-- | Grow.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -1321,6 +1321,7 @@ char *analyse_change(struct mdinfo *info, struct reshape *re) switch (re->level) { case 4: + re->before.layout = 0; re->after.layout = 0; break; case 5: @@ -1336,6 +1337,7 @@ char *analyse_change(struct mdinfo *info, struct reshape *re) switch (re->level) { case 4: + re->before.layout = 0; re->after.layout = 0; break; case 5: @@ -1428,12 +1430,14 @@ char *analyse_change(struct mdinfo *info, struct reshape *re) if (re->after.data_disks == re->before.data_disks && re->after.layout == re->before.layout && info->new_chunk == info->array.chunk_size) { - /* Nothing to change */ + /* Nothing to change, can change level immediately. */ + re->level = info->new_level; re->backup_blocks = 0; return NULL; } if (re->after.data_disks == 1 && re->before.data_disks == 1) { /* chunk and layout changes make no difference */ + re->level = info->new_level; re->backup_blocks = 0; return NULL; } |