From 50927b1323a4cfcbf3729ff552c496695d6199eb Mon Sep 17 00:00:00 2001 From: Adam Kwolek Date: Tue, 7 Feb 2012 15:03:35 +0100 Subject: [PATCH 05/12] 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 --- managemon.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/managemon.c b/managemon.c index cde0d8b..6c21ecb 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. -- 1.7.4.4