writeback: splice dirty inode entries to default bdi on bdi_destroy()
[deliverable/linux.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);
 
This page took 0.024007 seconds and 5 git commands to generate.