From 562e70e4c4cec0f14125f9864770b6f228921b5c Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Mon, 31 Jan 2011 13:53:35 +1100 Subject: Call free_super before attempting to add a new device Now that write_init_super doesn't close fds any more, we need to call free_super before the ADD_NEW_DISK ioctl. Also call free_super before some error returns, for cleanliness. Signed-off-by: NeilBrown --- Manage.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'Manage.c') diff --git a/Manage.c b/Manage.c index 824caa98..481c1654 100644 --- a/Manage.c +++ b/Manage.c @@ -858,6 +858,7 @@ int Manage_subdevs(char *devname, int fd, fprintf(stderr, Name ": add failed for %s:" " could not get exclusive access to container\n", dv->devname); + tst->ss->free_super(tst); return 1; } @@ -866,6 +867,7 @@ int Manage_subdevs(char *devname, int fd, fprintf(stderr, Name ": add failed for %s: sysfs_read failed\n", dv->devname); close(container_fd); + tst->ss->free_super(tst); return 1; } sra->array.level = LEVEL_CONTAINER; @@ -887,14 +889,16 @@ int Manage_subdevs(char *devname, int fd, ping_monitor(devnum2devname(devnum)); sysfs_free(sra); close(container_fd); - } else if (ioctl(fd, ADD_NEW_DISK, &disc)) { - fprintf(stderr, Name ": add new device failed for %s as %d: %s\n", - dv->devname, j, strerror(errno)); - return 1; + } else { + tst->ss->free_super(tst); + if (ioctl(fd, ADD_NEW_DISK, &disc)) { + fprintf(stderr, Name ": add new device failed for %s as %d: %s\n", + dv->devname, j, strerror(errno)); + return 1; + } } if (verbose >= 0) fprintf(stderr, Name ": added %s\n", dv->devname); - tst->ss->free_super(tst); break; case 'r': -- cgit v1.2.3