Whamcloud - gitweb
LU-6312 lfsck: modify llsd_master_list with spin_lock 21/13921/2
authorFan Yong <fan.yong@intel.com>
Thu, 4 Dec 2014 14:00:50 +0000 (22:00 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 2 Mar 2015 18:41:41 +0000 (18:41 +0000)
There was spin_lock leak in layout LFSCK lfsck_layout_slave_quit,
that may cause modifying lfsck_layout_slave_data::llsd_master_list
without spin_lock when others traverses such list with spin_lock,
as to the later one(s) access invalid RAM or fall into soft-lockup.

Signed-off-by: Fan Yong <fan.yong@intel.com>
Change-Id: I61749ebd6c36d4b21eb20bcc1c46dbe16a1c7f2c
Reviewed-on: http://review.whamcloud.com/13921
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/lfsck/lfsck_layout.c

index 2100784..00ef9cf 100644 (file)
@@ -5179,6 +5179,7 @@ static void lfsck_layout_slave_quit(const struct lu_env *env,
                list_del_init(&llst->llst_list);
                spin_unlock(&llsd->llsd_lock);
                lfsck_layout_llst_put(llst);
                list_del_init(&llst->llst_list);
                spin_unlock(&llsd->llsd_lock);
                lfsck_layout_llst_put(llst);
+               spin_lock(&llsd->llsd_lock);
        }
        spin_unlock(&llsd->llsd_lock);
 
        }
        spin_unlock(&llsd->llsd_lock);