Managa_ro(): free() mdi before exiting

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:30 +01:00 committed by NeilBrown
parent b1efa6c25c
commit b73e45ae6a
1 changed files with 16 additions and 6 deletions

View File

@ -44,6 +44,7 @@ int Manage_ro(char *devname, int fd, int readonly)
#ifndef MDASSEMBLE
struct mdinfo *mdi;
#endif
int rv = 0;
if (md_get_version(fd) < 9000) {
fprintf(stderr, Name ": need md driver version 0.90.0 or later\n");
@ -75,7 +76,8 @@ int Manage_ro(char *devname, int fd, int readonly)
vers[9] = mdi->text_version[0];
sysfs_set_str(mdi, NULL, "metadata_version", vers);
return 1;
rv = 1;
goto out;
}
} else {
char *cp;
@ -90,29 +92,37 @@ int Manage_ro(char *devname, int fd, int readonly)
if (mdi->array.level <= 0)
sysfs_set_str(mdi, NULL, "array_state", "active");
}
return 0;
goto out;
}
#endif
if (ioctl(fd, GET_ARRAY_INFO, &array)) {
fprintf(stderr, Name ": %s does not appear to be active.\n",
devname);
return 1;
rv = 1;
goto out;
}
if (readonly>0) {
if (ioctl(fd, STOP_ARRAY_RO, NULL)) {
fprintf(stderr, Name ": failed to set readonly for %s: %s\n",
devname, strerror(errno));
return 1;
rv = 1;
goto out;
}
} else if (readonly < 0) {
if (ioctl(fd, RESTART_ARRAY_RW, NULL)) {
fprintf(stderr, Name ": failed to set writable for %s: %s\n",
devname, strerror(errno));
return 1;
rv = 1;
goto out;
}
}
return 0;
out:
#ifndef MDASSEMBLE
if (mdi)
sysfs_free(mdi);
#endif
return rv;
}
#ifndef MDASSEMBLE