summaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-11-30 22:57:03 +0100
committerLinus Torvalds <torvalds@linux-foundation.org>2009-11-30 22:57:03 +0100
commitb54eb1795c0cfeb6cc48fdcbd010e800541750ad (patch)
tree85ac272cfee48497ecaaf121b74db5a6bd021cf3 /mm
parentMerge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/... (diff)
parentcciss: make device attrs static (diff)
downloadlinux-b54eb1795c0cfeb6cc48fdcbd010e800541750ad.tar.xz
linux-b54eb1795c0cfeb6cc48fdcbd010e800541750ad.zip
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 11aee09dd2a6..67a33a5a1a93 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);
+ }
}
/*