diff options
author | Adam Kwolek <adam.kwolek@intel.com> | 2012-02-07 15:03:35 +0100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-02-09 02:20:52 +0100 |
commit | 50927b1323a4cfcbf3729ff552c496695d6199eb (patch) | |
tree | 7e1f75daee6cbce097de4dca8690f7e8f7842c67 /managemon.c | |
parent | imsm: FIX: imsm_get_allowed_degradation() doesn't count degradation for raid1 (diff) | |
download | mdadm-50927b1323a4cfcbf3729ff552c496695d6199eb.tar.xz mdadm-50927b1323a4cfcbf3729ff552c496695d6199eb.zip |
Fix: Sometimes mdmon throws core dump during reshape
Problem was found during reshaping 2 volumes /raid0 and raid5/ in container.
Sometimes mdmon throws core dump due to NULL pointer exception.
Problem occurs in scenario:
- managemon: is about spare activation (degraded raid4 volume == raid0 under takeover)
- managemon: detect level change and signals monitor (manage_member() calls replace_array())
- monitor: detects transition raid4/5->raid0 and sets a->container to NULL
to indicate array deactivation
- managemon : continues his work and tries to activate spare (a->check_degraded is set).
NULL pointer is passed to metadata handler activate_spare()
Core dump is generated.
To resolve this situation managemon (after monitor kick) checks again
a->container pointer to learn if current array is not to be deactivated.
Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'managemon.c')
-rw-r--r-- | managemon.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/managemon.c b/managemon.c index cde0d8be..6c21ecbd 100644 --- a/managemon.c +++ b/managemon.c @@ -486,6 +486,12 @@ static void manage_member(struct mdstat_ent *mdstat, } } + /* we are after monitor kick, + * so container field can be cleared - check it again + */ + if (a->container == NULL) + return; + /* 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. |