From ee37fa9ebcc3a0be4944e11a5fddcde45e634c2e Mon Sep 17 00:00:00 2001 From: Thomas Backlund <tmb@mageia.org> Date: Tue, 5 Jan 2021 18:55:26 +0200 Subject: [PATCH] Revert "block: remove check_disk_change" This reverts commit b92b53079aedbfb56bbb9ea360e5119fb563a2a1. https://bugs.mageia.org/show_bug.cgi?id=27877 https://bugzilla.kernel.org/show_bug.cgi?id=211023 Signed-off-by: Thomas Backlund <tmb@mageia.org> --- fs/block_dev.c | 20 ++++++++++++++++++++ include/linux/genhd.h | 1 + 2 files changed, 21 insertions(+) diff --git a/fs/block_dev.c b/fs/block_dev.c index 9e84b1928b94..8bb24db579ed 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -1370,6 +1370,26 @@ void revalidate_disk_size(struct gendisk *disk, bool verbose) } EXPORT_SYMBOL(revalidate_disk_size); +/* + * This routine checks whether a removable media has been changed, + * and invalidates all buffer-cache-entries in that case. This + * is a relatively slow routine, so we have to try to minimize using + * it. Thus it is called only upon a 'mount' or 'open'. This + * is the best way of combining speed and utility, I think. + * People changing diskettes in the middle of an operation deserve + * to lose :-) + */ +int check_disk_change(struct block_device *bdev) +{ + if (!bdev_check_media_change(bdev)) + return 0; + if (bdev->bd_disk->fops->revalidate_disk) + bdev->bd_disk->fops->revalidate_disk(bdev->bd_disk); + return 1; +} + +EXPORT_SYMBOL(check_disk_change); + void bd_set_nr_sectors(struct block_device *bdev, sector_t sectors) { spin_lock(&bdev->bd_size_lock); diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 03da3f603d30..803cdec86238 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h @@ -372,6 +372,7 @@ int register_blkdev(unsigned int major, const char *name); void unregister_blkdev(unsigned int major, const char *name); void revalidate_disk_size(struct gendisk *disk, bool verbose); +int check_disk_change(struct block_device *bdev); bool bdev_check_media_change(struct block_device *bdev); int __invalidate_device(struct block_device *bdev, bool kill_dirty); void bd_set_nr_sectors(struct block_device *bdev, sector_t sectors); -- 2.30.0