[PATCH 14/19] Managa_ro(): free() mdi before exiting
From: <hidden>
Date: 2011-11-01 15:09:30
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Jes Sorensen <redacted> Signed-off-by: Jes Sorensen <redacted> --- Manage.c | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/Manage.c b/Manage.c
index 170af57..39a9b20 100644
--- a/Manage.c
+++ b/Manage.c@@ -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
--
1.7.6.4