diff options
author | David Woodhouse <dwmw2@infradead.org> | 2007-06-28 14:49:36 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2007-08-02 16:43:03 -0400 |
commit | 7b687707d769112aee220bafd50fa113363717ff (patch) | |
tree | 633d4682e1cb30447d7ea9a13d975db357cf9381 /fs | |
parent | 71c23397752c0e40722d931ab9152342e9673336 (diff) |
[JFFS2] Fix suspend failure with JFFS2 GC thread.
The try_to_freeze() call was in the wrong place; we need it in the
signal-pending loop now that a pending freeze also makes
signal_pending() return true.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/jffs2/background.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c index 143c5530caf3..504643f2e98b 100644 --- a/fs/jffs2/background.c +++ b/fs/jffs2/background.c | |||
@@ -84,7 +84,7 @@ static int jffs2_garbage_collect_thread(void *_c) | |||
84 | set_freezable(); | 84 | set_freezable(); |
85 | for (;;) { | 85 | for (;;) { |
86 | allow_signal(SIGHUP); | 86 | allow_signal(SIGHUP); |
87 | 87 | again: | |
88 | if (!jffs2_thread_should_wake(c)) { | 88 | if (!jffs2_thread_should_wake(c)) { |
89 | set_current_state (TASK_INTERRUPTIBLE); | 89 | set_current_state (TASK_INTERRUPTIBLE); |
90 | D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread sleeping...\n")); | 90 | D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread sleeping...\n")); |
@@ -95,9 +95,6 @@ static int jffs2_garbage_collect_thread(void *_c) | |||
95 | schedule(); | 95 | schedule(); |
96 | } | 96 | } |
97 | 97 | ||
98 | if (try_to_freeze()) | ||
99 | continue; | ||
100 | |||
101 | /* This thread is purely an optimisation. But if it runs when | 98 | /* This thread is purely an optimisation. But if it runs when |
102 | other things could be running, it actually makes things a | 99 | other things could be running, it actually makes things a |
103 | lot worse. Use yield() and put it at the back of the runqueue | 100 | lot worse. Use yield() and put it at the back of the runqueue |
@@ -112,6 +109,9 @@ static int jffs2_garbage_collect_thread(void *_c) | |||
112 | siginfo_t info; | 109 | siginfo_t info; |
113 | unsigned long signr; | 110 | unsigned long signr; |
114 | 111 | ||
112 | if (try_to_freeze()) | ||
113 | goto again; | ||
114 | |||
115 | signr = dequeue_signal_lock(current, ¤t->blocked, &info); | 115 | signr = dequeue_signal_lock(current, ¤t->blocked, &info); |
116 | 116 | ||
117 | switch(signr) { | 117 | switch(signr) { |