summaryrefslogtreecommitdiff
path: root/Grow.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2013-06-19 09:58:02 +1000
committerNeilBrown <neilb@suse.de>2013-06-19 09:58:02 +1000
commitc0f0d8128ab2365eae0c8ac7441e3885c5ea3799 (patch)
treee2f451f5a15118bf6979f719ddb2a592eb03d528 /Grow.c
parentf69bb60857aaa0e82806c6b027f57cb4af519a18 (diff)
Grow: fix up recent changes to set_new_data_offset.
The second 'info2' wasn't being initialised. So don't use it. Reported by -O3 Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'Grow.c')
-rw-r--r--Grow.c44
1 files changed, 21 insertions, 23 deletions
diff --git a/Grow.c b/Grow.c
index defcb750..1e75d1af 100644
--- a/Grow.c
+++ b/Grow.c
@@ -2225,21 +2225,21 @@ static int set_new_data_offset(struct mdinfo *sra, struct supertype *st,
for (sd = sra->devs; sd; sd = sd->next) {
char *dn = map_dev(sd->disk.major, sd->disk.minor, 0);
+ unsigned long long new_data_offset;
- struct mdinfo info2;
if (delta_disks < 0) {
/* Don't need any space as array is shrinking
* just move data_offset up by min
*/
if (data_offset == INVALID_SECTORS)
- info2.new_data_offset = info2.data_offset + min;
+ new_data_offset = sd->data_offset + min;
else {
- if (data_offset < info2.data_offset + min) {
+ if (data_offset < sd->data_offset + min) {
pr_err("--data-offset too small for %s\n",
dn);
goto release;
}
- info2.new_data_offset = data_offset;
+ new_data_offset = data_offset;
}
} else if (delta_disks > 0) {
/* need space before */
@@ -2249,14 +2249,14 @@ static int set_new_data_offset(struct mdinfo *sra, struct supertype *st,
goto release;
}
if (data_offset == INVALID_SECTORS)
- info2.new_data_offset = info2.data_offset - min;
+ new_data_offset = sd->data_offset - min;
else {
- if (data_offset > info2.data_offset - min) {
+ if (data_offset > sd->data_offset - min) {
pr_err("--data-offset too large for %s\n",
dn);
goto release;
}
- info2.new_data_offset = data_offset;
+ new_data_offset = data_offset;
}
} else {
if (dir == 0) {
@@ -2264,65 +2264,63 @@ static int set_new_data_offset(struct mdinfo *sra, struct supertype *st,
* was set we would have already decided,
* so just choose direction with most space.
*/
- if (info2.space_before > info2.space_after)
+ if (before > after)
dir = -1;
else
dir = 1;
sysfs_set_str(sra, NULL, "reshape_direction",
dir == 1 ? "backwards" : "forwards");
}
-
- switch (dir) {
- case 1: /* Increase data offset */
+ if (dir > 0) {
+ /* Increase data offset */
if (after < min) {
pr_err("Insufficient tail-space for reshape on %s\n",
dn);
goto release;
}
if (data_offset != INVALID_SECTORS &&
- data_offset < info2.data_offset + min) {
+ data_offset < sd->data_offset + min) {
pr_err("--data-offset too small on %s\n",
dn);
goto release;
}
if (data_offset != INVALID_SECTORS)
- info2.new_data_offset = data_offset;
+ new_data_offset = data_offset;
else {
unsigned long long off = after / 2;
off &= ~7ULL;
if (off < min)
off = min;
- info2.new_data_offset =
- info2.data_offset + off;
+ new_data_offset =
+ sd->data_offset + off;
}
- break;
- case -1: /* Decrease data offset */
+ } else {
+ /* Decrease data offset */
if (before < min) {
pr_err("insufficient head-room on %s\n",
dn);
goto release;
}
if (data_offset != INVALID_SECTORS &&
- data_offset < info2.data_offset - min) {
+ data_offset < sd->data_offset - min) {
pr_err("--data-offset too small on %s\n",
dn);
goto release;
}
if (data_offset != INVALID_SECTORS)
- info2.new_data_offset = data_offset;
+ new_data_offset = data_offset;
else {
unsigned long long off = before / 2;
off &= ~7ULL;
if (off < min)
off = min;
- info2.new_data_offset =
- info2.data_offset - off;
+ new_data_offset =
+ sd->data_offset - off;
}
- break;
}
}
if (sysfs_set_num(sra, sd, "new_offset",
- info2.new_data_offset) < 0) {
+ new_data_offset) < 0) {
err = errno;
err = -1;
if (errno == E2BIG && data_offset != INVALID_SECTORS) {