Whamcloud - gitweb
LU-10165 llite: disable statahead if starting statahead fail 17/29817/4
authorLai Siyao <lai.siyao@intel.com>
Fri, 27 Oct 2017 03:48:30 +0000 (11:48 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 1 Dec 2017 05:16:00 +0000 (05:16 +0000)
Once starting statahead thread fails, it should disable statahead.
Current code only does this when "sai != NULL", instead it should
check whether current process is opening this dir, so for cases
like current file is not the first dirent, or sai allocation fail,
it won't retry statahead.

Signed-off-by: Lai Siyao <lai.siyao@intel.com>
Change-Id: Iaedddd3659cdffeab51800f45b02f0b39c4a1ec1
Reviewed-on: https://review.whamcloud.com/29817
Reviewed-by: Fan Yong <fan.yong@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/llite/statahead.c

index 44cc9e6..4022398 100644 (file)
@@ -1588,6 +1588,9 @@ static int start_statahead_thread(struct inode *dir, struct dentry *dentry)
                           lli->lli_opendir_pid);
        thread = &sai->sai_thread;
        if (IS_ERR(task)) {
+               spin_lock(&lli->lli_sa_lock);
+               lli->lli_sai = NULL;
+               spin_unlock(&lli->lli_sa_lock);
                rc = PTR_ERR(task);
                CERROR("can't start ll_sa thread, rc: %d\n", rc);
                GOTO(out, rc);
@@ -1608,10 +1611,8 @@ 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);
-       if (sai != NULL && lli->lli_sai == sai) {
+       if (lli->lli_opendir_pid == current->pid)
                lli->lli_sa_enabled = 0;
-               lli->lli_sai = NULL;
-       }
        spin_unlock(&lli->lli_sa_lock);
 
        if (sai != NULL)