From 65609bd672e4fb232f81010b96ef8892833276b7 Mon Sep 17 00:00:00 2001 From: Oleg Drokin Date: Sat, 16 May 2015 03:38:31 -0400 Subject: [PATCH] staging/lustre: Only set INTERRUPTIBLE state before calling schedule In __l_wait_event the condition could be a complicated function that does allocations and other potentialy blocking activities, so it sohuld not be called in a task state other than RUNNABLE Signed-off-by: Oleg Drokin Signed-off-by: Greg Kroah-Hartman --- .../staging/lustre/lustre/include/lustre_lib.h | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/drivers/staging/lustre/lustre/include/lustre_lib.h b/drivers/staging/lustre/lustre/include/lustre_lib.h index bf135630c39a..43ee9f0eb4d4 100644 --- a/drivers/staging/lustre/lustre/include/lustre_lib.h +++ b/drivers/staging/lustre/lustre/include/lustre_lib.h @@ -549,19 +549,13 @@ do { \ __blocked = cfs_block_sigsinv(0); \ \ for (;;) { \ - unsigned __wstate; \ - \ - __wstate = info->lwi_on_signal != NULL && \ - (__timeout == 0 || __allow_intr) ? \ - TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE; \ - \ - set_current_state(TASK_INTERRUPTIBLE); \ - \ if (condition) \ break; \ \ + set_current_state(TASK_INTERRUPTIBLE); \ + \ if (__timeout == 0) { \ - schedule(); \ + schedule(); \ } else { \ long interval = info->lwi_interval? \ min_t(long, \ @@ -582,6 +576,8 @@ do { \ } \ } \ \ + set_current_state(TASK_RUNNING); \ + \ if (condition) \ break; \ if (cfs_signal_pending()) { \ @@ -605,7 +601,6 @@ do { \ \ cfs_restore_sigs(__blocked); \ \ - set_current_state(TASK_RUNNING); \ remove_wait_queue(&wq, &__wait); \ } while (0) -- 2.39.2