From: Lai Siyao Date: Mon, 10 Oct 2016 08:44:12 +0000 (+0800) Subject: LU-7994 statahead: add smp_mb() to serialize ops X-Git-Tag: 2.9.54~14 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=c5c8d0623a60ee54bd11588a391b3dcd43c1abcf;p=fs%2Flustre-release.git LU-7994 statahead: add smp_mb() to serialize ops In ll_deauthorize_statahead(), it set thread stop flag, and then wake up thread, however wakeup is called inside spinlock in case ll_statahead_info is released, then we need to call smp_mb() to serialize setting and wakeup. Signed-off-by: Lai Siyao Change-Id: I500bdf325aa0bd122b17bea448c3b9eec809a2a7 Reviewed-on: https://review.whamcloud.com/23040 Reviewed-by: Fan Yong Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Bobi Jam Reviewed-by: Oleg Drokin --- diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c index 3063a4e..5724ac4 100644 --- a/lustre/llite/statahead.c +++ b/lustre/llite/statahead.c @@ -1233,8 +1233,12 @@ void ll_deauthorize_statahead(struct inode *dir, void *key) /* * statahead thread may not quit yet because it needs to cache * entries, now it's time to tell it to quit. + * + * In case sai is released, wake_up() is called inside spinlock, + * so we have to call smp_mb() explicitely to serialize ops. */ thread_set_flags(&sai->sai_thread, SVC_STOPPING); + smp_mb(); wake_up(&sai->sai_thread.t_ctl_waitq); } spin_unlock(&lli->lli_sa_lock);