int fd = open(devname, O_RDONLY);
char *mdname = NULL;
- if (fd > 0) {
+ if (fd >= 0) {
mdname = devnum2devname(fd2devnum(fd));
close(fd);
}
sysfs_set_str(sra, NULL, "array_state",
"readonly");
/* start mdmon if needed. */
- if (mdmon_running(st->container_dev))
- signal_mdmon(st->container_dev);
- else {
- int dn = st->container_dev;
- int i;
- switch(fork()) {
- case 0:
- /* FIXME yuk. CLOSE_EXEC?? */
- for (i=3; i < 100; i++)
- close(i);
- execl("./mdmon", "mdmon",
- map_dev(dev2major(dn),
- dev2minor(dn),
- 1), NULL);
- exit(1);
- case -1: fprintf(stderr, Name
- ": cannot fork. "
- "Array remains readonly\n");
- return 1;
- default: ; /* parent - good */
- }
- }
+ if (!mdmon_running(st->container_dev))
+ start_mdmon(st->container_dev);
+ ping_monitor(devnum2devname(st->container_dev));
break;
}
if (verbose >= 0)