|
@@ -1429,6 +1429,11 @@ static int __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part)
|
|
|
WARN_ON_ONCE(bdev->bd_holders);
|
|
|
sync_blockdev(bdev);
|
|
|
kill_bdev(bdev);
|
|
|
+ /* ->release can cause the old bdi to disappear,
|
|
|
+ * so must switch it out first
|
|
|
+ */
|
|
|
+ bdev_inode_switch_bdi(bdev->bd_inode,
|
|
|
+ &default_backing_dev_info);
|
|
|
}
|
|
|
if (bdev->bd_contains == bdev) {
|
|
|
if (disk->fops->release)
|
|
@@ -1442,8 +1447,6 @@ static int __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part)
|
|
|
disk_put_part(bdev->bd_part);
|
|
|
bdev->bd_part = NULL;
|
|
|
bdev->bd_disk = NULL;
|
|
|
- bdev_inode_switch_bdi(bdev->bd_inode,
|
|
|
- &default_backing_dev_info);
|
|
|
if (bdev != bdev->bd_contains)
|
|
|
victim = bdev->bd_contains;
|
|
|
bdev->bd_contains = NULL;
|