Honor safemode_delay at Create() and Incremental() time
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
301406c9fd
commit
8ed3e5e1bf
3
Create.c
3
Create.c
|
@ -78,6 +78,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
|
||||||
struct mdinfo *sra;
|
struct mdinfo *sra;
|
||||||
struct mdinfo info, *infos;
|
struct mdinfo info, *infos;
|
||||||
int did_default = 0;
|
int did_default = 0;
|
||||||
|
unsigned long safe_mode_delay = 0;
|
||||||
|
|
||||||
int major_num = BITMAP_MAJOR_HI;
|
int major_num = BITMAP_MAJOR_HI;
|
||||||
|
|
||||||
|
@ -703,6 +704,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
|
||||||
st->ss->add_to_super(st, &inf->disk,
|
st->ss->add_to_super(st, &inf->disk,
|
||||||
fd, dv->devname);
|
fd, dv->devname);
|
||||||
st->ss->getinfo_super(st, inf);
|
st->ss->getinfo_super(st, inf);
|
||||||
|
safe_mode_delay = inf->safe_mode_delay;
|
||||||
|
|
||||||
/* getinfo_super might have lost these ... */
|
/* getinfo_super might have lost these ... */
|
||||||
inf->disk.major = major(stb.st_rdev);
|
inf->disk.major = major(stb.st_rdev);
|
||||||
|
@ -757,6 +759,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
|
||||||
"readonly");
|
"readonly");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
sysfs_set_safemode(sra, safe_mode_delay);
|
||||||
} else {
|
} else {
|
||||||
mdu_param_t param;
|
mdu_param_t param;
|
||||||
if (ioctl(mdfd, RUN_ARRAY, ¶m)) {
|
if (ioctl(mdfd, RUN_ARRAY, ¶m)) {
|
||||||
|
|
|
@ -841,6 +841,7 @@ int Incremental_container(struct supertype *st, char *devname, int verbose,
|
||||||
ping_monitor(devnum2devname(st->container_dev));
|
ping_monitor(devnum2devname(st->container_dev));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
sysfs_set_safemode(sra, ra->safe_mode_delay);
|
||||||
if (verbose >= 0)
|
if (verbose >= 0)
|
||||||
printf("Started %s with %d devices\n",
|
printf("Started %s with %d devices\n",
|
||||||
chosen_name, working);
|
chosen_name, working);
|
||||||
|
|
1
mdadm.h
1
mdadm.h
|
@ -346,6 +346,7 @@ extern int sysfs_set_num(struct mdinfo *sra, struct mdinfo *dev,
|
||||||
char *name, unsigned long long val);
|
char *name, unsigned long long val);
|
||||||
extern int sysfs_get_ll(struct mdinfo *sra, struct mdinfo *dev,
|
extern int sysfs_get_ll(struct mdinfo *sra, struct mdinfo *dev,
|
||||||
char *name, unsigned long long *val);
|
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,
|
extern int sysfs_set_array(struct mdinfo *sra,
|
||||||
struct mdinfo *info);
|
struct mdinfo *info);
|
||||||
extern int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd);
|
extern int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd);
|
||||||
|
|
13
sysfs.c
13
sysfs.c
|
@ -346,6 +346,19 @@ int sysfs_get_ll(struct mdinfo *sra, struct mdinfo *dev,
|
||||||
return 0;
|
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,
|
int sysfs_set_array(struct mdinfo *sra,
|
||||||
struct mdinfo *info)
|
struct mdinfo *info)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue