/* 4/ Check if array exists.
*/
- map_lock(&map);
+ if (map_lock(&map))
+ fprintf(stderr, Name ": failed to get exclusive lock on "
+ "mapfile\n");
mp = map_by_uuid(&map, info.uuid);
if (mp)
mdfd = open_dev(mp->devnum);
* statement about this.
*/
if (runstop < 1) {
- if (ioctl(mdfd, GET_ARRAY_INFO, &ainf) == 0) {
+ int active = 0;
+
+ if (st->ss->external) {
+ char *devname = devnum2devname(fd2devnum(mdfd));
+
+ active = devname && is_container_active(devname);
+ free(devname);
+ } else if (ioctl(mdfd, GET_ARRAY_INFO, &ainf) == 0)
+ active = 1;
+ if (active) {
fprintf(stderr, Name
": not adding %s to active array (without --run) %s\n",
devname, chosen_name);
}
}
sra = sysfs_read(mdfd, fd2devnum(mdfd), (GET_DEVS | GET_STATE));
+ if (!sra)
+ return 2;
if (sra->devs) {
sprintf(dn, "%d:%d", sra->devs->disk.major,
struct mdinfo *sra = sysfs_read(mdfd, -1, GET_DEVS | GET_STATE);
char *avail = NULL;
+ if (!sra)
+ return 0;
+
for (d = sra->devs ; d ; d = d->next) {
char dn[30];
int dfd;
struct mdinfo *ra;
struct map_ent *map = NULL;
- map_lock(&map);
+ if (map_lock(&map))
+ fprintf(stderr, Name ": failed to get exclusive lock on "
+ "mapfile\n");
for (ra = list ; ra ; ra = ra->next) {
int mdfd;
int IncrementalRemove(char *devname, int verbose)
{
int mdfd;
+ int rv;
struct mdstat_ent *ent;
struct mddev_dev_s devlist;
memset(&devlist, 0, sizeof(devlist));
devlist.devname = devname;
devlist.disposition = 'f';
- Manage_subdevs(ent->dev, mdfd, &devlist, verbose);
+ Manage_subdevs(ent->dev, mdfd, &devlist, verbose, 0);
devlist.disposition = 'r';
- return Manage_subdevs(ent->dev, mdfd, &devlist, verbose);
+ rv = Manage_subdevs(ent->dev, mdfd, &devlist, verbose, 0);
+ close(mdfd);
+ return rv;
}