[lustre-devel] [PATCH 9/9] lustre: statahead: add smp_mb() to serialize ops
NeilBrown
neilb at suse.com
Thu Nov 22 23:15:28 PST 2018
From: Lai Siyao <lai.siyao at intel.com>
In ll_deauthorize_statahead(), it set thread stop flag, and then
wake up thread, however wakeup is called inside spinlock in case
ll_statahead_info is released, then we need to call smp_mb() to
serialize setting and wakeup.
Signed-off-by: Lai Siyao <lai.siyao at intel.com>
WC-bug-id: https://jira.whamcloud.com/browse/LU-7994
Reviewed-on: https://review.whamcloud.com/23040
Reviewed-by: Fan Yong <fan.yong at intel.com>
Reviewed-by: Bobi Jam <bobijam at hotmail.com>
Reviewed-by: Oleg Drokin <oleg.drokin at intel.com>
Signed-off-by: NeilBrown <neilb at suse.com>
---
drivers/staging/lustre/lustre/llite/statahead.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/lustre/lustre/llite/statahead.c b/drivers/staging/lustre/lustre/llite/statahead.c
index 3d71322aa1c7..24c2335c70a7 100644
--- a/drivers/staging/lustre/lustre/llite/statahead.c
+++ b/drivers/staging/lustre/lustre/llite/statahead.c
@@ -1110,8 +1110,9 @@ static int ll_statahead_thread(void *arg)
sa_handle_callback(sai);
set_current_state(TASK_IDLE);
+ /* ensure we see the NULL stored by ll_deauthorize_statahead() */
if (!sa_has_callback(sai) &&
- sai->sai_task)
+ smp_load_acquire(&sai->sai_task))
schedule();
__set_current_state(TASK_RUNNING);
}
@@ -1191,9 +1192,17 @@ void ll_deauthorize_statahead(struct inode *dir, void *key)
/*
* statahead thread may not quit yet because it needs to cache
* entries, now it's time to tell it to quit.
+ *
+ * In case sai is released, wake_up() is called inside spinlock,
+ * so we use smp_store_release() to serialize ops.
*/
- wake_up_process(sai->sai_task);
- sai->sai_task = NULL;
+ struct task_struct *task = sai->sai_task;
+
+ /* ensure ll_statahead_thread sees the NULL before
+ * calling schedule() again.
+ */
+ smp_store_release(&sai->sai_task, NULL);
+ wake_up_process(task);
}
spin_unlock(&lli->lli_sa_lock);
}
More information about the lustre-devel
mailing list