} else
#endif
{
- struct supertype *tst = dup_super(st);;
+ struct supertype *tst = dup_super(st);
int dfd;
dfd = dev_open(devname, O_RDWR|O_EXCL);
if (j >= 0 /* && devices[j].uptodate */) {
#ifndef MDASSEMBLE
if (st->ss->external) {
- int fd = dev_open(devices[j].devname,
- O_RDONLY);
- if (fd < 0)
- rv = 1;
- else {
- rv = sysfs_add_disk(sra, fd,
- &devices[j].i);
- close(fd);
- }
+ devices[j].i.disk.number =
+ devices[j].i.disk.raid_disk;
+ st->ss->getinfo_super_n(st,
+ &devices[j].i);
+ rv = sysfs_add_disk(sra,
+ &devices[j].i);
} else
#endif
rv = ioctl(mdfd, ADD_NEW_DISK,
i, mddev);
}
+ if (info.array.level == LEVEL_CONTAINER) {
+ if (verbose >= 0) {
+ fprintf(stderr, Name ": Container %s has been "
+ "assembled with %d drive%s",
+ mddev, okcnt, okcnt==1?"":"s");
+ if (okcnt < info.array.raid_disks)
+ fprintf(stderr, " (out of %d)",
+ info.array.raid_disks);
+ fprintf(stderr, "\n");
+ }
+ if (must_close)
+ close(mdfd);
+ return 0;
+ }
+
if (runstop == 1 ||
(runstop <= 0 &&
( enough(info.array.level, info.array.raid_disks,
/* There is a nasty race with 'mdadm --monitor'.
* If it opens this device before we close it,
* it gets an incomplete open on which IO
- * doesn't work and the capacity if wrong.
+ * doesn't work and the capacity is
+ * wrong.
* If we reopen (to check for layered devices)
* before --monitor closes, we loose.
*