diff options
author | Jens Axboe <jaxboe@fusionio.com> | 2011-03-17 11:13:12 +0100 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2012-08-17 15:34:58 -0400 |
commit | bc661f5d238569cae7ca9da01e12451b7785fb01 (patch) | |
tree | a8a49679d74ca6c609dd0971c2046de97466b687 /mm | |
parent | 075c4ced91c551cdc2e9bb99b1697c3d54be106e (diff) |
fs: assign sb->s_bdi to default_backing_dev_info if the bdi is going away
commit 95f28604a65b1c40b6c6cd95e58439cd7ded3add upstream.
We don't have proper reference counting for this yet, so we run into
cases where the device is pulled and we OOPS on flushing the fs data.
This happens even though the dirty inodes have already been
migrated to the default_backing_dev_info.
Reported-by: Torsten Hilbrich <torsten.hilbrich@secunet.com>
Tested-by: Torsten Hilbrich <torsten.hilbrich@secunet.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/backing-dev.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/backing-dev.c b/mm/backing-dev.c index 707d0dc6da0f..7bd17d294b83 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -634,7 +634,7 @@ static void bdi_prune_sb(struct backing_dev_info *bdi) spin_lock(&sb_lock); list_for_each_entry(sb, &super_blocks, s_list) { if (sb->s_bdi == bdi) - sb->s_bdi = NULL; + sb->s_bdi = &default_backing_dev_info; } spin_unlock(&sb_lock); } |