From: Greg Kroah-Hartman Date: Tue, 7 Jan 2020 17:46:10 +0000 (+0100) Subject: 4.19-stable patches X-Git-Tag: v4.14.163~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5d383447fb154ab7377afbfdd9a6c35f5b958de5;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: bdev-factor-out-bdev-revalidation-into-a-common-helper.patch bdev-refresh-bdev-size-for-disks-without-partitioning.patch --- diff --git a/queue-4.19/bdev-factor-out-bdev-revalidation-into-a-common-helper.patch b/queue-4.19/bdev-factor-out-bdev-revalidation-into-a-common-helper.patch new file mode 100644 index 00000000000..5b15c26f48c --- /dev/null +++ b/queue-4.19/bdev-factor-out-bdev-revalidation-into-a-common-helper.patch @@ -0,0 +1,69 @@ +From 731dc4868311ee097757b8746eaa1b4f8b2b4f1c Mon Sep 17 00:00:00 2001 +From: Jan Kara +Date: Mon, 21 Oct 2019 10:37:59 +0200 +Subject: bdev: Factor out bdev revalidation into a common helper + +From: Jan Kara + +commit 731dc4868311ee097757b8746eaa1b4f8b2b4f1c upstream. + +Factor out code handling revalidation of bdev on disk change into a +common helper. + +Signed-off-by: Jan Kara +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman + +--- + fs/block_dev.c | 26 ++++++++++++++------------ + 1 file changed, 14 insertions(+), 12 deletions(-) + +--- a/fs/block_dev.c ++++ b/fs/block_dev.c +@@ -1430,6 +1430,14 @@ EXPORT_SYMBOL(bd_set_size); + + 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); ++} ++ + /* + * bd_mutex locking: + * +@@ -1512,12 +1520,9 @@ static int __blkdev_get(struct block_dev + * The latter is necessary to prevent ghost + * partitions on a removed medium. + */ +- if (bdev->bd_invalidated) { +- if (!ret) +- rescan_partitions(disk, bdev); +- else if (ret == -ENOMEDIUM) +- invalidate_partitions(disk, bdev); +- } ++ if (bdev->bd_invalidated && ++ (!ret || ret == -ENOMEDIUM)) ++ bdev_disk_changed(bdev, ret == -ENOMEDIUM); + + if (ret) + goto out_clear; +@@ -1550,12 +1555,9 @@ static int __blkdev_get(struct block_dev + if (bdev->bd_disk->fops->open) + ret = bdev->bd_disk->fops->open(bdev, mode); + /* the same as first opener case, read comment there */ +- if (bdev->bd_invalidated) { +- if (!ret) +- rescan_partitions(bdev->bd_disk, bdev); +- else if (ret == -ENOMEDIUM) +- invalidate_partitions(bdev->bd_disk, bdev); +- } ++ if (bdev->bd_invalidated && ++ (!ret || ret == -ENOMEDIUM)) ++ bdev_disk_changed(bdev, ret == -ENOMEDIUM); + if (ret) + goto out_unlock_bdev; + } diff --git a/queue-4.19/bdev-refresh-bdev-size-for-disks-without-partitioning.patch b/queue-4.19/bdev-refresh-bdev-size-for-disks-without-partitioning.patch new file mode 100644 index 00000000000..78693519d8e --- /dev/null +++ b/queue-4.19/bdev-refresh-bdev-size-for-disks-without-partitioning.patch @@ -0,0 +1,62 @@ +From cba22d86e0a10b7070d2e6a7379dbea51aa0883c Mon Sep 17 00:00:00 2001 +From: Jan Kara +Date: Mon, 21 Oct 2019 10:38:00 +0200 +Subject: bdev: Refresh bdev size for disks without partitioning + +From: Jan Kara + +commit cba22d86e0a10b7070d2e6a7379dbea51aa0883c upstream. + +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 +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman + +--- + fs/block_dev.c | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +--- a/fs/block_dev.c ++++ b/fs/block_dev.c +@@ -1328,11 +1328,7 @@ static void flush_disk(struct block_devi + "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; + } + + /** +@@ -1432,10 +1428,15 @@ static void __blkdev_put(struct block_de + + 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; ++ } + } + + /* diff --git a/queue-4.19/series b/queue-4.19/series index f0b8817f381..8463b03e471 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -92,3 +92,5 @@ dt-bindings-clock-renesas-rcar-usb2-clock-sel-fix-typo-in-example.patch arm64-dts-meson-odroid-c2-disable-usb_otg-bus-to-avoid-power-failed-warning.patch tty-serial-msm_serial-fix-lockup-for-sysrq-and-oops.patch fix-compat-handling-of-ficlonerange-fideduperange-and-fs_ioc_fiemap.patch +bdev-factor-out-bdev-revalidation-into-a-common-helper.patch +bdev-refresh-bdev-size-for-disks-without-partitioning.patch