diff options
author | NeilBrown <neilb@suse.de> | 2013-08-01 07:45:17 +0200 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-08-01 07:54:24 +0200 |
commit | 2ef219630b7e1baa72fce420b6bc41cf8071c5e8 (patch) | |
tree | b8ba4082b1997dd505b0dc01b44fed3b65995b74 /managemon.c | |
parent | DDF: differentiate between new metadata and metadata updates. (diff) | |
download | mdadm-2ef219630b7e1baa72fce420b6bc41cf8071c5e8.tar.xz mdadm-2ef219630b7e1baa72fce420b6bc41cf8071c5e8.zip |
mdmon: clear safe_mode_delay on shutdown
When we receive a signal, set the safemode delay to v.small
so that we can ge clean arrays and exit quickly
Signed-off-by: NeilBrown <neilb@suse.de>o
Diffstat (limited to 'managemon.c')
-rw-r--r-- | managemon.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/managemon.c b/managemon.c index 40c863f1..6cd93e51 100644 --- a/managemon.c +++ b/managemon.c @@ -492,6 +492,11 @@ static void manage_member(struct mdstat_ent *mdstat, if (a->container == NULL) return; + if (sigterm && a->info.safe_mode_delay > 1) { + sysfs_set_safemode(&a->info, 1); + a->info.safe_mode_delay = 1; + } + /* We don't check the array while any update is pending, as it * might container a change (such as a spare assignment) which * could affect our decisions. @@ -646,7 +651,8 @@ static void manage_new(struct mdstat_ent *mdstat, mdi = sysfs_read(-1, mdstat->devnm, GET_LEVEL|GET_CHUNK|GET_DISKS|GET_COMPONENT| - GET_DEGRADED|GET_DEVS|GET_OFFSET|GET_SIZE|GET_STATE); + GET_DEGRADED|GET_SAFEMODE| + GET_DEVS|GET_OFFSET|GET_SIZE|GET_STATE); if (!mdi) return; @@ -692,6 +698,16 @@ static void manage_new(struct mdstat_ent *mdstat, dprintf("%s: inst: %d action: %d state: %d\n", __func__, atoi(inst), new->action_fd, new->info.state_fd); + if (sigterm) + new->info.safe_mode_delay = 1; + else if (mdi->safe_mode_delay >= 50) + /* Normal start, mdadm set this. */ + new->info.safe_mode_delay = mdi->safe_mode_delay; + else + /* Restart, just pick a number */ + new->info.safe_mode_delay = 5000; + sysfs_set_safemode(&new->info, new->info.safe_mode_delay); + /* reshape_position is set by mdadm in sysfs * read this information for new arrays only (empty victim) */ |