diff options
author | NeilBrown <neilb@suse.de> | 2011-01-31 13:53:35 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2011-01-31 13:53:35 +1100 |
commit | 562e70e4c4cec0f14125f9864770b6f228921b5c (patch) | |
tree | 59eda8c14839bdb83d9f6aaeb6cf132a0df885da /Manage.c | |
parent | 210597d11f89cafb222435fed30abe977a968e30 (diff) |
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 <neilb@suse.de>
Diffstat (limited to 'Manage.c')
-rw-r--r-- | Manage.c | 14 |
1 files changed, 9 insertions, 5 deletions
@@ -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': |