From 06d290bdf0c030fe305cd5db05326a02174373ab Mon Sep 17 00:00:00 2001 From: Bruno Faccini Date: Wed, 30 Aug 2017 11:37:03 +0200 Subject: [PATCH] LU-9930 llite: only clear lli_sai if the setter Previous to this patch, start_statahead_thread() was unconditionnally clearing lli->lli_sai upon error, leading to crash upon racy scenario where it has just been set in/by another thread context. Now, only clear lli_sai if current thread has set it. Lustre-change: https://review.whamcloud.com/28794 Lustre-commit: f4a0ebe28e88cbdd79061fad275cb9494fdba225 Signed-off-by: Bruno Faccini Change-Id: I555febfad3494c9dd90eeb72d6dd9157428179ea Reviewed-by: Fan Yong Reviewed-by: Lai Siyao Reviewed-by: Oleg Drokin Signed-off-by: Minh Diep Reviewed-on: https://review.whamcloud.com/29145 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: John L. Hammond --- lustre/llite/statahead.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c index c11c682..061fcc8 100644 --- a/lustre/llite/statahead.c +++ b/lustre/llite/statahead.c @@ -1607,8 +1607,10 @@ out: /* once we start statahead thread failed, disable statahead so that * subsequent stat won't waste time to try it. */ spin_lock(&lli->lli_sa_lock); - lli->lli_sa_enabled = 0; - lli->lli_sai = NULL; + if (sai != NULL && lli->lli_sai == sai) { + lli->lli_sa_enabled = 0; + lli->lli_sai = NULL; + } spin_unlock(&lli->lli_sa_lock); if (sai != NULL) -- 1.8.3.1