summaryrefslogtreecommitdiffstats
path: root/mm/backing-dev.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2009-12-01 15:46:35 -0800
committerDavid S. Miller <davem@davemloft.net>2009-12-01 15:46:35 -0800
commit7e8f44f8d4fa9bb35e32c161fbcdbd6b9e6400e3 (patch)
treecf6d526a070a06b365ab0ceb4e1c3ca9ad94666e /mm/backing-dev.c
parent138f3c8518976953563a1316d7e0420c72d4ab96 (diff)
parent2127816366e0ffbc1426fa69e7b9b2bebd2e2288 (diff)
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Diffstat (limited to 'mm/backing-dev.c')
-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);
+ }
}
/*