From: Guoqing Jiang Date: Fri, 10 Jul 2015 09:01:18 +0000 (+0800) Subject: md-cluster: init suspend_list and suspend_lock early in join X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=9e3072e373320b331512e24f6650efa0a09720af;p=linux-beck.git md-cluster: init suspend_list and suspend_lock early in join If the node just join the cluster, and receive the msg from other nodes before init suspend_list, it will cause kernel crash due to NULL pointer dereference, so move the initializations early to fix the bug. md-cluster: Joined cluster 3578507b-e0cb-6d4f-6322-696cd7b1b10c slot 3 BUG: unable to handle kernel NULL pointer dereference at (null) ... ... ... Call Trace: [] process_recvd_msg+0x2e4/0x330 [md_cluster] [] recv_daemon+0x96/0x170 [md_cluster] [] md_thread+0x11d/0x170 [md_mod] [] kthread+0xb4/0xc0 [] ret_from_fork+0x7c/0xb0 ... ... ... RIP [] __remove_suspend_info+0x11/0xa0 [md_cluster] Reviewed-by: Goldwyn Rodrigues Signed-off-by: Guoqing Jiang Signed-off-by: NeilBrown --- diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c index b80a689aad04..6f1ea3c787f2 100644 --- a/drivers/md/md-cluster.c +++ b/drivers/md/md-cluster.c @@ -671,6 +671,8 @@ static int join(struct mddev *mddev, int nodes) if (!cinfo) return -ENOMEM; + INIT_LIST_HEAD(&cinfo->suspend_list); + spin_lock_init(&cinfo->suspend_lock); init_completion(&cinfo->completion); mutex_init(&cinfo->sb_mutex); @@ -736,9 +738,6 @@ static int join(struct mddev *mddev, int nodes) goto err; } - INIT_LIST_HEAD(&cinfo->suspend_list); - spin_lock_init(&cinfo->suspend_lock); - ret = gather_all_resync_info(mddev, nodes); if (ret) goto err;