diff options
Diffstat (limited to 'mm/backing-dev.c')
| -rw-r--r-- | mm/backing-dev.c | 8 |
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) | |||
| 604 | 604 | ||
| 605 | /* | 605 | /* |
| 606 | * Finally, kill the kernel threads. We don't need to be RCU | 606 | * Finally, kill the kernel threads. We don't need to be RCU |
| 607 | * safe anymore, since the bdi is gone from visibility. | 607 | * safe anymore, since the bdi is gone from visibility. Force |
| 608 | * unfreeze of the thread before calling kthread_stop(), otherwise | ||
| 609 | * it would never exet if it is currently stuck in the refrigerator. | ||
| 608 | */ | 610 | */ |
| 609 | list_for_each_entry(wb, &bdi->wb_list, list) | 611 | list_for_each_entry(wb, &bdi->wb_list, list) { |
| 612 | wb->task->flags &= ~PF_FROZEN; | ||
| 610 | kthread_stop(wb->task); | 613 | kthread_stop(wb->task); |
| 614 | } | ||
| 611 | } | 615 | } |
| 612 | 616 | ||
| 613 | /* | 617 | /* |
