From: Adam Kwolek Date: Tue, 7 Feb 2012 14:03:35 +0000 (+0100) Subject: Fix: Sometimes mdmon throws core dump during reshape X-Git-Tag: mdadm-3.2.4~85 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=commitdiff_plain;h=50927b1323a4cfcbf3729ff552c496695d6199eb;hp=bf5cf7c705f292a070746c83f9dd00d7662f458d 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 Signed-off-by: NeilBrown --- 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.