summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-05-29 10:42:59 -0400
committerJens Axboe <axboe@kernel.dk>2018-05-29 10:59:21 -0400
commit5afb78356cead66db2203061fed6fc8957527ed4 (patch)
tree3ca5cb4673b79152404cedfd5341ca25669cb77b
parent4163a0398434a9b705399ae2c48fb4fb14008434 (diff)
block: don't print a message when the device went away
The information about a size change in this case just creates confusion. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--block/partition-generic.c4
-rw-r--r--fs/block_dev.c14
-rw-r--r--include/linux/fs.h2
3 files changed, 12 insertions, 8 deletions
diff --git a/block/partition-generic.c b/block/partition-generic.c
index 93ef8ce568a1..3dcfd4ec0e11 100644
--- a/block/partition-generic.c
+++ b/block/partition-generic.c
@@ -516,7 +516,7 @@ rescan:
516 516
517 if (disk->fops->revalidate_disk) 517 if (disk->fops->revalidate_disk)
518 disk->fops->revalidate_disk(disk); 518 disk->fops->revalidate_disk(disk);
519 check_disk_size_change(disk, bdev); 519 check_disk_size_change(disk, bdev, true);
520 bdev->bd_invalidated = 0; 520 bdev->bd_invalidated = 0;
521 if (!get_capacity(disk) || !(state = check_partition(disk, bdev))) 521 if (!get_capacity(disk) || !(state = check_partition(disk, bdev)))
522 return 0; 522 return 0;
@@ -641,7 +641,7 @@ int invalidate_partitions(struct gendisk *disk, struct block_device *bdev)
641 return res; 641 return res;
642 642
643 set_capacity(disk, 0); 643 set_capacity(disk, 0);
644 check_disk_size_change(disk, bdev); 644 check_disk_size_change(disk, bdev, false);
645 bdev->bd_invalidated = 0; 645 bdev->bd_invalidated = 0;
646 /* tell userspace that the media / partition table may have changed */ 646 /* tell userspace that the media / partition table may have changed */
647 kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); 647 kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE);
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 771ddfa29dc9..81c57c14fae8 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1322,21 +1322,25 @@ static void flush_disk(struct block_device *bdev, bool kill_dirty)
1322 * check_disk_size_change - checks for disk size change and adjusts bdev size. 1322 * check_disk_size_change - checks for disk size change and adjusts bdev size.
1323 * @disk: struct gendisk to check 1323 * @disk: struct gendisk to check
1324 * @bdev: struct bdev to adjust. 1324 * @bdev: struct bdev to adjust.
1325 * @verbose: if %true log a message about a size change if there is any
1325 * 1326 *
1326 * This routine checks to see if the bdev size does not match the disk size 1327 * This routine checks to see if the bdev size does not match the disk size
1327 * and adjusts it if it differs. When shrinking the bdev size, its all caches 1328 * and adjusts it if it differs. When shrinking the bdev size, its all caches
1328 * are freed. 1329 * are freed.
1329 */ 1330 */
1330void check_disk_size_change(struct gendisk *disk, struct block_device *bdev) 1331void check_disk_size_change(struct gendisk *disk, struct block_device *bdev,
1332 bool verbose)
1331{ 1333{
1332 loff_t disk_size, bdev_size; 1334 loff_t disk_size, bdev_size;
1333 1335
1334 disk_size = (loff_t)get_capacity(disk) << 9; 1336 disk_size = (loff_t)get_capacity(disk) << 9;
1335 bdev_size = i_size_read(bdev->bd_inode); 1337 bdev_size = i_size_read(bdev->bd_inode);
1336 if (disk_size != bdev_size) { 1338 if (disk_size != bdev_size) {
1337 printk(KERN_INFO 1339 if (verbose) {
1338 "%s: detected capacity change from %lld to %lld\n", 1340 printk(KERN_INFO
1339 disk->disk_name, bdev_size, disk_size); 1341 "%s: detected capacity change from %lld to %lld\n",
1342 disk->disk_name, bdev_size, disk_size);
1343 }
1340 i_size_write(bdev->bd_inode, disk_size); 1344 i_size_write(bdev->bd_inode, disk_size);
1341 if (bdev_size > disk_size) 1345 if (bdev_size > disk_size)
1342 flush_disk(bdev, false); 1346 flush_disk(bdev, false);
@@ -1363,7 +1367,7 @@ int revalidate_disk(struct gendisk *disk)
1363 return ret; 1367 return ret;
1364 1368
1365 mutex_lock(&bdev->bd_mutex); 1369 mutex_lock(&bdev->bd_mutex);
1366 check_disk_size_change(disk, bdev); 1370 check_disk_size_change(disk, bdev, ret == 0);
1367 bdev->bd_invalidated = 0; 1371 bdev->bd_invalidated = 0;
1368 mutex_unlock(&bdev->bd_mutex); 1372 mutex_unlock(&bdev->bd_mutex);
1369 bdput(bdev); 1373 bdput(bdev);
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 760d8da1b6c7..d8d4831af9ff 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2570,7 +2570,7 @@ extern bool is_bad_inode(struct inode *);
2570 2570
2571#ifdef CONFIG_BLOCK 2571#ifdef CONFIG_BLOCK
2572extern void check_disk_size_change(struct gendisk *disk, 2572extern void check_disk_size_change(struct gendisk *disk,
2573 struct block_device *bdev); 2573 struct block_device *bdev, bool verbose);
2574extern int revalidate_disk(struct gendisk *); 2574extern int revalidate_disk(struct gendisk *);
2575extern int check_disk_change(struct block_device *); 2575extern int check_disk_change(struct block_device *);
2576extern int __invalidate_device(struct block_device *, bool); 2576extern int __invalidate_device(struct block_device *, bool);