fprintf(stderr, " (%d new)", working);
fprintf(stderr, "\n");
}
- wait_for(chosen_name);
close(mdfd);
+ wait_for(chosen_name);
+ if (st->ss->match_metadata_desc("imsm"))
+ run_kpartx('a', chosen_name);
return 0;
/* FIXME should have an O_EXCL and wait for read-auto */
} else {
ping_monitor(devnum2devname(st->container_dev));
close(container_fd);
}
+ close(mdfd);
wait_for(chosen_name);
+ if (st->ss->match_metadata_desc("imsm"))
+ run_kpartx('a', chosen_name);
} else {
fprintf(stderr, Name ": not starting array - not enough devices.\n");
}
if (mdi &&
mdi->array.level > 0 &&
is_subarray(mdi->text_version)) {
+ struct map_ent *me = map_by_devnum(&map, devnum);
/* This is mdmon managed. */
close(fd);
+
+ /* Delete any kpartx partitions */
+ run_kpartx('d', me->path);
if (sysfs_set_str(mdi, NULL,
"array_state", "inactive") < 0) {
if (quiet == 0)
extern int devname2devnum(char *name);
extern int stat2devnum(struct stat *st);
extern int fd2devnum(int fd);
+extern void run_kpartx(char mode, char *dev);
static inline int dev2major(int d)
{
getinfo_super_imsm(st, &info);
fname_from_uuid(st, &info, nbuf1,'-');
printf("ARRAY /dev/md/%.16s container=%s\n"
- " member=%d auto=mdp UUID=%s\n",
+ " member=%d auto=md UUID=%s\n",
dev->volume, nbuf + 5, i, nbuf1 + 5);
}
}
}
#endif /* MDASSEMBLE */
+void run_kpartx(char mode, char *dev)
+{
+ char buf[1024];
+ char *cp;
+
+ sprintf(buf, "/sbin/kpartx > /dev/null 2>&1 -%c '", mode);
+
+ cp = buf + strlen(buf);
+ while (cp < buf+sizeof(buf)-10 &&
+ *dev) {
+ if (*dev == '\'') {
+ *cp++ = '\'';
+ *cp++ = '\\';
+ *cp++ = '\'';
+ /* *cp++ = '\''; */
+ }
+ *cp ++ = *dev++;
+ }
+ *cp++ = '\'';
+ *cp++ = 0;
+ system(buf);
+}
+
+
+
#ifdef __TINYC__
/* tinyc doesn't optimize this check in ioctl.h out ... */
unsigned int __invalid_size_argument_for_IOC = 0;