Whamcloud - gitweb
LU-10165 llite: disable statahead if starting statahead fail 66/32366/4
authorLai Siyao <lai.siyao@intel.com>
Fri, 27 Oct 2017 03:48:30 +0000 (11:48 +0800)
committerJohn L. Hammond <jhammond@whamcloud.com>
Fri, 3 Aug 2018 20:01:03 +0000 (20:01 +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.

Lustre-change: https://review.whamcloud.com/29817
Lustre-commit: 8b1bd1b88ae915c89fcbdc83abebe217a681a9e7

Signed-off-by: Lai Siyao <lai.siyao@intel.com>
Change-Id: Iaedddd3659cdffeab51800f45b02f0b39c4a1ec1
Reviewed-by: Fan Yong <fan.yong@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Signed-off-by: Minh Diep <minh.diep@intel.com>
Reviewed-on: https://review.whamcloud.com/32366
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: John L. Hammond <jhammond@whamcloud.com>
lustre/llite/statahead.c

index 061fcc8..69f701e 100644 (file)
@@ -1587,6 +1587,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);
@@ -1607,10 +1610,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)