diff options
Diffstat (limited to '0002-bdev-Refresh-bdev-size-for-disks-without-partitionin.patch')
-rw-r--r-- | 0002-bdev-Refresh-bdev-size-for-disks-without-partitionin.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/0002-bdev-Refresh-bdev-size-for-disks-without-partitionin.patch b/0002-bdev-Refresh-bdev-size-for-disks-without-partitionin.patch new file mode 100644 index 000000000..c988fa6a8 --- /dev/null +++ b/0002-bdev-Refresh-bdev-size-for-disks-without-partitionin.patch @@ -0,0 +1,61 @@ +From 91ee136f5e2179a0994985ea043468bbbcd400d4 Mon Sep 17 00:00:00 2001 +From: Jan Kara <jack@suse.cz> +Date: Mon, 21 Oct 2019 10:38:00 +0200 +Subject: [PATCH 2/2] bdev: Refresh bdev size for disks without partitioning + +Currently, block device size in not updated on second and further open +for block devices where partition scan is disabled. This is particularly +annoying for example for DVD drives as that means block device size does +not get updated once the media is inserted into a drive if the device is +already open when inserting the media. This is actually always the case +for example when pktcdvd is in use. + +Fix the problem by revalidating block device size on every open even for +devices with partition scan disabled. + +Signed-off-by: Jan Kara <jack@suse.cz> +Signed-off-by: Jens Axboe <axboe@kernel.dk> +--- + fs/block_dev.c | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +diff --git a/fs/block_dev.c b/fs/block_dev.c +index 88c6d35ec71d..d612468ee66b 100644 +--- a/fs/block_dev.c ++++ b/fs/block_dev.c +@@ -1403,11 +1403,7 @@ static void flush_disk(struct block_device *bdev, bool kill_dirty) + "resized disk %s\n", + bdev->bd_disk ? bdev->bd_disk->disk_name : ""); + } +- +- if (!bdev->bd_disk) +- return; +- if (disk_part_scan_enabled(bdev->bd_disk)) +- bdev->bd_invalidated = 1; ++ bdev->bd_invalidated = 1; + } + + /** +@@ -1514,10 +1510,15 @@ static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part); + + static void bdev_disk_changed(struct block_device *bdev, bool invalidate) + { +- if (invalidate) +- invalidate_partitions(bdev->bd_disk, bdev); +- else +- rescan_partitions(bdev->bd_disk, bdev); ++ if (disk_part_scan_enabled(bdev->bd_disk)) { ++ if (invalidate) ++ invalidate_partitions(bdev->bd_disk, bdev); ++ else ++ rescan_partitions(bdev->bd_disk, bdev); ++ } else { ++ check_disk_size_change(bdev->bd_disk, bdev, !invalidate); ++ bdev->bd_invalidated = 0; ++ } + } + + /* +-- +2.21.0 + |