summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Drokin2015-05-16 09:38:31 +0200
committerGreg Kroah-Hartman2015-05-31 02:29:44 +0200
commit65609bd672e4fb232f81010b96ef8892833276b7 (patch)
tree5d8266800b9551192abfaed7eade5a1ad0ecf7cc
parentstaging: rtl8723au: remove useless comment (diff)
downloadkernel-qcow2-linux-65609bd672e4fb232f81010b96ef8892833276b7.tar.gz
kernel-qcow2-linux-65609bd672e4fb232f81010b96ef8892833276b7.tar.xz
kernel-qcow2-linux-65609bd672e4fb232f81010b96ef8892833276b7.zip
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 <green@linuxhacker.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/lustre/lustre/include/lustre_lib.h15
1 files 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)