Manage_runstop(): Avoid memory leak

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Jes Sorensen 2011-11-01 16:09:31 +01:00 committed by NeilBrown
parent b73e45ae6a
commit bccd8153fa
1 changed files with 13 additions and 9 deletions

View File

@ -183,6 +183,7 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet)
* quiet < 0 means we will try again if it fails.
*/
mdu_param_t param; /* unused */
int rv = 0;
if (runstop == -1 && md_get_version(fd) < 9000) {
if (ioctl(fd, STOP_MD, 0)) {
@ -261,7 +262,8 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet)
fprintf(stderr, Name
": failed to stop array %s: %s\n",
devname, strerror(errno));
return 1;
rv = 1;
goto out;
}
/* Give monitor a chance to act */
@ -273,7 +275,8 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet)
": failed to completely stop %s"
": Device is busy\n",
devname);
return 1;
rv = 1;
goto out;
}
} else if (mdi &&
mdi->array.major_version == -1 &&
@ -301,9 +304,8 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet)
"member %s still active\n",
devname, m->dev);
free_mdstat(mds);
if (mdi)
sysfs_free(mdi);
return 1;
rv = 1;
goto out;
}
}
@ -328,9 +330,8 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet)
"process, mounted filesystem "
"or active volume group?\n");
}
if (mdi)
sysfs_free(mdi);
return 1;
rv = 1;
goto out;
}
/* prior to 2.6.28, KOBJ_CHANGE was not sent when an md array
* was stopped, so We'll do it here just to be sure. Drop any
@ -355,8 +356,11 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet)
map_lock(&map);
map_remove(&map, devnum);
map_unlock(&map);
out:
if (mdi)
sysfs_free(mdi);
}
return 0;
return rv;
}
int Manage_resize(char *devname, int fd, long long size, int raid_disks)