Commit ce5f8e77 authored by Jens Axboe's avatar Jens Axboe

writeback: splice dirty inode entries to default bdi on bdi_destroy()

We cannot safely ensure that the inodes are all gone at this point
in time, and we must not destroy this bdi with inodes having off it.
So just splice our entries to the default bdi since that one will
always persist.
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent b6e51316
...@@ -668,7 +668,19 @@ void bdi_destroy(struct backing_dev_info *bdi) ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment