Skip to content

Commit

Permalink
writeback: splice dirty inode entries to default bdi on bdi_destroy()
Browse files Browse the repository at this point in the history
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: Jens Axboe <jens.axboe@oracle.com>
  • Loading branch information
Jens Axboe committed Sep 16, 2009
1 parent b6e5131 commit ce5f8e7
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion mm/backing-dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit ce5f8e7

Please sign in to comment.