From c5c8d0623a60ee54bd11588a391b3dcd43c1abcf Mon Sep 17 00:00:00 2001 From: Lai Siyao Date: Mon, 10 Oct 2016 16:44:12 +0800 Subject: [PATCH] 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 --- lustre/llite/statahead.c | 4 ++++ 1 file changed, 4 insertions(+) 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); -- 1.8.3.1