summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2008-09-15 20:58:42 -0700
committerDan Williams <dan.j.williams@intel.com>2008-09-15 20:58:42 -0700
commit8ed3e5e1bf5b08884b68c3ef5c3e393adaa3c9ba (patch)
tree8ec55bc8276d23d412b4f7ff4925f55f2d9ddda2
parent301406c9fdb98bbdc0d04ab4e4dec0692977e777 (diff)
downloadmdadm-8ed3e5e1bf5b08884b68c3ef5c3e393adaa3c9ba.tar.gz
mdadm-8ed3e5e1bf5b08884b68c3ef5c3e393adaa3c9ba.tar.xz
mdadm-8ed3e5e1bf5b08884b68c3ef5c3e393adaa3c9ba.zip
Honor safemode_delay at Create() and Incremental() time
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--Create.c3
-rw-r--r--Incremental.c1
-rw-r--r--mdadm.h1
-rw-r--r--sysfs.c13
4 files changed, 18 insertions, 0 deletions
diff --git a/Create.c b/Create.c
index 9058af1..c9c64b8 100644
--- a/Create.c
+++ b/Create.c
@@ -78,6 +78,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
struct mdinfo *sra;
struct mdinfo info, *infos;
int did_default = 0;
+ unsigned long safe_mode_delay = 0;
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,
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);
@@ -757,6 +759,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
"readonly");
break;
}
+ sysfs_set_safemode(sra, safe_mode_delay);
} else {
mdu_param_t param;
if (ioctl(mdfd, RUN_ARRAY, &param)) {
diff --git a/Incremental.c b/Incremental.c
index 9b22220..6f21a63 100644
--- a/Incremental.c
+++ b/Incremental.c
@@ -841,6 +841,7 @@ int Incremental_container(struct supertype *st, char *devname, int verbose,
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);
diff --git a/mdadm.h b/mdadm.h
index 3d31576..3eee61a 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -346,6 +346,7 @@ extern int sysfs_set_num(struct mdinfo *sra, struct mdinfo *dev,
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);
diff --git a/sysfs.c b/sysfs.c
index 7ca40c3..dced322 100644
--- a/sysfs.c
+++ b/sysfs.c
@@ -346,6 +346,19 @@ int sysfs_get_ll(struct mdinfo *sra, struct mdinfo *dev,
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)
{