examine: tidy up some code.
Michael Shigorin reports that the 'lcc' compiler isn't able to deduce that 'st' must be initialized in if (c->SparcAdjust) st->ss->update_super(st, NULL, "sparc2.2", just because the only times it isn't initialised, 'err' is set non-zero. This results in a 'possibly uninitialised' warning. While there is no bug in the code, this does suggest that maybe the code could be made more obviously correct. So this patch: 1/ moves the "err" variable inside the for loop, so an error in one device doesn't stop the other devices from being processed 2/ calls 'continue' early if the device cannot be opened, so that a level of indent can be removed, and so that it is clear that 'st' is always initialised before being used 3/ frees 'st' if an error occured in load_super or load_container. Reported-by: Michael Shigorin <mike@altlinux.org> Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <Jes.Sorensen@gmail.com>
This commit is contained in:
parent
9d67f6496c
commit
36352fc957
15
Examine.c
15
Examine.c
|
@ -53,7 +53,6 @@ int Examine(struct mddev_dev *devlist,
|
||||||
*/
|
*/
|
||||||
int fd;
|
int fd;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
int err = 0;
|
|
||||||
|
|
||||||
struct array {
|
struct array {
|
||||||
struct supertype *st;
|
struct supertype *st;
|
||||||
|
@ -66,6 +65,8 @@ int Examine(struct mddev_dev *devlist,
|
||||||
for (; devlist ; devlist = devlist->next) {
|
for (; devlist ; devlist = devlist->next) {
|
||||||
struct supertype *st;
|
struct supertype *st;
|
||||||
int have_container = 0;
|
int have_container = 0;
|
||||||
|
int err = 0;
|
||||||
|
int container = 0;
|
||||||
|
|
||||||
fd = dev_open(devlist->devname, O_RDONLY);
|
fd = dev_open(devlist->devname, O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
|
@ -74,10 +75,9 @@ int Examine(struct mddev_dev *devlist,
|
||||||
devlist->devname, strerror(errno));
|
devlist->devname, strerror(errno));
|
||||||
rv = 1;
|
rv = 1;
|
||||||
}
|
}
|
||||||
err = 1;
|
continue;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
int container = 0;
|
|
||||||
if (forcest)
|
if (forcest)
|
||||||
st = dup_super(forcest);
|
st = dup_super(forcest);
|
||||||
else if (must_be_container(fd)) {
|
else if (must_be_container(fd)) {
|
||||||
|
@ -109,9 +109,12 @@ int Examine(struct mddev_dev *devlist,
|
||||||
err = 1;
|
err = 1;
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
|
||||||
if (err)
|
if (err) {
|
||||||
|
if (st)
|
||||||
|
st->ss->free_super(st);
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (c->SparcAdjust)
|
if (c->SparcAdjust)
|
||||||
st->ss->update_super(st, NULL, "sparc2.2",
|
st->ss->update_super(st, NULL, "sparc2.2",
|
||||||
|
|
Loading…
Reference in New Issue