From: Jes Sorensen <Jes.Sorensen@xxxxxxxxxx> In addition remove attempt to print an error message if write_init_super() fails, as this is handled in the various write_init_super() functions. This avoids a segfault on error. Reported by Jim Meyering in https://bugzilla.redhat.com/show_bug.cgi?id=795461 Signed-off-by: Jes Sorensen <Jes.Sorensen@xxxxxxxxxx> --- Create.c | 3 --- super1.c | 20 ++++++++++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Create.c b/Create.c index 90ff3ed..e5c6b05 100644 --- a/Create.c +++ b/Create.c @@ -924,9 +924,6 @@ int Create(struct supertype *st, char *mddev, } if (st->ss->write_init_super(st)) { - fprintf(stderr, - Name ": Failed to write metadata to %s\n", - dv->devname); st->ss->free_super(st); goto abort_locked; } diff --git a/super1.c b/super1.c index a18952a..1db4de6 100644 --- a/super1.c +++ b/super1.c @@ -1106,13 +1106,16 @@ static int write_init_super1(struct supertype *st) } free(refst); - if (!get_dev_size(di->fd, NULL, &dsize)) - return 1; + if (!get_dev_size(di->fd, NULL, &dsize)) { + rv = 1; + goto error_out; + } dsize >>= 9; if (dsize < 24) { close(di->fd); - return 2; + rv = 2; + goto error_out; } @@ -1176,7 +1179,11 @@ static int write_init_super1(struct supertype *st) sb->data_size = __cpu_to_le64(dsize - reserved); break; default: - return -EINVAL; + fprintf(stderr, Name ": Failed to write invalid " + "metadata format 1.%i to %s\n", + st->minor_version, di->devname); + rv = -EINVAL; + goto out; } @@ -1192,6 +1199,11 @@ static int write_init_super1(struct supertype *st) close(di->fd); di->fd = -1; } +error_out: + if (rv) + fprintf(stderr, Name ": Failed to write metadata to %s\n", + di->devname); +out: return rv; } #endif -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html