|
@@ -668,7 +668,19 @@ void bdi_destroy(struct backing_dev_info *bdi)
|
|
{
|
|
{
|
|
int i;
|
|
int i;
|
|
|
|
|
|
- WARN_ON(bdi_has_dirty_io(bdi));
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Splice our entries to the default_backing_dev_info, if this
|
|
|
|
+ * bdi disappears
|
|
|
|
+ */
|
|
|
|
+ if (bdi_has_dirty_io(bdi)) {
|
|
|
|
+ struct bdi_writeback *dst = &default_backing_dev_info.wb;
|
|
|
|
+
|
|
|
|
+ spin_lock(&inode_lock);
|
|
|
|
+ list_splice(&bdi->wb.b_dirty, &dst->b_dirty);
|
|
|
|
+ list_splice(&bdi->wb.b_io, &dst->b_io);
|
|
|
|
+ list_splice(&bdi->wb.b_more_io, &dst->b_more_io);
|
|
|
|
+ spin_unlock(&inode_lock);
|
|
|
|
+ }
|
|
|
|
|
|
bdi_unregister(bdi);
|
|
bdi_unregister(bdi);
|
|
|
|
|