Whamcloud - gitweb
LU-2543 llite: wait osc cleanup when put super
authorNiu Yawei <niu@whamcloud.com>
Fri, 4 Jan 2013 09:35:07 +0000 (04:35 -0500)
committerOleg Drokin <green@whamcloud.com>
Sat, 12 Jan 2013 04:10:34 +0000 (23:10 -0500)
Since osc is now accessing sbi->ll_cache, we'd wait till all OSCs
are gone when put super.

Signed-off-by: Niu Yawei <niu@whamcloud.com>
Change-Id: I5d09b29cda28d4b596f67bdf8da2ce5e7082a38e
Reviewed-on: http://review.whamcloud.com/4951
Reviewed-by: Bobi Jam <bobijam@gmail.com>
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/llite/llite_lib.c

index c1c9ef3..38bd420 100644 (file)
@@ -595,6 +595,8 @@ out_lock_cn_cb:
 out_dt:
         obd_disconnect(sbi->ll_dt_exp);
         sbi->ll_dt_exp = NULL;
 out_dt:
         obd_disconnect(sbi->ll_dt_exp);
         sbi->ll_dt_exp = NULL;
+       /* Make sure all OScs are gone, since cl_cache is accessing sbi. */
+       obd_zombie_barrier();
 out_md_fid:
         obd_fid_fini(sbi->ll_md_exp);
 out_md:
 out_md_fid:
         obd_fid_fini(sbi->ll_md_exp);
 out_md:
@@ -687,6 +689,9 @@ void client_common_put_super(struct super_block *sb)
         obd_fid_fini(sbi->ll_dt_exp);
         obd_disconnect(sbi->ll_dt_exp);
         sbi->ll_dt_exp = NULL;
         obd_fid_fini(sbi->ll_dt_exp);
         obd_disconnect(sbi->ll_dt_exp);
         sbi->ll_dt_exp = NULL;
+       /* wait till all OSCs are gone, since cl_cache is accessing sbi.
+        * see LU-2543. */
+       obd_zombie_barrier();
 
         lprocfs_unregister_mountpoint(sbi);
 
 
         lprocfs_unregister_mountpoint(sbi);