|
@@ -927,9 +927,9 @@ EXPORT_SYMBOL_GPL(bd_unlink_disk_holder);
|
|
|
* when a disk has been changed -- either by a media change or online
|
|
|
* resize.
|
|
|
*/
|
|
|
-static void flush_disk(struct block_device *bdev)
|
|
|
+static void flush_disk(struct block_device *bdev, bool kill_dirty)
|
|
|
{
|
|
|
- if (__invalidate_device(bdev)) {
|
|
|
+ if (__invalidate_device(bdev, kill_dirty)) {
|
|
|
char name[BDEVNAME_SIZE] = "";
|
|
|
|
|
|
if (bdev->bd_disk)
|
|
@@ -966,7 +966,7 @@ void check_disk_size_change(struct gendisk *disk, struct block_device *bdev)
|
|
|
"%s: detected capacity change from %lld to %lld\n",
|
|
|
name, bdev_size, disk_size);
|
|
|
i_size_write(bdev->bd_inode, disk_size);
|
|
|
- flush_disk(bdev);
|
|
|
+ flush_disk(bdev, false);
|
|
|
}
|
|
|
}
|
|
|
EXPORT_SYMBOL(check_disk_size_change);
|
|
@@ -1019,7 +1019,7 @@ int check_disk_change(struct block_device *bdev)
|
|
|
if (!(events & DISK_EVENT_MEDIA_CHANGE))
|
|
|
return 0;
|
|
|
|
|
|
- flush_disk(bdev);
|
|
|
+ flush_disk(bdev, true);
|
|
|
if (bdops->revalidate_disk)
|
|
|
bdops->revalidate_disk(bdev->bd_disk);
|
|
|
return 1;
|
|
@@ -1601,7 +1601,7 @@ fail:
|
|
|
}
|
|
|
EXPORT_SYMBOL(lookup_bdev);
|
|
|
|
|
|
-int __invalidate_device(struct block_device *bdev)
|
|
|
+int __invalidate_device(struct block_device *bdev, bool kill_dirty)
|
|
|
{
|
|
|
struct super_block *sb = get_super(bdev);
|
|
|
int res = 0;
|
|
@@ -1614,7 +1614,7 @@ int __invalidate_device(struct block_device *bdev)
|
|
|
* hold).
|
|
|
*/
|
|
|
shrink_dcache_sb(sb);
|
|
|
- res = invalidate_inodes(sb);
|
|
|
+ res = invalidate_inodes(sb, kill_dirty);
|
|
|
drop_super(sb);
|
|
|
}
|
|
|
invalidate_bdev(bdev);
|