diff options
| -rw-r--r-- | mm/backing-dev.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/mm/backing-dev.c b/mm/backing-dev.c index fd93566345b6..3d3accb1f800 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c | |||
| @@ -668,7 +668,19 @@ void bdi_destroy(struct backing_dev_info *bdi) | |||
| 668 | { | 668 | { |
| 669 | int i; | 669 | int i; |
| 670 | 670 | ||
| 671 | WARN_ON(bdi_has_dirty_io(bdi)); | 671 | /* |
| 672 | * Splice our entries to the default_backing_dev_info, if this | ||
| 673 | * bdi disappears | ||
| 674 | */ | ||
| 675 | if (bdi_has_dirty_io(bdi)) { | ||
| 676 | struct bdi_writeback *dst = &default_backing_dev_info.wb; | ||
| 677 | |||
| 678 | spin_lock(&inode_lock); | ||
| 679 | list_splice(&bdi->wb.b_dirty, &dst->b_dirty); | ||
| 680 | list_splice(&bdi->wb.b_io, &dst->b_io); | ||
| 681 | list_splice(&bdi->wb.b_more_io, &dst->b_more_io); | ||
| 682 | spin_unlock(&inode_lock); | ||
| 683 | } | ||
| 672 | 684 | ||
| 673 | bdi_unregister(bdi); | 685 | bdi_unregister(bdi); |
| 674 | 686 | ||
