From: Jan Kara <jack@suse.cz>
Date: Wed, 15 May 2019 08:57:40 +0200
Subject: [PATCH] block: Don't revalidate bdev of hidden gendisk
References: bsc#1120091
Patch-Mainline: v5.2-rc3
Git-commit: 31cb1d64da4ebd214348cad9d86e663c831c45fc
When hidden gendisk is revalidated, there's no point in revalidating
associated block device as there's none. We would thus just create new
bdev inode, report "detected capacity change from 0 to XXX" message and
evict the bdev inode again. Avoid this pointless dance and confusing
message in the kernel log.
Signed-off-by: Jan Kara <jack@suse.cz>
Reviewed-by: Hannes Reinecke <hare@suse.com>
---
fs/block_dev.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 53463e801387..bed1bb569409 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1361,20 +1361,27 @@ EXPORT_SYMBOL(check_disk_size_change);
*/
int revalidate_disk(struct gendisk *disk)
{
- struct block_device *bdev;
int ret = 0;
if (disk->fops->revalidate_disk)
ret = disk->fops->revalidate_disk(disk);
- bdev = bdget_disk(disk, 0);
- if (!bdev)
- return ret;
- mutex_lock(&bdev->bd_mutex);
- check_disk_size_change(disk, bdev, ret == 0);
- bdev->bd_invalidated = 0;
- mutex_unlock(&bdev->bd_mutex);
- bdput(bdev);
+ /*
+ * Hidden disks don't have associated bdev so there's no point in
+ * revalidating it.
+ */
+ if (!(disk->flags & GENHD_FL_HIDDEN)) {
+ struct block_device *bdev = bdget_disk(disk, 0);
+
+ if (!bdev)
+ return ret;
+
+ mutex_lock(&bdev->bd_mutex);
+ check_disk_size_change(disk, bdev, ret == 0);
+ bdev->bd_invalidated = 0;
+ mutex_unlock(&bdev->bd_mutex);
+ bdput(bdev);
+ }
return ret;
}
EXPORT_SYMBOL(revalidate_disk);
--
2.16.4