summaryrefslogtreecommitdiff
path: root/Manage.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-01-31 13:53:35 +1100
committerNeilBrown <neilb@suse.de>2011-01-31 13:53:35 +1100
commit562e70e4c4cec0f14125f9864770b6f228921b5c (patch)
tree59eda8c14839bdb83d9f6aaeb6cf132a0df885da /Manage.c
parent210597d11f89cafb222435fed30abe977a968e30 (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.c14
1 files changed, 9 insertions, 5 deletions
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':