summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2008-08-05 15:54:13 +1000
committerNeilBrown <neilb@suse.de>2008-08-05 15:56:31 +1000
commit19052c0e85a3e9d3b7d190b29fcdbf0e6c105381 (patch)
tree6f61eacfe7ade13f0bf06adba5efac052e1038c0
parent2b12a4c524812fb3f6ee590a02e65b95c8c32229 (diff)
downloadlinux-19052c0e85a3e9d3b7d190b29fcdbf0e6c105381.tar.gz
linux-19052c0e85a3e9d3b7d190b29fcdbf0e6c105381.tar.bz2
linux-19052c0e85a3e9d3b7d190b29fcdbf0e6c105381.zip
Make writes to md/safe_mode_delay immediately effective.
If we reduce the 'safe_mode_delay', it could still wait for the old delay to completely expire before doing anything about safe_mode. Thus the effect if the change is delayed. To make the effect more immediate, run the timeout function immediately if the delay was reduced. This may cause it to run slightly earlier that required, but that is the safer option. Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r--drivers/md/md.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index c7aae66c6f9b..48afe4f7ad4c 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2393,6 +2393,8 @@ static void analyze_sbs(mddev_t * mddev)
}
+static void md_safemode_timeout(unsigned long data);
+
static ssize_t
safe_delay_show(mddev_t *mddev, char *page)
{
@@ -2432,9 +2434,12 @@ safe_delay_store(mddev_t *mddev, const char *cbuf, size_t len)
if (msec == 0)
mddev->safemode_delay = 0;
else {
+ unsigned long old_delay = mddev->safemode_delay;
mddev->safemode_delay = (msec*HZ)/1000;
if (mddev->safemode_delay == 0)
mddev->safemode_delay = 1;
+ if (mddev->safemode_delay < old_delay)
+ md_safemode_timeout((unsigned long)mddev);
}
return len;
}