From: Greg Kroah-Hartman Date: Fri, 5 Jan 2024 14:34:54 +0000 (+0100) Subject: 4.19-stable patches X-Git-Tag: v4.14.335~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eb4785e1dc9f4bca25c7c531f93acf2c809a1c03;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch --- diff --git a/queue-4.19/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch b/queue-4.19/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch new file mode 100644 index 00000000000..979051ec10b --- /dev/null +++ b/queue-4.19/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch @@ -0,0 +1,60 @@ +From 1364a3c391aedfeb32aa025303ead3d7c91cdf9d Mon Sep 17 00:00:00 2001 +From: Sarthak Kukreti +Date: Wed, 11 Oct 2023 13:12:30 -0700 +Subject: block: Don't invalidate pagecache for invalid falloc modes + +From: Sarthak Kukreti + +commit 1364a3c391aedfeb32aa025303ead3d7c91cdf9d upstream. + +Only call truncate_bdev_range() if the fallocate mode is supported. This +fixes a bug where data in the pagecache could be invalidated if the +fallocate() was called on the block device with an invalid mode. + +Fixes: 25f4c41415e5 ("block: implement (some of) fallocate for block devices") +Cc: stable@vger.kernel.org +Reported-by: "Darrick J. Wong" +Signed-off-by: Sarthak Kukreti +Reviewed-by: Christoph Hellwig +Reviewed-by: "Darrick J. Wong" +Signed-off-by: Mike Snitzer +Fixes: line? I've never seen those wrapped. +Link: https://lore.kernel.org/r/20231011201230.750105-1-sarthakkukreti@chromium.org +Signed-off-by: Jens Axboe +Signed-off-by: Sarthak Kukreti +Signed-off-by: Greg Kroah-Hartman +--- + fs/block_dev.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +--- a/fs/block_dev.c ++++ b/fs/block_dev.c +@@ -2041,21 +2041,26 @@ static long blkdev_fallocate(struct file + if ((start | len) & (bdev_logical_block_size(bdev) - 1)) + return -EINVAL; + +- /* Invalidate the page cache, including dirty pages. */ ++ /* ++ * Invalidate the page cache, including dirty pages, for valid ++ * de-allocate mode calls to fallocate(). ++ */ + mapping = bdev->bd_inode->i_mapping; +- truncate_inode_pages_range(mapping, start, end); + + switch (mode) { + case FALLOC_FL_ZERO_RANGE: + case FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE: ++ truncate_inode_pages_range(mapping, start, end); + error = blkdev_issue_zeroout(bdev, start >> 9, len >> 9, + GFP_KERNEL, BLKDEV_ZERO_NOUNMAP); + break; + case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE: ++ truncate_inode_pages_range(mapping, start, end); + error = blkdev_issue_zeroout(bdev, start >> 9, len >> 9, + GFP_KERNEL, BLKDEV_ZERO_NOFALLBACK); + break; + case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE | FALLOC_FL_NO_HIDE_STALE: ++ truncate_inode_pages_range(mapping, start, end); + error = blkdev_issue_discard(bdev, start >> 9, len >> 9, + GFP_KERNEL, 0); + break; diff --git a/queue-4.19/series b/queue-4.19/series index ef72d033768..0cf7dd2489b 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -38,3 +38,4 @@ usb-musb-fix-musb_quirk_b_disconnect_99-handling.patch usb-fotg210-hcd-delete-an-incorrect-bounds-test.patch smb-client-fix-oob-in-smbcalcsize.patch dm-integrity-don-t-modify-bio-s-immutable-bio_vec-in-integrity_metadata.patch +block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch