X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=mm%2Fbacking-dev.c;h=3d3accb1f8001dc58ade1436df6295415eda00c6;hb=54bcf382daf08c1396edb8b81e650b58930ccaef;hp=fd93566345b6ade36f527c14c2bdc0c6f60d243b;hpb=cfc4ba5365449cb6b5c9f68d755a142f17da1e47;p=firefly-linux-kernel-4.4.55.git 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) { 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);