Whamcloud - gitweb
LU-9930 llite: only clear lli_sai if the setter 45/29145/3
authorBruno Faccini <bruno.faccini@intel.com>
Wed, 30 Aug 2017 09:37:03 +0000 (11:37 +0200)
committerJohn L. Hammond <john.hammond@intel.com>
Wed, 11 Oct 2017 19:51:28 +0000 (19:51 +0000)
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 <bruno.faccini@intel.com>
Change-Id: I555febfad3494c9dd90eeb72d6dd9157428179ea
Reviewed-by: Fan Yong <fan.yong@intel.com>
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
Signed-off-by: Minh Diep <minh.diep@intel.com>
Reviewed-on: https://review.whamcloud.com/29145
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
lustre/llite/statahead.c

index c11c682..061fcc8 100644 (file)
@@ -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)