diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2006-07-03 10:25:08 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2006-07-03 10:25:08 -0400 |
commit | 0a1340c185734a57fbf4775927966ad4a1347b02 (patch) | |
tree | d9ed8f0dd809a7c542a3356601125ea5b5aaa804 /mm/pdflush.c | |
parent | af18ddb8864b096e3ed4732e2d4b21c956dcfe3a (diff) | |
parent | 29454dde27d8e340bb1987bad9aa504af7081eba (diff) |
Merge rsync://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:
include/linux/kernel.h
Diffstat (limited to 'mm/pdflush.c')
-rw-r--r-- | mm/pdflush.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/mm/pdflush.c b/mm/pdflush.c index c4b6d0afd736..b02102feeb4b 100644 --- a/mm/pdflush.c +++ b/mm/pdflush.c | |||
@@ -104,21 +104,20 @@ static int __pdflush(struct pdflush_work *my_work) | |||
104 | list_move(&my_work->list, &pdflush_list); | 104 | list_move(&my_work->list, &pdflush_list); |
105 | my_work->when_i_went_to_sleep = jiffies; | 105 | my_work->when_i_went_to_sleep = jiffies; |
106 | spin_unlock_irq(&pdflush_lock); | 106 | spin_unlock_irq(&pdflush_lock); |
107 | |||
108 | schedule(); | 107 | schedule(); |
109 | if (try_to_freeze()) { | 108 | try_to_freeze(); |
110 | spin_lock_irq(&pdflush_lock); | ||
111 | continue; | ||
112 | } | ||
113 | |||
114 | spin_lock_irq(&pdflush_lock); | 109 | spin_lock_irq(&pdflush_lock); |
115 | if (!list_empty(&my_work->list)) { | 110 | if (!list_empty(&my_work->list)) { |
116 | printk("pdflush: bogus wakeup!\n"); | 111 | /* |
112 | * Someone woke us up, but without removing our control | ||
113 | * structure from the global list. swsusp will do this | ||
114 | * in try_to_freeze()->refrigerator(). Handle it. | ||
115 | */ | ||
117 | my_work->fn = NULL; | 116 | my_work->fn = NULL; |
118 | continue; | 117 | continue; |
119 | } | 118 | } |
120 | if (my_work->fn == NULL) { | 119 | if (my_work->fn == NULL) { |
121 | printk("pdflush: NULL work function\n"); | 120 | printk("pdflush: bogus wakeup\n"); |
122 | continue; | 121 | continue; |
123 | } | 122 | } |
124 | spin_unlock_irq(&pdflush_lock); | 123 | spin_unlock_irq(&pdflush_lock); |
@@ -202,8 +201,7 @@ int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0) | |||
202 | unsigned long flags; | 201 | unsigned long flags; |
203 | int ret = 0; | 202 | int ret = 0; |
204 | 203 | ||
205 | if (fn == NULL) | 204 | BUG_ON(fn == NULL); /* Hard to diagnose if it's deferred */ |
206 | BUG(); /* Hard to diagnose if it's deferred */ | ||
207 | 205 | ||
208 | spin_lock_irqsave(&pdflush_lock, flags); | 206 | spin_lock_irqsave(&pdflush_lock, flags); |
209 | if (list_empty(&pdflush_list)) { | 207 | if (list_empty(&pdflush_list)) { |