summaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-11-30 13:57:03 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2009-11-30 13:57:03 -0800
commitb54eb1795c0cfeb6cc48fdcbd010e800541750ad (patch)
tree85ac272cfee48497ecaaf121b74db5a6bd021cf3 /mm
parent0bb324626575e89385ca384d8cdd98fbeaeb0545 (diff)
parent69ac74822277fa999a3f469d8362e93262deb3f4 (diff)
Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
* 'for-linus' of git://git.kernel.dk/linux-2.6-block: cciss: make device attrs static Thaw refrigerated bdi flusher threads before invoking kthread_stop on them
Diffstat (limited to 'mm')
-rw-r--r--mm/backing-dev.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index 11aee09dd2a..67a33a5a1a9 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -604,10 +604,14 @@ static void bdi_wb_shutdown(struct backing_dev_info *bdi)
/*
* Finally, kill the kernel threads. We don't need to be RCU
- * safe anymore, since the bdi is gone from visibility.
+ * safe anymore, since the bdi is gone from visibility. Force
+ * unfreeze of the thread before calling kthread_stop(), otherwise
+ * it would never exet if it is currently stuck in the refrigerator.
*/
- list_for_each_entry(wb, &bdi->wb_list, list)
+ list_for_each_entry(wb, &bdi->wb_list, list) {
+ wb->task->flags &= ~PF_FROZEN;
kthread_stop(wb->task);
+ }
}
/*