struct mdinfo *sra;
struct mdinfo info, *infos;
int did_default = 0;
+ unsigned long safe_mode_delay = 0;
int major_num = BITMAP_MAJOR_HI;
st->ss->add_to_super(st, &inf->disk,
fd, dv->devname);
st->ss->getinfo_super(st, inf);
+ safe_mode_delay = inf->safe_mode_delay;
/* getinfo_super might have lost these ... */
inf->disk.major = major(stb.st_rdev);
"readonly");
break;
}
+ sysfs_set_safemode(sra, safe_mode_delay);
} else {
mdu_param_t param;
if (ioctl(mdfd, RUN_ARRAY, ¶m)) {
ping_monitor(devnum2devname(st->container_dev));
break;
}
+ sysfs_set_safemode(sra, ra->safe_mode_delay);
if (verbose >= 0)
printf("Started %s with %d devices\n",
chosen_name, working);
char *name, unsigned long long val);
extern int sysfs_get_ll(struct mdinfo *sra, struct mdinfo *dev,
char *name, unsigned long long *val);
+extern int sysfs_set_safemode(struct mdinfo *sra, unsigned long ms);
extern int sysfs_set_array(struct mdinfo *sra,
struct mdinfo *info);
extern int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd);
return 0;
}
+int sysfs_set_safemode(struct mdinfo *sra, unsigned long ms)
+{
+ unsigned long sec;
+ unsigned long msec;
+ char delay[30];
+
+ sec = ms / 1000;
+ msec = ms - (sec * 1000);
+
+ sprintf(delay, "%ld.%ld", sec, msec);
+ return sysfs_set_str(sra, NULL, "safe_mode_delay", delay);
+}
+
int sysfs_set_array(struct mdinfo *sra,
struct mdinfo *info)
{