static int reshape_super(struct supertype *st, long long size, int level,
int layout, int chunksize, int raid_disks,
- char *backup_file, char *dev, int verbose)
+ int delta_disks, char *backup_file, char *dev,
+ int verbose)
{
/* nothing extra to check in the native case */
if (!st->ss->external)
}
return st->ss->reshape_super(st, size, level, layout, chunksize,
- raid_disks, backup_file, dev, verbose);
+ raid_disks, delta_disks, backup_file, dev,
+ verbose);
}
static void sync_metadata(struct supertype *st)
if (size >= 0 && (size == 0 || size != array.size)) {
long long orig_size = array.size;
- if (reshape_super(st, size, UnSet, UnSet, 0, 0, NULL, devname, !quiet)) {
+ if (reshape_super(st, size, UnSet, UnSet, 0, 0, UnSet, NULL,
+ devname, !quiet)) {
rv = 1;
goto release;
}
/* restore metadata */
if (reshape_super(st, orig_size, UnSet, UnSet, 0, 0,
- NULL, devname, !quiet) == 0)
+ UnSet, NULL, devname, !quiet) == 0)
sync_metadata(st);
fprintf(stderr, Name ": Cannot set device size for %s: %s\n",
devname, strerror(err));
if (reshape_super(st, info.component_size, info.new_level,
info.new_layout, info.new_chunk,
- info.array.raid_disks + info.delta_disks,
+ info.array.raid_disks, info.delta_disks,
backup_file, devname, quiet)) {
rv = 1;
goto release;
*/
if (reshape_super(st, -1, info->new_level,
info->new_layout, info->new_chunk,
- info->array.raid_disks + info->delta_disks,
+ info->array.raid_disks, info->delta_disks,
backup_file, devname, quiet)) {
unfreeze(st);
return 1;
*/
int (*reshape_super)(struct supertype *st, long long size, int level,
int layout, int chunksize, int raid_disks,
- char *backup, char *dev, int verbose); /* optional */
+ int delta_disks, char *backup, char *dev,
+ int verbose); /* optional */
int (*manage_reshape)( /* optional */
int afd, struct mdinfo *sra, struct reshape *reshape,
struct supertype *st, unsigned long blocks,
static int imsm_reshape_super(struct supertype *st, long long size, int level,
int layout, int chunksize, int raid_disks,
- char *backup, char *dev, int verbose)
+ int delta_disks, char *backup, char *dev,
+ int verbose)
{
int ret_val = 1;
struct geo_params geo;
geo.layout = layout;
geo.chunksize = chunksize;
geo.raid_disks = raid_disks;
+ if (delta_disks != UnSet)
+ geo.raid_disks += delta_disks;
dprintf("\tfor level : %i\n", geo.level);
dprintf("\tfor raid_disks : %i\n", geo.raid_disks);