Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs...
[firefly-linux-kernel-4.4.55.git] / mm / backing-dev.c
index fd93566345b6ade36f527c14c2bdc0c6f60d243b..3d3accb1f8001dc58ade1436df6295415eda00c6 100644 (file)
@@ -668,7 +668,19 @@ void bdi_destroy(struct backing_dev_info *bdi)
 {
        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);