]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
FIX: Set proper raid disks during migration
authorAdam Kwolek <adam.kwolek@intel.com>
Mon, 18 Apr 2011 00:31:15 +0000 (10:31 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 18 Apr 2011 00:31:15 +0000 (10:31 +1000)
During migration raid_disks field contains new disks number now.
It should be set old disks number first and then new disks number
to allow md to calculate e.g. delta_disks parameter.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
sysfs.c

diff --git a/sysfs.c b/sysfs.c
index b806e145570dc19d9e5e89aa0ebb13227385cbc5..f1c66692019a9fb970f3d1b49a54a1d9f5e0d2af 100644 (file)
--- a/sysfs.c
+++ b/sysfs.c
@@ -531,6 +531,7 @@ int sysfs_set_array(struct mdinfo *info, int vers)
 {
        int rv = 0;
        char ver[100];
+       int raid_disks = info->array.raid_disks;
 
        ver[0] = 0;
        if (info->array.major_version == -1 &&
@@ -549,7 +550,9 @@ int sysfs_set_array(struct mdinfo *info, int vers)
                return 0; /* FIXME */
        rv |= sysfs_set_str(info, NULL, "level",
                            map_num(pers, info->array.level));
-       rv |= sysfs_set_num(info, NULL, "raid_disks", info->array.raid_disks);
+       if (info->reshape_active && info->delta_disks != UnSet)
+               raid_disks -= info->delta_disks;
+       rv |= sysfs_set_num(info, NULL, "raid_disks", raid_disks);
        rv |= sysfs_set_num(info, NULL, "chunk_size", info->array.chunk_size);
        rv |= sysfs_set_num(info, NULL, "layout", info->array.layout);
        rv |= sysfs_set_num(info, NULL, "component_size", info->component_size/2);
@@ -576,7 +579,7 @@ int sysfs_set_array(struct mdinfo *info, int vers)
                rv |= sysfs_set_num(info, NULL, "chunk_size", info->new_chunk);
                rv |= sysfs_set_num(info, NULL, "layout", info->new_layout);
                rv |= sysfs_set_num(info, NULL, "raid_disks",
-                                   info->array.raid_disks + info->delta_disks);
+                                   info->array.raid_disks);
                /* We don't set 'new_level' here.  That can only happen
                 * once the reshape completes.
                 */