diff options
Diffstat (limited to 'mm')
-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 | ||