From 8b1bd1b88ae915c89fcbdc83abebe217a681a9e7 Mon Sep 17 00:00:00 2001 From: Lai Siyao Date: Fri, 27 Oct 2017 11:48:30 +0800 Subject: [PATCH] LU-10165 llite: disable statahead if starting statahead fail 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 Change-Id: Iaedddd3659cdffeab51800f45b02f0b39c4a1ec1 Reviewed-on: https://review.whamcloud.com/29817 Reviewed-by: Fan Yong Reviewed-by: Andreas Dilger Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/llite/statahead.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c index 44cc9e6..4022398 100644 --- a/lustre/llite/statahead.c +++ b/lustre/llite/statahead.c @@ -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) -- 1.8.3.1